diff --git a/BUILD.gn b/BUILD.gn index 66cd73f..e28e693 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -443,6 +443,7 @@ "//chromeos:chromeos_unittests", "//chromeos/components:chromeos_components_unittests", "//chromeos/components/proximity_auth:proximity_auth_unittests", + "//components/exo/wayland:wayland_client_compatibility_tests", "//components/session_manager/core", "//ui/chromeos:ui_chromeos_unittests", ]
diff --git a/DEPS b/DEPS index f1d1631..fd2b8612 100644 --- a/DEPS +++ b/DEPS
@@ -200,11 +200,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': 'e07f2b21917d886c5ed6ab1a95d0c1eb28636d0d', + 'skia_revision': 'ec64d037bd0446bc1c48f711f11f7ca4ad911241', # 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': '23b0ebb5ce894d691bce6f969da676930254cff9', + 'v8_revision': '029d567d60accffcecdc0a98f1b56cd724701e78', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -212,11 +212,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '481fb88fee3376caef75a784fbfca0b8501a686a', + 'angle_revision': 'c9206a08c352437e39bd98f2e33c319658fb2bfb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '52c1a859d9ebd3adb49e70d1c7a5ac287388445e', + 'swiftshader_revision': '04bd4d8e4ece08cc4efbb4754665f46ec42eff79', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -263,7 +263,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'dfccae249ee2a6cc6a26219916d22397ec939628', + 'catapult_revision': '2948c1aca72cacebfcac0d40eacfd96d94329684', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -271,7 +271,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': '179979c8b3825e2342cb5f15738ee70ada5eb6b8', + 'devtools_frontend_revision': 'c166b7033fc3d63235e9ec2edfd8192ce534f7bb', # 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. @@ -323,7 +323,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '6298d2b70cb67bb929f7817f2186f618ec8f1ca1', + 'dawn_revision': 'a7278454b28bafb72ff557cf3e087a8fb94de909', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -347,7 +347,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libavif # and whatever else without interference from each other. - 'libavif_revision': 'e67f9369d50e00c59b504abf52655b3c0f304430', + 'libavif_revision': '33ece0a9f8977fe93f75b1c03a014b9997d707d5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nearby # and whatever else without interference from each other. @@ -362,7 +362,7 @@ 'ukey2_revision': '0275885d8e6038c39b8a8ca55e75d1d4d1727f47', # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'tint_revision': 'ff267ca60e144afa928d4a2c204e0045e3f5f7d5', + 'tint_revision': '481ecff293dbda6502585687609f6d105cf17453', # TODO(crbug.com/941824): The values below need to be kept in sync # between //DEPS and //buildtools/DEPS, so if you're updating one, @@ -886,7 +886,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'a7b30cd95fedd18f3fbc1fd1d4cab1addbb6a1d0', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'acbaac2aa7cdef863bdbda6f7fa3421588edf3b7', 'condition': 'checkout_chromeos', }, @@ -906,7 +906,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '8e567c5cf50785dc808ab558d5e8f52c649fb53b', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '5d099fcb489d5e1199a0f726fbe1e370468a5cbd', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1491,7 +1491,7 @@ }, 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '239f92ecf7fc8ca27e0376dd192b33ce33377b3c', + Var('webrtc_git') + '/src.git' + '@' + '4c54f8638cc4c1c31ee23231c1440dfd44d4b4d5', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1563,7 +1563,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@0963e7ee54a874d281499ca3fda422d4b65fa377', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@9dfc25eb5de2f484daa287862de5a931535923a5', 'condition': 'checkout_src_internal', }, @@ -1571,7 +1571,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'm0wda58U4knKyUUpL79c-o7EHUHN2PBklk5kEjWgQgwC', + 'version': '92sajF7l5YU_FHOF0S5XbbEL1anK6DQMIxOzfUm2nZQC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1582,7 +1582,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'wN9syVuQA52Z_oVpW8HcXi5C0wcOpNkLkV_rn3ctZOEC', + 'version': 'tzLm8HyLE4vYMwHlQ9sxWnDlV3EFRrx_A_t8MIGN9YcC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/system_webview_apk_tmpl.gni b/android_webview/system_webview_apk_tmpl.gni index dad91d6a..fa280ae 100644 --- a/android_webview/system_webview_apk_tmpl.gni +++ b/android_webview/system_webview_apk_tmpl.gni
@@ -51,7 +51,7 @@ if (_exclude_weblayer_java) { deps += [ "//android_webview:android_webview_no_weblayer_java" ] } else { - if (_is_bundle_module && weblayer_in_split) { + if (_is_bundle_module && weblayer_in_split && webview_includes_weblayer) { deps += [ # TODO(crbug.com/1105096): WebLayer resources are added to the base # module for now because of bugs with shared resources in splits.
diff --git a/ash/capture_mode/capture_label_view.cc b/ash/capture_mode/capture_label_view.cc index 0c7d776..1b4bc356 100644 --- a/ash/capture_mode/capture_label_view.cc +++ b/ash/capture_mode/capture_label_view.cc
@@ -17,6 +17,7 @@ #include "ui/views/background.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/label.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/frame/header_view.cc b/ash/frame/header_view.cc index f265c9fe..13d22de 100644 --- a/ash/frame/header_view.cc +++ b/ash/frame/header_view.cc
@@ -18,6 +18,7 @@ #include "ui/aura/client/aura_constants.h" #include "ui/base/ui_base_features.h" #include "ui/views/controls/image_view.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" #include "ui/views/window/non_client_view.h"
diff --git a/ash/hud_display/cpu_graph_page_view.cc b/ash/hud_display/cpu_graph_page_view.cc index 75905ae..17c5747 100644 --- a/ash/hud_display/cpu_graph_page_view.cc +++ b/ash/hud_display/cpu_graph_page_view.cc
@@ -11,6 +11,7 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "ui/gfx/canvas.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/graph_page_view_base.cc b/ash/hud_display/graph_page_view_base.cc index c4d1dfc..fbfcfca 100644 --- a/ash/hud_display/graph_page_view_base.cc +++ b/ash/hud_display/graph_page_view_base.cc
@@ -15,6 +15,7 @@ #include "ui/views/controls/button/image_button.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/window/vector_icons/vector_icons.h" namespace ash {
diff --git a/ash/hud_display/graphs_container_view.cc b/ash/hud_display/graphs_container_view.cc index 6883753..c0f0f48 100644 --- a/ash/hud_display/graphs_container_view.cc +++ b/ash/hud_display/graphs_container_view.cc
@@ -12,6 +12,7 @@ #include "base/bind.h" #include "base/task/post_task.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/grid.cc b/ash/hud_display/grid.cc index 428097d..fc3c850c 100644 --- a/ash/hud_display/grid.cc +++ b/ash/hud_display/grid.cc
@@ -14,6 +14,7 @@ #include "third_party/skia/include/effects/SkDashPathEffect.h" #include "ui/gfx/canvas.h" #include "ui/gfx/text_constants.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/hud_display.cc b/ash/hud_display/hud_display.cc index 070441ac..261da9f 100644 --- a/ash/hud_display/hud_display.cc +++ b/ash/hud_display/hud_display.cc
@@ -24,6 +24,7 @@ #include "ui/views/border.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" namespace ash {
diff --git a/ash/hud_display/hud_header_view.cc b/ash/hud_display/hud_header_view.cc index cce1290..e0a63e8a 100644 --- a/ash/hud_display/hud_header_view.cc +++ b/ash/hud_display/hud_header_view.cc
@@ -18,6 +18,7 @@ #include "ui/views/controls/button/image_button.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/layout_manager.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/hud_settings_view.cc b/ash/hud_display/hud_settings_view.cc index c506026..ac2b7ebe 100644 --- a/ash/hud_display/hud_settings_view.cc +++ b/ash/hud_display/hud_settings_view.cc
@@ -22,6 +22,7 @@ #include "ui/views/controls/label.h" #include "ui/views/controls/slider.h" #include "ui/views/layout/box_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/legend.cc b/ash/hud_display/legend.cc index cc85f41f..7eafc078 100644 --- a/ash/hud_display/legend.cc +++ b/ash/hud_display/legend.cc
@@ -16,6 +16,7 @@ #include "ui/views/border.h" #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/memory_graph_page_view.cc b/ash/hud_display/memory_graph_page_view.cc index f8e5d378..b429f7d7 100644 --- a/ash/hud_display/memory_graph_page_view.cc +++ b/ash/hud_display/memory_graph_page_view.cc
@@ -12,6 +12,7 @@ #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "ui/gfx/canvas.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/hud_display/tab_strip.cc b/ash/hud_display/tab_strip.cc index 06ac3e11..529b8bb 100644 --- a/ash/hud_display/tab_strip.cc +++ b/ash/hud_display/tab_strip.cc
@@ -12,6 +12,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/text_constants.h" #include "ui/views/layout/layout_manager.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash { namespace hud_display {
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hu.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hu.xtb index ac928da..e32c9d0a 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hu.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hu.xtb
@@ -160,7 +160,7 @@ <translation id="6755851152783057058">Váltás az utoljára használt beviteli módra</translation> <translation id="6760706756348334449">Hangerő csökkentése</translation> <translation id="6941333068993625698">Visszajelzés küldése</translation> -<translation id="6981982820502123353">Kisegítő opciók</translation> +<translation id="6981982820502123353">Kisegítő lehetőségek</translation> <translation id="7020813747703216897">Nincs megfelelő találat</translation> <translation id="7025325401470358758">Következő ablaktábla</translation> <translation id="7076878155205969899">Hang némítása</translation>
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb index 3e378dd..d8d8e9d5 100644 --- a/ash/strings/ash_strings_af.xtb +++ b/ash/strings/ash_strings_af.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> steun nie <ph name="SPECIFIED_RESOLUTION" /> nie (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Die resolusie is verander na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klik bevestig om veranderinge te hou. Die vorige instellings sal oor <ph name="TIMEOUT_SECONDS" /> teruggestel word.</translation> <translation id="1919743966458266018">Die kortpad om die taakbestuurder oop te maak, het verander. Gebruik asseblief <ph name="NEW_SHORTCUT" /> pleks van <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Outomatiese klikke</translation> +<translation id="1924640696879807758">Vanaf foon</translation> <translation id="1928739107511554905">Vir 'n opdatering van jou sleutelbord moet jy die raakskerm gebruik om jou Chromebook met die sleutelbord aangeheg, te herbegin.</translation> <translation id="1951012854035635156">Assistent</translation> <translation id="1957803754585243749">0°</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">Die administrateur vir hierdie rekening laat nie meer veelvuldige aanmeldings toe nie.</translation> <translation id="7933084174919150729">Die Google Assistent is net beskikbaar vir die primêre profiel.</translation> <translation id="79341161159229895">Rekening word bestuur deur <ph name="FIRST_PARENT_EMAIL" /> en <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Druk <ph name="SHORTCUT_KEY_NAME" /> + V om jou knipbord te bekyk. Die laaste 5 items wat jy gekopieer het, word op jou knipbord gestoor.</translation> <translation id="7955885781510802139">Hoëkontrasmodus</translation> <translation id="7977927628060636163">Soek tans selnetwerke …</translation> <translation id="7980780401175799550">Probeer nuwe maniere om Chrome-bedryfstelsel te gebruik</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 3bb1af3..014fd9f 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" />ን (<ph name="SPECIFIED_REFRESH_RATE" /> ኸዝ) አይደግፍም። የምስል ጥራቱ ወደ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) ተቀይሯል። ለውጦቹን ለማስቀመጥ ጠቅ ያድርጉት። ቀዳሚ ቅንብሮቹ በ<ph name="TIMEOUT_SECONDS" /> ውስጥ ወደነበሩበት ይመለሳሉ።</translation> <translation id="1919743966458266018">የተግባር መሪው የሚከፈትበት አቋራጭ ተቀይሯል። እባክዎ ከ<ph name="OLD_SHORTCUT" /> ይልቅ <ph name="NEW_SHORTCUT" />ን ይጠቀሙ።</translation> <translation id="1923539912171292317">ራስ-ሰር ጠቅታዎች</translation> +<translation id="1924640696879807758">ከስልክ</translation> <translation id="1928739107511554905">ዝማኔውን ለማግኘት የእርስዎን Chromebook ከተያያዘው የቁልፍ ሰሌዳ ጋር እንደገና ለማስጀመር የንኪ ማያ ገጹን ይጠቀሙ።</translation> <translation id="1951012854035635156">ረዳት</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">የዚህ መለያ አስተዳዳሪ ባለብዙ መለያ መግባትን ከልክሏል።</translation> <translation id="7933084174919150729">Google ረዳቱ ለዋናው መገለጫ ብቻ የሚገኝ ነው።</translation> <translation id="79341161159229895">መለያው በ<ph name="FIRST_PARENT_EMAIL" /> እና <ph name="SECOND_PARENT_EMAIL" /> ነው የሚቀናበረው</translation> +<translation id="793716872548410480">የእርስዎን ቅንጥብ ሰሌዳ ለመመልከት <ph name="SHORTCUT_KEY_NAME" /> + Vን ይጫኑ። እርስዎ የቀዷቸው የመጨረሻዎቹ 5 ንጥሎች ቅንጥብ ሰሌዳዎ ላይ ተቀምጠዋል።</translation> <translation id="7955885781510802139">ባለከፍተኛ ንፅፅር ሁነታ</translation> <translation id="7977927628060636163">የተንቀሳቃሽ ስልክ አውታረ መረቦችን በመፈለግ ላይ...</translation> <translation id="7980780401175799550">Chrome OSን የሚዳስሱበት አዲስ መንገዶችን ይሞክሩ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 829ff57..3df49e0 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">إشارة متوسطة</translation> <translation id="4112140312785995938">الانتقال إلى الخلف</translation> <translation id="4114315158543974537">تفعيل Phone Hub</translation> +<translation id="4121728057981832179">هناك آلة افتراضية تستخدم الميكروفون حاليًا.</translation> <translation id="4129129681837227511">للاطِّلاع على الإشعارات على شاشة القفل، يمكنك فتح القفل لتغيير الإعداد</translation> <translation id="4146833061457621061">تشغيل الموسيقى</translation> <translation id="4149156641122542261">إدارة جهاز <ph name="DEVICE_TYPE" /> عن طريق <ph name="DOMAIN" /></translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">إملاء</translation> <translation id="4239069858505860023">شبكة GPRS</translation> <translation id="4261870227682513959">عرض إعدادات الإشعارات. تم إيقاف الإشعارات</translation> +<translation id="4267383818855338811">هناك آلة افتراضية تستخدم الكاميرا حاليًا.</translation> <translation id="4269883910223712419">يمتلك مشرف هذا الجهاز القدرة على ما يلي:</translation> <translation id="4279490309300973883">النسخ المطابق</translation> <translation id="4285498937028063278">إزالة تثبيت</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">تعليقات</translation> <translation id="4527045527269911712">يريد جهاز بلوتوث "<ph name="DEVICE_NAME" />" الحصول على إذن للإقران.</translation> <translation id="453661520163887813"><ph name="TIME" /> حتى اكتمال الشحن</translation> +<translation id="4544483149666270818">يُرجى اختيار نافذة لتسجيل فيديو لها.</translation> <translation id="4560576029703263363">مُفعَّل</translation> <translation id="4561267230861221837">شبكة الجيل الثالث</translation> <translation id="4565377596337484307">إخفاء كلمة المرور</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">قبول</translation> <translation id="4924411785043111640">إعادة التشغيل وإعادة الضبط</translation> <translation id="4925542575807923399">يحتاج مشرف هذا الحساب أن يكون هذا الحساب الأول في تسجيل الدخول إلى جلسة دخول متعدد.</translation> +<translation id="4942878304446937978">شريط الحالة، الوقت <ph name="TIME" />، + <ph name="BATTERY" /> + <ph name="NETWORK" />، + <ph name="MIC" />، + <ph name="CAMERA" />، + <ph name="NOTIFICATION" />، + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">التقاط</translation> <translation id="495046168593986294">التمرير لأعلى</translation> <translation id="4961318399572185831">إرسال الشاشة</translation> <translation id="4969092041573468113"><ph name="HOURS" /> س <ph name="MINUTES" /> د <ph name="SECONDS" /> ث</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">تبديل الإملاء</translation> <translation id="556042886152191864">زر</translation> <translation id="5571066253365925590">تم تفعيل البلوتوث</translation> +<translation id="558849140439112033">يُرجى السحب لتحديد منطقة لالتقاط صورة لها.</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />، <ph name="DATE" /></translation> <translation id="5600837773213129531">اضغط على Ctrl + Alt + Z لإيقاف التعليقات والملاحظات المنطوقة</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">غير مفعّل</translation> <translation id="5876666360658629066">إدخال رمز أحد الوالدَين</translation> <translation id="5895138241574237353">إعادة التشغيل</translation> +<translation id="589817443623831496">مسح النقاط</translation> <translation id="5901316534475909376">Shift+Esc</translation> <translation id="5909862606227538307">سطح مكتب غير نشط</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">انقر في أي مكان لالتقاط صورة لوضع ملء الشاشة.</translation> <translation id="5916664084637901428">مفعّل</translation> <translation id="5920710855273935292">تم كتم صوت الميكروفون.</translation> <translation id="594179686076170922">جارٍ الاتصال بهاتفك…</translation> @@ -535,6 +550,7 @@ <translation id="6490471652906364588">جهاز USB-C (المنفذ الأيمن)</translation> <translation id="649452524636452238">رقم التعريف الشخصي للبطاقة الذكية</translation> <translation id="6501401484702599040">إرسال الشاشة إلى <ph name="RECEIVER_NAME" /></translation> +<translation id="6520517963145875092">يُرجى تحديد نافذة للحصول لالتقاط صورة لها.</translation> <translation id="652139407789908527">ستظهر شاشتك فارغة لمدة أطول من المعتاد (تصل إلى دقيقة واحدة) أثناء هذا التحديث. يُرجى عدم الضغط على زر التشغيل خلال عملية التحديث.</translation> <translation id="6528179044667508675">عدم الإزعاج</translation> <translation id="65320610082834431">الرموز التعبيرية</translation> @@ -563,6 +579,7 @@ <translation id="6751052314767925245">ينفّذها المشرف</translation> <translation id="6751826523481687655">تتبّع الأداء قيْد التفعيل</translation> <translation id="6752912906630585008">تمت إزالة سطح المكتب <ph name="REMOVED_DESK" /> ودمجه مع سطح المكتب <ph name="RECEIVE_DESK" />.</translation> +<translation id="6757237461819837179">لا يتم تشغيل أي وسائط حاليًا</translation> <translation id="6777216307882431711">شحن أجهزة USB-C المتصلة</translation> <translation id="6790428901817661496">التشغيل</translation> <translation id="6803622936009808957">تعذر إجراء النسخ المطابق للعروض نظرًا لعدم العثور على درجات دقة متوافقة. تم الدخول إلى سطح المكتب الممتد بدلاً من ذلك.</translation> @@ -611,6 +628,7 @@ <translation id="7348093485538360975">لوحة المفاتيح على الشاشة</translation> <translation id="735745346212279324">تم قطع اتصال الشبكة الافتراضية الخاصة</translation> <translation id="7377169924702866686">مفتاح Caps Lock في وضع التفعيل.</translation> +<translation id="7378203170292176219">يُرجى السحب لتحديد منطقة لتسجيل فيديو لها.</translation> <translation id="7378594059915113390">عناصر التحكم في الوسائط</translation> <translation id="7398254312354928459">تم تبديل اتصال الشبكة</translation> <translation id="7405710164030118432">لفتح قفل الجهاز، يُرجى إدخال رمز الدخول الخاص بالوالدين في Family Link.</translation> @@ -637,6 +655,7 @@ <translation id="7618774594543487847">معتدل</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> درجة فهرنهايت</translation> <translation id="7633755430369750696">عرض إعدادات ميزة "المشاركة عن قرب"</translation> +<translation id="7641938616688887143">تسجيل</translation> <translation id="7642647758716480637">فتح الإعدادات للشبكة <ph name="NETWORK_NAME" />،<ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (المالك)</translation> <translation id="7647488630410863958">فتح قفل الجهاز لعرض الإشعارات</translation> @@ -733,6 +752,7 @@ <translation id="8563862697512465947">إعدادات الاشعارات</translation> <translation id="857201607579416096">تم نقل القائمة إلى أسفل يسار الشاشة.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">انقر في أي مكان لالتقاط صورة لوضع ملء الشاشة.</translation> <translation id="8627191004499078455">تم الاتصال بجهاز <ph name="DEVICE_NAME" /></translation> <translation id="8631727435199967028">إعدادات "سهولة الاستخدام"</translation> <translation id="8637598503828012618">حالة الاتصال <ph name="CONNECTION_STATUS" />، قوة الإشارة <ph name="SIGNAL_STRENGTH" />، يديرها المشرف</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb index 903ed310..4c9e836 100644 --- a/ash/strings/ash_strings_bs.xtb +++ b/ash/strings/ash_strings_bs.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144">Ekran <ph name="DISPLAY_NAME" /> ne podržava rezoluciju <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Rezolucija je promijenjena na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliknite na Potvrdi da zadržite promjene. Prethodne postavke će se vratiti za <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Prečica za otvaranje upravitelja zadataka je promijenjena. Koristite <ph name="NEW_SHORTCUT" /> umjesto <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatski klikovi</translation> +<translation id="1924640696879807758">S telefona</translation> <translation id="1928739107511554905">Da primate ažuriranja pomoću ekrana na dodir, ponovo pokrenite Chromebook dok je tastatura priključena.</translation> <translation id="1951012854035635156">Asistent</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Administrator ovog računa nije dozvolio višestruku prijavu.</translation> <translation id="7933084174919150729">Google Asistent je dostupan samo za primarni profil.</translation> <translation id="79341161159229895">Računom upravlja <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da vidite međumemoriju. Posljednjih 5 kopiranih stavki se pohranjuje u međumemoriju.</translation> <translation id="7955885781510802139">Način rada visokog kontrasta</translation> <translation id="7977927628060636163">Traženje mobilnih mreža...</translation> <translation id="7980780401175799550">Isprobajte nove načine navigiranja Chrome OS-om</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index ccf56bf4..5f88c79 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> no admet la resolució <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). La resolució ha canviat a <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Fes clic a Confirma per conservar els canvis. La configuració anterior es restaurarà d'aquí a <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">La drecera per obrir el gestor de tasques ha canviat. Utilitzeu <ph name="NEW_SHORTCUT" /> en lloc de la drecera <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Clics automàtics</translation> +<translation id="1924640696879807758">Del telèfon</translation> <translation id="1928739107511554905">Per obtenir l'actualització, utilitza la pantalla tàctil per reiniciar Chromebook amb el teclat connectat.</translation> <translation id="1951012854035635156">Assistent</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">L'administrador d'aquest compte no ha permès l'inici de sessió múltiple.</translation> <translation id="7933084174919150729">L'Assistent de Google només està disponible per al perfil principal.</translation> <translation id="79341161159229895">Compte gestionat per <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Prem <ph name="SHORTCUT_KEY_NAME" />+V per veure el porta-retalls. Els 5 darrers elements que has copiat estan desats al porta-retalls.</translation> <translation id="7955885781510802139">Mode d'alt contrast</translation> <translation id="7977927628060636163">S'estan cercant xarxes mòbils…</translation> <translation id="7980780401175799550">Prova maneres noves de navegar per Chrome OS</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 7d94076..32e89ea 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144">Η οθόνη <ph name="DISPLAY_NAME" /> δεν υποστηρίζει <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Η ανάλυση άλλαξε σε <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Κάντε κλικ για να επιβεβαιώσετε τις αλλαγές. Θα γίνει επαναφορά των προηγούμενων ρυθμίσεων σε <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Η συντόμευση για το άνοιγμα της Διαχείρισης Εργασιών άλλαξε. Χρησιμοποιήστε το <ph name="NEW_SHORTCUT" /> αντί για το <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Αυτόματα κλικ</translation> +<translation id="1924640696879807758">Από το Τηλέφωνο</translation> <translation id="1928739107511554905">Για να λάβετε την ενημέρωση, χρησιμοποιήστε την οθόνη αφής για να επανεκκινήσετε το Chromebook με το συνδεδεμένο πληκτρολόγιο.</translation> <translation id="1951012854035635156">Βοηθός</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Ο διαχειριστής αυτού του λογαριασμού δεν έχει επιτρέψει τις πολλαπλές συνδέσεις.</translation> <translation id="7933084174919150729">Ο Βοηθός Google είναι διαθέσιμος μόνο για το κύριο προφίλ.</translation> <translation id="79341161159229895">Ο λογαριασμός είναι διαχειριζόμενος από τους χρήστες <ph name="FIRST_PARENT_EMAIL" /> και <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Πιέστε <ph name="SHORTCUT_KEY_NAME" /> + V για να δείτε το πρόχειρο. Τα τελευταία 5 στοιχεία που αντιγράψατε αποθηκεύονται στο πρόχειρο.</translation> <translation id="7955885781510802139">Λειτουργία υψηλής αντίθεσης</translation> <translation id="7977927628060636163">Αναζήτηση για δίκτυα κινητής τηλεφωνίας…</translation> <translation id="7980780401175799550">Δοκιμάστε νέους τρόπους πλοήγησης στο Chrome OS</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 14fb4f118..1c013c0 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> doesn't support <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). The resolution was changed to <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Click confirm to keep changes. The previous settings will be restored in <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">The shortcut to open the task manager has changed. Please use <ph name="NEW_SHORTCUT" /> instead of <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatic clicks</translation> +<translation id="1924640696879807758">From phone</translation> <translation id="1928739107511554905">To get the update, use the touchscreen to restart your Chromebook with the keyboard attached.</translation> <translation id="1951012854035635156">Assistant</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">The administrator for this account has disallowed multiple sign-in.</translation> <translation id="7933084174919150729">The Google Assistant is only available for primary profile.</translation> <translation id="79341161159229895">Account managed by <ph name="FIRST_PARENT_EMAIL" /> and <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Press <ph name="SHORTCUT_KEY_NAME" /> + V to view your clipboard. The last five items that you've copied are saved to your clipboard.</translation> <translation id="7955885781510802139">High-contrast mode</translation> <translation id="7977927628060636163">Searching for mobile networks...</translation> <translation id="7980780401175799550">Try new ways to navigate Chrome OS</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 82112ded..8821c8eb 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> از <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> هرتز) پشتیبانی نمیکند. وضوح به <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) تغییر کرده است. برای حفظ تغییرات، روی تأیید کلیک کنید. تنظیمات قبلی <ph name="TIMEOUT_SECONDS" /> دیگر بازیابی خواهد شد.</translation> <translation id="1919743966458266018">کلیدهای میانبر باز کردن مدیر فعالیتها تغییر کرده است. لطفاً از <ph name="NEW_SHORTCUT" /> به جای <ph name="OLD_SHORTCUT" /> استفاده کنید.</translation> <translation id="1923539912171292317">کلیکهای خودکار</translation> +<translation id="1924640696879807758">از تلفن</translation> <translation id="1928739107511554905">برای دریافت بهروزرسانی، از صفحه لمسی برای بازراهاندازی Chromebook خود با صفحهکلید متصل استفاده کنید.</translation> <translation id="1951012854035635156">دستیار</translation> <translation id="1957803754585243749">۰ درجه</translation> @@ -678,7 +679,7 @@ <translation id="7846634333498149051">صفحهکلید</translation> <translation id="7868900307798234037">درحال باز کردن قفل با اثر انگشت</translation> <translation id="7872786842639831132">خاموش</translation> -<translation id="7886169021410746335">تنظیمات حریم خصوصی را تنظیم کند</translation> +<translation id="7886169021410746335">تنظیمات حریمخصوصی را تنظیم کند</translation> <translation id="7886277072580235377">وقتی از سیستم خارج شوید، جلسه اینترنت پاک خواهد شد. <ph name="LEARN_MORE" /></translation> <translation id="788781083998633524">Send an email (ایمیل ارسال کن)</translation> <translation id="7897375687985782769">میانبر صفحهکلید مربوط به چرخش صفحه را فشار دادید. میخواهید صفحه را بچرخانید؟</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">سرپرست این حساب اجازه ورود چندگانه به سیستم را نمیدهد.</translation> <translation id="7933084174919150729">«دستیار Google» فقط برای نمایه اصلی دردسترس است.</translation> <translation id="79341161159229895">حساب تحت مدیریت <ph name="FIRST_PARENT_EMAIL" /> و <ph name="SECOND_PARENT_EMAIL" /> است</translation> +<translation id="793716872548410480">برای مشاهده بریدهدان، کلیدهای <ph name="SHORTCUT_KEY_NAME" /> + V را فشار دهید. ۵ مورد آخری که کپی کردهاید در بریدهدان ذخیره میشود.</translation> <translation id="7955885781510802139">حالت کنتراست بالا</translation> <translation id="7977927628060636163">درحال جستجوی شبکههای تلفن همراه…</translation> <translation id="7980780401175799550">راههای جدید پیمایش Chrome OS را امتحان کنید</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 24099f4..c0253a6 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">Signal de moyenne intensité</translation> <translation id="4112140312785995938">Retour rapide</translation> <translation id="4114315158543974537">Activer Phone Hub</translation> +<translation id="4121728057981832179">Une machine virtuelle utilise votre micro</translation> <translation id="4129129681837227511">Pour afficher les notifications sur l'écran de verrouillage, déverrouillez votre appareil afin de modifier ce paramètre</translation> <translation id="4146833061457621061">Joue de la musique</translation> <translation id="4149156641122542261"><ph name="DEVICE_TYPE" /> géré par <ph name="DOMAIN" /></translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">Dictée</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Afficher les paramètres de notification. Les notifications sont désactivées</translation> +<translation id="4267383818855338811">Une machine virtuelle utilise votre caméra</translation> <translation id="4269883910223712419">L'administrateur de cet appareil peut :</translation> <translation id="4279490309300973883">Mise en miroir</translation> <translation id="4285498937028063278">Retirer</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">Commentaires</translation> <translation id="4527045527269911712">L'appareil Bluetooth "<ph name="DEVICE_NAME" />" demande l'autorisation de s'associer.</translation> <translation id="453661520163887813"><ph name="TIME" /> avant charge complète</translation> +<translation id="4544483149666270818">Sélectionner une fenêtre à enregistrer</translation> <translation id="4560576029703263363">Activé</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Masquer le mot de passe</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">Accepter</translation> <translation id="4924411785043111640">Redémarrer et réinitialiser</translation> <translation id="4925542575807923399">L'administrateur de ce compte a configuré ce dernier de sorte qu'il soit le premier compte à être connecté lors de sessions de connexion multicompte.</translation> +<translation id="4942878304446937978">Barre d'état, il est <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Capturer</translation> <translation id="495046168593986294">Faire défiler vers le haut</translation> <translation id="4961318399572185831">Caster l'écran</translation> <translation id="4969092041573468113"><ph name="HOURS" /> h <ph name="MINUTES" /> min <ph name="SECONDS" /> s</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">Activer ou désactiver la dictée</translation> <translation id="556042886152191864">Bouton</translation> <translation id="5571066253365925590">Bluetooth activé</translation> +<translation id="558849140439112033">Faire glisser pour sélectionner une zone à capturer</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" /> <ph name="DATE" /></translation> <translation id="5600837773213129531">Appuyez sur Ctrl+Alt+Z pour désactiver les commentaires audio.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">Désactivé</translation> <translation id="5876666360658629066">Saisir le code parental</translation> <translation id="5895138241574237353">Redémarrer</translation> +<translation id="589817443623831496">Recherche par point</translation> <translation id="5901316534475909376">Maj+Échap</translation> <translation id="5909862606227538307">Bureau inactif.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Cliquez n'importe où pour effectuer une capture en plein écran</translation> <translation id="5916664084637901428">Activé</translation> <translation id="5920710855273935292">Le son du micro est coupé.</translation> <translation id="594179686076170922">Connexion à votre téléphone…</translation> @@ -534,6 +549,7 @@ <translation id="6490471652906364588">Appareil USB de type C (port situé sur la droite de l'appareil)</translation> <translation id="649452524636452238">Code de la carte à puce</translation> <translation id="6501401484702599040">Diffusion de l'écran sur "<ph name="RECEIVER_NAME" />"</translation> +<translation id="6520517963145875092">Sélectionner une fenêtre à capturer</translation> <translation id="652139407789908527">Votre écran restera éteint plus longtemps que d'habitude (jusqu'à une minute) le temps de la mise à jour. Veuillez ne pas appuyer sur le bouton Marche/Arrêt tant que la mise à jour n'est pas terminée.</translation> <translation id="6528179044667508675">Ne pas déranger</translation> <translation id="65320610082834431">Emoji</translation> @@ -562,6 +578,7 @@ <translation id="6751052314767925245">Cette fonctionnalité est appliquée par votre administrateur</translation> <translation id="6751826523481687655">Le suivi des performances est activé</translation> <translation id="6752912906630585008">Bureau <ph name="REMOVED_DESK" /> supprimé et fusionné avec le Bureau <ph name="RECEIVE_DESK" /></translation> +<translation id="6757237461819837179">Aucun contenu multimédia en cours lecture</translation> <translation id="6777216307882431711">En cours d'alimentation : plusieurs appareils USB-C connectés</translation> <translation id="6790428901817661496">Lire</translation> <translation id="6803622936009808957">Impossible de dupliquer les écrans, car aucune résolution compatible n'a été détectée. Le bureau étendu a été activé à la place.</translation> @@ -610,6 +627,7 @@ <translation id="7348093485538360975">Clavier virtuel</translation> <translation id="735745346212279324">VPN déconnecté</translation> <translation id="7377169924702866686">La touche de verrouillage des majuscules est activée</translation> +<translation id="7378203170292176219">Faire glisser pour sélectionner une zone à enregistrer</translation> <translation id="7378594059915113390">Commandes multimédias</translation> <translation id="7398254312354928459">La connexion réseau a été établie</translation> <translation id="7405710164030118432">Pour déverrouiller l'appareil, saisissez le code d'accès parental Family Link</translation> @@ -636,6 +654,7 @@ <translation id="7618774594543487847">Neutre</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation> <translation id="7633755430369750696">Afficher les paramètres de partage à proximité.</translation> +<translation id="7641938616688887143">Enregistrer</translation> <translation id="7642647758716480637">Ouvrir les paramètres du réseau <ph name="NETWORK_NAME" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (propriétaire)</translation> <translation id="7647488630410863958">Déverrouiller l'appareil pour consulter vos notifications</translation> @@ -732,6 +751,7 @@ <translation id="8563862697512465947">Paramètres de notification</translation> <translation id="857201607579416096">Le menu a été déplacé dans l'angle inférieur droit de l'écran.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Appuyez n'importe où pour effectuer une capture en plein écran</translation> <translation id="8627191004499078455">Connecté à <ph name="DEVICE_NAME" /></translation> <translation id="8631727435199967028">Paramètres d'accessibilité</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, force du signal : <ph name="SIGNAL_STRENGTH" />, géré par votre administrateur</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb index e548939a..bc67b85 100644 --- a/ash/strings/ash_strings_gl.xtb +++ b/ash/strings/ash_strings_gl.xtb
@@ -315,6 +315,7 @@ <translation id="4072264167173457037">Sinal medio</translation> <translation id="4112140312785995938">Retroceder</translation> <translation id="4114315158543974537">Activar Phone Hub</translation> +<translation id="4121728057981832179">Unha máquina virtual está usando o micrófono</translation> <translation id="4129129681837227511">Para ver notificacións na pantalla de bloqueo, desbloquea o dispositivo e cambia a opción de configuración correspondente</translation> <translation id="4146833061457621061">Reproducir música</translation> <translation id="4149156641122542261"><ph name="DEVICE_TYPE" /> (dispositivo xestionado por <ph name="DOMAIN" />)</translation> @@ -329,6 +330,7 @@ <translation id="4217571870635786043">Ditado</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Mostrar a configuración de notificacións. Están desactivadas</translation> +<translation id="4267383818855338811">Unha máquina virtual está usando a cámara</translation> <translation id="4269883910223712419">O administrador deste dispositivo pode facer o seguinte:</translation> <translation id="4279490309300973883">Proxección</translation> <translation id="4285498937028063278">Deixar de fixar</translation> @@ -364,6 +366,7 @@ <translation id="4513946894732546136">Dános a túa opinión</translation> <translation id="4527045527269911712">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" quere obter permiso para sincronizarse.</translation> <translation id="453661520163887813"><ph name="TIME" /> para completar a carga</translation> +<translation id="4544483149666270818">Selecciona a ventá que queiras gravar</translation> <translation id="4560576029703263363">Activado</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Ocultar contrasinal</translation> @@ -403,6 +406,15 @@ <translation id="4918086044614829423">Aceptar</translation> <translation id="4924411785043111640">Reiniciar e restablecer</translation> <translation id="4925542575807923399">O administrador desta conta require que esta conta sexa a primeira na que se inicie sesión cando se cree unha sesión de inicio de sesión múltiple.</translation> +<translation id="4942878304446937978">Bandexa de estado, hora: <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Zona que se capturará</translation> <translation id="495046168593986294">Desprazarse cara arriba</translation> <translation id="4961318399572185831">Enviar pantalla</translation> <translation id="4969092041573468113"><ph name="HOURS" /> h <ph name="MINUTES" /> min <ph name="SECONDS" /> s</translation> @@ -448,6 +460,7 @@ <translation id="554893713779400387">Activar ou desactivar ditado</translation> <translation id="556042886152191864">Botón</translation> <translation id="5571066253365925590">Bluetooth activado</translation> +<translation id="558849140439112033">Arrastra para seleccionar a zona que queiras capturar</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Preme Ctrl + Alt + Z para desactivar os comentarios de voz.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -475,9 +488,11 @@ <translation id="5860033963881614850">Non</translation> <translation id="5876666360658629066">Escribe o código parental</translation> <translation id="5895138241574237353">Reiniciar</translation> +<translation id="589817443623831496">Escaneo de puntos</translation> <translation id="5901316534475909376">Maiúsculas+Esc</translation> <translation id="5909862606227538307">Escritorio inactivo.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Fai clic en calquera parte para facer unha captura a pantalla completa</translation> <translation id="5916664084637901428">Si</translation> <translation id="5920710855273935292">O micrófono está silenciado.</translation> <translation id="594179686076170922">Conectando co teu teléfono...</translation> @@ -535,6 +550,7 @@ <translation id="6490471652906364588">Dispositivo USB-C (porto dereito)</translation> <translation id="649452524636452238">PIN da tarxeta intelixente</translation> <translation id="6501401484702599040">Emitindo pantalla en <ph name="RECEIVER_NAME" /></translation> +<translation id="6520517963145875092">Selecciona a ventá que queiras capturar</translation> <translation id="652139407789908527">A túa pantalla quedará en branco durante máis tempo do habitual (ata un minuto) durante a actualización. Non premas o botón de acendido mentres a actualización estea en curso.</translation> <translation id="6528179044667508675">Non molestar</translation> <translation id="65320610082834431">Emojis</translation> @@ -563,6 +579,7 @@ <translation id="6751052314767925245">Función aplicada polo teu administrador</translation> <translation id="6751826523481687655">O rastrexo do rendemento está activado</translation> <translation id="6752912906630585008">Quitouse o escritorio <ph name="REMOVED_DESK" /> e combinouse co escritorio <ph name="RECEIVE_DESK" /></translation> +<translation id="6757237461819837179">Non se está reproducindo contido multimedia</translation> <translation id="6777216307882431711">Alimentando dispositivos USB-C conectados</translation> <translation id="6790428901817661496">Reproducir</translation> <translation id="6803622936009808957">Non se puideron replicar as pantallas porque non se atopou ningunha resolución compatible. No seu lugar accedeuse ao escritorio ampliado.</translation> @@ -611,6 +628,7 @@ <translation id="7348093485538360975">Teclado en pantalla</translation> <translation id="735745346212279324">VPN desconectada</translation> <translation id="7377169924702866686">O bloqueo de maiúsculas está activado.</translation> +<translation id="7378203170292176219">Arrastra para seleccionar a zona que queiras gravar</translation> <translation id="7378594059915113390">Controis de contido multimedia</translation> <translation id="7398254312354928459">Cambiouse a conexión de rede</translation> <translation id="7405710164030118432">Para desbloquear o dispositivo, introduce o código de acceso parental de Family Link</translation> @@ -637,6 +655,7 @@ <translation id="7618774594543487847">Neutra</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation> <translation id="7633755430369750696">Mostrar a configuración da función Compartir por Nearby.</translation> +<translation id="7641938616688887143">Zona que se gravará</translation> <translation id="7642647758716480637">Abrir a configuración para <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (propietario)</translation> <translation id="7647488630410863958">Desbloquea o dispositivo para ver as notificacións</translation> @@ -733,6 +752,7 @@ <translation id="8563862697512465947">Configuración de notificacións</translation> <translation id="857201607579416096">O menú moveuse á esquina inferior dereita da pantalla.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Toca calquera parte para facer unha captura a pantalla completa</translation> <translation id="8627191004499078455">Dispositivo conectado a: <ph name="DEVICE_NAME" /></translation> <translation id="8631727435199967028">Configuración de accesibilidade</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, intensidade do sinal do <ph name="SIGNAL_STRENGTH" />, xestionada polo teu administrador</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index 16e0d3d..6819410 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ne podržava <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Razlučivost je promijenjena u <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliknite Potvrdi da bi se promjene zadržale. Prethodne postavke vratit će se za <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Promijenio se prečac za otvaranje upravitelja zadataka. Upotrijebite <ph name="NEW_SHORTCUT" /> umjesto <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatski klikovi</translation> +<translation id="1924640696879807758">S telefona</translation> <translation id="1928739107511554905">Da biste preuzeli ažuriranje, ponovo pokrenite Chromebook pomoću dodirnog zaslona dok je tipkovnica priključena.</translation> <translation id="1951012854035635156">Asistent</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Administrator ovog računa onemogućio je višestruku prijavu.</translation> <translation id="7933084174919150729">Google asistent dostupan je samo za primarni profil.</translation> <translation id="79341161159229895">Računom upravljaju <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da biste vidjeli međuspremnik. Posljednjih pet kopiranih stavki spremljeno je u međuspremnik.</translation> <translation id="7955885781510802139">Način visokog kontrasta</translation> <translation id="7977927628060636163">Traženje mobilnih mreža...</translation> <translation id="7980780401175799550">Isprobajte nove načine za kretanje kroz Chrome OS</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 3efd236ef..4c5fab1 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144">A(z) <ph name="DISPLAY_NAME" /> nem támogatja a következő felbontást: <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). A felbontás erre módosult: <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). A módosítás megtartásához kattintson a Megerősítés gombra. A beállítás <ph name="TIMEOUT_SECONDS" /> múlva visszaáll a korábbi értékre.</translation> <translation id="1919743966458266018">Megváltozott a feladatkezelő megnyitásának billentyűkódja. A <ph name="OLD_SHORTCUT" /> helyett használja a következőt: <ph name="NEW_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatikus kattintások</translation> +<translation id="1924640696879807758">A telefonról</translation> <translation id="1928739107511554905">A frissítés alkalmazásához és a csatlakoztatott billentyűzet használatához indítsa újra a Chromebookot az érintőképernyő segítségével.</translation> <translation id="1951012854035635156">Segéd</translation> <translation id="1957803754585243749">0°</translation> @@ -595,7 +596,7 @@ <translation id="6919251195245069855">A rendszer nem ismerte fel az intelligens kártyáját. Próbálja újra.</translation> <translation id="6945221475159498467">Kiválasztás</translation> <translation id="6972754398087986839">Első lépések</translation> -<translation id="6981982820502123353">Kisegítő opciók</translation> +<translation id="6981982820502123353">Kisegítő lehetőségek</translation> <translation id="698231206551913481">A felhasználó eltávolításakor az összes hozzá tartozó fájl és helyi adat is véglegesen törlődik.</translation> <translation id="7007983414944123363">PIN-kódjának vagy jelszavának ellenőrzése nem sikerült. Próbálja újra.</translation> <translation id="7013005189539051442">Hotspot engedélyezése</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">A fiók rendszergazdája letiltotta a többfiókos bejelentkezést.</translation> <translation id="7933084174919150729">A Google Segéd csak az elsődleges profilhoz áll rendelkezésre.</translation> <translation id="79341161159229895">A fiókot a(z) <ph name="FIRST_PARENT_EMAIL" /> és a(z) <ph name="SECOND_PARENT_EMAIL" /> kezeli</translation> +<translation id="793716872548410480">Nyomja le a(z) <ph name="SHORTCUT_KEY_NAME" /> + V billentyűkombinációt a vágólap megtekintéséhez. A rendszer az utoljára másolt öt elemet menti a vágólapra.</translation> <translation id="7955885781510802139">Nagy kontrasztú mód</translation> <translation id="7977927628060636163">Mobilhálózatok keresése…</translation> <translation id="7980780401175799550">Új navigációs módszerek Chrome OS rendszeren</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index e7de1e4..f30032ac 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">Sinyal sedang</translation> <translation id="4112140312785995938">Cari Mundur</translation> <translation id="4114315158543974537">Aktifkan Phone Hub</translation> +<translation id="4121728057981832179">Mesin virtual sedang menggunakan mikrofon Anda</translation> <translation id="4129129681837227511">Untuk melihat notifikasi di layar kunci, buka kunci untuk mengubah setelan</translation> <translation id="4146833061457621061">Putar musik</translation> <translation id="4149156641122542261"><ph name="DEVICE_TYPE" /> dikelola oleh <ph name="DOMAIN" /></translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">Dikte</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Tampilkan setelan notifikasi. Notifikasi nonaktif.</translation> +<translation id="4267383818855338811">Mesin virtual sedang menggunakan kamera Anda</translation> <translation id="4269883910223712419">Admin perangkat ini memiliki kemampuan untuk:</translation> <translation id="4279490309300973883">Mencerminkan</translation> <translation id="4285498937028063278">Lepas pin</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">Masukan</translation> <translation id="4527045527269911712">Perangkat Bluetooth "<ph name="DEVICE_NAME" />" meminta izin untuk bersanding.</translation> <translation id="453661520163887813"><ph name="TIME" /> sampai penuh</translation> +<translation id="4544483149666270818">Pilih jendela yang akan direkam</translation> <translation id="4560576029703263363">Aktif</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Sembunyikan sandi</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">Terima</translation> <translation id="4924411785043111640">Mulai ulang dan reset</translation> <translation id="4925542575807923399">Administrator akun ini mewajibkan akun ini untuk menjadi akun masuk pertama dalam sesi fitur masuk banyak akun.</translation> +<translation id="4942878304446937978">Menu status, waktu <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Ambil gambar</translation> <translation id="495046168593986294">Scroll ke atas</translation> <translation id="4961318399572185831">Transmisikan layar</translation> <translation id="4969092041573468113"><ph name="HOURS" />j <ph name="MINUTES" />m <ph name="SECONDS" />d</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">Aktifkan dikte</translation> <translation id="556042886152191864">Tombol</translation> <translation id="5571066253365925590">Bluetooth diaktifkan</translation> +<translation id="558849140439112033">Tarik untuk memilih area yang akan diambil gambarnya</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Tekan Ctrl + Alt + Z untuk menonaktifkan masukan lisan.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">Nonaktif</translation> <translation id="5876666360658629066">Masukkan kode orang tua</translation> <translation id="5895138241574237353">Mulai Ulang</translation> +<translation id="589817443623831496">Pemindaian titik</translation> <translation id="5901316534475909376">Shift+Esc</translation> <translation id="5909862606227538307">Desktop tidak aktif.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Klik di mana saja untuk menangkap gambar dalam layar penuh</translation> <translation id="5916664084637901428">Aktif</translation> <translation id="5920710855273935292">Mikrofon dibisukan.</translation> <translation id="594179686076170922">Menghubungkan ke ponsel Anda ...</translation> @@ -534,6 +549,7 @@ <translation id="6490471652906364588">Perangkat USB-C (port sebelah kanan)</translation> <translation id="649452524636452238">PIN kartu smart</translation> <translation id="6501401484702599040">Mentransmisi layar ke <ph name="RECEIVER_NAME" /></translation> +<translation id="6520517963145875092">Pilih jendela untuk diambil gambarnya</translation> <translation id="652139407789908527">Layar Anda akan kosong lebih lama dari biasanya (hingga satu menit) selama update ini berlangsung. Jangan tekan tombol daya saat proses update berlangsung.</translation> <translation id="6528179044667508675">Jangan ganggu</translation> <translation id="65320610082834431">Emoji</translation> @@ -562,6 +578,7 @@ <translation id="6751052314767925245">Diterapkan oleh administrator Anda</translation> <translation id="6751826523481687655">Pelacakan performa diaktifkan</translation> <translation id="6752912906630585008">Desktop <ph name="REMOVED_DESK" /> dihapus dan digabung dengan Desktop <ph name="RECEIVE_DESK" /></translation> +<translation id="6757237461819837179">Tidak ada media yang diputar</translation> <translation id="6777216307882431711">Mengisi daya perangkat USB-C yang terhubung</translation> <translation id="6790428901817661496">Putar</translation> <translation id="6803622936009808957">Tidak dapat menggandakan tampilan karena tidak ditemukan resolusi yang didukung. Memasuki desktop yang diperluas sebagai gantinya.</translation> @@ -610,6 +627,7 @@ <translation id="7348093485538360975">Keyboard di layar</translation> <translation id="735745346212279324">VPN terputus</translation> <translation id="7377169924702866686">Caps Lock aktif.</translation> +<translation id="7378203170292176219">Tarik untuk memilih area yang akan direkam</translation> <translation id="7378594059915113390">Kontrol Media</translation> <translation id="7398254312354928459">Koneksi jaringan dialihkan</translation> <translation id="7405710164030118432">Untuk membuka kunci perangkat, masukkan kode akses orang tua Family Link</translation> @@ -636,6 +654,7 @@ <translation id="7618774594543487847">Netral</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation> <translation id="7633755430369750696">Tampilkan setelan Berbagi Langsung.</translation> +<translation id="7641938616688887143">Rekam</translation> <translation id="7642647758716480637">Buka setelan untuk <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (pemilik)</translation> <translation id="7647488630410863958">Buka kunci perangkat untuk melihat notifikasi</translation> @@ -732,6 +751,7 @@ <translation id="8563862697512465947">Setelan Notifikasi</translation> <translation id="857201607579416096">Menu dipindahkan ke pojok kanan bawah layar.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Ketuk di mana saja untuk menangkap gambar dalam layar penuh</translation> <translation id="8627191004499078455">Tersambung ke <ph name="DEVICE_NAME" /></translation> <translation id="8631727435199967028">Setelan Aksesibilitas</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, Kekuatan Sinyal <ph name="SIGNAL_STRENGTH" />, Dikelola oleh Administrator Anda</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb index 54d5404..09be5a5 100644 --- a/ash/strings/ash_strings_is.xtb +++ b/ash/strings/ash_strings_is.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> styður ekki <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Upplausninni var breytt í <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Smelltu til að staðfesta þessa breytingu. Fyrri stillingar verða endurheimtar eftir <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Flýtileiðinni til að opna verkstjórn hefur verið breytt. Notaðu <ph name="NEW_SHORTCUT" /> í staðinn fyrir <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Sjálfvirkir smellir</translation> +<translation id="1924640696879807758">Úr símanum</translation> <translation id="1928739107511554905">Til að fá uppfærsluna skaltu nota snertiskjáinn til að endurræsa Chromebook með lyklaborðið tengt.</translation> <translation id="1951012854035635156">Aðstoðarmaður</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Stjórnandi þessa reiknings hefur gert innskráningu á marga reikninga óvirka.</translation> <translation id="7933084174919150729">Google hjálparinn er aðeins í boði fyrir aðalprófíl.</translation> <translation id="79341161159229895"><ph name="FIRST_PARENT_EMAIL" /> og <ph name="SECOND_PARENT_EMAIL" /> stjórna þessum reikningi</translation> +<translation id="793716872548410480">Ýttu á <ph name="SHORTCUT_KEY_NAME" /> + V til að skoða klippiborðið. Síðustu 5 atriðin sem þú afritaðir eru vistuð á klippiborðinu.</translation> <translation id="7955885781510802139">Mikil birtuskil</translation> <translation id="7977927628060636163">Leitar að farsímakerfum...</translation> <translation id="7980780401175799550">Prófaðu nýjar leiðir til að nota Chrome OS</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index fa6249d..b2d16151 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">ಮಧ್ಯಮ ಸಿಗ್ನಲ್</translation> <translation id="4112140312785995938">ಹಿಂದಕ್ಕೆ ಸೀಕ್ ಮಾಡಿ</translation> <translation id="4114315158543974537">ಫೋನ್ ಹಬ್ ಆನ್ ಮಾಡಿ</translation> +<translation id="4121728057981832179">ವರ್ಚುವಲ್ ಯಂತ್ರವೊಂದು ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="4129129681837227511">ನಿಮ್ಮ ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ನೋಡಲು, ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು ಅನ್ಲಾಕ್ ಮಾಡಿ</translation> <translation id="4146833061457621061">ಸಂಗೀತ ಪ್ಲೇ ಮಾಡಿ</translation> <translation id="4149156641122542261"><ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು <ph name="DOMAIN" /> ನಿರ್ವಹಿಸುತ್ತಿದೆ</translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">ಉಕ್ತಲೇಖನ</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೋರಿಸಿ. ಅಧಿಸೂಚನೆಗಳು ಆಫ್ ಆಗಿವೆ</translation> +<translation id="4267383818855338811">ವರ್ಚುವಲ್ ಯಂತ್ರವೊಂದು ನಿಮ್ಮ ಕ್ಯಾಮೆರಾವನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="4269883910223712419">ಈ ಸಾಧನದ ನಿರ್ವಾಹಕರು ಈ ಕೆಳಗಿನ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ:</translation> <translation id="4279490309300973883">ಪ್ರತಿಬಿಂಬಿಸುವಿಕೆ</translation> <translation id="4285498937028063278">ಅನ್ಪಿನ್</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">ಪ್ರತಿಕ್ರಿಯೆ</translation> <translation id="4527045527269911712">ಬ್ಲೂಟೂತ್ ಸಾಧನವು "<ph name="DEVICE_NAME" />" ಜೋಡಣೆಗಾಗಿ ಅನುಮತಿಯನ್ನು ಬಯಸುತ್ತದೆ.</translation> <translation id="453661520163887813"><ph name="TIME" /> ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೆ</translation> +<translation id="4544483149666270818">ರೆಕಾರ್ಡ್ ಮಾಡಲು ವಿಂಡೋ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="4560576029703263363">ಆನ್</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">ಪಾಸ್ವರ್ಡ್ ಮರೆಮಾಡಿ</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">ಸಮ್ಮತಿಸು</translation> <translation id="4924411785043111640">ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಮರುಹೊಂದಿಸಿ</translation> <translation id="4925542575807923399">ಬಹು ಸೈನ್ ಇನ್ ಸೆಷನ್ನಲ್ಲಿ ಈ ಖಾತೆಯನ್ನು ಮೊದಲಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲಾದ ಖಾತೆಯು ಅಗತ್ಯವಿರುತ್ತದೆ ಎಂದು ಈ ಖಾತೆಯ ನಿರ್ವಾಹಕರಿಗೆ ಅಗತ್ಯವಿರುತ್ತದೆ.</translation> +<translation id="4942878304446937978">ಸ್ಥಿತಿ ಟ್ರೇ, ಸಮಯ <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ</translation> <translation id="495046168593986294">ಮೇಲಕ್ಕೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ</translation> <translation id="4961318399572185831">ಪರದೆಯನ್ನು ಬಿತ್ತರಿಸಿ</translation> <translation id="4969092041573468113"><ph name="HOURS" />ಗ <ph name="MINUTES" />ನಿ <ph name="SECONDS" />ಸೆ</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">ಡಿಕ್ಟೇಶನ್ ಟಾಗಲ್ ಮಾಡಿ</translation> <translation id="556042886152191864">ಬಟನ್</translation> <translation id="5571066253365925590">ಬ್ಲೂಟೂತ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> +<translation id="558849140439112033">ಕ್ಯಾಪ್ಚರ್ ಮಾಡುವುದಕ್ಕಾಗಿ ಪ್ರದೇಶವೊಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು Ctrl + Alt + Z ಒತ್ತಿ.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">ಆಫ್</translation> <translation id="5876666360658629066">ಪೋಷಕ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ</translation> <translation id="5895138241574237353">ಮರುಪ್ರಾರಂಭಿಸಿ</translation> +<translation id="589817443623831496">ಪಾಯಿಂಟ್ ಸ್ಕ್ಯಾನಿಂಗ್</translation> <translation id="5901316534475909376">Shift+Esc</translation> <translation id="5909862606227538307">ನಿಷ್ಕ್ರಿಯ ಡೆಸ್ಕ್.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">ಫುಲ್ಸ್ಕ್ರೀನ್ ಅನ್ನು ಕ್ಯಾಪ್ಚರ್ ಮಾಡಲು ಎಲ್ಲಿಯಾದರೂ ಕ್ಲಿಕ್ ಮಾಡಿ</translation> <translation id="5916664084637901428">ಆನ್</translation> <translation id="5920710855273935292">ಮೈಕ್ ಅನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗಿದೆ.</translation> <translation id="594179686076170922">ನಿಮ್ಮ ಫೋನ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> @@ -535,6 +550,7 @@ <translation id="6490471652906364588">USB-C ಸಾಧನ (ಬಲ ಪೋರ್ಟ್)</translation> <translation id="649452524636452238">ಸ್ಮಾರ್ಟ್ ಕಾರ್ಡ್ ಪಿನ್</translation> <translation id="6501401484702599040">ಪರದೆಯನ್ನು <ph name="RECEIVER_NAME" /> ಗೆ ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation> +<translation id="6520517963145875092">ಕ್ಯಾಪ್ಚರ್ ಮಾಡಲು ವಿಂಡೋ ಒಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="652139407789908527">ಈ ಅಪ್ಡೇಟ್ ಮಾಡುವ ಸಂದರ್ಭದಲ್ಲಿ, ನಿಮ್ಮ ಪರದೆಯು ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಸಮಯದವರೆಗೆ (ಒಂದು ನಿಮಿಷ) ನಿಷ್ಕ್ರಿಯವಾಗಿರುತ್ತದೆ. ಅಪ್ಡೇಟ್ ಕಾರ್ಯವು ಪ್ರಗತಿಯಲ್ಲಿರುವಾಗ ಪವರ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಬೇಡಿ.</translation> <translation id="6528179044667508675">ಅಡಚಣೆ ಮಾಡಬೇಡಿ</translation> <translation id="65320610082834431">ಎಮೋಜಿಗಳು</translation> @@ -563,6 +579,7 @@ <translation id="6751052314767925245">ನಿಮ್ಮ ನಿರ್ವಾಹಕರ ಮೂಲಕ ಜಾರಿಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="6751826523481687655">ಕಾರ್ಯಕ್ಷಮತೆಯ ಟ್ರೇಸಿಂಗ್ ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="6752912906630585008"><ph name="REMOVED_DESK" /> ಡೆಸ್ಕ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ ಮತ್ತು <ph name="RECEIVE_DESK" /> ಡೆಸ್ಕ್ನೊಂದಿಗೆ ವಿಲೀನಗೊಳಿಸಲಾಗಿದೆ</translation> +<translation id="6757237461819837179">ಯಾವುದೇ ಮೀಡಿಯಾ ಪ್ಲೇ ಆಗುತ್ತಿಲ್ಲ</translation> <translation id="6777216307882431711">ಸಂಪರ್ಕಿತ USB-C ಸಾಧನಗಳನ್ನು ಚಾರ್ಜ್ ಮಾಡುತ್ತಿದೆ</translation> <translation id="6790428901817661496">ಪ್ಲೇ ಮಾಡು</translation> <translation id="6803622936009808957">ಯಾವುದೇ ಬೆಂಬಲಿತ ಪರಿಹಾರಗಳು ಕಂಡುಬರದ ಕಾರಣ ಪ್ರದರ್ಶನಗಳನ್ನು ಪ್ರತಿಬಿಂಬಿಸಲಾಗಲಿಲ್ಲ. ಬದಲಿಗೆ ವಿಸ್ತರಿತ ಡೆಸ್ಕ್ಟಾಪ್ ಅನ್ನು ನಮೂದಿಸಲಾಗಿದೆ.</translation> @@ -611,6 +628,7 @@ <translation id="7348093485538360975">ಆನ್ ಸ್ಕ್ರೀನ್ ಕೀಬೋರ್ಡ್</translation> <translation id="735745346212279324">VPN ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="7377169924702866686">CAPS LOCK ಆನ್ ಆಗಿದೆ.</translation> +<translation id="7378203170292176219">ರೆಕಾರ್ಡ್ ಮಾಡುವುದಕ್ಕಾಗಿ ಪ್ರದೇಶವೊಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ</translation> <translation id="7378594059915113390">ಮೀಡಿಯಾ ನಿಯಂತ್ರಣಗಳು</translation> <translation id="7398254312354928459">ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ಬದಲಿಸಲಾಗಿದೆ</translation> <translation id="7405710164030118432">ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು, ನಿಮ್ಮ Family Link ಪೋಷಕ ಪ್ರವೇಶದ ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ</translation> @@ -637,6 +655,7 @@ <translation id="7618774594543487847">ತಟಸ್ಥ</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation> <translation id="7633755430369750696">Nearby ಶೇರ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೋರಿಸಿ.</translation> +<translation id="7641938616688887143">ರೆಕಾರ್ಡ್</translation> <translation id="7642647758716480637"><ph name="NETWORK_NAME" /> ಗೆ ಸಂಬಂಧಿಸಿದ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ, <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (ಮಾಲೀಕರು)</translation> <translation id="7647488630410863958">ನಿಮ್ಮ ಅಧಿಸೂಚನೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ</translation> @@ -733,6 +752,7 @@ <translation id="8563862697512465947">ಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="857201607579416096">ಮೆನುವನ್ನು ಪರದೆಯ ಕೆಳಭಾಗದಲ್ಲಿ ಬಲತುದಿಗೆ ಸರಿಸಲಾಗಿದೆ.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">ಫುಲ್ಸ್ಕ್ರೀನ್ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಲು ಎಲ್ಲಿಯಾದರೂ ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="8627191004499078455"><ph name="DEVICE_NAME" /> ಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ</translation> <translation id="8631727435199967028">ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ <ph name="SIGNAL_STRENGTH" />, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸಿದ್ದಾರೆ</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index 0365f505..0264e2b 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144">„<ph name="DISPLAY_NAME" />“ nepalaiko <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Skyra pakeista į <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Spustelėkite patvirtinimo mygtuką, kad išsaugotumėte pakeitimus. Ankstesni nustatymai bus atkurti po <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Pakeistas užduočių tvarkytuvės atidarymo spartusis klavišas. Naudokite <ph name="NEW_SHORTCUT" /> vietoje <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatiniai paspaudimai</translation> +<translation id="1924640696879807758">Iš telefono</translation> <translation id="1928739107511554905">Kad gautumėte naujinį, naudodami jutiklinį ekraną iš naujo paleiskite „Chromebook“ su prijungta klaviatūra.</translation> <translation id="1951012854035635156">Padėjėjas</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Šios paskyros administratorius neleidžia naudoti kelių paskyrų.</translation> <translation id="7933084174919150729">„Google“ padėjėjas pasiekiamas tik pagrindiniame profilyje.</translation> <translation id="79341161159229895">Paskyrą tvarko: <ph name="FIRST_PARENT_EMAIL" /> ir <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Norėdami peržiūrėti iškarpinę, paspauskite „<ph name="SHORTCUT_KEY_NAME" />“ + V. Pastarieji penki nukopijuoti elementai išsaugomi iškarpinėje.</translation> <translation id="7955885781510802139">Didelio kontrasto režimas</translation> <translation id="7977927628060636163">Ieškoma mobiliojo ryšio tinklų...</translation> <translation id="7980780401175799550">Nauji „Chrome“ OS naršymo būdai</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 8034386..5a21f1d2 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144">Displejā “<ph name="DISPLAY_NAME" />” netiek atbalstīta izšķirtspēja <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Izšķirtspēja tika mainīta uz <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Lai saglabātu izmaiņas, noklikšķiniet uz “Apstiprināt”. Iepriekšējie iestatījumi tiks atjaunoti pēc šāda laika: <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Tika mainīti īsinājumtaustiņi, ar kuriem var atvērt uzdevumu pārvaldnieku. Lūdzu, turpmāk izmantojiet <ph name="NEW_SHORTCUT" />, nevis <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automātiskie klikšķi</translation> +<translation id="1924640696879807758">No tālruņa</translation> <translation id="1928739107511554905">Lai iegūtu atjauninājumu, izmantojiet skārienekrānu, lai ar pievienoto tastatūru restartētu Chromebook datoru.</translation> <translation id="1951012854035635156">Asistents</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Šī konta administrators nav atļāvis vairākkārtēju pierakstīšanos.</translation> <translation id="7933084174919150729">Google asistents ir pieejams tikai galvenajam profilam.</translation> <translation id="79341161159229895">Kontu pārvalda <ph name="FIRST_PARENT_EMAIL" /> un <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Lai skatītu starpliktuvi, nospiediet <ph name="SHORTCUT_KEY_NAME" /> + V. Pēdējie pieci nokopētie vienumi ir saglabāti starpliktuvē.</translation> <translation id="7955885781510802139">Augsta kontrasta režīms</translation> <translation id="7977927628060636163">Notiek mobilo tīklu meklēšana...</translation> <translation id="7980780401175799550">Izmēģiniet jaunus Chrome OS navigācijas veidus</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb index ed84177..45fe187 100644 --- a/ash/strings/ash_strings_mk.xtb +++ b/ash/strings/ash_strings_mk.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> не поддржува <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Резолуцијата е променета на <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Кликнете „Потврди“ за да ги задржите промените. Претходната поставка ќе се врати за <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Кратенката за отворање на управникот со задачи се промени. Користете <ph name="NEW_SHORTCUT" /> наместо <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Автоматско кликнување</translation> +<translation id="1924640696879807758">Од телефонот</translation> <translation id="1928739107511554905">За да го добиете ажурирањето, користете го екранот на допир за да го рестартирате Chromebook додека тастатурата е прикачена.</translation> <translation id="1951012854035635156">Помошник</translation> <translation id="1957803754585243749">0°</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">Администраторот за оваа сметка не дозволува повеќекратно пријавување.</translation> <translation id="7933084174919150729">„Помошникот на Google“ е достапен само за примарниот профил.</translation> <translation id="79341161159229895"><ph name="FIRST_PARENT_EMAIL" /> и <ph name="SECOND_PARENT_EMAIL" /> управуваат со сметката</translation> +<translation id="793716872548410480">Притиснете <ph name="SHORTCUT_KEY_NAME" /> + V за да ја видите привремената меморија. Последните 5 ставки што сте ги копирале се зачувани во привремената меморија.</translation> <translation id="7955885781510802139">Режим на висок контраст</translation> <translation id="7977927628060636163">Се пребаруваат мобилни мрежи…</translation> <translation id="7980780401175799550">Испробајте нови начини на навигација низ Chrome OS</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index 9d75fed3..0f210c6 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" />, <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) എന്ന റെസല്യൂഷൻ പിന്തുണയ്ക്കുന്നില്ല. <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) എന്നതിലേക്ക് റെസല്യൂഷൻ മാറ്റി. മാറ്റങ്ങൾ നിലനിർത്താൻ 'സ്ഥിരീകരിക്കുക' ക്ലിക്ക് ചെയ്യുക. മുമ്പത്തെ ക്രമീകരണം <ph name="TIMEOUT_SECONDS" />-ൽ പുനഃസ്ഥാപിക്കും.</translation> <translation id="1919743966458266018">ടാസ്ക് മാനേജർ തുറക്കാനുള്ള കുറുക്കുവഴി മാറ്റി. <ph name="OLD_SHORTCUT" /> എന്നതിന് പകരം <ph name="NEW_SHORTCUT" /> ഉപയോഗിക്കുക.</translation> <translation id="1923539912171292317">യാന്ത്രിക ക്ലിക്കുകൾ</translation> +<translation id="1924640696879807758">ഫോണിൽ നിന്ന്</translation> <translation id="1928739107511554905">അപ്ഡേറ്റ് നേടാൻ, അറ്റാച്ച് ചെയ്ത കീബോർഡിനൊപ്പം Chromebook റീസ്റ്റാർട്ട് ചെയ്യാൻ ടച്ച്സ്ക്രീൻ ഉപയോഗിക്കുക.</translation> <translation id="1951012854035635156">Assistant</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">ഈ അക്കൗണ്ടിന്റെ അഡ്മിനിസ്ട്രേറ്റർ ഒന്നിലധികം സൈൻ-ഇൻ അനുവദിക്കുന്നില്ല.</translation> <translation id="7933084174919150729">പ്രാഥമിക പ്രൊഫൈലിന് മാത്രമേ Google അസിസ്റ്റന്റ് ലഭ്യമാകൂ.</translation> <translation id="79341161159229895">അക്കൗണ്ട് മാനേജ് ചെയ്യുന്നത് <ph name="FIRST_PARENT_EMAIL" />, <ph name="SECOND_PARENT_EMAIL" /> എന്നിവരാണ്</translation> +<translation id="793716872548410480">നിങ്ങളുടെ ക്ലിപ്പ്ബോർഡ് കാണാൻ <ph name="SHORTCUT_KEY_NAME" /> + V അമർത്തുക. നിങ്ങൾ അവസാനമായി പകർത്തിയ 5 ഇനങ്ങൾ ക്ലിപ്പ്ബോർഡിൽ സംരക്ഷിക്കുന്നു.</translation> <translation id="7955885781510802139">ഉയർന്ന ദൃശ്യതീവ്രതാ മോഡ്</translation> <translation id="7977927628060636163">മൊബൈൽ നെറ്റ്വർക്കുകൾ തിരയുന്നു...</translation> <translation id="7980780401175799550">Chrome OS നാവിഗേറ്റ് ചെയ്യാനുള്ള പുതിയ മാർഗ്ഗങ്ങൾ പരീക്ഷിക്കുക</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 06e54c1..6961a55 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">मध्यम सिग्नल</translation> <translation id="4112140312785995938">पछाडि जानुहोस्</translation> <translation id="4114315158543974537">फोन हब अन गर्नुहोस्</translation> +<translation id="4121728057981832179">कुनै भर्चुअल मेसिनले तपाईंको माइक्रोफोन प्रयोग गरिरहेको छ</translation> <translation id="4129129681837227511">आफ्नो लक स्क्रिनमा सूचनाहरू हेर्नका लागि सेटिङहरू परिवर्तन गर्न अनलक गर्नुहोस्</translation> <translation id="4146833061457621061">सङ्गीत प्ले गर्नुहोस्</translation> <translation id="4149156641122542261"><ph name="DOMAIN" /> ले व्यवस्थित गरेको<ph name="DEVICE_TYPE" /></translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">श्रुतिलेखन</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">सूचनासम्बन्धी सेटिङहरू देखाउनुहोस्। सूचनाहरू निष्क्रिय छन्</translation> +<translation id="4267383818855338811">कुनै भर्चुअल मेसिनले तपाईंको क्यामेरा प्रयोग गरिरहेको छ</translation> <translation id="4269883910223712419">यो यन्त्रको प्रशासक निम्न कुराहरू गर्न सक्नुहु्न्छ:</translation> <translation id="4279490309300973883">प्रतिबिम्ब गर्दै</translation> <translation id="4285498937028063278">अनपिन गर्नुहोस्</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">पृष्ठपोषण</translation> <translation id="4527045527269911712">ब्लुटूथ यन्त्र "<ph name="DEVICE_NAME" />" जोडिनको लागि अनुमति चाहन्छ।</translation> <translation id="453661520163887813">पूर्ण हुन <ph name="TIME" /> बॉंकी छ</translation> +<translation id="4544483149666270818">रेकर्ड गर्न कुनै विन्डो चयन गर्नुहोस्</translation> <translation id="4560576029703263363">अन</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">पासवर्ड लुकाउनुहोस्</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">स्वीकार्नुहोस्</translation> <translation id="4924411785043111640">पुनः सुरु गरी रिसेट गर्नुहोस्</translation> <translation id="4925542575807923399">यस खाताको प्रशासकलाई एक बहुविध साइन-इन सत्रमा प्रथम साइन-इन गरिएको खाता हुन यस खातालाई आवश्यक छ।</translation> +<translation id="4942878304446937978">स्ट्याटस ट्रे, समय <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">फोटो खिच्नुहोस्</translation> <translation id="495046168593986294">माथि स्क्रोल गर्नुहोस्</translation> <translation id="4961318399572185831">स्क्रिन cast गर्नुहोस्</translation> <translation id="4969092041573468113"><ph name="HOURS" />घन्टा <ph name="MINUTES" />मिनेट <ph name="SECONDS" />सेकेन्ड</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">श्रुतिलेखन सुविधा टगल गर्नुहोस्</translation> <translation id="556042886152191864">बटन</translation> <translation id="5571066253365925590">ब्लुटूथ सक्षम भयो</translation> +<translation id="558849140439112033">फोटो खिच्ने कुनै क्षेत्र चयन गर्न ड्र्याग गर्नुहोस्</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">बोली प्रतिक्रिया असक्षम पार्न Ctrl + Alt + Z थिच्नुहोस्।</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">बन्द</translation> <translation id="5876666360658629066">अभिभावकको कोड प्रविष्टि गर्नुहोस्</translation> <translation id="5895138241574237353">पुन: शुरू गर्नुहोस्</translation> +<translation id="589817443623831496">पोइन्ट स्क्यानिङ</translation> <translation id="5901316534475909376">Shift+Esc</translation> <translation id="5909862606227538307">निष्क्रिय डेस्क।</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">पूर्ण स्क्रिनको फोटो खिच्न कुनै ठाउँमा क्लिक गर्नुहोस्</translation> <translation id="5916664084637901428">अन</translation> <translation id="5920710855273935292">माइक म्युट गरिएको छ।</translation> <translation id="594179686076170922">तपाईंको फोनसँग कनेक्ट गरिँदै...</translation> @@ -534,6 +549,7 @@ <translation id="6490471652906364588">USB-C यन्त्र (दायाँ पोर्ट)</translation> <translation id="649452524636452238">स्मार्ट कार्डको PIN</translation> <translation id="6501401484702599040">स्क्रिन <ph name="RECEIVER_NAME" /> मा cast गर्दै</translation> +<translation id="6520517963145875092">फोटो खिच्न कुनै विन्डो चयन गर्नुहोस्</translation> <translation id="652139407789908527">यो अद्यावधिक गर्दै गर्दा तपाईंको यन्त्रको स्क्रिन सामान्यभन्दा बढी समय (एक मिनेटसम्म) खाली हुन सक्छ। अद्यावधिक हुँदै गर्दा कृपया पावर बटन नथिच्नुहोस्।</translation> <translation id="6528179044667508675">बाधा नगर्नुहोस्</translation> <translation id="65320610082834431">इमोजीहरू</translation> @@ -562,6 +578,7 @@ <translation id="6751052314767925245">तपाईंका प्रशासकले लागू गर्नुभएको</translation> <translation id="6751826523481687655">प्रदर्शन ट्रेस गरिँदै छ</translation> <translation id="6752912906630585008">डेस्क <ph name="REMOVED_DESK" /> हटाइयो र डेस्क <ph name="RECEIVE_DESK" /> मा गाभियो</translation> +<translation id="6757237461819837179">कुनै मिडिया प्ले भइरहेको छैन</translation> <translation id="6777216307882431711">जडान गरिएका USB-C यन्त्रहरू चार्ज गर्दै</translation> <translation id="6790428901817661496">प्ले गर्नुहोस्</translation> <translation id="6803622936009808957">समर्थित रिजोलुशन फेला नपारेदेखि मिरर डिस्प्ले गर्न सकेन। सट्टामा विस्तारित डेस्कटप प्रविष्ट गरियो।</translation> @@ -610,6 +627,7 @@ <translation id="7348093485538360975">अन्-स्क्रिन कुञ्जीपाटी</translation> <translation id="735745346212279324">VPN को जडान विच्छेद भयो</translation> <translation id="7377169924702866686">क्याप्स लक सक्रिय छ।</translation> +<translation id="7378203170292176219">रेकर्ड गर्ने कुनै क्षेत्र चयन गर्न ड्र्याग गर्नुहोस्</translation> <translation id="7378594059915113390">मिडियासम्बन्धी नियन्त्रणहरू</translation> <translation id="7398254312354928459">नेटवर्क जडान बदल्ने कार्य गरियो</translation> <translation id="7405710164030118432">यन्त्र अनलक गर्न आफ्नो Family Link को अभिभावकको पहुँचसम्बन्धी कोड प्रविष्टि गर्नुहोस्</translation> @@ -636,6 +654,7 @@ <translation id="7618774594543487847">तटस्थ</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation> <translation id="7633755430369750696">नजिकैका यन्त्रसँग सेयर गर्ने सुविधासम्बन्धी सेटिङ देखाउनुहोस्।</translation> +<translation id="7641938616688887143">रेकर्ड गर्नुहोस्</translation> <translation id="7642647758716480637"><ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> को सेटिङ खोल्नुहोस्</translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (मालिक)</translation> <translation id="7647488630410863958">आफ्ना सूचनाहरू हेर्न यन्त्रलाई अनलक गर्नुहोस्</translation> @@ -732,6 +751,7 @@ <translation id="8563862697512465947">सूचनाका सेटिङहरू</translation> <translation id="857201607579416096">मेनु सारेर स्क्रिनको फेदको दायाँ कुनामा लगियो।</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">पूर्ण स्क्रिनको फोटो खिच्न कुनै ठाउँमा ट्याप गर्नुहोस्</translation> <translation id="8627191004499078455"><ph name="DEVICE_NAME" /> मा जोडियो</translation> <translation id="8631727435199967028">पहुँचसम्बन्धी सेटिङहरू</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, सिग्नलको क्षमता <ph name="SIGNAL_STRENGTH" />, तपाईंका प्रशासकले व्यवस्थित गर्नुभएको छ</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index a3f7fd4..4ec3e6da 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> støtter ikke <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Oppløsningen ble endret til <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klikk på Bekreft for å beholde endringene. De forrige innstillingene blir gjenopprettet om <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Snarveien for å åpne oppgavebehandlingen er endret. Bruk <ph name="NEW_SHORTCUT" /> i stedet for <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatiske klikk</translation> +<translation id="1924640696879807758">Fra telefonen</translation> <translation id="1928739107511554905">For å laste ned oppdateringen, bruk berøringsskjermen til å starte Chromebooken på nytt med tastaturet tilkoblet.</translation> <translation id="1951012854035635156">Assistent</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Administratoren for denne kontoen har forbudt multipålogging.</translation> <translation id="7933084174919150729">Google-assistenten er bare tilgjengelig for den primære profilen.</translation> <translation id="79341161159229895">Kontoen er administrert av <ph name="FIRST_PARENT_EMAIL" /> og <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Trykk på <ph name="SHORTCUT_KEY_NAME" /> + V for å se utklippstavlen. De siste fem elementene du har kopiert, er lagret på utklippstavlen.</translation> <translation id="7955885781510802139">Høykontrastmodus</translation> <translation id="7977927628060636163">Søker etter mobilnettverk …</translation> <translation id="7980780401175799550">Prøv nye måter å navigere i Chrome OS på</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 02cf4ce2..a5b281b 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> nie obsługuje ustawienia <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Rozdzielczość została zmieniona na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliknij, by potwierdzić i zachować zmiany. Poprzednie ustawienia zostaną przywrócone za <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Zmieniliśmy skrót, który otwiera menedżera zadań. Zamiast <ph name="OLD_SHORTCUT" /> używaj teraz <ph name="NEW_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatyczne kliknięcia</translation> +<translation id="1924640696879807758">Z telefonu</translation> <translation id="1928739107511554905">Aby pobrać aktualizację, użyj ekranu dotykowego, by uruchomić Chromebooka ponownie z podłączoną klawiaturą.</translation> <translation id="1951012854035635156">Asystent</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Administrator tego konta zablokował możliwość wielokrotnego logowania.</translation> <translation id="7933084174919150729">Asystent Google jest dostępny tylko na profilu głównym.</translation> <translation id="79341161159229895">Kontem zarządzają <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Naciśnij <ph name="SHORTCUT_KEY_NAME" /> + V, by przejrzeć zawartość schowka. Znajdziesz tam ostatnie 5 skopiowanych elementów.</translation> <translation id="7955885781510802139">Tryb wysokiego kontrastu</translation> <translation id="7977927628060636163">Szukam sieci komórkowych…</translation> <translation id="7980780401175799550">Wypróbuj nowe metody nawigacji w Chrome OS</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 4a22ea0..045c15c 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> não é compatível com <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). A resolução foi modificada para <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Clique em "Confirmar" para manter as mudanças. As configurações anteriores serão restauradas em <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">O atalho para abrir o gerenciador de tarefas foi alterado. Use <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Cliques automáticos</translation> +<translation id="1924640696879807758">Do smartphone</translation> <translation id="1928739107511554905">Para receber a atualização, use a touchscreen para reiniciar o Chromebook com o teclado conectado.</translation> <translation id="1951012854035635156">Assistente</translation> <translation id="1957803754585243749">0°</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">O administrador desta conta bloqueou o login múltiplo.</translation> <translation id="7933084174919150729">O Google Assistente só está disponível para o perfil principal.</translation> <translation id="79341161159229895">Conta gerenciada por <ph name="FIRST_PARENT_EMAIL" /> e <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Pressione <ph name="SHORTCUT_KEY_NAME" /> + V para ver a área de transferência. Os últimos cinco itens que você copiou ficam salvos nela.</translation> <translation id="7955885781510802139">Modo de alto contraste</translation> <translation id="7977927628060636163">Pesquisando redes móveis…</translation> <translation id="7980780401175799550">Teste novas maneiras de navegar pelo Chrome OS</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index cd9d6df..859bb9a 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> não suporta <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). A resolução foi alterada para <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Clique em confirmar para manter as alterações. As definições anteriores serão restauradas dentro de <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">O atalho para abrir o Gestor de tarefas foi alterado. Utilize <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Cliques automáticos</translation> +<translation id="1924640696879807758">Do Telemóvel</translation> <translation id="1928739107511554905">Para obter a atualização, utilize o ecrã tátil para reiniciar o Chromebook com o teclado ligado.</translation> <translation id="1951012854035635156">Assistente</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">O gestor desta conta removeu a permissão de início de sessão integrado.</translation> <translation id="7933084174919150729">O Assistente Google está disponível apenas no perfil principal.</translation> <translation id="79341161159229895">Conta gerida por <ph name="FIRST_PARENT_EMAIL" /> e <ph name="SECOND_PARENT_EMAIL" />.</translation> +<translation id="793716872548410480">Prima <ph name="SHORTCUT_KEY_NAME" /> + V para ver a sua área de transferência. Os últimos 5 itens que copiou são guardados na sua área de transferência.</translation> <translation id="7955885781510802139">Modo de alto contraste</translation> <translation id="7977927628060636163">A pesquisar redes móveis...</translation> <translation id="7980780401175799550">Experimente novas formas de navegar no Chrome OS</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 09bd542..1669f62 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">сигнал средней мощности</translation> <translation id="4112140312785995938">Перемотать назад</translation> <translation id="4114315158543974537">Включите Phone Hub</translation> +<translation id="4121728057981832179">Виртуальная машина использует ваш микрофон</translation> <translation id="4129129681837227511">Чтобы разрешить показ уведомлений на заблокированном экране, разблокируйте устройство, а затем измените эту настройку.</translation> <translation id="4146833061457621061">Включить музыку</translation> <translation id="4149156641122542261">Устройство <ph name="DEVICE_TYPE" /> находится в домене <ph name="DOMAIN" />.</translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">Голосовой ввод</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Показать настройки уведомлений. Уведомления отключены.</translation> +<translation id="4267383818855338811">Виртуальная машина использует вашу камеру</translation> <translation id="4269883910223712419">Администратор этого устройства имеет возможность:</translation> <translation id="4279490309300973883">Отражение</translation> <translation id="4285498937028063278">Открепить из Быстрого запуска</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">Отзыв</translation> <translation id="4527045527269911712">Устройству <ph name="DEVICE_NAME" /> требуется разрешение на подключение через Bluetooth.</translation> <translation id="453661520163887813">До полной зарядки <ph name="TIME" /></translation> +<translation id="4544483149666270818">Выберите окно для записи</translation> <translation id="4560576029703263363">Включено</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Скрыть пароль</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">Принять</translation> <translation id="4924411785043111640">Перезапустить и сбросить настройки</translation> <translation id="4925542575807923399">Чтобы начать сеанс множественного входа, необходимо в первую очередь выполнить вход в этот аккаунт</translation> +<translation id="4942878304446937978">Строка состояния, время <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Снимок</translation> <translation id="495046168593986294">Прокрутить вверх</translation> <translation id="4961318399572185831">Трансляция экрана</translation> <translation id="4969092041573468113"><ph name="HOURS" /> ч. <ph name="MINUTES" /> мин. <ph name="SECONDS" /> сек.</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">Включение голосового ввода</translation> <translation id="556042886152191864">Кнопка</translation> <translation id="5571066253365925590">Bluetooth включен</translation> +<translation id="558849140439112033">Перетащите, чтобы выделить область для снимка</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Чтобы отключить озвучивание текста на экране, нажмите CTRL + ALT + Z.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">ВЫКЛ</translation> <translation id="5876666360658629066">Введите родительский код</translation> <translation id="5895138241574237353">Перезапустить</translation> +<translation id="589817443623831496">Точечное сканирование</translation> <translation id="5901316534475909376">Shift + Esc</translation> <translation id="5909862606227538307">Рабочий стол неактивен.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Чтобы снять экран полностью, нажмите в любом его месте</translation> <translation id="5916664084637901428">ВКЛ</translation> <translation id="5920710855273935292">Микрофон отключен.</translation> <translation id="594179686076170922">Соединение со смартфоном…</translation> @@ -534,6 +549,7 @@ <translation id="6490471652906364588">Устройство USB-C (порт справа)</translation> <translation id="649452524636452238">PIN-код для смарт-карты</translation> <translation id="6501401484702599040">Трансляция содержимого экрана: <ph name="RECEIVER_NAME" /></translation> +<translation id="6520517963145875092">Выберите окно для снимка</translation> <translation id="652139407789908527">Экран будет оставаться выключенным дольше, чем обычно (до одной минуты). Не нажимайте кнопку питания, пока обновление не завершится.</translation> <translation id="6528179044667508675">Не беспокоить</translation> <translation id="65320610082834431">Эмодзи</translation> @@ -562,6 +578,7 @@ <translation id="6751052314767925245">Функция принудительно включена администратором</translation> <translation id="6751826523481687655">Отслеживание эффективности включено.</translation> <translation id="6752912906630585008">Рабочий стол "<ph name="REMOVED_DESK" />" удален и объединен с рабочим столом "<ph name="RECEIVE_DESK" />".</translation> +<translation id="6757237461819837179">Контент не воспроизводится</translation> <translation id="6777216307882431711">Питание подключенных устройств USB-C</translation> <translation id="6790428901817661496">Воспроизвести</translation> <translation id="6803622936009808957">Не удалось дублировать изображение экрана, т. к. указанное разрешение не поддерживается. Включен режим расширенного рабочего стола.</translation> @@ -610,6 +627,7 @@ <translation id="7348093485538360975">Экранная клавиатура</translation> <translation id="735745346212279324">VPN-соединение прервано</translation> <translation id="7377169924702866686">Включен режим Caps Lock.</translation> +<translation id="7378203170292176219">Выделите область для записи с помощью перетаскивания</translation> <translation id="7378594059915113390">Элементы управления медиафайлами</translation> <translation id="7398254312354928459">Установлено соединение с другой сетью</translation> <translation id="7405710164030118432">Чтобы разблокировать устройство, введите родительский код доступа Family Link.</translation> @@ -636,6 +654,7 @@ <translation id="7618774594543487847">Нейтральные</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" /> °F</translation> <translation id="7633755430369750696">Показать настройки Обмена с окружением</translation> +<translation id="7641938616688887143">Запись</translation> <translation id="7642647758716480637">Открыть настройки сети "<ph name="NETWORK_NAME" />", статус: <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (владелец)</translation> <translation id="7647488630410863958">Чтобы просмотреть уведомления, разблокируйте устройство</translation> @@ -732,6 +751,7 @@ <translation id="8563862697512465947">Настройки оповещений</translation> <translation id="857201607579416096">Меню перемещено в правый нижний угол экрана.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Чтобы снять экран полностью, нажмите в любом его месте</translation> <translation id="8627191004499078455">Подключено устройство "<ph name="DEVICE_NAME" />"</translation> <translation id="8631727435199967028">Настройки специальных возможностей</translation> <translation id="8637598503828012618">Статус подключения – "<ph name="CONNECTION_STATUS" />", уровень сигнала – <ph name="SIGNAL_STRENGTH" />, под управлением администратора</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index c9f47383..4a6a099 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ne podpira <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Ločljivost je bila spremenjena na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliknite »Potrdi«, če želite ohraniti spremembe. Prejšnja nastavitev bo obnovljena čez <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Bližnjica za odpiranje upravitelja opravil je spremenjena. Uporabite <ph name="NEW_SHORTCUT" /> namesto <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Samodejni kliki</translation> +<translation id="1924640696879807758">Iz telefona</translation> <translation id="1928739107511554905">Če želite prejeti posodobitev, uporabite zaslon na dotik, da znova zaženete Chromebook s priklopljeno tipkovnico.</translation> <translation id="1951012854035635156">Pomočnik</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Skrbnik tega računa je onemogočil prijavo z več računi.</translation> <translation id="7933084174919150729">Pomočnik Google je na voljo samo za primarni profil.</translation> <translation id="79341161159229895">Račun upravljata <ph name="FIRST_PARENT_EMAIL" /> in <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V, če si želite ogledati odložišče. Zadnjih pet kopiranih elementov je shranjenih v odložišču.</translation> <translation id="7955885781510802139">Visokokontrastni način</translation> <translation id="7977927628060636163">Iskanje mobilnih omrežij ...</translation> <translation id="7980780401175799550">Preizkusite nove načine krmarjenja po Chromu OS</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb index 0bec044..bcaaf53 100644 --- a/ash/strings/ash_strings_sq.xtb +++ b/ash/strings/ash_strings_sq.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> nuk e mbështet <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Rezolucioni ndryshoi në <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliko "Konfirmo" për të ruajtur ndryshimet. Cilësimet e mëparshme do të restaurohen për <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Shkurtorja për të hapur menaxherin e detyrave ka ndryshuar. Përdor <ph name="NEW_SHORTCUT" /> në vend të <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Klikimet automatike</translation> +<translation id="1924640696879807758">Nga telefoni</translation> <translation id="1928739107511554905">Për të marrë përditësimin, përdor ekranin me prekje për ta rinisur Chromebook me tastierën e lidhur.</translation> <translation id="1951012854035635156">Asistenti</translation> <translation id="1957803754585243749">0°</translation> @@ -667,6 +668,7 @@ <translation id="7904094684485781019">Administratori për këtë faqe ka ndaluar identifikimin e shumëfishtë.</translation> <translation id="7933084174919150729">"Asistenti i Google" ofrohet vetëm për profilin kryesor.</translation> <translation id="79341161159229895">Llogaria menaxhohet nga <ph name="FIRST_PARENT_EMAIL" /> dhe <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Shtyp <ph name="SHORTCUT_KEY_NAME" /> + V për të parë kujtesën tënde të fragmenteve. 5 artikujt e fundit që ke kopjuar janë ruajtur në kujtesën tënde të fragmenteve.</translation> <translation id="7955885781510802139">Modaliteti i kontrastit të lartë</translation> <translation id="7977927628060636163">Po kërkon për rrjete celulare...</translation> <translation id="7980780401175799550">Provo mënyra të reja për të naviguar Chrome OS</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb index bc22241..4307bfb 100644 --- a/ash/strings/ash_strings_sr-Latn.xtb +++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ne podržava rezoluciju <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Rezolucija je promenjena u <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Da biste zadržali promene, kliknite na Potvrdi. Prethodna podešavanja će biti vraćena za <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Prečica za otvaranje menadžera zadataka je promenjena. Koristite <ph name="NEW_SHORTCUT" /> umesto <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatski klikovi</translation> +<translation id="1924640696879807758">Sa telefona</translation> <translation id="1928739107511554905">Da biste preuzeli ažuriranje, restartujte Chromebook sa priključenom tastaturom na dodirnom ekranu.</translation> <translation id="1951012854035635156">Pomoćnik</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Administrator za ovaj nalog je zabranio višestruko prijavljivanje.</translation> <translation id="7933084174919150729">Google pomoćnik je dostupan samo za primarni profil.</translation> <translation id="79341161159229895">Nalogom upravljaju <ph name="FIRST_PARENT_EMAIL" /> i <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Pritisnite <ph name="SHORTCUT_KEY_NAME" /> + V da biste videli privremenu memoriju. Poslednjih 5 stavki koje ste kopirali čuvaju se u privremenoj memoriji.</translation> <translation id="7955885781510802139">Režim visokog kontrasta</translation> <translation id="7977927628060636163">Traže se mobilne mreže…</translation> <translation id="7980780401175799550">Isprobajte nove načine za kretanje kroz Chrome OS</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index a2881c5..b1731ad0 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> не подржава резолуцију <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Резолуција је промењена у <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Да бисте задржали промене, кликните на Потврди. Претходна подешавања ће бити враћена за <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Пречица за отварање менаџера задатака је промењена. Користите <ph name="NEW_SHORTCUT" /> уместо <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Аутоматски кликови</translation> +<translation id="1924640696879807758">Са телефона</translation> <translation id="1928739107511554905">Да бисте преузели ажурирање, рестартујте Chromebook са прикљученом тастатуром на додирном екрану.</translation> <translation id="1951012854035635156">Помоћник</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Администратор за овај налог је забранио вишеструко пријављивање.</translation> <translation id="7933084174919150729">Google помоћник је доступан само за примарни профил.</translation> <translation id="79341161159229895">Налогом управљају <ph name="FIRST_PARENT_EMAIL" /> и <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Притисните <ph name="SHORTCUT_KEY_NAME" /> + V да бисте видели привремену меморију. Последњих 5 ставки које сте копирали чувају се у привременој меморији.</translation> <translation id="7955885781510802139">Режим високог контраста</translation> <translation id="7977927628060636163">Траже се мобилне мреже…</translation> <translation id="7980780401175799550">Испробајте нове начине за кретање кроз Chrome ОС</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index 21d3b7c8..ac24fa1 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> har inte stöd för <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Upplösningen har ändrats till <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klicka på bekräfta om du vill behålla ändringarna. De gamla inställningarna återställs om <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Kortkommandot för att öppna aktivitetshanteraren har ändrats. Använd <ph name="NEW_SHORTCUT" /> i stället för <ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Automatiska klick</translation> +<translation id="1924640696879807758">Från telefonen</translation> <translation id="1928739107511554905">Starta om Chromebook-enheten via pekskärmen med tangentbordet tillkopplat för att uppdatera.</translation> <translation id="1951012854035635156">Assistent</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Administratören för kontot tillåter inte multiinloggning.</translation> <translation id="7933084174919150729">Endast den primära profilen har tillgång till Google Assistent.</translation> <translation id="79341161159229895">Kontot hanteras av <ph name="FIRST_PARENT_EMAIL" /> och <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Tryck på <ph name="SHORTCUT_KEY_NAME" /> + V för att visa urklipp De senaste fem objekten du har kopierat sparas i urklipp.</translation> <translation id="7955885781510802139">Högkontrastläge</translation> <translation id="7977927628060636163">Söker efter mobilnätverk …</translation> <translation id="7980780401175799550">Testa nya sätt att navigera i Chrome OS</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index c1f61c5b..0db4462 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="SPECIFIED_RESOLUTION" /> தெளிவுத்திறனை (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) <ph name="DISPLAY_NAME" /> ஆதரிக்கவில்லை. தெளிவுத்திறன் <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) என்பதற்கு மாற்றப்பட்டது. மாற்றங்களை வைத்திருக்க ‘உறுதிசெய்’ என்பதைக் கிளிக் செய்யவும். இன்னும் <ph name="TIMEOUT_SECONDS" /> இல் முந்தைய அமைப்புகள் மீட்டெடுக்கப்படும்.</translation> <translation id="1919743966458266018">செயல் நிர்வாகியைத் திறப்பதற்கான ஷார்ட்கட் மாற்றப்பட்டது. <ph name="OLD_SHORTCUT" /> க்குப் பதிலாக <ph name="NEW_SHORTCUT" /> ஐப் பயன்படுத்தவும்.</translation> <translation id="1923539912171292317">தன்னியக்க கிளிக்குகள்</translation> +<translation id="1924640696879807758">ஃபோனிலிருந்து</translation> <translation id="1928739107511554905">புதுப்பிப்பைப் பெற, டச்ஸ்கிரீனைப் பயன்படுத்தி, விசைப்பலகை இணைக்கப்பட்ட உங்கள் Chromebookஐ மீண்டும் தொடங்கவும்.</translation> <translation id="1951012854035635156">Assistant</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">இந்தக் கணக்கிற்கான நிர்வாகி பல உள்நுழைவுகளை அனுமதிக்கவில்லை.</translation> <translation id="7933084174919150729">முதன்மைச் சுயவிவரத்திற்கு மட்டுமே Google அசிஸ்டண்ட்டைப் பயன்படுத்த முடியும்.</translation> <translation id="79341161159229895">கணக்கை நிர்வகிப்பது: <ph name="FIRST_PARENT_EMAIL" /> மற்றும் <ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">கிளிப்போர்டைப் பார்க்க, <ph name="SHORTCUT_KEY_NAME" /> + V ஆகிய விசைகளைச் சேர்த்து அழுத்தவும். நீங்கள் நகலெடுத்த கடைசி 5 உள்ளடக்கம் கிளிப்போர்டில் சேமிக்கப்பட்டிருக்கும்.</translation> <translation id="7955885781510802139">அதிக ஒளி மாறுபாட்டுப் பயன்முறை</translation> <translation id="7977927628060636163">மொபைல் நெட்வொர்க்குகளைத் தேடுகிறது...</translation> <translation id="7980780401175799550">Chrome OSஸை வழிசெலுத்த புதிய வழிகளைப் பயன்படுத்திப் பாருங்கள்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index cfb10af..97fe335 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -315,6 +315,7 @@ <translation id="4072264167173457037">సిగ్నల్ ఓ మోస్తరుగా ఉంది</translation> <translation id="4112140312785995938">వెనుకకు జరుపు</translation> <translation id="4114315158543974537">ఫోన్ హబ్ను ఆన్ చేయండి</translation> +<translation id="4121728057981832179">వర్చువల్ మెషీన్ మీ మైక్రోఫోన్ను ఉపయోగిస్తోంది</translation> <translation id="4129129681837227511">మీ లాక్ స్క్రీన్లో నోటిఫికేషన్లను చూడటానికి, సెట్టింగ్ను మార్చేందుకు అన్లాక్ చేయండి</translation> <translation id="4146833061457621061">సంగీతాన్ని ప్లే చేయి</translation> <translation id="4149156641122542261"><ph name="DOMAIN" /> ద్వారా <ph name="DEVICE_TYPE" /> మేనేజ్ అవుతోంది</translation> @@ -329,6 +330,7 @@ <translation id="4217571870635786043">డిక్టేషన్</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">నోటిఫికేషన్ సెట్టింగ్లను చూపుతుంది. నోటిఫికేషన్లు ఆఫ్ చేయబడి ఉన్నాయి</translation> +<translation id="4267383818855338811">వర్చువల్ మెషీన్ మీ కెమెరాను ఉపయోగిస్తోంది</translation> <translation id="4269883910223712419">ఈ పరికర నిర్వాహకుడికి వీటిని చేయగల సామర్థ్యం ఉంది:</translation> <translation id="4279490309300973883">మిర్రరింగ్</translation> <translation id="4285498937028063278">అన్పిన్ చేయి</translation> @@ -364,6 +366,7 @@ <translation id="4513946894732546136">అభిప్రాయం</translation> <translation id="4527045527269911712">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది.</translation> <translation id="453661520163887813">పూర్తి కావడానికి <ph name="TIME" /> పడుతుంది</translation> +<translation id="4544483149666270818">రికార్డ్ చేయడానికి విండోను ఎంచుకోండి</translation> <translation id="4560576029703263363">ఆన్</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">పాస్వర్డ్ను దాచిపెట్టు</translation> @@ -403,6 +406,15 @@ <translation id="4918086044614829423">ఆమోదించు</translation> <translation id="4924411785043111640">మళ్లీ ప్రారంభించి, రీసెట్ చేయండి</translation> <translation id="4925542575807923399">బహుళ సైన్-ఇన్ సెషన్లో ఈ ఖాతా మొదటిగా సైన్-ఇన్ చేసిన ఖాతాగా ఉండటం ఈ ఖాతా నిర్వాహకులకు అవసరం.</translation> +<translation id="4942878304446937978">స్టేటస్ ట్రే, సమయం <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">క్యాప్చర్ చేయండి</translation> <translation id="495046168593986294">పైకి స్క్రోల్ చేయి</translation> <translation id="4961318399572185831">స్క్రీన్ ప్రసారం చేయండి</translation> <translation id="4969092041573468113"><ph name="HOURS" />గం <ph name="MINUTES" />ని <ph name="SECONDS" />సె</translation> @@ -448,6 +460,7 @@ <translation id="554893713779400387">డిక్టేషన్ను టోగుల్ చేయి</translation> <translation id="556042886152191864">బటన్</translation> <translation id="5571066253365925590">బ్లూటూత్ ప్రారంభించబడింది</translation> +<translation id="558849140439112033">క్యాప్చర్ చేసేందుకు ప్రదేశాన్ని ఎంచుకోవడానికి లాగండి</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">ప్రసంగ రూప అభిప్రాయాన్ని నిలిపివేయడానికి Ctrl + Alt + Z నొక్కండి.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -475,9 +488,11 @@ <translation id="5860033963881614850">ఆఫ్ అయ్యింది</translation> <translation id="5876666360658629066">తల్లిదండ్రుల కోడ్ను ఎంటర్ చేయండి</translation> <translation id="5895138241574237353">మళ్ళీ ప్రారంభించు</translation> +<translation id="589817443623831496">పాయింట్ స్కానింగ్</translation> <translation id="5901316534475909376">Shift+Esc</translation> <translation id="5909862606227538307">ఇన్యాక్టివ్ డెస్క్.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">ఫుల్ స్క్రీన్ను క్యాప్చర్ చేయడానికి ఎక్కడైనా క్లిక్ చేయండి</translation> <translation id="5916664084637901428">ఆన్ చేయి</translation> <translation id="5920710855273935292">మైక్ మ్యూట్ చేయబడింది.</translation> <translation id="594179686076170922">మీ ఫోన్కు కనెక్ట్ అవుతోంది...</translation> @@ -535,6 +550,7 @@ <translation id="6490471652906364588">USB-C పరికరం (కుడి పోర్ట్)</translation> <translation id="649452524636452238">స్మార్ట్ కార్డ్ పిన్</translation> <translation id="6501401484702599040"><ph name="RECEIVER_NAME" />కి స్క్రీన్ను ప్రసారం చేస్తున్నాము</translation> +<translation id="6520517963145875092">క్యాప్చర్ చేయడానికి విండోను ఎంచుకోండి</translation> <translation id="652139407789908527">ఈ అప్డేట్ సమయంలో మీ స్క్రీన్ సాధారణ కంటే ఎక్కువ సమయం పాటు (ఒక నిమిషం వరకు) బ్లాంక్గా అవుతుంది. అప్డేట్ ప్రోగ్రెస్లో ఉన్నప్పుడు దయచేసి పవర్ బటన్ను నొక్కవద్దు.</translation> <translation id="6528179044667508675">అంతరాయం వద్దు</translation> <translation id="65320610082834431">ఎమోజిలు</translation> @@ -563,6 +579,7 @@ <translation id="6751052314767925245">మీ నిర్వాహకుని ద్వారా అమలు చేయబడింది</translation> <translation id="6751826523481687655">పనితీరు స్థితిగతి కనుగొనడం ఆన్లో ఉంది</translation> <translation id="6752912906630585008">"<ph name="REMOVED_DESK" />" డెస్క్ తీసివేసి, "<ph name="RECEIVE_DESK" />" డెస్క్తో విలీనం చేయబడింది</translation> +<translation id="6757237461819837179">మీడియా ఏదీ ప్లే కావడం లేదు</translation> <translation id="6777216307882431711">కనెక్ట్ చేసిన USB-C పరికరాలకు పవర్ అందిస్తోంది</translation> <translation id="6790428901817661496">ప్లే చేయి</translation> <translation id="6803622936009808957">మద్దతు ఉన్న రిజల్యూషన్లు కనుగొనబడనందున ప్రదర్శనలను ప్రతిబింబించడం సాధ్యపడలేదు. దానికి బదులుగా విస్తారిత డెస్క్టాప్కు మారారు.</translation> @@ -611,6 +628,7 @@ <translation id="7348093485538360975">ఆన్-స్క్రీన్ కీబోర్డ్</translation> <translation id="735745346212279324">VPN డిస్కనెక్ట్ చేయబడింది</translation> <translation id="7377169924702866686">Caps Lock ఆన్లో ఉంది.</translation> +<translation id="7378203170292176219">రికార్డ్ చేసేందుకు ప్రదేశాన్ని ఎంచుకొవడానికి లాగండి</translation> <translation id="7378594059915113390">మీడియా నియంత్రణలు</translation> <translation id="7398254312354928459">నెట్వర్క్ కనెక్షన్ మార్చబడింది</translation> <translation id="7405710164030118432">పరికరాన్ని అన్లాక్ చేయడానికి, మీ Family Link తల్లి/తండ్రి యాక్సెస్ కోడ్ను నమోదు చేయండి</translation> @@ -637,6 +655,7 @@ <translation id="7618774594543487847">తటస్థం</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation> <translation id="7633755430369750696">సమీప షేరింగ్ సెట్టింగ్లను చూపించు.</translation> +<translation id="7641938616688887143">రికార్డ్</translation> <translation id="7642647758716480637"><ph name="NETWORK_NAME" /> సెట్టింగ్లను తెరవండి, <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (యజమాని)</translation> <translation id="7647488630410863958">మీ నోటిఫికేషన్లను వీక్షించడానికి పరికరాన్ని అన్లాక్ చేయండి</translation> @@ -733,6 +752,7 @@ <translation id="8563862697512465947">నోటిఫికేషన్ సెట్టింగ్లు</translation> <translation id="857201607579416096">స్క్రీన్లో కింద కుడి వైపు మూలకు మెనూ తరలించబడింది.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">ఫుల్ స్క్రీన్ను క్యాప్చర్ చేయడానికి ఎక్కడైనా ట్యాప్ చేయండి</translation> <translation id="8627191004499078455"><ph name="DEVICE_NAME" />కి కనెక్ట్ చేయబడింది</translation> <translation id="8631727435199967028">యాక్సెసిబిలిటీ సెట్టింగ్లు</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 9aadd90..d3cab70 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">Orta düzeyde sinyal</translation> <translation id="4112140312785995938">Geri Sar</translation> <translation id="4114315158543974537">Phone Hub'ı etkinleştirin</translation> +<translation id="4121728057981832179">Bir sanal makine mikrofonunuzu kullanıyor</translation> <translation id="4129129681837227511">Kilit ekranınızda bildirim göstermek için cihazın kilidini açarak ayarı değiştirin</translation> <translation id="4146833061457621061">Müzik çal</translation> <translation id="4149156641122542261"><ph name="DEVICE_TYPE" />, <ph name="DOMAIN" /> tarafından yönetilmektedir</translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">Dikte</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Bildirim ayarlarını göster. Bildirimler kapalı</translation> +<translation id="4267383818855338811">Bir sanal makine kameranızı kullanıyor</translation> <translation id="4269883910223712419">Bu cihazın yöneticisi şunları yapabilir:</translation> <translation id="4279490309300973883">Yansıtılıyor</translation> <translation id="4285498937028063278">Sabitlemeyi kaldır</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">Geri Bildirim</translation> <translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" adlı Bluetooth cihaz eşleme izni istiyor.</translation> <translation id="453661520163887813">Dolmasına <ph name="TIME" /> var</translation> +<translation id="4544483149666270818">Kaydedilecek pencereyi seçin</translation> <translation id="4560576029703263363">Açık</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Şifreyi gizle</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">Kabul et</translation> <translation id="4924411785043111640">Yeniden başlat ve sıfırla</translation> <translation id="4925542575807923399">Bu hesabın yöneticisi hesabın bir çoklu oturumda ilk oturum açan hesap olmasını gerektiriyor.</translation> +<translation id="4942878304446937978">Durum tepsisi, zaman <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Fotoğraf Çek</translation> <translation id="495046168593986294">Yukarı kaydır</translation> <translation id="4961318399572185831">Ekranı yayınla</translation> <translation id="4969092041573468113"><ph name="HOURS" /> sa. <ph name="MINUTES" /> dk. <ph name="SECONDS" /> sn.</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">Dikte özelliğini aç/kapat</translation> <translation id="556042886152191864">Düğme</translation> <translation id="5571066253365925590">Bluetooth etkin</translation> +<translation id="558849140439112033">Ekran görüntüsü alınacak alanı seçmek için sürükleyin</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Sesli geri bildirimi devre dışı bırakmak için Ctrl + Alt + Z tuşlarına basın.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">Kapalı</translation> <translation id="5876666360658629066">Ebeveyn kodunu girin</translation> <translation id="5895138241574237353">Yeniden başlat</translation> +<translation id="589817443623831496">Nokta taraması</translation> <translation id="5901316534475909376">Üst Karakter+Esc</translation> <translation id="5909862606227538307">Masa etkin değil.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Tam ekran görüntüsü almak için herhangi bir yeri tıklayın</translation> <translation id="5916664084637901428">Açık</translation> <translation id="5920710855273935292">Mikrofonun sesi kapalı.</translation> <translation id="594179686076170922">Telefonunuza bağlanılıyor...</translation> @@ -535,6 +550,7 @@ <translation id="6490471652906364588">USB-C cihaz (sağ bağlantı noktası)</translation> <translation id="649452524636452238">Akıllı kart PIN'i</translation> <translation id="6501401484702599040">Ekran, <ph name="RECEIVER_NAME" /> üzerinde yayınlanıyor</translation> +<translation id="6520517963145875092">Ekran görüntüsünü almak için pencere seçin</translation> <translation id="652139407789908527">Bu güncelleme sırasında normalden daha uzun süre (bir dakikaya kadar) boş ekran görüntülenebilir. Güncelleme devam ederken lütfen güç düğmesine basmayın.</translation> <translation id="6528179044667508675">Rahatsız etme</translation> <translation id="65320610082834431">Emoji'ler</translation> @@ -563,6 +579,7 @@ <translation id="6751052314767925245">Yöneticiniz tarafınızdan zorunlu tutuldu</translation> <translation id="6751826523481687655">Performans izleme açık</translation> <translation id="6752912906630585008">Masa <ph name="REMOVED_DESK" /> kaldırılarak Masa <ph name="RECEIVE_DESK" /> ile birleştirildi</translation> +<translation id="6757237461819837179">Medya oynatılmıyor</translation> <translation id="6777216307882431711">Bağlı USB-C cihazlarına güç sağlıyor</translation> <translation id="6790428901817661496">Oynat</translation> <translation id="6803622936009808957">Desteklenen bir çözünürlük bulunamadığı için ekranlar yansıtılamıyor. Bunun yerine genişletilmiş masaüstüne geçiliyor.</translation> @@ -611,6 +628,7 @@ <translation id="7348093485538360975">Ekran klavyesi</translation> <translation id="735745346212279324">VPN bağlantısı kesildi</translation> <translation id="7377169924702866686">Caps Lock açık.</translation> +<translation id="7378203170292176219">Kaydedilecek alanı seçmek için sürükleyin</translation> <translation id="7378594059915113390">Medya Denetimleri</translation> <translation id="7398254312354928459">Ağ bağlantısı değiştirildi</translation> <translation id="7405710164030118432">Bu cihazın kilidini açmak için Family Link ebeveyn erişim kodunuzu girin</translation> @@ -637,6 +655,7 @@ <translation id="7618774594543487847">Normal</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation> <translation id="7633755430369750696">Yakındakilerle Paylaşım ayarlarını gösterir.</translation> +<translation id="7641938616688887143">Kaydet</translation> <translation id="7642647758716480637"><ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> için ayarları aç</translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (cihaz sahibi)</translation> <translation id="7647488630410863958">Bildirimlerinizi görüntülemek için cihazınızın kilidini açın</translation> @@ -733,6 +752,7 @@ <translation id="8563862697512465947">Bildirim Ayarları</translation> <translation id="857201607579416096">Menü, ekranın sağ alt köşesine taşındı.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Tam ekran görüntüsü almak için herhangi bir yere dokunun</translation> <translation id="8627191004499078455"><ph name="DEVICE_NAME" /> cihazına bağlandı</translation> <translation id="8631727435199967028">Erişebilirlik Ayarları</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, <ph name="SIGNAL_STRENGTH" /> Sinyal Gücü, Yöneticiniz tarafından yönetiliyor</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index d47cb34..42ab060d 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">Signal o‘rtacha</translation> <translation id="4112140312785995938">Orqaga qaytarish</translation> <translation id="4114315158543974537">Phone Hub funksiyasini yoqish</translation> +<translation id="4121728057981832179">Virtual mashina mikrofondan foydalanmoqda</translation> <translation id="4129129681837227511">Bildirishnomalar qulflangan ekranda chiqishi uchun avval qulfdan chiqaring va sozlamani yangilang</translation> <translation id="4146833061457621061">Musiqani tinglash</translation> <translation id="4149156641122542261">Bu <ph name="DEVICE_TYPE" /> qurilmasi <ph name="DOMAIN" /> domeni tomonidan boshqariladi</translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">Ovoz bilan yozish</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Bildirishnoma sozlamalarini ochish. Bildirishnomalar yoqilmagan</translation> +<translation id="4267383818855338811">Virtual mashina kameradan foydalanmoqda</translation> <translation id="4269883910223712419">Bu qurilma administratorining vakolatlari:</translation> <translation id="4279490309300973883">Ekran nusxasini boshqa ekranga uzatish</translation> <translation id="4285498937028063278">Olib tashlash</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">Fikr-mulohaza</translation> <translation id="4527045527269911712">“<ph name="DEVICE_NAME" />” qurilmasi Bluetooth orqali bog‘lanishga ruxsat so‘ramoqda.</translation> <translation id="453661520163887813">To‘liq quvvatlanishiga <ph name="TIME" /> qoldi</translation> +<translation id="4544483149666270818">Yozib olish uchun oynani tanlang</translation> <translation id="4560576029703263363">Yoniq</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Parolni berkitish</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">Qabul qilish</translation> <translation id="4924411785043111640">Qayta ishga tushirish va asliga qaytarish</translation> <translation id="4925542575807923399">Bu hisobning administratori ko‘plab tizimga kirish seanslarida birinchi bo‘lib shu hisobga kirishni talab qiladi.</translation> +<translation id="4942878304446937978">Holat qatori, vaqt: <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Tasvirga olish</translation> <translation id="495046168593986294">Tepaga chiqish</translation> <translation id="4961318399572185831">Ekranni translatsiya qilish</translation> <translation id="4969092041573468113"><ph name="HOURS" />s <ph name="MINUTES" />d <ph name="SECONDS" />s</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">Diktovkani yoqish</translation> <translation id="556042886152191864">Tugma</translation> <translation id="5571066253365925590">Bluetooth yoniq</translation> +<translation id="558849140439112033">Rasmga olinadigan hududni tanlash uchun suring</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Ovozli fikr-mulohaza bildirishni o‘chirish uchun Ctrl + Alt + Z tugmalarini birga bosing.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">O‘chiq</translation> <translation id="5876666360658629066">Ota-ona kodini kiriting</translation> <translation id="5895138241574237353">Qayta ishga tushirish</translation> +<translation id="589817443623831496">Nuqtali skanerlash</translation> <translation id="5901316534475909376">Shift + Esc</translation> <translation id="5909862606227538307">Nofaol ish stoli.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Butun ekranni tasvirga olish uchun istalgan joyga bosing</translation> <translation id="5916664084637901428">Yoniq</translation> <translation id="5920710855273935292">Ovozsiz.</translation> <translation id="594179686076170922">Telefonga ulanilmoqda...</translation> @@ -534,6 +549,7 @@ <translation id="6490471652906364588">USB-C qurilma (o‘ng port)</translation> <translation id="649452524636452238">Smart kartaning PIN kodi</translation> <translation id="6501401484702599040">Ekran “<ph name="RECEIVER_NAME" />” qurilmasiga translatsiya qilinmoqda</translation> +<translation id="6520517963145875092">Suratga olish uchun oynani tanlang</translation> <translation id="652139407789908527">Ekran bu safar yangilanish vaqtida odatdagidan uzoqroq yonmay turishi mumkin. Yangilanish vaqtida quvvat tugmasini bosmay turing.</translation> <translation id="6528179044667508675">Bezovta qilinmasin</translation> <translation id="65320610082834431">Emojilar</translation> @@ -562,6 +578,7 @@ <translation id="6751052314767925245">Administrator tomonidan majburiy sozlangan</translation> <translation id="6751826523481687655">Unumdorlik kuzatuvi yoniq</translation> <translation id="6752912906630585008"><ph name="REMOVED_DESK" /> ish stoli olib tashlandi va oynalari <ph name="RECEIVE_DESK" /> ish stoliga birlashtirildi</translation> +<translation id="6757237461819837179">Hech narsa ijro qilinmayapti</translation> <translation id="6777216307882431711">Ulangan USB-C qurilmalar quvvatlanmoqda</translation> <translation id="6790428901817661496">Ijro etish</translation> <translation id="6803622936009808957">Ekran tasvirini nusxalab bo‘lmadi, chunki ko‘rsatilgan ekran sig‘imi qo‘llab-quvvatlanmaydi. Kengaytirilgan ish stoli rejimi yoqildi.</translation> @@ -610,6 +627,7 @@ <translation id="7348093485538360975">Ekran klaviaturasi</translation> <translation id="735745346212279324">VPN aloqasi uzildi</translation> <translation id="7377169924702866686">Caps Lock yoniq.</translation> +<translation id="7378203170292176219">Yozib olinadigan hududni tanlash uchun suring</translation> <translation id="7378594059915113390">Media boshqaruv elementlari</translation> <translation id="7398254312354928459">Boshqa tarmoqqa ulanildi</translation> <translation id="7405710164030118432">Bu qurilma qulfini ochish uchun Family Link ota-ona kodini kiriting</translation> @@ -636,6 +654,7 @@ <translation id="7618774594543487847">Neytral</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />° F</translation> <translation id="7633755430369750696">Yaqin-atrofga yuborish sozlamalarini ochish.</translation> +<translation id="7641938616688887143">Yozib olish</translation> <translation id="7642647758716480637"><ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /> sozlamalarini ochish</translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (egasi)</translation> <translation id="7647488630410863958">Bildirishnomalarni ko‘rish uchun qurilmangizni qulfdan chiqaring</translation> @@ -732,6 +751,7 @@ <translation id="8563862697512465947">Bildirishnoma sozlamalari</translation> <translation id="857201607579416096">Menyu ekranning quyi oʻng burchagiga surildi.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Butun ekranni rasmga olish uchun ekranning istalgan joyiga bosing</translation> <translation id="8627191004499078455"><ph name="DEVICE_NAME" /> qurilmasiga ulandi</translation> <translation id="8631727435199967028">Maxsus imkoniyatlar sozlamalari</translation> <translation id="8637598503828012618">Himoya: <ph name="CONNECTION_STATUS" />, Signal darajasi: <ph name="SIGNAL_STRENGTH" />, Administrator boshqaruvida</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index cf650fb3..3e3027f 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -314,6 +314,7 @@ <translation id="4072264167173457037">Tín hiệu trung bình</translation> <translation id="4112140312785995938">Tua lùi</translation> <translation id="4114315158543974537">Bật Phone Hub</translation> +<translation id="4121728057981832179">Một máy ảo đang sử dụng micrô của bạn</translation> <translation id="4129129681837227511">Để xem thông báo trên màn hình khóa, hãy mở khóa thiết bị để thay đổi tùy chọn cài đặt này</translation> <translation id="4146833061457621061">Phát nhạc</translation> <translation id="4149156641122542261"><ph name="DOMAIN" /> quản lý <ph name="DEVICE_TYPE" /></translation> @@ -328,6 +329,7 @@ <translation id="4217571870635786043">Nhập bằng giọng nói</translation> <translation id="4239069858505860023">GPRS</translation> <translation id="4261870227682513959">Hiển thị các tùy chọn cài đặt thông báo. Thông báo hiện đang tắt</translation> +<translation id="4267383818855338811">Một máy ảo đang sử dụng máy ảnh của bạn</translation> <translation id="4269883910223712419">Quản trị viên của thiết bị này có thể:</translation> <translation id="4279490309300973883">Đang phản chiếu</translation> <translation id="4285498937028063278">Bỏ ghim</translation> @@ -363,6 +365,7 @@ <translation id="4513946894732546136">Phản hồi</translation> <translation id="4527045527269911712">Thiết bị Bluetooth "<ph name="DEVICE_NAME" />"muốn được phép ghép nối.</translation> <translation id="453661520163887813"><ph name="TIME" /> cho đến khi đầy</translation> +<translation id="4544483149666270818">Chọn một cửa sổ để quay</translation> <translation id="4560576029703263363">Đang bật</translation> <translation id="4561267230861221837">3G</translation> <translation id="4565377596337484307">Ẩn mật khẩu</translation> @@ -402,6 +405,15 @@ <translation id="4918086044614829423">Chấp nhận</translation> <translation id="4924411785043111640">Khởi động lại và đặt lại</translation> <translation id="4925542575807923399">Quản trị viên của tài khoản này yêu cầu tài khoản này là tài khoản đăng nhập đầu tiên trong phiên đăng nhập nhiều tài khoản.</translation> +<translation id="4942878304446937978">Khay trạng thái, thời gian <ph name="TIME" />, + <ph name="BATTERY" /> + <ph name="NETWORK" />, + <ph name="MIC" />, + <ph name="CAMERA" />, + <ph name="NOTIFICATION" />, + <ph name="IME" /> + <ph name="LOCALE" /></translation> +<translation id="4946376291507881335">Chụp</translation> <translation id="495046168593986294">Cuộn lên</translation> <translation id="4961318399572185831">Truyền màn hình</translation> <translation id="4969092041573468113"><ph name="HOURS" /> giờ <ph name="MINUTES" /> phút <ph name="SECONDS" /> giây</translation> @@ -447,6 +459,7 @@ <translation id="554893713779400387">Bật/tắt tính năng nhập bằng giọng nói</translation> <translation id="556042886152191864">Nút</translation> <translation id="5571066253365925590">Đã bật bluetooth</translation> +<translation id="558849140439112033">Kéo để chọn một vùng sẽ chụp</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Nhấn Ctrl + Alt + Z để tắt phản hồi bằng giọng nói.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -474,9 +487,11 @@ <translation id="5860033963881614850">Tắt</translation> <translation id="5876666360658629066">Nhập mã dành cho cha mẹ</translation> <translation id="5895138241574237353">Khởi động lại</translation> +<translation id="589817443623831496">Quét điểm</translation> <translation id="5901316534475909376">Shift+Esc</translation> <translation id="5909862606227538307">Không gian làm việc không hoạt động.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> +<translation id="5915278665499293471">Nhấp vào bất cứ đâu để chụp toàn màn hình</translation> <translation id="5916664084637901428">Bật</translation> <translation id="5920710855273935292">Micrô đang tắt.</translation> <translation id="594179686076170922">Đang kết nối với điện thoại của bạn...</translation> @@ -534,6 +549,7 @@ <translation id="6490471652906364588">Thiết bị USB-C (cổng bên phải)</translation> <translation id="649452524636452238">Mã PIN của thẻ thông minh</translation> <translation id="6501401484702599040">Đang truyền màn hình tới <ph name="RECEIVER_NAME" /></translation> +<translation id="6520517963145875092">Chọn một cửa sổ để chụp</translation> <translation id="652139407789908527">Màn hình của bạn sẽ trống lâu hơn bình thường (tối đa là 1 phút) trong quá trình cập nhật này. Vui lòng không nhấn nút nguồn trong khi đang cập nhật.</translation> <translation id="6528179044667508675">Ko làm phiền</translation> <translation id="65320610082834431">Biểu tượng cảm xúc</translation> @@ -562,6 +578,7 @@ <translation id="6751052314767925245">Do quản trị viên thực thi</translation> <translation id="6751826523481687655">Tính năng theo dõi hiệu suất đang bật</translation> <translation id="6752912906630585008">Đã xóa và hợp nhất Không gian làm việc <ph name="REMOVED_DESK" /> với Không gian làm việc <ph name="RECEIVE_DESK" /></translation> +<translation id="6757237461819837179">Hiện không phát nội dung nghe nhìn nào</translation> <translation id="6777216307882431711">Đang cấp nguồn cho các thiết bị USB-C đã kết nối</translation> <translation id="6790428901817661496">Phát</translation> <translation id="6803622936009808957">Không thể phản chiếu màn hình do không tìm thấy độ phân giải được hỗ trợ. Thay vào đó, đã chuyển sang chế độ màn hình mở rộng.</translation> @@ -610,6 +627,7 @@ <translation id="7348093485538360975">Bàn phím ảo</translation> <translation id="735745346212279324">Đã ngắt kết nối VPN</translation> <translation id="7377169924702866686">Caps Lock đang bật.</translation> +<translation id="7378203170292176219">Kéo để chọn một vùng sẽ quay</translation> <translation id="7378594059915113390">Các chức năng điều khiển nội dung đa phương tiện</translation> <translation id="7398254312354928459">Đã chuyển kết nối mạng</translation> <translation id="7405710164030118432">Để mở khóa thiết bị này, hãy nhập mã truy cập Family Link dành cho cha mẹ của bạn</translation> @@ -636,6 +654,7 @@ <translation id="7618774594543487847">Trung tính</translation> <translation id="7624117708979618027"><ph name="TEMPERATURE_F" />°F</translation> <translation id="7633755430369750696">Hiện tùy chọn cài đặt Chia sẻ lân cận.</translation> +<translation id="7641938616688887143">Quay</translation> <translation id="7642647758716480637">Mở phần cài đặt <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" /></translation> <translation id="7645176681409127223"><ph name="USER_NAME" /> (chủ sở hữu)</translation> <translation id="7647488630410863958">Mở khóa thiết bị để xem thông báo của bạn</translation> @@ -732,6 +751,7 @@ <translation id="8563862697512465947">Cài đặt Thông báo</translation> <translation id="857201607579416096">Đã di chuyển trình đơn vào góc dưới cùng bên phải màn hình.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> +<translation id="861041328460089089">Nhấn vào bất cứ đâu để chụp toàn màn hình</translation> <translation id="8627191004499078455">Đã kết nối với <ph name="DEVICE_NAME" /></translation> <translation id="8631727435199967028">Cài đặt hỗ trợ tiếp cận</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, Cường độ tín hiệu <ph name="SIGNAL_STRENGTH" />, Do quản trị viên của bạn quản lý</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb index 15f889b..f883133 100644 --- a/ash/strings/ash_strings_zu.xtb +++ b/ash/strings/ash_strings_zu.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144">I-<ph name="DISPLAY_NAME" /> ayisekeli i-<ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Ukulungiswa kuye kwashintshelwa ku-<ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Chofoza okuthi qinisekisa ukuze ugcine izinguquko. Amasethingi angaphambilini azobuyiselwa ku-<ph name="TIMEOUT_SECONDS" />.</translation> <translation id="1919743966458266018">Isinqamuleli sokuvula isiphathi somsebenzi sishintshile. Sicela usebenzise i-<ph name="NEW_SHORTCUT" /> esikhundleni se-<ph name="OLD_SHORTCUT" />.</translation> <translation id="1923539912171292317">Ukuchofozwa okuzenzakalelayo</translation> +<translation id="1924640696879807758">Kusuka efonini</translation> <translation id="1928739107511554905">Ukuze uthole isibuyekezo, sebenzisa isikrini sokuthinta ukuze uqalise i-Chromebook yakho ngekhibhodi enamathiselwe.</translation> <translation id="1951012854035635156">Umsizi</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">Umlawuli wale akhawunti uyekise ukuvumela ukungena ngemvume okuningi.</translation> <translation id="7933084174919150729">Umsizi we-Google utholakalela kuphela iphrofayela eyinhloko.</translation> <translation id="79341161159229895">I-akhawunti iphethwe ngu-<ph name="FIRST_PARENT_EMAIL" /> no-<ph name="SECOND_PARENT_EMAIL" /></translation> +<translation id="793716872548410480">Cindezela u-<ph name="SHORTCUT_KEY_NAME" /> + V ukubuka ibhodi lakho lokunamathisela. Izinto ezi-5 zokugcina ozikopishile zilondolozwe ebhodini lakho lokunamathisela.</translation> <translation id="7955885781510802139">Imodi yokugqama okuphezulu</translation> <translation id="7977927628060636163">Isesha amanethiwekhi eselula...</translation> <translation id="7980780401175799550">Zama izindlela ezintsha zokuzulazula ku-Chrome OS</translation>
diff --git a/ash/style/ash_color_provider.cc b/ash/style/ash_color_provider.cc index a043dc285..4c83d8d6d 100644 --- a/ash/style/ash_color_provider.cc +++ b/ash/style/ash_color_provider.cc
@@ -77,6 +77,42 @@ ui::NativeTheme::GetInstanceForNativeUi()->NotifyObservers(); } +// Get the corresponding ColorName for |type|. ColorName is an enum in +// cros_colors.h file that is generated from cros_colors.json5, which includes +// the color IDs and colors that will be used by ChromeOS WebUI. +ColorName TypeToColorName(AshColorProvider::ContentLayerType type) { + switch (type) { + case AshColorProvider::ContentLayerType::kTextColorPrimary: + return ColorName::kTextColorPrimary; + case AshColorProvider::ContentLayerType::kTextColorSecondary: + return ColorName::kTextColorSecondary; + case AshColorProvider::ContentLayerType::kTextColorAlert: + return ColorName::kTextColorAlert; + case AshColorProvider::ContentLayerType::kTextColorWarning: + return ColorName::kTextColorWarning; + case AshColorProvider::ContentLayerType::kTextColorPositive: + return ColorName::kTextColorPositive; + case AshColorProvider::ContentLayerType::kIconColorPrimary: + return ColorName::kIconColorPrimary; + case AshColorProvider::ContentLayerType::kIconColorAlert: + return ColorName::kIconColorAlert; + case AshColorProvider::ContentLayerType::kIconColorWarning: + return ColorName::kIconColorWarning; + case AshColorProvider::ContentLayerType::kIconColorPositive: + return ColorName::kIconColorPositive; + default: + DCHECK_EQ(AshColorProvider::ContentLayerType::kIconColorProminent, type); + return ColorName::kIconColorProminent; + } +} + +// Get the color from cros_colors.h header file that is generated from +// cros_colors.json5. Colors there will also be used by ChromeOS WebUI. +SkColor ResolveColor(AshColorProvider::ContentLayerType type, + bool is_dark_mode) { + return cros_colors::ResolveColor(TypeToColorName(type), is_dark_mode); +} + } // namespace AshColorProvider::AshColorProvider() { @@ -177,60 +213,27 @@ const bool is_dark_mode = IsDarkModeEnabled(); switch (type) { case ContentLayerType::kSeparatorColor: + case ContentLayerType::kShelfHandleColor: return is_dark_mode ? SkColorSetA(SK_ColorWHITE, 0x24) : SkColorSetA(SK_ColorBLACK, 0x24); - case ContentLayerType::kTextColorPrimary: - return cros_colors::ResolveColor(ColorName::kTextColorPrimary, - is_dark_mode); - case ContentLayerType::kTextColorSecondary: - return cros_colors::ResolveColor(ColorName::kTextColorSecondary, - is_dark_mode); - case ContentLayerType::kTextColorAlert: - return cros_colors::ResolveColor(ColorName::kTextColorAlert, - is_dark_mode); - case ContentLayerType::kTextColorWarning: - return cros_colors::ResolveColor(ColorName::kTextColorWarning, - is_dark_mode); - case ContentLayerType::kTextColorPositive: - return cros_colors::ResolveColor(ColorName::kTextColorPositive, - is_dark_mode); - case ContentLayerType::kIconColorPrimary: - return cros_colors::ResolveColor(ColorName::kIconColorPrimary, - is_dark_mode); case ContentLayerType::kIconColorSecondary: return gfx::kGoogleGrey500; - case ContentLayerType::kIconColorAlert: - return cros_colors::ResolveColor(ColorName::kIconColorAlert, - is_dark_mode); - case ContentLayerType::kIconColorWarning: - return cros_colors::ResolveColor(ColorName::kIconColorWarning, - is_dark_mode); - case ContentLayerType::kIconColorPositive: - return cros_colors::ResolveColor(ColorName::kIconColorPositive, - is_dark_mode); - case ContentLayerType::kIconColorProminent: - case ContentLayerType::kSliderThumbColorEnabled: - return cros_colors::ResolveColor(ColorName::kIconColorProminent, - is_dark_mode); case ContentLayerType::kButtonLabelColor: case ContentLayerType::kButtonIconColor: + case ContentLayerType::kAppStateIndicatorColor: + case ContentLayerType::kSliderColorInactive: return is_dark_mode ? gfx::kGoogleGrey200 : gfx::kGoogleGrey700; case ContentLayerType::kButtonLabelColorBlue: + case ContentLayerType::kSliderColorActive: return is_dark_mode ? gfx::kGoogleBlue300 : gfx::kGoogleBlue600; case ContentLayerType::kButtonLabelColorPrimary: case ContentLayerType::kButtonIconColorPrimary: return is_dark_mode ? gfx::kGoogleGrey900 : gfx::kGoogleGrey200; - case ContentLayerType::kSliderThumbColorDisabled: - return is_dark_mode ? gfx::kGoogleGrey600 : gfx::kGoogleGrey600; - case ContentLayerType::kAppStateIndicatorColor: - return is_dark_mode ? gfx::kGoogleGrey200 : gfx::kGoogleGrey700; case ContentLayerType::kAppStateIndicatorColorInactive: return GetDisabledColor( GetContentLayerColor(ContentLayerType::kAppStateIndicatorColor)); - case ContentLayerType::kShelfHandleColor: { - return is_dark_mode ? SkColorSetA(SK_ColorWHITE, 0x24) - : SkColorSetA(SK_ColorBLACK, 0x24); - } + default: + return ResolveColor(type, is_dark_mode); } }
diff --git a/ash/style/ash_color_provider.h b/ash/style/ash_color_provider.h index 2c4bf68..ddeb689 100644 --- a/ash/style/ash_color_provider.h +++ b/ash/style/ash_color_provider.h
@@ -106,16 +106,16 @@ kButtonIconColor, kButtonIconColorPrimary, - // Color for sliders (volume, brightness etc.) - kSliderThumbColorEnabled, - kSliderThumbColorDisabled, - // Color for app state indicator. kAppStateIndicatorColor, kAppStateIndicatorColorInactive, // Color for the shelf drag handle in tablet mode. kShelfHandleColor, + + // Color for slider. + kSliderColorActive, + kSliderColorInactive }; // Types of ash styled buttons.
diff --git a/ash/style/default_color_constants.h b/ash/style/default_color_constants.h index 6ff2b49d..1a13e10 100644 --- a/ash/style/default_color_constants.h +++ b/ash/style/default_color_constants.h
@@ -37,4 +37,15 @@ constexpr SkColor kCircleColor = SK_ColorWHITE; constexpr SkColor kLabelBackgroundColor = SkColorSetA(SK_ColorBLACK, 0xDE); +// Colors for split view. +constexpr SkColor kSplitviewDividerColor = SK_ColorBLACK; +constexpr SkColor kSplitviewDividerHandlerBarColor = SK_ColorWHITE; +constexpr SkColor kSplitviewLabelBackgroundColor = + SkColorSetA(SK_ColorBLACK, 0xDE); +constexpr SkColor kSplitviewLabelEnabledColor = SK_ColorWHITE; +constexpr SkColor kSplitviewBlackScrimLayerColor = SK_ColorBLACK; +constexpr SkColor kSplitviewHighlightViewBackgroundColor = SK_ColorWHITE; +constexpr SkColor kSplitviewHighlightViewBackgroundCannotSnapColor = + SK_ColorBLACK; + #endif // ASH_STYLE_DEFAULT_COLOR_CONSTANTS_H_
diff --git a/ash/style/default_colors.cc b/ash/style/default_colors.cc index 13a0e93..00bf295 100644 --- a/ash/style/default_colors.cc +++ b/ash/style/default_colors.cc
@@ -16,6 +16,13 @@ return AshColorProvider::Get()->GetShieldLayerColor(type); } +SkColor DeprecatedGetBackgroundColor(SkColor default_color) { + if (!features::IsDarkLightModeEnabled()) + return default_color; + + return AshColorProvider::Get()->GetBackgroundColor(); +} + SkColor DeprecatedGetBaseLayerColor(AshColorProvider::BaseLayerType type, SkColor default_color) { if (!features::IsDarkLightModeEnabled())
diff --git a/ash/style/default_colors.h b/ash/style/default_colors.h index caa1226a..9b3c0022 100644 --- a/ash/style/default_colors.h +++ b/ash/style/default_colors.h
@@ -17,6 +17,7 @@ // to benefit future maintenance. SkColor DeprecatedGetShieldLayerColor(AshColorProvider::ShieldLayerType type, SkColor default_color); +SkColor DeprecatedGetBackgroundColor(SkColor default_color); SkColor DeprecatedGetBaseLayerColor(AshColorProvider::BaseLayerType type, SkColor default_color); SkColor DeprecatedGetControlsLayerColor(
diff --git a/ash/system/bloom/bloom_tray.cc b/ash/system/bloom/bloom_tray.cc index 13491d59..6b0a01b4 100644 --- a/ash/system/bloom/bloom_tray.cc +++ b/ash/system/bloom/bloom_tray.cc
@@ -18,6 +18,7 @@ #include "chromeos/components/bloom/public/cpp/bloom_interaction_resolution.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/controls/image_view.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/phonehub/bluetooth_disabled_view.cc b/ash/system/phonehub/bluetooth_disabled_view.cc index adb8bf26..72fac97 100644 --- a/ash/system/phonehub/bluetooth_disabled_view.cc +++ b/ash/system/phonehub/bluetooth_disabled_view.cc
@@ -13,6 +13,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/phonehub/connection_error_view.cc b/ash/system/phonehub/connection_error_view.cc index db105b4..b222d02 100644 --- a/ash/system/phonehub/connection_error_view.cc +++ b/ash/system/phonehub/connection_error_view.cc
@@ -17,6 +17,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/phonehub/initial_connecting_view.cc b/ash/system/phonehub/initial_connecting_view.cc index cdd1093..ab93e35 100644 --- a/ash/system/phonehub/initial_connecting_view.cc +++ b/ash/system/phonehub/initial_connecting_view.cc
@@ -15,6 +15,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/phonehub/interstitial_view_button.cc b/ash/system/phonehub/interstitial_view_button.cc index e947ae95..5327898d 100644 --- a/ash/system/phonehub/interstitial_view_button.cc +++ b/ash/system/phonehub/interstitial_view_button.cc
@@ -6,6 +6,7 @@ #include "ash/system/unified/rounded_label_button.h" #include "ui/views/controls/button/label_button.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/phonehub/notification_opt_in_view.cc b/ash/system/phonehub/notification_opt_in_view.cc index 522cd40..cc331b3 100644 --- a/ash/system/phonehub/notification_opt_in_view.cc +++ b/ash/system/phonehub/notification_opt_in_view.cc
@@ -23,6 +23,7 @@ #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "url/gurl.h" namespace ash {
diff --git a/ash/system/phonehub/onboarding_view.cc b/ash/system/phonehub/onboarding_view.cc index 5785eba..fe4bc5be 100644 --- a/ash/system/phonehub/onboarding_view.cc +++ b/ash/system/phonehub/onboarding_view.cc
@@ -25,6 +25,7 @@ #include "ui/views/controls/button/button.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/phonehub/phone_hub_interstitial_view.cc b/ash/system/phonehub/phone_hub_interstitial_view.cc index 586d032..0ef670f 100644 --- a/ash/system/phonehub/phone_hub_interstitial_view.cc +++ b/ash/system/phonehub/phone_hub_interstitial_view.cc
@@ -25,6 +25,7 @@ #include "ui/views/controls/progress_bar.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace ash {
diff --git a/ash/system/unified/unified_slider_view.cc b/ash/system/unified/unified_slider_view.cc index 90be5b0..200c759 100644 --- a/ash/system/unified/unified_slider_view.cc +++ b/ash/system/unified/unified_slider_view.cc
@@ -40,13 +40,17 @@ SkColor SystemSlider::GetThumbColor() const { using Type = AshColorProvider::ContentLayerType; return AshColorProvider::Get()->GetContentLayerColor( - (style() == RenderingStyle::kMinimalStyle) - ? Type::kSliderThumbColorDisabled - : Type::kSliderThumbColorEnabled); + (style() == RenderingStyle::kMinimalStyle) ? Type::kSliderColorInactive + : Type::kSliderColorActive); } SkColor SystemSlider::GetTroughColor() const { - return AshColorProvider::Get()->GetDisabledColor(GetThumbColor()); + return AshColorProvider::Get()->GetSecondToneColor(GetThumbColor()); +} + +void SystemSlider::OnThemeChanged() { + views::Slider::OnThemeChanged(); + SchedulePaint(); } ReadOnlySlider::ReadOnlySlider() : SystemSlider() {}
diff --git a/ash/system/unified/unified_slider_view.h b/ash/system/unified/unified_slider_view.h index 49e1fa83..59b5289e 100644 --- a/ash/system/unified/unified_slider_view.h +++ b/ash/system/unified/unified_slider_view.h
@@ -29,8 +29,10 @@ explicit SystemSlider(views::SliderListener* listener = nullptr); private: + // views::Slider: SkColor GetThumbColor() const override; SkColor GetTroughColor() const override; + void OnThemeChanged() override; }; // A slider that ignores inputs.
diff --git a/ash/wm/overview/overview_item.cc b/ash/wm/overview/overview_item.cc index a90fd6a..c9620ccd 100644 --- a/ash/wm/overview/overview_item.cc +++ b/ash/wm/overview/overview_item.cc
@@ -14,6 +14,8 @@ #include "ash/scoped_animation_disabler.h" #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" +#include "ash/style/default_color_constants.h" +#include "ash/style/default_colors.h" #include "ash/wm/desks/desks_util.h" #include "ash/wm/drag_window_controller.h" #include "ash/wm/overview/delayed_animation_observer_impl.h" @@ -507,8 +509,12 @@ RoundedLabelWidget::InitParams params; params.horizontal_padding = kSplitviewLabelHorizontalInsetDp; params.vertical_padding = kSplitviewLabelVerticalInsetDp; - params.background_color = kSplitviewLabelBackgroundColor; - params.foreground_color = kSplitviewLabelEnabledColor; + params.background_color = DeprecatedGetBaseLayerColor( + AshColorProvider::BaseLayerType::kTransparent80, + kSplitviewLabelBackgroundColor); + params.foreground_color = DeprecatedGetContentLayerColor( + AshColorProvider::ContentLayerType::kTextColorPrimary, + kSplitviewLabelEnabledColor); params.rounding_dp = kSplitviewLabelRoundRectRadiusDp; params.preferred_height = kSplitviewLabelPreferredHeightDp; params.message_id = IDS_ASH_SPLIT_VIEW_CANNOT_SNAP;
diff --git a/ash/wm/splitview/split_view_constants.h b/ash/wm/splitview/split_view_constants.h index 86411c5..c8ccd09f 100644 --- a/ash/wm/splitview/split_view_constants.h +++ b/ash/wm/splitview/split_view_constants.h
@@ -28,19 +28,6 @@ // The amount of round applied to the corners of a split view label. constexpr int kSplitviewLabelRoundRectRadiusDp = 12; -// Color of split view label text. -constexpr SkColor kSplitviewLabelEnabledColor = SK_ColorWHITE; - -// The color for a split view label. -constexpr SkColor kSplitviewLabelBackgroundColor = - SkColorSetA(SK_ColorBLACK, 0xDE); - -// The color of the divider. -constexpr SkColor kSplitviewDividerColor = SK_ColorBLACK; - -// The color of the divider's handler. -constexpr SkColor kSplitviewWhiteBarColor = SK_ColorWHITE; - // The thickness of the divider when it is not being dragged. constexpr int kSplitviewDividerShortSideLength = 8; @@ -83,9 +70,12 @@ // The opacity of the drag-to-snap or cannot-snap drag indicator. constexpr float kHighlightOpacity = 0.3f; +constexpr float kDarkLightHighlightOpacity = 0.4f; +constexpr float kDarkLightHighlightCannotSnapOpacity = 0.2f; // The opacity of the split view snap preview area. constexpr float kPreviewAreaHighlightOpacity = 0.18f; +constexpr float kDarkLightPreviewAreaHighlightOpacity = 0.2f; } // namespace ash
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc index 398bba7..55fd0e65 100644 --- a/ash/wm/splitview/split_view_controller.cc +++ b/ash/wm/splitview/split_view_controller.cc
@@ -19,6 +19,8 @@ #include "ash/screen_util.h" #include "ash/session/session_controller_impl.h" #include "ash/shell.h" +#include "ash/style/default_color_constants.h" +#include "ash/style/default_colors.h" #include "ash/wm/desks/desks_controller.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/overview_controller.h" @@ -1635,7 +1637,8 @@ if (!black_scrim_layer_) { // Create an invisible black scrim layer. black_scrim_layer_ = std::make_unique<ui::Layer>(ui::LAYER_SOLID_COLOR); - black_scrim_layer_->SetColor(SK_ColorBLACK); + black_scrim_layer_->SetColor( + DeprecatedGetBackgroundColor(kSplitviewBlackScrimLayerColor)); root_window_->layer()->Add(black_scrim_layer_.get()); root_window_->layer()->StackAtTop(black_scrim_layer_.get()); }
diff --git a/ash/wm/splitview/split_view_divider.cc b/ash/wm/splitview/split_view_divider.cc index 38df1ae..aceed2b 100644 --- a/ash/wm/splitview/split_view_divider.cc +++ b/ash/wm/splitview/split_view_divider.cc
@@ -11,6 +11,9 @@ #include "ash/public/cpp/window_properties.h" #include "ash/screen_util.h" #include "ash/shell.h" +#include "ash/style/ash_color_provider.h" +#include "ash/style/default_color_constants.h" +#include "ash/style/default_colors.h" #include "ash/wm/desks/desks_util.h" #include "ash/wm/splitview/split_view_constants.h" #include "ash/wm/splitview/split_view_controller.h" @@ -77,7 +80,8 @@ : controller_(controller), divider_(divider) { divider_view_ = new views::View(); divider_view_->SetPaintToLayer(ui::LAYER_SOLID_COLOR); - divider_view_->layer()->SetColor(kSplitviewDividerColor); + divider_view_->layer()->SetColor(DeprecatedGetBaseLayerColor( + AshColorProvider::BaseLayerType::kOpaque, kSplitviewDividerColor)); divider_handler_view_ = new SplitViewDividerHandlerView();
diff --git a/ash/wm/splitview/split_view_divider_handler_view.cc b/ash/wm/splitview/split_view_divider_handler_view.cc index 6673b7c..ecb06b9 100644 --- a/ash/wm/splitview/split_view_divider_handler_view.cc +++ b/ash/wm/splitview/split_view_divider_handler_view.cc
@@ -6,6 +6,8 @@ #include "ash/display/screen_orientation_controller.h" #include "ash/shell.h" +#include "ash/style/default_color_constants.h" +#include "ash/style/default_colors.h" #include "ash/wm/splitview/split_view_constants.h" #include "ash/wm/splitview/split_view_utils.h" #include "base/timer/timer.h" @@ -106,7 +108,10 @@ }; SplitViewDividerHandlerView::SplitViewDividerHandlerView() - : RoundedRectView(kSplitviewWhiteBarCornerRadius, kSplitviewWhiteBarColor), + : RoundedRectView(kSplitviewWhiteBarCornerRadius, + DeprecatedGetContentLayerColor( + AshColorProvider::ContentLayerType::kIconColorPrimary, + kSplitviewDividerHandlerBarColor)), selection_animation_(std::make_unique<SelectionAnimation>(this)) { SetPaintToLayer(); }
diff --git a/ash/wm/splitview/split_view_drag_indicators.cc b/ash/wm/splitview/split_view_drag_indicators.cc index ce0b96c6..b149f8e33 100644 --- a/ash/wm/splitview/split_view_drag_indicators.cc +++ b/ash/wm/splitview/split_view_drag_indicators.cc
@@ -13,6 +13,9 @@ #include "ash/shelf/shelf.h" #include "ash/shell.h" #include "ash/strings/grit/ash_strings.h" +#include "ash/style/ash_color_provider.h" +#include "ash/style/default_color_constants.h" +#include "ash/style/default_colors.h" #include "ash/wm/overview/rounded_rect_view.h" #include "ash/wm/splitview/split_view_constants.h" #include "ash/wm/splitview/split_view_highlight_view.h" @@ -128,7 +131,10 @@ // this extra view so that we can rotate the label, while having a slide // animation at times on the whole thing. label_parent_ = AddChildView(std::make_unique<RoundedRectView>( - kSplitviewLabelRoundRectRadiusDp, kSplitviewLabelBackgroundColor)); + kSplitviewLabelRoundRectRadiusDp, + DeprecatedGetBaseLayerColor( + AshColorProvider::BaseLayerType::kTransparent80, + kSplitviewLabelBackgroundColor))); label_parent_->SetPaintToLayer(); label_parent_->layer()->SetFillsBoundsOpaquely(false); label_parent_->SetLayoutManager(std::make_unique<views::BoxLayout>( @@ -138,8 +144,12 @@ label_ = label_parent_->AddChildView(std::make_unique<views::Label>( base::string16(), views::style::CONTEXT_LABEL)); - label_->SetEnabledColor(kSplitviewLabelEnabledColor); - label_->SetBackgroundColor(kSplitviewLabelBackgroundColor); + label_->SetEnabledColor(DeprecatedGetContentLayerColor( + AshColorProvider::ContentLayerType::kTextColorPrimary, + kSplitviewLabelEnabledColor)); + label_->SetBackgroundColor(DeprecatedGetBaseLayerColor( + AshColorProvider::BaseLayerType::kTransparent80, + kSplitviewLabelBackgroundColor)); } ~RotatedImageLabelView() override = default;
diff --git a/ash/wm/splitview/split_view_highlight_view.cc b/ash/wm/splitview/split_view_highlight_view.cc index 7dbd891..7ea19e23 100644 --- a/ash/wm/splitview/split_view_highlight_view.cc +++ b/ash/wm/splitview/split_view_highlight_view.cc
@@ -6,6 +6,8 @@ #include "ash/display/screen_orientation_controller.h" #include "ash/shell.h" +#include "ash/style/default_color_constants.h" +#include "ash/style/default_colors.h" #include "ash/wm/splitview/split_view_controller.h" #include "ui/views/view.h" #include "ui/views/view_observer.h" @@ -53,7 +55,8 @@ : is_right_or_bottom_(is_right_or_bottom) { SetPaintToLayer(ui::LAYER_SOLID_COLOR); layer()->SetFillsBoundsOpaquely(false); - layer()->SetColor(SK_ColorWHITE); + layer()->SetColor( + DeprecatedGetBackgroundColor(kSplitviewHighlightViewBackgroundColor)); layer()->SetRoundedCornerRadius(kHighlightScreenRoundRectRadii); layer()->SetIsFastRoundedCorner(true); } @@ -157,8 +160,10 @@ return; } - layer()->SetColor(can_dragged_window_be_snapped ? SK_ColorWHITE - : SK_ColorBLACK); + layer()->SetColor(DeprecatedGetBackgroundColor( + can_dragged_window_be_snapped + ? kSplitviewHighlightViewBackgroundColor + : kSplitviewHighlightViewBackgroundCannotSnapColor)); if (preview_position != SplitViewController::NONE) { DoSplitviewOpacityAnimation( @@ -178,15 +183,22 @@ // This code is for the preview. If |previews_only|, just fade out. Else // fade in from |kPreviewAreaHighlightOpacity| to |kHighlightOpacity|. DoSplitviewOpacityAnimation( - layer(), previews_only ? SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_OUT - : SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN); + layer(), + previews_only + ? SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_OUT + : can_dragged_window_be_snapped + ? SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN + : SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN_CANNOT_SNAP); } else { // This code is for the other highlight. If |previews_only|, just stay // hidden (in other words, do nothing). Else fade in. DCHECK_EQ(0.f, layer()->GetTargetOpacity()); if (!previews_only) { DoSplitviewOpacityAnimation( - layer(), SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN); + layer(), + can_dragged_window_be_snapped + ? SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN + : SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN_CANNOT_SNAP); } } return; @@ -196,7 +208,10 @@ // in a snap area. If |previews_only|, there is nothing to do. Else fade in. DCHECK_EQ(0.f, layer()->GetTargetOpacity()); if (!previews_only) { - DoSplitviewOpacityAnimation(layer(), SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN); + DoSplitviewOpacityAnimation( + layer(), can_dragged_window_be_snapped + ? SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN + : SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN_CANNOT_SNAP); return; } }
diff --git a/ash/wm/splitview/split_view_utils.cc b/ash/wm/splitview/split_view_utils.cc index 8c2f337..e109a2a 100644 --- a/ash/wm/splitview/split_view_utils.cc +++ b/ash/wm/splitview/split_view_utils.cc
@@ -69,6 +69,7 @@ *out_preemption_strategy = ui::LayerAnimator::IMMEDIATELY_SET_NEW_TARGET; switch (type) { case SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN: + case SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN_CANNOT_SNAP: case SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_OUT: case SPLITVIEW_ANIMATION_PREVIEW_AREA_FADE_IN: case SPLITVIEW_ANIMATION_OVERVIEW_ITEM_FADE_IN: @@ -83,6 +84,7 @@ *out_tween_type = gfx::Tween::FAST_OUT_SLOW_IN; return; case SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN: + case SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN_CANNOT_SNAP: case SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_SLIDE_IN: case SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_TEXT_SLIDE_IN: *out_delay = kOtherFadeInDelay; @@ -202,11 +204,21 @@ target_opacity = 0.f; break; case SPLITVIEW_ANIMATION_PREVIEW_AREA_FADE_IN: - target_opacity = kPreviewAreaHighlightOpacity; + target_opacity = features::IsDarkLightModeEnabled() + ? kDarkLightPreviewAreaHighlightOpacity + : kPreviewAreaHighlightOpacity; break; case SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN: case SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN: - target_opacity = kHighlightOpacity; + target_opacity = features::IsDarkLightModeEnabled() + ? kDarkLightHighlightOpacity + : kHighlightOpacity; + break; + case SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN_CANNOT_SNAP: + case SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN_CANNOT_SNAP: + target_opacity = features::IsDarkLightModeEnabled() + ? kDarkLightHighlightCannotSnapOpacity + : kHighlightOpacity; break; case SPLITVIEW_ANIMATION_OVERVIEW_ITEM_FADE_IN: case SPLITVIEW_ANIMATION_TEXT_FADE_IN:
diff --git a/ash/wm/splitview/split_view_utils.h b/ash/wm/splitview/split_view_utils.h index f9d8b02..51226d5 100644 --- a/ash/wm/splitview/split_view_utils.h +++ b/ash/wm/splitview/split_view_utils.h
@@ -28,12 +28,14 @@ // Used to fade in and out the highlights on either side which indicate where // to drag a selector item. SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN, + SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_IN_CANNOT_SNAP, SPLITVIEW_ANIMATION_HIGHLIGHT_FADE_OUT, // Used to fade in and out the other highlight. There are normally two // highlights, one on each side. When entering a state with a preview // highlight, one highlight is the preview highlight, and the other highlight // is the other highlight. SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN, + SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_IN_CANNOT_SNAP, SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_FADE_OUT, // Used to fade in and out the label on the overview item which warns users // the item cannot be snapped. The label appears on the overview item after
diff --git a/base/BUILD.gn b/base/BUILD.gn index 0c738ae..96897c9 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2121,6 +2121,8 @@ "trace_event/heap_profiler.h", "trace_event/heap_profiler_event_filter.cc", "trace_event/heap_profiler_event_filter.h", + "trace_event/interned_args_helper.cc", + "trace_event/interned_args_helper.h", "trace_event/log_message.cc", "trace_event/log_message.h", "trace_event/malloc_dump_provider.cc", @@ -2144,6 +2146,7 @@ "trace_event/optional_trace_event.h", "trace_event/process_memory_dump.cc", "trace_event/process_memory_dump.h", + "trace_event/task_execution_macros.h", "trace_event/thread_instruction_count.cc", "trace_event/thread_instruction_count.h", "trace_event/trace_arguments.cc",
diff --git a/base/allocator/partition_allocator/partition_alloc.h b/base/allocator/partition_allocator/partition_alloc.h index 81bec1b1..90c948f2 100644 --- a/base/allocator/partition_allocator/partition_alloc.h +++ b/base/allocator/partition_allocator/partition_alloc.h
@@ -92,6 +92,10 @@ #include <stdlib.h> #endif +#if defined(OS_WIN) +#include <windows.h> +#endif + #if defined(ADDRESS_SANITIZER) #include <sanitizer/asan_interface.h> #endif // defined(ADDRESS_SANITIZER) @@ -106,6 +110,26 @@ PA_CHECK(false); \ } +namespace { + +// Returns true if we've hit the end of a random-length period. We don't want to +// invoke `RandomValue` too often, because we call this function in a hot spot +// (`Free`), and `RandomValue` incurs the cost of atomics. +#if !DCHECK_IS_ON() +ALWAYS_INLINE bool RandomPeriod() { + static thread_local uint8_t counter = 0; + if (UNLIKELY(counter == 0)) { + // It's OK to truncate this value. + counter = static_cast<uint8_t>(base::RandomValue()); + } + // If `counter` is 0, this will wrap. That is intentional and OK. + counter--; + return counter == 0; +} +#endif + +} // namespace + namespace base { typedef void (*OomFunction)(size_t); @@ -482,10 +506,7 @@ PA_DCHECK(slot_span); PA_DCHECK(IsValidSlotSpan(slot_span)); -#if DCHECK_IS_ON() - size_t utilized_slot_size = slot_span->GetUtilizedSlotSize(); -#endif - + const size_t utilized_slot_size = slot_span->GetUtilizedSlotSize(); if (allow_extras) { // |ptr| points after the tag and the cookie. // @@ -553,6 +574,17 @@ #if DCHECK_IS_ON() memset(ptr, kFreedByte, utilized_slot_size); +#else + // `memset` only once in a while: we're trading off safety for time + // efficiency. + if (UNLIKELY(RandomPeriod()) && !slot_span->bucket->is_direct_mapped()) { +#if defined(OS_WIN) + SecureZeroMemory(ptr, utilized_slot_size); +#else + // TODO(palmer): Use an equivalent of memset_s. + memset(ptr, 0, utilized_slot_size); +#endif + } #endif // TLS access can be expensive, do a cheap local check first.
diff --git a/base/test/scoped_feature_list.h b/base/test/scoped_feature_list.h index 4da82ad..6de0305 100644 --- a/base/test/scoped_feature_list.h +++ b/base/test/scoped_feature_list.h
@@ -132,13 +132,6 @@ const std::vector<FeatureAndParams>& enabled_features_and_params, const std::vector<Feature>& disabled_features); - // Initializes and registers a FeatureList instance based on present - // FeatureList and overridden with single enabled feature and associated field - // trial override. - // |trial| is expected to outlive the ScopedFeatureList. - void InitAndEnableFeatureWithFieldTrialOverride(const Feature& feature, - FieldTrial* trial); - bool init_called_ = false; std::unique_ptr<FeatureList> original_feature_list_; base::FieldTrialList* original_field_trial_list_ = nullptr;
diff --git a/base/trace_event/base_tracing.h b/base/trace_event/base_tracing.h index c5831f237d..ae3c60e7 100644 --- a/base/trace_event/base_tracing.h +++ b/base/trace_event/base_tracing.h
@@ -16,8 +16,10 @@ // Update the check in //base/PRESUBMIT.py when adding new headers here. // TODO(crbug/1006541): Switch to perfetto for trace event implementation. #include "base/trace_event/blame_context.h" +#include "base/trace_event/heap_profiler.h" #include "base/trace_event/memory_allocator_dump_guid.h" #include "base/trace_event/memory_dump_provider.h" +#include "base/trace_event/task_execution_macros.h" #include "base/trace_event/trace_event.h" #include "base/trace_event/traced_value.h" #include "base/trace_event/typed_macros.h"
diff --git a/base/trace_event/common/trace_event_common.h b/base/trace_event/common/trace_event_common.h index 28b7275..120481f3 100644 --- a/base/trace_event/common/trace_event_common.h +++ b/base/trace_event/common/trace_event_common.h
@@ -969,6 +969,7 @@ #define TRACE_TASK_EXECUTION(run_function, task) \ INTERNAL_TRACE_TASK_EXECUTION(run_function, task) +// Special trace event macro to trace log messages. #define TRACE_LOG_MESSAGE(file, message, line) \ INTERNAL_TRACE_LOG_MESSAGE(file, message, line)
diff --git a/base/trace_event/interned_args_helper.cc b/base/trace_event/interned_args_helper.cc new file mode 100644 index 0000000..cb18f3f --- /dev/null +++ b/base/trace_event/interned_args_helper.cc
@@ -0,0 +1,48 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/trace_event/interned_args_helper.h" + +#include "third_party/perfetto/include/perfetto/tracing/track_event_interned_data_index.h" +#include "third_party/perfetto/protos/perfetto/trace/interned_data/interned_data.pbzero.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/log_message.pbzero.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/source_location.pbzero.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/task_execution.pbzero.h" + +namespace base { +namespace trace_event { + +// static +void InternedSourceLocation::Add( + perfetto::protos::pbzero::InternedData* interned_data, + size_t iid, + const TraceSourceLocation& location) { + auto* msg = interned_data->add_source_locations(); + msg->set_iid(iid); + if (location.file_name != nullptr) + msg->set_file_name(location.file_name); + if (location.function_name != nullptr) + msg->set_function_name(location.function_name); + // TODO(ssid): Add line number once it is whitelisted in internal proto. + // TODO(ssid): Add program counter to the proto fields when + // !BUILDFLAG(ENABLE_LOCATION_SOURCE). + // TODO(http://crbug.com760702) remove file name and just pass the program + // counter to the heap profiler macro. + // TODO(ssid): Consider writing the program counter of the current task + // (from the callback function pointer) instead of location that posted the + // task. +} + +// static +void InternedLogMessage::Add( + perfetto::protos::pbzero::InternedData* interned_data, + size_t iid, + const std::string& log_message) { + auto* msg = interned_data->add_log_message_body(); + msg->set_iid(iid); + msg->set_body(log_message); +} + +} // namespace trace_event +} // namespace base
diff --git a/base/trace_event/interned_args_helper.h b/base/trace_event/interned_args_helper.h new file mode 100644 index 0000000..2f8f5bb --- /dev/null +++ b/base/trace_event/interned_args_helper.h
@@ -0,0 +1,85 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_TRACE_EVENT_INTERNED_ARGS_HELPER_H_ +#define BASE_TRACE_EVENT_INTERNED_ARGS_HELPER_H_ + +#include "base/base_export.h" +#include "base/containers/span.h" +#include "base/hash/hash.h" +#include "third_party/perfetto/include/perfetto/tracing/track_event_interned_data_index.h" +#include "third_party/perfetto/protos/perfetto/trace/interned_data/interned_data.pbzero.h" + +namespace base { +namespace trace_event { + +// TrackEventInternedDataIndex expects the same data structure to be used for +// all interned fields with the same field number. We can't use base::Location +// for log event's location since base::Location uses program counter based +// location. +struct BASE_EXPORT TraceSourceLocation { + const char* function_name = nullptr; + const char* file_name = nullptr; + size_t line_number = 0; + + TraceSourceLocation() = default; + TraceSourceLocation(const char* function_name, + const char* file_name, + size_t line_number) + : function_name(function_name), + file_name(file_name), + line_number(line_number) {} + + bool operator==(const TraceSourceLocation& other) const { + return file_name == other.file_name && + function_name == other.function_name && + line_number == other.line_number; + } +}; + +} // namespace trace_event +} // namespace base + +namespace std { + +template <> +struct ::std::hash<base::trace_event::TraceSourceLocation> { + std::size_t operator()( + const base::trace_event::TraceSourceLocation& loc) const { + static_assert(sizeof(base::trace_event::TraceSourceLocation) == + 2 * sizeof(const char*) + sizeof(size_t), + "Padding will cause uninitialized memory to be hashed."); + return base::FastHash(base::as_bytes(base::make_span(&loc, 1))); + } +}; + +} // namespace std + +namespace base { +namespace trace_event { + +struct BASE_EXPORT InternedSourceLocation + : public perfetto::TrackEventInternedDataIndex< + InternedSourceLocation, + perfetto::protos::pbzero::InternedData::kSourceLocationsFieldNumber, + TraceSourceLocation> { + static void Add(perfetto::protos::pbzero::InternedData* interned_data, + size_t iid, + const TraceSourceLocation& location); +}; + +struct InternedLogMessage + : public perfetto::TrackEventInternedDataIndex< + InternedLogMessage, + perfetto::protos::pbzero::InternedData::kLogMessageBodyFieldNumber, + std::string> { + static void Add(perfetto::protos::pbzero::InternedData* interned_data, + size_t iid, + const std::string& log_message); +}; + +} // namespace trace_event +} // namespace base + +#endif // BASE_TRACE_EVENT_INTERNED_ARGS_HELPER_H_
diff --git a/base/trace_event/task_execution_macros.h b/base/trace_event/task_execution_macros.h new file mode 100644 index 0000000..2d9887c6 --- /dev/null +++ b/base/trace_event/task_execution_macros.h
@@ -0,0 +1,48 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_ +#define BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_ + +#include "base/location.h" +#include "base/trace_event/heap_profiler.h" +#include "base/trace_event/interned_args_helper.h" +#include "base/trace_event/typed_macros.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/log_message.pbzero.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/task_execution.pbzero.h" + +// Implementation detail: internal macro to trace a task execution with the +// location where it was posted from. +#define INTERNAL_TRACE_TASK_EXECUTION(run_function, task) \ + TRACE_EVENT("toplevel", run_function, [&](perfetto::EventContext ctx) { \ + ctx.event()->set_task_execution()->set_posted_from_iid( \ + base::trace_event::InternedSourceLocation::Get( \ + &ctx, base::trace_event::TraceSourceLocation( \ + (task).posted_from.function_name(), \ + (task).posted_from.file_name(), \ + (task).posted_from.line_number()))); \ + }); \ + TRACE_HEAP_PROFILER_API_SCOPED_TASK_EXECUTION INTERNAL_TRACE_EVENT_UID( \ + task_event)((task).posted_from.file_name()); \ + TRACE_HEAP_PROFILER_API_SCOPED_WITH_PROGRAM_COUNTER \ + INTERNAL_TRACE_EVENT_UID(task_pc_event) \ + ((task).posted_from.program_counter()); + +// Implementation detail: internal macro to trace a log message, with the source +// location of the log statement. +#define INTERNAL_TRACE_LOG_MESSAGE(file, message, line) \ + TRACE_EVENT_INSTANT( \ + "log", "LogMessage", TRACE_EVENT_SCOPE_THREAD, \ + [&](perfetto::EventContext ctx) { \ + perfetto::protos::pbzero::LogMessage* log = \ + ctx.event()->set_log_message(); \ + log->set_source_location_iid( \ + base::trace_event::InternedSourceLocation::Get( \ + &ctx, base::trace_event::TraceSourceLocation( \ + /*function_name=*/nullptr, file, line))); \ + log->set_body_iid(base::trace_event::InternedLogMessage::Get( \ + &ctx, message.as_string())); \ + }); + +#endif // BASE_TRACE_EVENT_TASK_EXECUTION_MACROS_H_
diff --git a/base/trace_event/trace_event.h b/base/trace_event/trace_event.h index 6c6a6c0..a0cd28cf 100644 --- a/base/trace_event/trace_event.h +++ b/base/trace_event/trace_event.h
@@ -22,7 +22,6 @@ #include "base/time/time_override.h" #include "base/trace_event/builtin_categories.h" #include "base/trace_event/common/trace_event_common.h" -#include "base/trace_event/heap_profiler.h" #include "base/trace_event/log_message.h" #include "base/trace_event/thread_instruction_count.h" #include "base/trace_event/trace_arguments.h" @@ -390,45 +389,6 @@ } \ } while (0) -#define INTERNAL_TRACE_LOG_MESSAGE(file, message, line) \ - TRACE_EVENT_INSTANT1( \ - "log", "LogMessage", \ - TRACE_EVENT_FLAG_TYPED_PROTO_ARGS | TRACE_EVENT_SCOPE_THREAD, "message", \ - std::make_unique<base::trace_event::LogMessage>(file, message, line)) - -#if BUILDFLAG(ENABLE_LOCATION_SOURCE) - -// Implementation detail: internal macro to trace a task execution with the -// location where it was posted from. -// -// This implementation is for when location sources are available. -// TODO(ssid): The program counter of the current task should be added here. -#define INTERNAL_TRACE_TASK_EXECUTION(run_function, task) \ - INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLAGS( \ - "toplevel", run_function, TRACE_EVENT_FLAG_TYPED_PROTO_ARGS, "src_file", \ - (task).posted_from.file_name(), "src_func", \ - (task).posted_from.function_name()); \ - TRACE_HEAP_PROFILER_API_SCOPED_TASK_EXECUTION INTERNAL_TRACE_EVENT_UID( \ - task_event)((task).posted_from.file_name()); \ - TRACE_HEAP_PROFILER_API_SCOPED_WITH_PROGRAM_COUNTER \ - INTERNAL_TRACE_EVENT_UID(task_pc_event)((task).posted_from.program_counter()); - -#else - -// TODO(http://crbug.com760702) remove file name and just pass the program -// counter to the heap profiler macro. -// TODO(ssid): The program counter of the current task should be added here. -#define INTERNAL_TRACE_TASK_EXECUTION(run_function, task) \ - INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLAGS( \ - "toplevel", run_function, TRACE_EVENT_FLAG_TYPED_PROTO_ARGS, "src", \ - (task).posted_from.ToString()) \ - TRACE_HEAP_PROFILER_API_SCOPED_TASK_EXECUTION INTERNAL_TRACE_EVENT_UID( \ - task_event)((task).posted_from.file_name()); \ - TRACE_HEAP_PROFILER_API_SCOPED_WITH_PROGRAM_COUNTER \ - INTERNAL_TRACE_EVENT_UID(task_pc_event)((task).posted_from.program_counter()); - -#endif - namespace trace_event_internal { // Specify these values when the corresponding argument of AddTraceEvent is not
diff --git a/base/trace_event/typed_macros_unittest.cc b/base/trace_event/typed_macros_unittest.cc index 37e55778..1a9ab06a 100644 --- a/base/trace_event/typed_macros_unittest.cc +++ b/base/trace_event/typed_macros_unittest.cc
@@ -6,13 +6,13 @@ #include "base/location.h" #include "base/synchronization/waitable_event.h" +#include "base/trace_event/interned_args_helper.h" #include "base/trace_event/trace_log.h" #include "base/trace_event/typed_macros_embedder_support.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/perfetto/include/perfetto/protozero/scattered_heap_buffer.h" #include "third_party/perfetto/include/perfetto/tracing/track_event_interned_data_index.h" - #include "third_party/perfetto/protos/perfetto/trace/interned_data/interned_data.pb.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/log_message.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/source_location.pb.h" @@ -166,45 +166,23 @@ CancelTrace(); } -namespace { - -struct InternedLocationIndex - : public perfetto::TrackEventInternedDataIndex< - InternedLocationIndex, - perfetto::protos::pbzero::InternedData::kSourceLocationsFieldNumber, - Location> { - static void Add(perfetto::protos::pbzero::InternedData* interned_data, - size_t iid, - const Location& location) { - auto* loc = interned_data->add_source_locations(); - loc->set_iid(iid); - loc->set_file_name(location.file_name()); - loc->set_function_name(location.function_name()); - loc->set_line_number(location.line_number()); - } -}; - -} // namespace - TEST_F(TypedTraceEventTest, InternedData) { TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), TraceLog::RECORDING_MODE); - const Location location("TestFunction", "test.cc", 123, - reinterpret_cast<void*>(0xdada)); + const TraceSourceLocation location("TestFunction", "test.cc", 123); size_t iid = 0; TRACE_EVENT("cat", "Name", [&location, &iid](perfetto::EventContext ctx) { auto* log = ctx.event()->set_log_message(); - iid = InternedLocationIndex::Get(&ctx, location); + iid = InternedSourceLocation::Get(&ctx, location); EXPECT_NE(0u, iid); log->set_body_iid(iid); - size_t iid2 = InternedLocationIndex::Get(&ctx, location); + size_t iid2 = InternedSourceLocation::Get(&ctx, location); EXPECT_EQ(iid, iid2); - Location location2("TestFunction2", "test.cc", 456, - reinterpret_cast<void*>(0xf00d)); - size_t iid3 = InternedLocationIndex::Get(&ctx, location2); + TraceSourceLocation location2("TestFunction2", "test.cc", 456); + size_t iid3 = InternedSourceLocation::Get(&ctx, location2); EXPECT_NE(0u, iid3); EXPECT_NE(iid, iid3); }); @@ -219,11 +197,9 @@ EXPECT_EQ(iid, interned_loc.iid()); EXPECT_EQ("TestFunction", interned_loc.function_name()); EXPECT_EQ("test.cc", interned_loc.file_name()); - EXPECT_EQ(123u, interned_loc.line_number()); interned_loc = interned_data.source_locations()[1]; EXPECT_EQ("TestFunction2", interned_loc.function_name()); EXPECT_EQ("test.cc", interned_loc.file_name()); - EXPECT_EQ(456u, interned_loc.line_number()); // Make sure the in-memory interning index persists between trace events by // recording another event. @@ -232,7 +208,7 @@ TRACE_EVENT("cat", "Name", [&location](perfetto::EventContext ctx) { auto* log = ctx.event()->set_log_message(); - size_t iid = InternedLocationIndex::Get(&ctx, location); + size_t iid = InternedSourceLocation::Get(&ctx, location); EXPECT_NE(0u, iid); log->set_body_iid(iid); });
diff --git a/build/args/headless.gn b/build/args/headless.gn index f5f6607..4c2e8d9ff 100644 --- a/build/args/headless.gn +++ b/build/args/headless.gn
@@ -48,4 +48,3 @@ # TODO(1096425): Remove this once use_x11 goes away. use_x11 = false -dawn_use_x11 = false
diff --git a/build/build_config.h b/build/build_config.h index c37c7429..2c3e81ee 100644 --- a/build/build_config.h +++ b/build/build_config.h
@@ -61,11 +61,7 @@ #define OS_MAC 1 #endif // defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE #elif defined(__linux__) -#if !defined(OS_CHROMEOS) -// Do not define OS_LINUX on Chrome OS build. -// The OS_CHROMEOS macro is defined in GN. #define OS_LINUX 1 -#endif // !defined(OS_CHROMEOS) // Include a system header to pull in features.h for glibc/uclibc macros. #include <unistd.h> #if defined(__GLIBC__) && !defined(__UCLIBC__)
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index 4c363465c..bc176d5 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -255,7 +255,7 @@ # Enables Java library desugaring. # This will cause an extra classes.dex file to appear in every apk. - enable_jdk_library_desugaring = false + enable_jdk_library_desugaring = true } # Host stuff -----------------------------------------------------------------
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 2c5896c7..bae3f29 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20201015.1.1 +0.20201015.2.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 2c5896c7..bae3f29 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20201015.1.1 +0.20201015.2.1
diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py index 705fb909..1100382 100755 --- a/build/mac_toolchain.py +++ b/build/mac_toolchain.py
@@ -34,9 +34,9 @@ # This contains binaries from Xcode 12.0.1, along with the 10.15 SDK (aka # 12A7300). 'default': '89j_tSMJj0_9hMbceEg-P-VmiY_4CeYwsPE1e_zzRPcC', - # This contains binaries from Xcode 12.2 beta 2, along with the - # 11 SDK (aka 12B5025f). - 'xcode_12_beta': 'G4U9cOycs9JFzxLNSMaRuoS3NZwiB6RLwg0v4dh3Vw4C', + # This contains binaries from Xcode 12.2 beta 3, along with the + # 11 SDK (aka 12B5035g). + 'xcode_12_beta': 'Hbv2yK-6odRW8p2nfq7EZyaOWRpcEiMn5mvZpG9exTwC', } # The toolchain will not be downloaded if the minimum OS version is not met.
diff --git a/build/xcode_binaries.yaml b/build/xcode_binaries.yaml index 6b41905..5e56c07 100644 --- a/build/xcode_binaries.yaml +++ b/build/xcode_binaries.yaml
@@ -18,11 +18,12 @@ - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gm4 - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/gperf - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld + - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool + - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-nm - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-objdump - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-otool - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-size - - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/mig - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/nm - file: Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc index 4b126a2..76c989c8 100644 --- a/cc/paint/oop_pixeltest.cc +++ b/cc/paint/oop_pixeltest.cc
@@ -90,7 +90,7 @@ gpu_image_cache_.reset(new GpuImageDecodeCache( gles2_context_provider_.get(), false, kRGBA_8888_SkColorType, kWorkingSetSize, gles2_max_texture_size, - PaintImage::kDefaultGeneratorClientId)); + PaintImage::kDefaultGeneratorClientId, nullptr)); const int raster_max_texture_size = raster_context_provider_->ContextCapabilities().max_texture_size; @@ -117,7 +117,7 @@ oop_image_cache_.reset(new GpuImageDecodeCache( raster_context_provider_.get(), true, kRGBA_8888_SkColorType, kWorkingSetSize, raster_max_texture_size, - PaintImage::kDefaultGeneratorClientId)); + PaintImage::kDefaultGeneratorClientId, nullptr)); } class RasterOptions {
diff --git a/cc/raster/synchronous_task_graph_runner.cc b/cc/raster/synchronous_task_graph_runner.cc index b7e0e94..03a5a46 100644 --- a/cc/raster/synchronous_task_graph_runner.cc +++ b/cc/raster/synchronous_task_graph_runner.cc
@@ -10,6 +10,7 @@ #include <utility> #include "base/threading/simple_thread.h" +#include "base/trace_event/heap_profiler.h" #include "base/trace_event/trace_event.h" namespace cc {
diff --git a/cc/test/fake_layer_tree_host_impl.cc b/cc/test/fake_layer_tree_host_impl.cc index 6593e42..345d3955 100644 --- a/cc/test/fake_layer_tree_host_impl.cc +++ b/cc/test/fake_layer_tree_host_impl.cc
@@ -41,6 +41,7 @@ &stats_instrumentation_, task_graph_runner, AnimationHost::CreateForTesting(ThreadInstance::IMPL), + nullptr, 0, std::move(image_worker_task_runner), /*scheduling_client=*/nullptr),
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc index 4de8502..0093b65 100644 --- a/cc/test/layer_tree_test.cc +++ b/cc/test/layer_tree_test.cc
@@ -177,6 +177,7 @@ stats_instrumentation, task_graph_runner, AnimationHost::CreateForTesting(ThreadInstance::IMPL), + nullptr, 0, std::move(image_worker_task_runner), scheduling_client),
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc index e1fd61d..35d0b7c 100644 --- a/cc/tiles/gpu_image_decode_cache.cc +++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -28,6 +28,7 @@ #include "cc/raster/scoped_grcontext_access.h" #include "cc/raster/tile_task.h" #include "cc/tiles/mipmap_util.h" +#include "cc/tiles/raster_dark_mode_filter.h" #include "components/viz/common/gpu/raster_context_provider.h" #include "gpu/command_buffer/client/context_support.h" #include "gpu/command_buffer/client/gles2_interface.h" @@ -956,7 +957,8 @@ SkColorType color_type, size_t max_working_set_bytes, int max_texture_size, - PaintImage::GeneratorClientId generator_client_id) + PaintImage::GeneratorClientId generator_client_id, + RasterDarkModeFilter* const dark_mode_filter) : color_type_(color_type), use_transfer_cache_(use_transfer_cache), context_(context), @@ -964,7 +966,8 @@ generator_client_id_(generator_client_id), persistent_cache_(PersistentCache::NO_AUTO_EVICT), max_working_set_bytes_(max_working_set_bytes), - max_working_set_items_(kMaxItemsInWorkingSet) { + max_working_set_items_(kMaxItemsInWorkingSet), + dark_mode_filter_(dark_mode_filter) { // Note that to compute |allow_accelerated_jpeg_decodes_| and // |allow_accelerated_webp_decodes_|, the last thing we check is the feature // flag. That's because we want to ensure that we're in OOP-R mode and the @@ -1008,6 +1011,10 @@ memory_pressure_listener_ = std::make_unique<base::MemoryPressureListener>( FROM_HERE, base::BindRepeating(&GpuImageDecodeCache::OnMemoryPressure, base::Unretained(this))); + + TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug"), + "GpuImageDecodeCache::DarkModeFilter", "dark_mode_filter", + dark_mode_filter_); } GpuImageDecodeCache::~GpuImageDecodeCache() {
diff --git a/cc/tiles/gpu_image_decode_cache.h b/cc/tiles/gpu_image_decode_cache.h index 468b43ca..8369cc3 100644 --- a/cc/tiles/gpu_image_decode_cache.h +++ b/cc/tiles/gpu_image_decode_cache.h
@@ -31,6 +31,8 @@ namespace cc { +class RasterDarkModeFilter; + // OVERVIEW: // // GpuImageDecodeCache handles the decode and upload of images that will @@ -141,7 +143,8 @@ SkColorType color_type, size_t max_working_set_bytes, int max_texture_size, - PaintImage::GeneratorClientId client_id); + PaintImage::GeneratorClientId client_id, + RasterDarkModeFilter* const dark_mode_filter); ~GpuImageDecodeCache() override; // Returns the GL texture ID backing the given SkImage. @@ -750,6 +753,8 @@ size_t working_set_items_ = 0; bool aggressively_freeing_resources_ = false; + RasterDarkModeFilter* const dark_mode_filter_; + // We can't modify GPU backed SkImages without holding the context lock, so // we queue up operations to run the next time the lock is held. std::vector<SkImage*> images_pending_complete_lock_;
diff --git a/cc/tiles/gpu_image_decode_cache_perftest.cc b/cc/tiles/gpu_image_decode_cache_perftest.cc index ad32e982..96c16de 100644 --- a/cc/tiles/gpu_image_decode_cache_perftest.cc +++ b/cc/tiles/gpu_image_decode_cache_perftest.cc
@@ -58,7 +58,8 @@ ASSERT_EQ(result, gpu::ContextResult::kSuccess); cache_ = std::make_unique<GpuImageDecodeCache>( context_provider_.get(), UseTransferCache(), kRGBA_8888_SkColorType, - kCacheSize, MaxTextureSize(), PaintImage::kDefaultGeneratorClientId); + kCacheSize, MaxTextureSize(), PaintImage::kDefaultGeneratorClientId, + nullptr); } protected:
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc index a75a5e4..4d70c959 100644 --- a/cc/tiles/gpu_image_decode_cache_unittest.cc +++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
@@ -394,7 +394,7 @@ return std::make_unique<GpuImageDecodeCache>( context_provider_.get(), use_transfer_cache_, color_type_, memory_limit_bytes, max_texture_size_, - PaintImage::kDefaultGeneratorClientId); + PaintImage::kDefaultGeneratorClientId, nullptr); } // Returns dimensions for an image that will not fit in GPU memory and hence
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index 1abfc84..d46daaa1 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc
@@ -46,6 +46,7 @@ #include "cc/metrics/ukm_smoothness_data.h" #include "cc/paint/paint_worklet_layer_painter.h" #include "cc/resources/ui_resource_manager.h" +#include "cc/tiles/raster_dark_mode_filter.h" #include "cc/trees/clip_node.h" #include "cc/trees/compositor_commit_data.h" #include "cc/trees/draw_property_utils.h" @@ -141,7 +142,8 @@ id_(s_layer_tree_host_sequence_number.GetNext() + 1), task_graph_runner_(params.task_graph_runner), event_listener_properties_(), - mutator_host_(params.mutator_host) { + mutator_host_(params.mutator_host), + dark_mode_filter_(params.dark_mode_filter) { DCHECK(task_graph_runner_); DCHECK(!settings_.enable_checker_imaging || image_worker_task_runner_); @@ -544,14 +546,15 @@ std::unique_ptr<LayerTreeHostImpl> host_impl = LayerTreeHostImpl::Create( settings_, client, task_runner_provider_.get(), rendering_stats_instrumentation_.get(), task_graph_runner_, - std::move(mutator_host_impl), id_, std::move(image_worker_task_runner_), - scheduling_client_); + std::move(mutator_host_impl), dark_mode_filter_, id_, + std::move(image_worker_task_runner_), scheduling_client_); if (ukm_recorder_factory_) { host_impl->InitializeUkm(ukm_recorder_factory_->CreateRecorder()); ukm_recorder_factory_.reset(); } task_graph_runner_ = nullptr; + dark_mode_filter_ = nullptr; compositor_delegate_weak_ptr_ = host_impl->AsWeakPtr(); return host_impl; }
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h index 710d7b6..ebb0818f 100644 --- a/cc/trees/layer_tree_host.h +++ b/cc/trees/layer_tree_host.h
@@ -65,6 +65,7 @@ namespace cc { +class RasterDarkModeFilter; class HeadsUpDisplayLayer; class Layer; class LayerTreeHostImpl; @@ -110,6 +111,7 @@ LayerTreeSettings const* settings = nullptr; scoped_refptr<base::SingleThreadTaskRunner> main_task_runner; MutatorHost* mutator_host = nullptr; + RasterDarkModeFilter* dark_mode_filter = nullptr; // The image worker task runner is used to schedule image decodes. The // compositor thread may make sync calls to this thread, analogous to the @@ -905,6 +907,8 @@ MutatorHost* mutator_host_; + RasterDarkModeFilter* dark_mode_filter_; + std::vector<std::pair<PaintImage, base::OnceCallback<void(bool)>>> queued_image_decodes_; std::unordered_map<int, base::OnceCallback<void(bool)>>
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index e2fefa0..4d646ef 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -365,12 +365,13 @@ RenderingStatsInstrumentation* rendering_stats_instrumentation, TaskGraphRunner* task_graph_runner, std::unique_ptr<MutatorHost> mutator_host, + RasterDarkModeFilter* dark_mode_filter, int id, scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner, LayerTreeHostSchedulingClient* scheduling_client) { return base::WrapUnique(new LayerTreeHostImpl( settings, client, task_runner_provider, rendering_stats_instrumentation, - task_graph_runner, std::move(mutator_host), id, + task_graph_runner, std::move(mutator_host), dark_mode_filter, id, std::move(image_worker_task_runner), scheduling_client)); } @@ -381,6 +382,7 @@ RenderingStatsInstrumentation* rendering_stats_instrumentation, TaskGraphRunner* task_graph_runner, std::unique_ptr<MutatorHost> mutator_host, + RasterDarkModeFilter* dark_mode_filter, int id, scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner, LayerTreeHostSchedulingClient* scheduling_client) @@ -408,6 +410,7 @@ memory_history_(MemoryHistory::Create()), debug_rect_history_(DebugRectHistory::Create()), mutator_host_(std::move(mutator_host)), + dark_mode_filter_(dark_mode_filter), rendering_stats_instrumentation_(rendering_stats_instrumentation), micro_benchmark_controller_(this), task_graph_runner_(task_graph_runner), @@ -3335,7 +3338,7 @@ viz::ResourceFormatToClosestSkColorType(/*gpu_compositing=*/true, tile_format), settings_.decoded_image_working_set_budget_bytes, max_texture_size_, - paint_image_generator_client_id_); + paint_image_generator_client_id_, dark_mode_filter_); } else { bool gpu_compositing = !!layer_tree_frame_sink_->context_provider(); image_decode_cache_ = std::make_unique<SoftwareImageDecodeCache>(
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index 318734f..9c16b99 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -88,6 +88,7 @@ enum class ActivelyScrollingType; class BrowserControlsOffsetManager; class CompositorFrameReportingController; +class RasterDarkModeFilter; class DebugRectHistory; class EvictionTilePriorityQueue; class DroppedFrameCounter; @@ -260,6 +261,7 @@ RenderingStatsInstrumentation* rendering_stats_instrumentation, TaskGraphRunner* task_graph_runner, std::unique_ptr<MutatorHost> mutator_host, + RasterDarkModeFilter* dark_mode_filter, int id, scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner, LayerTreeHostSchedulingClient* scheduling_client); @@ -810,6 +812,7 @@ RenderingStatsInstrumentation* rendering_stats_instrumentation, TaskGraphRunner* task_graph_runner, std::unique_ptr<MutatorHost> mutator_host, + RasterDarkModeFilter* dark_mode_filter, int id, scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner, LayerTreeHostSchedulingClient* scheduling_client); @@ -1054,6 +1057,7 @@ std::unique_ptr<MutatorHost> mutator_host_; std::unique_ptr<MutatorEvents> mutator_events_; std::set<VideoFrameController*> video_frame_controllers_; + RasterDarkModeFilter* const dark_mode_filter_; // Map from scroll element ID to scrollbar animation controller. // There is one animation controller per pair of overlay scrollbars.
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc index 3cdf22a7..fa6ac027 100644 --- a/cc/trees/layer_tree_host_impl_unittest.cc +++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -291,7 +291,7 @@ host_impl_ = LayerTreeHostImpl::Create( settings, this, &task_runner_provider_, &stats_instrumentation_, &task_graph_runner_, - AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, + AnimationHost::CreateForTesting(ThreadInstance::IMPL), nullptr, 0, image_worker_ ? image_worker_->task_runner() : nullptr, nullptr); InputHandler::Create(static_cast<CompositorDelegateForInput&>(*host_impl_)); layer_tree_frame_sink_ = std::move(layer_tree_frame_sink); @@ -4948,6 +4948,7 @@ rendering_stats_instrumentation, task_graph_runner, AnimationHost::CreateForTesting(ThreadInstance::IMPL), + nullptr, 0, nullptr, nullptr) {} @@ -10855,8 +10856,8 @@ LayerTreeHostImpl::Create( settings, this, &task_runner_provider_, &stats_instrumentation_, &task_graph_runner_, - AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr, - nullptr); + AnimationHost::CreateForTesting(ThreadInstance::IMPL), nullptr, 0, + nullptr, nullptr); layer_tree_host_impl->SetVisible(true); layer_tree_host_impl->InitializeFrameSink(layer_tree_frame_sink.get()); @@ -11304,8 +11305,8 @@ host_impl_ = LayerTreeHostImpl::Create( settings, this, &task_runner_provider_, &stats_instrumentation_, &task_graph_runner_, - AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr, - nullptr); + AnimationHost::CreateForTesting(ThreadInstance::IMPL), nullptr, 0, + nullptr, nullptr); InputHandler::Create(static_cast<CompositorDelegateForInput&>(*host_impl_)); // Gpu compositing. @@ -15868,8 +15869,8 @@ host_impl_ = LayerTreeHostImpl::Create( DefaultSettings(), this, &task_runner_provider_, &stats_instrumentation_, &task_graph_runner_, - AnimationHost::CreateForTesting(ThreadInstance::IMPL), 0, nullptr, - nullptr); + AnimationHost::CreateForTesting(ThreadInstance::IMPL), nullptr, 0, + nullptr, nullptr); InputHandler::Create(static_cast<CompositorDelegateForInput&>(*host_impl_)); host_impl_->SetVisible(true);
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryImpl.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryImpl.java index 72b4397..824350f 100644 --- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryImpl.java +++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryImpl.java
@@ -18,6 +18,7 @@ import org.chromium.base.annotations.UsedByReflection; import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.autofill_assistant.metrics.LiteScriptOnboarding; +import org.chromium.chrome.browser.autofill_assistant.metrics.LiteScriptStarted; import org.chromium.chrome.browser.autofill_assistant.metrics.OnBoarding; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.CompositorViewHolder; @@ -50,6 +51,9 @@ AutofillAssistantPreferencesUtil.isAutofillAssistantFirstTimeLiteScriptUser(); String firstTimeUserScriptPath = parameters.get(PARAMETER_TRIGGER_FIRST_TIME_USER); String returningUserScriptPath = parameters.get(PARAMETER_TRIGGER_RETURNING_TIME_USER); + AutofillAssistantMetrics.recordLiteScriptStarted(webContents, + isFirstTimeUser ? LiteScriptStarted.LITE_SCRIPT_FIRST_TIME_USER + : LiteScriptStarted.LITE_SCRIPT_RETURNING_USER); startAutofillAssistantLite(bottomSheetController, browserControls, compositorViewHolder, webContents, firstTimeUserScriptPath, returningUserScriptPath, result -> { if (result) {
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java index 2f696ea..d4743e4 100644 --- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacade.java
@@ -133,10 +133,6 @@ } } - AutofillAssistantMetrics.recordLiteScriptStarted(tab.getWebContents(), - AutofillAssistantPreferencesUtil.isAutofillAssistantFirstTimeLiteScriptUser() - ? LiteScriptStarted.LITE_SCRIPT_FIRST_TIME_USER - : LiteScriptStarted.LITE_SCRIPT_RETURNING_USER); AutofillAssistantModuleEntryProvider.INSTANCE.getModuleEntry( tab, (moduleEntry) -> { if (moduleEntry == null || activity.isActivityFinishingOrDestroyed()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java index 2cc30eec..21317494 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java
@@ -122,7 +122,7 @@ } /** - * This method tests clearing of specified types of browsing data for incognito profile. + * This method tests clearing of specified types of browsing data for primary Incognito profile. * @param dataTypes An array of browsing data types to delete, represented as values from * the shared enum {@link BrowsingDataType}. * @param timePeriod The time period for which to delete the data. @@ -132,7 +132,7 @@ assert mClearBrowsingDataListener == null; mClearBrowsingDataListener = listener; BrowsingDataBridgeJni.get().clearBrowsingData(BrowsingDataBridge.this, - getProfile().getOffTheRecordProfile(), dataTypes, timePeriod, new String[0], + getProfile().getPrimaryOTRProfile(), dataTypes, timePeriod, new String[0], new int[0], new String[0], new int[0]); } @@ -185,7 +185,7 @@ /** * Checks the state of deletion preference for a certain browsing data type. * @param dataType The requested browsing data type (from the shared enum - * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). + * {@link BrowsingDataType}). * @param clearBrowsingDataTab Indicates if this is a checkbox on the default, basic or advanced * tab to apply the right preference. * @return The state of the corresponding deletion preference. @@ -198,7 +198,7 @@ /** * Sets the state of deletion preference for a certain browsing data type. * @param dataType The requested browsing data type (from the shared enum - * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). + * {@link BrowsingDataType}). * @param clearBrowsingDataTab Indicates if this is a checkbox on the default, basic or advanced * tab to apply the right preference. * @param value The state to be set.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java index 056ce6d..1ce14fb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
@@ -49,9 +49,7 @@ import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.WindowDelegate; import org.chromium.chrome.browser.app.ChromeActivity; -import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; import org.chromium.chrome.browser.native_page.NativePageFactory; -import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; import org.chromium.chrome.browser.omnibox.LocationBar; import org.chromium.chrome.browser.omnibox.UrlBar; @@ -865,17 +863,8 @@ public void updateMicButtonState() {} @Override - public void onTabLoadingNTP(NewTabPage ntp) {} - - @Override public void setProfileSupplier(ObservableSupplier<Profile> profileSupplier) {} - @Override - public void setUnfocusedWidth(int unfocusedWidth) {} - - @Override - public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {} - // Implements FakeBoxDelegate. @Override public boolean isUrlBarFocused() { @@ -890,9 +879,6 @@ @LocationBar.OmniboxFocusReason int reason) {} @Override - public void setUrlFocusChangeFraction(float fraction) {} - - @Override public boolean isCurrentPage(NativePage nativePage) { return false; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java index a4e9efb..2225152d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
@@ -15,7 +15,6 @@ import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.WindowDelegate; -import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; import org.chromium.chrome.browser.lifecycle.Destroyable; import org.chromium.chrome.browser.ntp.FakeboxDelegate; import org.chromium.chrome.browser.ntp.NewTabPage; @@ -66,20 +65,14 @@ int NUM_ENTRIES = 14; } - /** - * Handle all necessary tasks that can be delayed until initialization completes. - */ + /** Handle all necessary tasks that can be delayed until initialization completes. */ default void onDeferredStartup() {} - /** - * Handles native dependent initialization for this class. - */ + /** Handles native dependent initialization for this class. */ void onNativeLibraryReady(); - /** - * Triggered when the current tab has changed to a {@link NewTabPage}. - */ - void onTabLoadingNTP(NewTabPage ntp); + /** Triggered when the current tab has changed to a {@link NewTabPage}. */ + default void onTabLoadingNTP(NewTabPage ntp){}; /** * Call to force the UI to update the state of various buttons based on whether or not the @@ -88,13 +81,6 @@ void updateVisualsForState(); /** - * Updates progress of current the URL focus change animation. - * - * @param fraction 1.0 is 100% focused, 0 is completely unfocused. - */ - void setUrlFocusChangeFraction(float fraction); - - /** * Sets the displayed URL to be the URL of the page currently showing. * * <p>The URL is converted to the most user friendly format (removing HTTP:// for example). @@ -103,40 +89,32 @@ */ void setUrlToPageUrl(); - /** - * Sets the displayed title to the page title. - */ + /** Sets the displayed title to the page title. */ void setTitleToPageTitle(); /** * Sets whether the location bar should have a layout showing a title. + * * @param showTitle Whether the title should be shown. */ void setShowTitle(boolean showTitle); /** * Update the visuals based on a loading state change. + * * @param updateUrl Whether to update the URL as a result of the this call. */ void updateLoadingState(boolean updateUrl); - /** - * Sets the {@link ToolbarDataProvider} to be used for accessing {@link Toolbar} state. - */ + /** Sets the {@link ToolbarDataProvider} to be used for accessing {@link Toolbar} state. */ void setToolbarDataProvider(ToolbarDataProvider model); - /** - * Sets the {@link OverviewModeBehavior}. - */ - void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior); - - /** - * Gets the {@link ToolbarDataProvider} to be used for accessing {@link Toolbar} state. - */ + /** Gets the {@link ToolbarDataProvider} to be used for accessing {@link Toolbar} state. */ ToolbarDataProvider getToolbarDataProvider(); /** * Initialize controls that will act as hooks to various functions. + * * @param windowDelegate {@link WindowDelegate} that will provide {@link Window} related info. * @param windowAndroid {@link WindowAndroid} that is used by the owning {@link Activity}. * @param activityTabProvider An {@link ActivityTabProvider} to access the activity's current @@ -155,14 +133,12 @@ /** * Triggers the cursor to be visible in the UrlBar without triggering any of the focus animation * logic. - * <p> - * Only applies to devices with a hardware keyboard attached. + * + * <p>Only applies to devices with a hardware keyboard attached. */ void showUrlBarCursorWithoutFocusAnimations(); - /** - * Selects all of the editable text in the UrlBar. - */ + /** Selects all of the editable text in the {@link UrlBar}. */ void selectAll(); /** @@ -171,14 +147,10 @@ */ void revertChanges(); - /** - * Updates the security icon displayed in the LocationBar. - */ + /** Updates the security icon displayed in the LocationBar. */ void updateStatusIcon(); - /** - * @return The {@link ViewGroup} that this container holds. - */ + /** Returns {@link ViewGroup} that this container holds. */ View getContainerView(); /** @@ -189,34 +161,16 @@ */ View getSecurityIconView(); - /** - * Updates the state of the mic button if there is one. - */ + /** Updates the state of the mic button if there is one. */ void updateMicButtonState(); - /** - * Sets the callback to be used by default for text editing action bar. - * @param callback The callback to use. - */ + /** Sets the callback to be used by default for text editing action bar. */ void setDefaultTextEditActionModeCallback(ToolbarActionModeCallback callback); /** - * Called to set the width of the location bar when the url bar is not focused. - * - * Immediately after the animation to transition the URL bar from focused to unfocused finishes, - * the layout width returned from #getMeasuredWidth() can differ from the final unfocused width - * (e.g. this value) until the next layout pass is complete. - * - * This value may be used to determine whether optional child views should be visible in the - * unfocused location bar. - * - * @param unfocusedWidth The unfocused location bar width. - */ - void setUnfocusedWidth(int unfocusedWidth); - - /** * Sets the (observable) supplier of the active profile. This supplier will notify observers of * changes to the active profile, e.g. when selecting an incognito tab model. + * * @param profileSupplier The supplier of the active profile. */ void setProfileSupplier(ObservableSupplier<Profile> profileSupplier);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java index ac6260df2..2fafce5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
@@ -73,30 +73,6 @@ } } - /** - * Returns the {@link LocationBarCoordinatorPhone} for this coordinator. - * - * @throws ClassCastException if this coordinator holds a {@link SubCoordinator} of a different - * type. - */ - @NonNull - public LocationBarCoordinatorPhone getPhoneCoordinator() { - assert mSubCoordinator != null; - return (LocationBarCoordinatorPhone) mSubCoordinator; - } - - /** - * Returns the {@link LocationBarCoordinatorTablet} for this coordinator. - * - * @throws ClassCastException if this coordinator holds a {@link SubCoordinator} of a different - * type. - */ - @NonNull - public LocationBarCoordinatorTablet getTabletCoordinator() { - assert mSubCoordinator != null; - return (LocationBarCoordinatorTablet) mSubCoordinator; - } - @Override public void destroy() { if (mSubCoordinator != null) { @@ -130,11 +106,6 @@ } @Override - public void setUrlFocusChangeFraction(float fraction) { - mLocationBarLayout.setUrlFocusChangeFraction(fraction); - } - - @Override public void setUrlToPageUrl() { mLocationBarLayout.setUrlToPageUrl(); } @@ -160,11 +131,6 @@ } @Override - public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) { - mLocationBarLayout.setOverviewModeBehavior(overviewModeBehavior); - } - - @Override public ToolbarDataProvider getToolbarDataProvider() { return mLocationBarLayout.getToolbarDataProvider(); } @@ -220,11 +186,6 @@ } @Override - public void setUnfocusedWidth(int unfocusedWidth) { - mLocationBarLayout.setUnfocusedWidth(unfocusedWidth); - } - - @Override public void setProfileSupplier(ObservableSupplier<Profile> profileSupplier) { mLocationBarLayout.setProfileSupplier(profileSupplier); } @@ -294,4 +255,58 @@ public void removeUrlFocusChangeListener(UrlFocusChangeListener listener) { mLocationBarLayout.removeUrlFocusChangeListener(listener); } + + /** + * Returns the {@link LocationBarCoordinatorPhone} for this coordinator. + * + * @throws ClassCastException if this coordinator holds a {@link SubCoordinator} of a different + * type. + */ + @NonNull + public LocationBarCoordinatorPhone getPhoneCoordinator() { + assert mSubCoordinator != null; + return (LocationBarCoordinatorPhone) mSubCoordinator; + } + + /** + * Returns the {@link LocationBarCoordinatorTablet} for this coordinator. + * + * @throws ClassCastException if this coordinator holds a {@link SubCoordinator} of a different + * type. + */ + @NonNull + public LocationBarCoordinatorTablet getTabletCoordinator() { + assert mSubCoordinator != null; + return (LocationBarCoordinatorTablet) mSubCoordinator; + } + + /** Sets the {@link OverviewModeBehavior}. */ + public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) { + mLocationBarLayout.setOverviewModeBehavior(overviewModeBehavior); + } + + /** + * Updates progress of current the URL focus change animation. + * + * @param fraction 1.0 is 100% focused, 0 is completely unfocused. + */ + public void setUrlFocusChangeFraction(float fraction) { + mLocationBarLayout.setUrlFocusChangeFraction(fraction); + } + + /** + * Called to set the width of the location bar when the url bar is not focused. + * + * <p>Immediately after the animation to transition the URL bar from focused to unfocused + * finishes, the layout width returned from #getMeasuredWidth() can differ from the final + * unfocused width (e.g. this value) until the next layout pass is complete. + * + * <p>This value may be used to determine whether optional child views should be visible in the + * unfocused location bar. + * + * @param unfocusedWidth The unfocused location bar width. + */ + public void setUnfocusedWidth(int unfocusedWidth) { + mLocationBarLayout.setUnfocusedWidth(unfocusedWidth); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java index 644d3da7..1d9c91d9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -346,25 +346,12 @@ mStatusCoordinator.setModalDialogManagerSupplier(modalDialogManagerSupplier); } - /** - * @param focusable Whether the url bar should be focusable. - */ - public void setUrlBarFocusable(boolean focusable) { - if (mUrlCoordinator == null) return; - mUrlCoordinator.setAllowFocus(focusable); - } - @Override public AutocompleteCoordinator getAutocompleteCoordinator() { return mAutocompleteCoordinator; } @Override - public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) { - mAutocompleteCoordinator.setOverviewModeBehavior(overviewModeBehavior); - } - - @Override public void onDeferredStartup() { mAutocompleteCoordinator.prefetchZeroSuggestResults(); } @@ -403,61 +390,6 @@ } @Override - @CallSuper - public void setUrlFocusChangeFraction(float fraction) { - mUrlFocusChangeFraction = fraction; - } - - private void registerTemplateUrlObserver() { - final TemplateUrlService templateUrlService = TemplateUrlServiceFactory.get(); - assert mTemplateUrlObserver == null; - mTemplateUrlObserver = new TemplateUrlServiceObserver() { - private TemplateUrl mSearchEngine = - templateUrlService.getDefaultSearchEngineTemplateUrl(); - - @Override - public void onTemplateURLServiceChanged() { - TemplateUrl searchEngine = templateUrlService.getDefaultSearchEngineTemplateUrl(); - if ((mSearchEngine == null && searchEngine == null) - || (mSearchEngine != null && mSearchEngine.equals(searchEngine))) { - return; - } - - mSearchEngine = searchEngine; - updateSearchEngineStatusIcon(SearchEngineLogoUtils.shouldShowSearchEngineLogo( - mToolbarDataProvider.isIncognito()), - TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle(), - SearchEngineLogoUtils.getSearchLogoUrl()); - } - }; - templateUrlService.addObserver(mTemplateUrlObserver); - - // Force an update once to populate initial data. - updateSearchEngineStatusIcon(SearchEngineLogoUtils.shouldShowSearchEngineLogo( - mToolbarDataProvider.isIncognito()), - TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle(), - SearchEngineLogoUtils.getSearchLogoUrl()); - } - - /** - * Evaluate state and update child components' animations. - * - * This call and all overrides should invoke `notifyShouldAnimateIconChanges(boolean)` with a - * computed boolean value toggling animation support in child components. - */ - protected void updateShouldAnimateIconChanges() { - notifyShouldAnimateIconChanges(mUrlHasFocus); - } - - /** - * Toggle child components animations. - * @param shouldAnimate Boolean flag indicating whether animations should be enabled. - */ - protected void notifyShouldAnimateIconChanges(boolean shouldAnimate) { - mStatusCoordinator.setShouldAnimateIconChanges(shouldAnimate); - } - - @Override public void setProfileSupplier(ObservableSupplier<Profile> profileSupplier) { assert profileSupplier != null; assert mProfileSupplier == null; @@ -466,28 +398,6 @@ mProfileSupplier.addObserver(mProfileSupplierObserver); } - /** - * Updates the profile used by this LocationBar, for, e.g. determining incognito status or - * generating autocomplete suggestions.. - * @param profile The profile to be used. - */ - private void setProfile(Profile profile) { - if (profile == null || !mNativeInitialized) return; - mAutocompleteCoordinator.setAutocompleteProfile(profile); - mOmniboxPrerender.initializeForProfile(profile); - - setShowIconsWhenUrlFocused( - SearchEngineLogoUtils.shouldShowSearchEngineLogo(profile.isOffTheRecord())); - } - - /** Focuses the current page. */ - private void focusCurrentTab() { - if (mToolbarDataProvider.hasTab()) { - View view = getCurrentTab().getView(); - if (view != null) view.requestFocus(); - } - } - @Override public void clearOmniboxFocus() { setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); @@ -514,132 +424,6 @@ } } - /** - * @return Whether the URL focus change is taking place, e.g. a focus animation is running on - * a phone device. - */ - public boolean isUrlFocusChangeInProgress() { - return mUrlFocusChangeInProgress; - } - - /** - * Specify whether location bar should present icons when focused. - * @param showIcon True if we should show the icons when the url is focused. - */ - protected void setShowIconsWhenUrlFocused(boolean showIcon) {} - - /** - * @param inProgress Whether a URL focus change is taking place. - */ - protected void setUrlFocusChangeInProgress(boolean inProgress) { - mUrlFocusChangeInProgress = inProgress; - if (!inProgress) { - updateButtonVisibility(); - - // The accessibility bounding box is not properly updated when focusing the Omnibox - // from the NTP fakebox. Clearing/re-requesting focus triggers the bounding box to - // be recalculated. - if (didFocusUrlFromFakebox() && mUrlHasFocus - && ChromeAccessibilityUtil.get().isAccessibilityEnabled()) { - String existingText = mUrlCoordinator.getTextWithoutAutocomplete(); - mUrlBar.clearFocus(); - mUrlBar.requestFocus(); - // Existing text (e.g. if the user pasted via the fakebox) from the fake box - // should be restored after toggling the focus. - if (!TextUtils.isEmpty(existingText)) { - mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(existingText), - UrlBar.ScrollType.NO_SCROLL, - UrlBarCoordinator.SelectionState.SELECT_END); - forceOnTextChanged(); - } - } - - for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) { - listener.onUrlAnimationFinished(mUrlHasFocus); - } - } - } - - /** - * Triggered when the URL input field has gained or lost focus. - * @param hasFocus Whether the URL field has gained focus. - */ - protected void onUrlFocusChange(boolean hasFocus) { - mUrlHasFocus = hasFocus; - updateButtonVisibility(); - updateShouldAnimateIconChanges(); - - if (mUrlHasFocus) { - mKeyboardShouldShow = false; - if (mNativeInitialized) RecordUserAction.record("FocusLocation"); - UrlBarData urlBarData = mToolbarDataProvider.getUrlBarData(); - if (urlBarData.editingText != null) { - setUrlBarText(urlBarData, UrlBar.ScrollType.NO_SCROLL, SelectionState.SELECT_ALL); - } - - // Explicitly tell InputMethodManager that the url bar is focused before any callbacks - // so that it updates the active view accordingly. Otherwise, it may fail to update - // the correct active view if ViewGroup.addView() or ViewGroup.removeView() is called - // to update a view that accepts text input. - InputMethodManager imm = (InputMethodManager) mUrlBar.getContext().getSystemService( - Context.INPUT_METHOD_SERVICE); - imm.viewClicked(mUrlBar); - } else { - mUrlFocusedFromFakebox = false; - mUrlFocusedFromQueryTiles = false; - mUrlFocusedWithoutAnimations = false; - - // Focus change caused by a close-tab may result in an invalid current tab. - if (mToolbarDataProvider.hasTab()) { - setUrlToPageUrl(); - } - - // Moving focus away from UrlBar(EditText) to a non-editable focus holder, such as - // ToolbarPhone, won't automatically hide keyboard app, but restart it with TYPE_NULL, - // which will result in a visual glitch. Also, currently, we do not allow moving focus - // directly from omnibox to web content's form field. Therefore, we hide keyboard on - // focus blur indiscriminately here. Note that hiding keyboard may lower FPS of other - // animation effects, but we found it tolerable in an experiment. - InputMethodManager imm = (InputMethodManager) getContext().getSystemService( - Context.INPUT_METHOD_SERVICE); - if (imm.isActive(mUrlBar)) imm.hideSoftInputFromWindow(getWindowToken(), 0, null); - } - - if (mToolbarDataProvider.isUsingBrandColor()) updateVisualsForState(); - - mStatusCoordinator.onUrlFocusChange(mUrlHasFocus); - - if (!mUrlFocusedWithoutAnimations) handleUrlFocusAnimation(mUrlHasFocus); - - if (mUrlHasFocus && mToolbarDataProvider.hasTab() && !mToolbarDataProvider.isIncognito()) { - if (mNativeInitialized - && TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()) { - GeolocationHeader.primeLocationForGeoHeader(); - } else { - mDeferredNativeRunnables.add(new Runnable() { - @Override - public void run() { - if (TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()) { - GeolocationHeader.primeLocationForGeoHeader(); - } - } - }); - } - } - } - - /** - * Handle and run any necessary animations that are triggered off focusing the UrlBar. - * @param hasFocus Whether focus was gained. - */ - protected void handleUrlFocusAnimation(boolean hasFocus) { - removeCallbacks(mKeyboardResizeModeTask); - if (hasFocus) mUrlFocusedWithoutAnimations = false; - for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) { - listener.onUrlFocusChange(hasFocus); - } - } - @Override public void onUrlTextChanged() { updateButtonVisibility(); @@ -700,119 +484,6 @@ setUrlToPageUrl(); } - /** - * @return The margin to be applied to the URL bar based on the buttons currently visible next - * to it, used to avoid text overlapping the buttons and vice versa. - */ - private int getUrlContainerMarginEnd() { - int urlContainerMarginEnd = 0; - for (View childView : getUrlContainerViewsForMargin()) { - ViewGroup.MarginLayoutParams childLayoutParams = - (ViewGroup.MarginLayoutParams) childView.getLayoutParams(); - urlContainerMarginEnd += childLayoutParams.width - + MarginLayoutParamsCompat.getMarginStart(childLayoutParams) - + MarginLayoutParamsCompat.getMarginEnd(childLayoutParams); - } - if (mUrlActionContainer != null && mUrlActionContainer.getVisibility() == View.VISIBLE) { - ViewGroup.MarginLayoutParams urlActionContainerLayoutParams = - (ViewGroup.MarginLayoutParams) mUrlActionContainer.getLayoutParams(); - urlContainerMarginEnd += - MarginLayoutParamsCompat.getMarginStart(urlActionContainerLayoutParams) - + MarginLayoutParamsCompat.getMarginEnd(urlActionContainerLayoutParams); - } - return urlContainerMarginEnd; - } - - /** - * Updates the layout params for the location bar start aligned views. - */ - protected void updateLayoutParams() { - int startMargin = 0; - for (int i = 0; i < getChildCount(); i++) { - View childView = getChildAt(i); - if (childView.getVisibility() != GONE) { - LayoutParams childLayoutParams = (LayoutParams) childView.getLayoutParams(); - if (MarginLayoutParamsCompat.getMarginStart(childLayoutParams) != startMargin) { - MarginLayoutParamsCompat.setMarginStart(childLayoutParams, startMargin); - childView.setLayoutParams(childLayoutParams); - } - if (childView == mUrlBar) break; - - int widthMeasureSpec; - int heightMeasureSpec; - if (childLayoutParams.width == LayoutParams.WRAP_CONTENT) { - widthMeasureSpec = - MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.AT_MOST); - } else if (childLayoutParams.width == LayoutParams.MATCH_PARENT) { - widthMeasureSpec = - MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY); - } else { - widthMeasureSpec = MeasureSpec.makeMeasureSpec( - childLayoutParams.width, MeasureSpec.EXACTLY); - } - if (childLayoutParams.height == LayoutParams.WRAP_CONTENT) { - heightMeasureSpec = - MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.AT_MOST); - } else if (childLayoutParams.height == LayoutParams.MATCH_PARENT) { - heightMeasureSpec = - MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY); - } else { - heightMeasureSpec = MeasureSpec.makeMeasureSpec( - childLayoutParams.height, MeasureSpec.EXACTLY); - } - childView.measure(widthMeasureSpec, heightMeasureSpec); - startMargin += childView.getMeasuredWidth(); - } - } - - int urlContainerMarginEnd = getUrlContainerMarginEnd(); - LayoutParams urlLayoutParams = (LayoutParams) mUrlBar.getLayoutParams(); - if (MarginLayoutParamsCompat.getMarginEnd(urlLayoutParams) != urlContainerMarginEnd) { - // Include the space which the URL bar will be translated post-layout into the - // end-margin so the URL bar doesn't overlap with the URL actions container. - if (SearchEngineLogoUtils.shouldShowSearchEngineLogo( - mToolbarDataProvider.isIncognito())) { - urlContainerMarginEnd += mStatusCoordinator.getEndPaddingPixelSizeOnFocusDelta(); - } - MarginLayoutParamsCompat.setMarginEnd(urlLayoutParams, urlContainerMarginEnd); - mUrlBar.setLayoutParams(urlLayoutParams); - } - } - - /** - * Gets the list of views that need to be taken into account for adding margin to the end of the - * URL bar. - * - * @return A {@link List} of the views to be taken into account for URL bar margin to avoid - * overlapping text and buttons. - */ - protected List<View> getUrlContainerViewsForMargin() { - List<View> outList = new ArrayList<View>(); - if (mUrlActionContainer == null) return outList; - - for (int i = 0; i < mUrlActionContainer.getChildCount(); i++) { - View childView = mUrlActionContainer.getChildAt(i); - if (childView.getVisibility() != GONE) outList.add(childView); - } - return outList; - } - - /** - * @return Whether the delete button should be shown. - */ - protected boolean shouldShowDeleteButton() { - // Show the delete button at the end when the bar has focus and has some text. - boolean hasText = !TextUtils.isEmpty(mUrlCoordinator.getTextWithAutocomplete()); - return hasText && (mUrlBar.hasFocus() || mUrlFocusChangeInProgress); - } - - /** - * Updates the display of the delete URL content button. - */ - protected void updateDeleteButtonVisibility() { - mDeleteButton.setVisibility(shouldShowDeleteButton() ? VISIBLE : GONE); - } - @Override public void setKeyboardVisibility(boolean shouldShow) { mKeyboardShouldShow = shouldShow; @@ -947,10 +618,187 @@ } /** - * @return Returns the original url of the page. + * Update the location bar visuals based on a loading state change. + * @param updateUrl Whether to update the URL as a result of this call. */ - public String getOriginalUrl() { - return mOriginalUrl; + @Override + public void updateLoadingState(boolean updateUrl) { + if (updateUrl) setUrlToPageUrl(); + mStatusCoordinator.updateStatusIcon(); + } + + @Override + public View getViewForUrlBackFocus() { + Tab tab = getCurrentTab(); + if (tab == null) return null; + return tab.getView(); + } + + @Override + public boolean allowKeyboardLearning() { + if (mToolbarDataProvider == null) return false; + return !mToolbarDataProvider.isIncognito(); + } + + @Override + public void setUrlBarFocus( + boolean shouldBeFocused, @Nullable String pastedText, @OmniboxFocusReason int reason) { + if (shouldBeFocused) { + if (!mUrlHasFocus) recordOmniboxFocusReason(reason); + if (reason == LocationBar.OmniboxFocusReason.FAKE_BOX_TAP + || reason == LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS + || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS + || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP) { + mUrlFocusedFromFakebox = true; + } + + if (reason == LocationBar.OmniboxFocusReason.QUERY_TILES_NTP_TAP) { + mUrlFocusedFromFakebox = true; + mUrlFocusedFromQueryTiles = true; + } + + if (mUrlHasFocus && mUrlFocusedWithoutAnimations) { + handleUrlFocusAnimation(mUrlHasFocus); + } else { + mUrlBar.requestFocus(); + } + } else { + assert pastedText == null; + setKeyboardVisibility(false); + mUrlBar.clearFocus(); + } + + if (pastedText != null) { + // This must be happen after requestUrlFocus(), which changes the selection. + mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(pastedText), + UrlBar.ScrollType.NO_SCROLL, UrlBarCoordinator.SelectionState.SELECT_END); + forceOnTextChanged(); + } + } + + @Override + public boolean isUrlBarFocused() { + return mUrlHasFocus; + } + + @Override + public boolean isCurrentPage(NativePage nativePage) { + assert nativePage != null; + return nativePage == mToolbarDataProvider.getNewTabPageForCurrentTab(); + } + + @Override + public VoiceRecognitionHandler getVoiceRecognitionHandler() { + return mVoiceRecognitionHandler; + } + + @Override + public void addUrlFocusChangeListener(UrlFocusChangeListener listener) { + mUrlFocusChangeListeners.addObserver(listener); + } + + @Override + public void removeUrlFocusChangeListener(UrlFocusChangeListener listener) { + mUrlFocusChangeListeners.removeObserver(listener); + } + + @Override + protected void onWindowVisibilityChanged(int visibility) { + super.onWindowVisibilityChanged(visibility); + if (visibility == View.VISIBLE) updateMicButtonState(); + } + + /** + * Call to force the UI to update the state of various buttons based on whether or not the + * current tab is incognito. + */ + @Override + public void updateVisualsForState() { + // If the location bar is focused, the toolbar background color would be the default color + // regardless of whether it is branded or not. + final int defaultPrimaryColor = ChromeColors.getDefaultThemeColor( + getResources(), mToolbarDataProvider.isIncognito()); + final int primaryColor = + mUrlHasFocus ? defaultPrimaryColor : mToolbarDataProvider.getPrimaryColor(); + + // This will be called between inflation and initialization. For those calls, using a null + // ColorStateList should have no visible impact to the user. + ColorStateList micColorStateList = mAssistantVoiceSearchService == null + ? null + : mAssistantVoiceSearchService.getMicButtonColorStateList( + primaryColor, getContext()); + ApiCompatibilityUtils.setImageTintList(mMicButton, micColorStateList); + + final boolean useDarkColors = + !ColorUtils.shouldUseLightForegroundOnBackground(primaryColor); + ColorStateList colorStateList = + ChromeColors.getPrimaryIconTint(getContext(), !useDarkColors); + ApiCompatibilityUtils.setImageTintList(mDeleteButton, colorStateList); + + // If the URL changed colors and is not focused, update the URL to account for the new + // color scheme. + if (mUrlCoordinator.setUseDarkTextColors(useDarkColors) && !mUrlBar.hasFocus()) { + setUrlToPageUrl(); + } + + mStatusCoordinator.setUseDarkColors(useDarkColors); + mStatusCoordinator.setIncognitoBadgeVisibility( + mToolbarDataProvider.isIncognito() && !mIsTablet); + + if (mAutocompleteCoordinator != null) { + mAutocompleteCoordinator.updateVisualsForState( + useDarkColors, mToolbarDataProvider.isIncognito()); + } + } + + @Override + public void onTabLoadingNTP(NewTabPage ntp) { + ntp.setFakeboxDelegate(this); + } + + @Override + public View getContainerView() { + return this; + } + + @Override + public View getSecurityIconView() { + return mStatusCoordinator.getSecurityIconView(); + } + + @Override + public void setTitleToPageTitle() {} + + @Override + public void setShowTitle(boolean showTitle) {} + + @Override + public WindowAndroid getWindowAndroid() { + return mWindowAndroid; + } + + @Override + public void onAssistantVoiceSearchServiceChanged() { + Drawable drawable = mAssistantVoiceSearchService.getCurrentMicDrawable(); + mMicButton.setImageDrawable(drawable); + + final int defaultPrimaryColor = ChromeColors.getDefaultThemeColor( + getResources(), mToolbarDataProvider.isIncognito()); + final int primaryColor = + mUrlHasFocus ? defaultPrimaryColor : mToolbarDataProvider.getPrimaryColor(); + ColorStateList colorStateList = + mAssistantVoiceSearchService.getMicButtonColorStateList(primaryColor, getContext()); + ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList); + } + + /** + * Call to notify the location bar that the state of the voice search microphone button may + * need to be updated. + */ + @Override + public void updateMicButtonState() { + mVoiceSearchEnabled = mVoiceRecognitionHandler.isVoiceSearchEnabled(); + updateButtonVisibility(); } /** @@ -990,32 +838,6 @@ if (profile != null && mOmniboxPrerender != null) mOmniboxPrerender.clear(profile); } - /** - * Changes the text on the url bar. The text update will be applied regardless of the current - * focus state (comparing to {@link #setUrlToPageUrl()} which only applies text updates when - * not focused). - * - * @param urlBarData The contents of the URL bar, both for editing and displaying. - * @param scrollType Specifies how the text should be scrolled in the unfocused state. - * @param selectionState Specifies how the text should be selected in the focused state. - * @return Whether the URL was changed as a result of this call. - */ - private boolean setUrlBarText( - UrlBarData urlBarData, @ScrollType int scrollType, @SelectionState int selectionState) { - return mUrlCoordinator.setUrlBarData(urlBarData, scrollType, selectionState); - } - - /** - * Clear any text in the URL bar. - * @return Whether this changed the existing text. - */ - private boolean setUrlBarTextEmpty() { - boolean textChanged = mUrlCoordinator.setUrlBarData( - UrlBarData.EMPTY, UrlBar.ScrollType.SCROLL_TO_BEGINNING, SelectionState.SELECT_ALL); - forceOnTextChanged(); - return textChanged; - } - @Override public void setOmniboxEditingText(String text) { mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(text), UrlBar.ScrollType.NO_SCROLL, @@ -1098,13 +920,363 @@ } /** - * Update the location bar visuals based on a loading state change. - * @param updateUrl Whether to update the URL as a result of this call. + * @param focusable Whether the url bar should be focusable. */ - @Override - public void updateLoadingState(boolean updateUrl) { - if (updateUrl) setUrlToPageUrl(); - mStatusCoordinator.updateStatusIcon(); + public void setUrlBarFocusable(boolean focusable) { + if (mUrlCoordinator == null) return; + mUrlCoordinator.setAllowFocus(focusable); + } + + public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) { + mAutocompleteCoordinator.setOverviewModeBehavior(overviewModeBehavior); + } + + @CallSuper + public void setUrlFocusChangeFraction(float fraction) { + mUrlFocusChangeFraction = fraction; + } + + private void registerTemplateUrlObserver() { + final TemplateUrlService templateUrlService = TemplateUrlServiceFactory.get(); + assert mTemplateUrlObserver == null; + mTemplateUrlObserver = new TemplateUrlServiceObserver() { + private TemplateUrl mSearchEngine = + templateUrlService.getDefaultSearchEngineTemplateUrl(); + + @Override + public void onTemplateURLServiceChanged() { + TemplateUrl searchEngine = templateUrlService.getDefaultSearchEngineTemplateUrl(); + if ((mSearchEngine == null && searchEngine == null) + || (mSearchEngine != null && mSearchEngine.equals(searchEngine))) { + return; + } + + mSearchEngine = searchEngine; + updateSearchEngineStatusIcon(SearchEngineLogoUtils.shouldShowSearchEngineLogo( + mToolbarDataProvider.isIncognito()), + TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle(), + SearchEngineLogoUtils.getSearchLogoUrl()); + } + }; + templateUrlService.addObserver(mTemplateUrlObserver); + + // Force an update once to populate initial data. + updateSearchEngineStatusIcon(SearchEngineLogoUtils.shouldShowSearchEngineLogo( + mToolbarDataProvider.isIncognito()), + TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle(), + SearchEngineLogoUtils.getSearchLogoUrl()); + } + + /** + * Evaluate state and update child components' animations. + * + * This call and all overrides should invoke `notifyShouldAnimateIconChanges(boolean)` with a + * computed boolean value toggling animation support in child components. + */ + protected void updateShouldAnimateIconChanges() { + notifyShouldAnimateIconChanges(mUrlHasFocus); + } + + /** + * Toggle child components animations. + * @param shouldAnimate Boolean flag indicating whether animations should be enabled. + */ + protected void notifyShouldAnimateIconChanges(boolean shouldAnimate) { + mStatusCoordinator.setShouldAnimateIconChanges(shouldAnimate); + } + + /** + * Updates the profile used by this LocationBar, for, e.g. determining incognito status or + * generating autocomplete suggestions.. + * @param profile The profile to be used. + */ + private void setProfile(Profile profile) { + if (profile == null || !mNativeInitialized) return; + mAutocompleteCoordinator.setAutocompleteProfile(profile); + mOmniboxPrerender.initializeForProfile(profile); + + setShowIconsWhenUrlFocused( + SearchEngineLogoUtils.shouldShowSearchEngineLogo(profile.isOffTheRecord())); + } + + /** Focuses the current page. */ + private void focusCurrentTab() { + if (mToolbarDataProvider.hasTab()) { + View view = getCurrentTab().getView(); + if (view != null) view.requestFocus(); + } + } + + /** + * @return Whether the URL focus change is taking place, e.g. a focus animation is running on + * a phone device. + */ + public boolean isUrlFocusChangeInProgress() { + return mUrlFocusChangeInProgress; + } + + /** + * Specify whether location bar should present icons when focused. + * @param showIcon True if we should show the icons when the url is focused. + */ + protected void setShowIconsWhenUrlFocused(boolean showIcon) {} + + /** + * @param inProgress Whether a URL focus change is taking place. + */ + protected void setUrlFocusChangeInProgress(boolean inProgress) { + mUrlFocusChangeInProgress = inProgress; + if (!inProgress) { + updateButtonVisibility(); + + // The accessibility bounding box is not properly updated when focusing the Omnibox + // from the NTP fakebox. Clearing/re-requesting focus triggers the bounding box to + // be recalculated. + if (didFocusUrlFromFakebox() && mUrlHasFocus + && ChromeAccessibilityUtil.get().isAccessibilityEnabled()) { + String existingText = mUrlCoordinator.getTextWithoutAutocomplete(); + mUrlBar.clearFocus(); + mUrlBar.requestFocus(); + // Existing text (e.g. if the user pasted via the fakebox) from the fake box + // should be restored after toggling the focus. + if (!TextUtils.isEmpty(existingText)) { + mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(existingText), + UrlBar.ScrollType.NO_SCROLL, + UrlBarCoordinator.SelectionState.SELECT_END); + forceOnTextChanged(); + } + } + + for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) { + listener.onUrlAnimationFinished(mUrlHasFocus); + } + } + } + + /** + * Triggered when the URL input field has gained or lost focus. + * @param hasFocus Whether the URL field has gained focus. + */ + protected void onUrlFocusChange(boolean hasFocus) { + mUrlHasFocus = hasFocus; + updateButtonVisibility(); + updateShouldAnimateIconChanges(); + + if (mUrlHasFocus) { + mKeyboardShouldShow = false; + if (mNativeInitialized) RecordUserAction.record("FocusLocation"); + UrlBarData urlBarData = mToolbarDataProvider.getUrlBarData(); + if (urlBarData.editingText != null) { + setUrlBarText(urlBarData, UrlBar.ScrollType.NO_SCROLL, SelectionState.SELECT_ALL); + } + + // Explicitly tell InputMethodManager that the url bar is focused before any callbacks + // so that it updates the active view accordingly. Otherwise, it may fail to update + // the correct active view if ViewGroup.addView() or ViewGroup.removeView() is called + // to update a view that accepts text input. + InputMethodManager imm = (InputMethodManager) mUrlBar.getContext().getSystemService( + Context.INPUT_METHOD_SERVICE); + imm.viewClicked(mUrlBar); + } else { + mUrlFocusedFromFakebox = false; + mUrlFocusedFromQueryTiles = false; + mUrlFocusedWithoutAnimations = false; + + // Focus change caused by a close-tab may result in an invalid current tab. + if (mToolbarDataProvider.hasTab()) { + setUrlToPageUrl(); + } + + // Moving focus away from UrlBar(EditText) to a non-editable focus holder, such as + // ToolbarPhone, won't automatically hide keyboard app, but restart it with TYPE_NULL, + // which will result in a visual glitch. Also, currently, we do not allow moving focus + // directly from omnibox to web content's form field. Therefore, we hide keyboard on + // focus blur indiscriminately here. Note that hiding keyboard may lower FPS of other + // animation effects, but we found it tolerable in an experiment. + InputMethodManager imm = (InputMethodManager) getContext().getSystemService( + Context.INPUT_METHOD_SERVICE); + if (imm.isActive(mUrlBar)) imm.hideSoftInputFromWindow(getWindowToken(), 0, null); + } + + if (mToolbarDataProvider.isUsingBrandColor()) updateVisualsForState(); + + mStatusCoordinator.onUrlFocusChange(mUrlHasFocus); + + if (!mUrlFocusedWithoutAnimations) handleUrlFocusAnimation(mUrlHasFocus); + + if (mUrlHasFocus && mToolbarDataProvider.hasTab() && !mToolbarDataProvider.isIncognito()) { + if (mNativeInitialized + && TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()) { + GeolocationHeader.primeLocationForGeoHeader(); + } else { + mDeferredNativeRunnables.add(new Runnable() { + @Override + public void run() { + if (TemplateUrlServiceFactory.get().isDefaultSearchEngineGoogle()) { + GeolocationHeader.primeLocationForGeoHeader(); + } + } + }); + } + } + } + + /** + * Handle and run any necessary animations that are triggered off focusing the UrlBar. + * @param hasFocus Whether focus was gained. + */ + protected void handleUrlFocusAnimation(boolean hasFocus) { + removeCallbacks(mKeyboardResizeModeTask); + if (hasFocus) mUrlFocusedWithoutAnimations = false; + for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) { + listener.onUrlFocusChange(hasFocus); + } + } + + /** + * @return The margin to be applied to the URL bar based on the buttons currently visible next + * to it, used to avoid text overlapping the buttons and vice versa. + */ + private int getUrlContainerMarginEnd() { + int urlContainerMarginEnd = 0; + for (View childView : getUrlContainerViewsForMargin()) { + ViewGroup.MarginLayoutParams childLayoutParams = + (ViewGroup.MarginLayoutParams) childView.getLayoutParams(); + urlContainerMarginEnd += childLayoutParams.width + + MarginLayoutParamsCompat.getMarginStart(childLayoutParams) + + MarginLayoutParamsCompat.getMarginEnd(childLayoutParams); + } + if (mUrlActionContainer != null && mUrlActionContainer.getVisibility() == View.VISIBLE) { + ViewGroup.MarginLayoutParams urlActionContainerLayoutParams = + (ViewGroup.MarginLayoutParams) mUrlActionContainer.getLayoutParams(); + urlContainerMarginEnd += + MarginLayoutParamsCompat.getMarginStart(urlActionContainerLayoutParams) + + MarginLayoutParamsCompat.getMarginEnd(urlActionContainerLayoutParams); + } + return urlContainerMarginEnd; + } + + /** + * Updates the layout params for the location bar start aligned views. + */ + protected void updateLayoutParams() { + int startMargin = 0; + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + if (childView.getVisibility() != GONE) { + LayoutParams childLayoutParams = (LayoutParams) childView.getLayoutParams(); + if (MarginLayoutParamsCompat.getMarginStart(childLayoutParams) != startMargin) { + MarginLayoutParamsCompat.setMarginStart(childLayoutParams, startMargin); + childView.setLayoutParams(childLayoutParams); + } + if (childView == mUrlBar) break; + + int widthMeasureSpec; + int heightMeasureSpec; + if (childLayoutParams.width == LayoutParams.WRAP_CONTENT) { + widthMeasureSpec = + MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.AT_MOST); + } else if (childLayoutParams.width == LayoutParams.MATCH_PARENT) { + widthMeasureSpec = + MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.EXACTLY); + } else { + widthMeasureSpec = MeasureSpec.makeMeasureSpec( + childLayoutParams.width, MeasureSpec.EXACTLY); + } + if (childLayoutParams.height == LayoutParams.WRAP_CONTENT) { + heightMeasureSpec = + MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.AT_MOST); + } else if (childLayoutParams.height == LayoutParams.MATCH_PARENT) { + heightMeasureSpec = + MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY); + } else { + heightMeasureSpec = MeasureSpec.makeMeasureSpec( + childLayoutParams.height, MeasureSpec.EXACTLY); + } + childView.measure(widthMeasureSpec, heightMeasureSpec); + startMargin += childView.getMeasuredWidth(); + } + } + + int urlContainerMarginEnd = getUrlContainerMarginEnd(); + LayoutParams urlLayoutParams = (LayoutParams) mUrlBar.getLayoutParams(); + if (MarginLayoutParamsCompat.getMarginEnd(urlLayoutParams) != urlContainerMarginEnd) { + // Include the space which the URL bar will be translated post-layout into the + // end-margin so the URL bar doesn't overlap with the URL actions container. + if (SearchEngineLogoUtils.shouldShowSearchEngineLogo( + mToolbarDataProvider.isIncognito())) { + urlContainerMarginEnd += mStatusCoordinator.getEndPaddingPixelSizeOnFocusDelta(); + } + MarginLayoutParamsCompat.setMarginEnd(urlLayoutParams, urlContainerMarginEnd); + mUrlBar.setLayoutParams(urlLayoutParams); + } + } + + /** + * Gets the list of views that need to be taken into account for adding margin to the end of the + * URL bar. + * + * @return A {@link List} of the views to be taken into account for URL bar margin to avoid + * overlapping text and buttons. + */ + protected List<View> getUrlContainerViewsForMargin() { + List<View> outList = new ArrayList<View>(); + if (mUrlActionContainer == null) return outList; + + for (int i = 0; i < mUrlActionContainer.getChildCount(); i++) { + View childView = mUrlActionContainer.getChildAt(i); + if (childView.getVisibility() != GONE) outList.add(childView); + } + return outList; + } + + /** + * @return Whether the delete button should be shown. + */ + protected boolean shouldShowDeleteButton() { + // Show the delete button at the end when the bar has focus and has some text. + boolean hasText = !TextUtils.isEmpty(mUrlCoordinator.getTextWithAutocomplete()); + return hasText && (mUrlBar.hasFocus() || mUrlFocusChangeInProgress); + } + + /** + * Updates the display of the delete URL content button. + */ + protected void updateDeleteButtonVisibility() { + mDeleteButton.setVisibility(shouldShowDeleteButton() ? VISIBLE : GONE); + } + + /** + * @return Returns the original url of the page. + */ + public String getOriginalUrl() { + return mOriginalUrl; + } + + /** + * Changes the text on the url bar. The text update will be applied regardless of the current + * focus state (comparing to {@link #setUrlToPageUrl()} which only applies text updates when + * not focused). + * + * @param urlBarData The contents of the URL bar, both for editing and displaying. + * @param scrollType Specifies how the text should be scrolled in the unfocused state. + * @param selectionState Specifies how the text should be selected in the focused state. + * @return Whether the URL was changed as a result of this call. + */ + private boolean setUrlBarText( + UrlBarData urlBarData, @ScrollType int scrollType, @SelectionState int selectionState) { + return mUrlCoordinator.setUrlBarData(urlBarData, scrollType, selectionState); + } + + /** + * Clear any text in the URL bar. + * @return Whether this changed the existing text. + */ + private boolean setUrlBarTextEmpty() { + boolean textChanged = mUrlCoordinator.setUrlBarData( + UrlBarData.EMPTY, UrlBar.ScrollType.SCROLL_TO_BEGINNING, SelectionState.SELECT_ALL); + forceOnTextChanged(); + return textChanged; } /** @return The current active {@link Tab}. */ @@ -1114,20 +1286,6 @@ return mToolbarDataProvider.getTab(); } - @Override - public View getViewForUrlBackFocus() { - Tab tab = getCurrentTab(); - if (tab == null) return null; - return tab.getView(); - } - - @Override - public boolean allowKeyboardLearning() { - if (mToolbarDataProvider == null) return false; - return !mToolbarDataProvider.isIncognito(); - } - - @Override public void setUnfocusedWidth(int unfocusedWidth) { mStatusCoordinator.setUnfocusedLocationBarWidth(unfocusedWidth); } @@ -1138,74 +1296,6 @@ shouldShowSearchEngineLogo, isSearchEngineGoogle, searchEngineUrl); } - @Override - public void setUrlBarFocus( - boolean shouldBeFocused, @Nullable String pastedText, @OmniboxFocusReason int reason) { - if (shouldBeFocused) { - if (!mUrlHasFocus) recordOmniboxFocusReason(reason); - if (reason == LocationBar.OmniboxFocusReason.FAKE_BOX_TAP - || reason == LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS - || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS - || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP) { - mUrlFocusedFromFakebox = true; - } - - if (reason == LocationBar.OmniboxFocusReason.QUERY_TILES_NTP_TAP) { - mUrlFocusedFromFakebox = true; - mUrlFocusedFromQueryTiles = true; - } - - if (mUrlHasFocus && mUrlFocusedWithoutAnimations) { - handleUrlFocusAnimation(mUrlHasFocus); - } else { - mUrlBar.requestFocus(); - } - } else { - assert pastedText == null; - setKeyboardVisibility(false); - mUrlBar.clearFocus(); - } - - if (pastedText != null) { - // This must be happen after requestUrlFocus(), which changes the selection. - mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(pastedText), - UrlBar.ScrollType.NO_SCROLL, UrlBarCoordinator.SelectionState.SELECT_END); - forceOnTextChanged(); - } - } - - @Override - public boolean isUrlBarFocused() { - return mUrlHasFocus; - } - - @Override - public boolean isCurrentPage(NativePage nativePage) { - assert nativePage != null; - return nativePage == mToolbarDataProvider.getNewTabPageForCurrentTab(); - } - - @Override - public VoiceRecognitionHandler getVoiceRecognitionHandler() { - return mVoiceRecognitionHandler; - } - - @Override - public void addUrlFocusChangeListener(UrlFocusChangeListener listener) { - mUrlFocusChangeListeners.addObserver(listener); - } - - @Override - public void removeUrlFocusChangeListener(UrlFocusChangeListener listener) { - mUrlFocusChangeListeners.removeObserver(listener); - } - - @Override - protected void onWindowVisibilityChanged(int visibility) { - super.onWindowVisibilityChanged(visibility); - if (visibility == View.VISIBLE) updateMicButtonState(); - } - /** * Call to update the visibility of the buttons inside the location bar. */ @@ -1214,16 +1304,6 @@ } /** - * Call to notify the location bar that the state of the voice search microphone button may - * need to be updated. - */ - @Override - public void updateMicButtonState() { - mVoiceSearchEnabled = mVoiceRecognitionHandler.isVoiceSearchEnabled(); - updateButtonVisibility(); - } - - /** * Updates the display of the mic button. */ protected void updateMicButtonVisibility() { @@ -1242,75 +1322,6 @@ mShouldShowMicButtonWhenUnfocused = shouldShowMicButtonWhenUnfocused; } - /** - * Call to force the UI to update the state of various buttons based on whether or not the - * current tab is incognito. - */ - @Override - public void updateVisualsForState() { - // If the location bar is focused, the toolbar background color would be the default color - // regardless of whether it is branded or not. - final int defaultPrimaryColor = ChromeColors.getDefaultThemeColor( - getResources(), mToolbarDataProvider.isIncognito()); - final int primaryColor = - mUrlHasFocus ? defaultPrimaryColor : mToolbarDataProvider.getPrimaryColor(); - - // This will be called between inflation and initialization. For those calls, using a null - // ColorStateList should have no visible impact to the user. - ColorStateList micColorStateList = mAssistantVoiceSearchService == null - ? null - : mAssistantVoiceSearchService.getMicButtonColorStateList( - primaryColor, getContext()); - ApiCompatibilityUtils.setImageTintList(mMicButton, micColorStateList); - - final boolean useDarkColors = - !ColorUtils.shouldUseLightForegroundOnBackground(primaryColor); - ColorStateList colorStateList = - ChromeColors.getPrimaryIconTint(getContext(), !useDarkColors); - ApiCompatibilityUtils.setImageTintList(mDeleteButton, colorStateList); - - // If the URL changed colors and is not focused, update the URL to account for the new - // color scheme. - if (mUrlCoordinator.setUseDarkTextColors(useDarkColors) && !mUrlBar.hasFocus()) { - setUrlToPageUrl(); - } - - mStatusCoordinator.setUseDarkColors(useDarkColors); - mStatusCoordinator.setIncognitoBadgeVisibility( - mToolbarDataProvider.isIncognito() && !mIsTablet); - - if (mAutocompleteCoordinator != null) { - mAutocompleteCoordinator.updateVisualsForState( - useDarkColors, mToolbarDataProvider.isIncognito()); - } - } - - @Override - public void onTabLoadingNTP(NewTabPage ntp) { - ntp.setFakeboxDelegate(this); - } - - @Override - public View getContainerView() { - return this; - } - - @Override - public View getSecurityIconView() { - return mStatusCoordinator.getSecurityIconView(); - } - - @Override - public void setTitleToPageTitle() {} - - @Override - public void setShowTitle(boolean showTitle) {} - - @Override - public WindowAndroid getWindowAndroid() { - return mWindowAndroid; - } - @VisibleForTesting public StatusCoordinator getStatusCoordinatorForTesting() { return mStatusCoordinator; @@ -1327,20 +1338,6 @@ "Android.OmniboxFocusReason", reason, OmniboxFocusReason.NUM_ENTRIES); } - @Override - public void onAssistantVoiceSearchServiceChanged() { - Drawable drawable = mAssistantVoiceSearchService.getCurrentMicDrawable(); - mMicButton.setImageDrawable(drawable); - - final int defaultPrimaryColor = ChromeColors.getDefaultThemeColor( - getResources(), mToolbarDataProvider.isIncognito()); - final int primaryColor = - mUrlHasFocus ? defaultPrimaryColor : mToolbarDataProvider.getPrimaryColor(); - ColorStateList colorStateList = - mAssistantVoiceSearchService.getMicButtonColorStateList(primaryColor, getContext()); - ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList); - } - /** * Handles any actions to be performed after all other actions triggered by the URL focus * change. This will be called after any animations are performed to transition from one
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java index 6c0c794..58641f03 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
@@ -92,6 +92,120 @@ } /** + * Updates progress of current the URL focus change animation. + * + * @param fraction 1.0 is 100% focused, 0 is completely unfocused. + */ + @Override + public void setUrlFocusChangeFraction(float fraction) { + super.setUrlFocusChangeFraction(fraction); + + if (fraction > 0f) { + mUrlActionContainer.setVisibility(VISIBLE); + } else if (fraction == 0f && !isUrlFocusChangeInProgress()) { + // If a URL focus change is in progress, then it will handle setting the visibility + // correctly after it completes. If done here, it would cause the URL to jump due + // to a badly timed layout call. + mUrlActionContainer.setVisibility(GONE); + } + + updateButtonVisibility(); + mStatusCoordinator.setUrlFocusChangePercent(fraction); + } + + @Override + public void onUrlFocusChange(boolean hasFocus) { + if (hasFocus) { + // Remove the focus of this view once the URL field has taken focus as this view no + // longer needs it. + setFocusable(false); + setFocusableInTouchMode(false); + } + setUrlFocusChangeInProgress(true); + updateShouldAnimateIconChanges(); + super.onUrlFocusChange(hasFocus); + } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + boolean needsCanvasRestore = false; + if (child == mUrlBar && mUrlActionContainer.getVisibility() == VISIBLE) { + canvas.save(); + + // Clip the URL bar contents to ensure they do not draw under the URL actions during + // focus animations. Based on the RTL state of the location bar, the url actions + // container can be on the left or right side, so clip accordingly. + if (mUrlBar.getLeft() < mUrlActionContainer.getLeft()) { + canvas.clipRect(0, 0, (int) mUrlActionContainer.getX(), getBottom()); + } else { + canvas.clipRect(mUrlActionContainer.getX() + mUrlActionContainer.getWidth(), 0, + getWidth(), getBottom()); + } + needsCanvasRestore = true; + } + boolean retVal = super.drawChild(canvas, child, drawingTime); + if (needsCanvasRestore) { + canvas.restore(); + } + return retVal; + } + + @Override + public void finishUrlFocusChange(boolean hasFocus) { + super.finishUrlFocusChange(hasFocus); + if (!hasFocus) { + mUrlActionContainer.setVisibility(GONE); + } + mStatusCoordinator.onUrlAnimationFinished(hasFocus); + } + + @Override + protected void updateButtonVisibility() { + super.updateButtonVisibility(); + updateMicButtonVisibility(); + } + + @Override + public void updateShouldAnimateIconChanges() { + notifyShouldAnimateIconChanges(isUrlBarFocused() || isUrlFocusChangeInProgress()); + } + + @Override + public void setShowIconsWhenUrlFocused(boolean showIcon) { + super.setShowIconsWhenUrlFocused(showIcon); + mFirstVisibleFocusedView = showIcon ? mStatusView : mUrlBar; + mStatusCoordinator.setShowIconsWhenUrlFocused(showIcon); + } + + @Override + public void updateVisualsForState() { + super.updateVisualsForState(); + boolean isIncognito = getToolbarDataProvider().isIncognito(); + setShowIconsWhenUrlFocused(SearchEngineLogoUtils.shouldShowSearchEngineLogo(isIncognito)); + updateStatusVisibility(); + } + + @Override + public void onTabLoadingNTP(NewTabPage ntp) { + super.onTabLoadingNTP(ntp); + updateStatusVisibility(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + try (TraceEvent e = TraceEvent.scoped("LocationBarPhone.onMeasure")) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + try (TraceEvent e = TraceEvent.scoped("LocationBarPhone.onLayout")) { + super.onLayout(changed, left, top, right, bottom); + } + } + + /** * @return Width of child views before the first view that would be visible when location bar is * focused. The first visible, focused view should be either url bar or status icon. */ @@ -127,6 +241,17 @@ } /** + * Returns {@link FrameLayout.LayoutParams} of the LocationBar view. + * + * <p>TODO(1133482): Hide this View interaction if possible. + * + * @see View#getLayoutParams() + */ + public FrameLayout.LayoutParams getFrameLayoutParams() { + return (FrameLayout.LayoutParams) getLayoutParams(); + } + + /** * Calculates the offset required for the focused LocationBar to appear as it's still unfocused * so it can animate to a focused state. * @@ -210,129 +335,11 @@ return isRtl ? -translation : translation; } - /** - * Updates progress of current the URL focus change animation. - * - * @param fraction 1.0 is 100% focused, 0 is completely unfocused. - */ - @Override - public void setUrlFocusChangeFraction(float fraction) { - super.setUrlFocusChangeFraction(fraction); - - if (fraction > 0f) { - mUrlActionContainer.setVisibility(VISIBLE); - } else if (fraction == 0f && !isUrlFocusChangeInProgress()) { - // If a URL focus change is in progress, then it will handle setting the visibility - // correctly after it completes. If done here, it would cause the URL to jump due - // to a badly timed layout call. - mUrlActionContainer.setVisibility(GONE); - } - - updateButtonVisibility(); - mStatusCoordinator.setUrlFocusChangePercent(fraction); - } - - @Override - public void onUrlFocusChange(boolean hasFocus) { - if (hasFocus) { - // Remove the focus of this view once the URL field has taken focus as this view no - // longer needs it. - setFocusable(false); - setFocusableInTouchMode(false); - } - setUrlFocusChangeInProgress(true); - updateShouldAnimateIconChanges(); - super.onUrlFocusChange(hasFocus); - } - - @Override - protected boolean drawChild(Canvas canvas, View child, long drawingTime) { - boolean needsCanvasRestore = false; - if (child == mUrlBar && mUrlActionContainer.getVisibility() == VISIBLE) { - canvas.save(); - - // Clip the URL bar contents to ensure they do not draw under the URL actions during - // focus animations. Based on the RTL state of the location bar, the url actions - // container can be on the left or right side, so clip accordingly. - if (mUrlBar.getLeft() < mUrlActionContainer.getLeft()) { - canvas.clipRect(0, 0, (int) mUrlActionContainer.getX(), getBottom()); - } else { - canvas.clipRect(mUrlActionContainer.getX() + mUrlActionContainer.getWidth(), 0, - getWidth(), getBottom()); - } - needsCanvasRestore = true; - } - boolean retVal = super.drawChild(canvas, child, drawingTime); - if (needsCanvasRestore) { - canvas.restore(); - } - return retVal; - } - - @Override - public void finishUrlFocusChange(boolean hasFocus) { - super.finishUrlFocusChange(hasFocus); - if (!hasFocus) { - mUrlActionContainer.setVisibility(GONE); - } - mStatusCoordinator.onUrlAnimationFinished(hasFocus); - } - - public FrameLayout.LayoutParams getFrameLayoutParams() { - return (FrameLayout.LayoutParams) getLayoutParams(); - } - - @Override - protected void updateButtonVisibility() { - super.updateButtonVisibility(); - updateMicButtonVisibility(); - } - - @Override - public void updateShouldAnimateIconChanges() { - notifyShouldAnimateIconChanges(isUrlBarFocused() || isUrlFocusChangeInProgress()); - } - - @Override - public void setShowIconsWhenUrlFocused(boolean showIcon) { - super.setShowIconsWhenUrlFocused(showIcon); - mFirstVisibleFocusedView = showIcon ? mStatusView : mUrlBar; - mStatusCoordinator.setShowIconsWhenUrlFocused(showIcon); - } - private int getAdditionalOffsetForNTP() { return getResources().getDimensionPixelSize(R.dimen.sei_search_box_lateral_padding) - getResources().getDimensionPixelSize(R.dimen.sei_location_bar_lateral_padding); } - @Override - public void updateVisualsForState() { - super.updateVisualsForState(); - boolean isIncognito = getToolbarDataProvider().isIncognito(); - setShowIconsWhenUrlFocused(SearchEngineLogoUtils.shouldShowSearchEngineLogo(isIncognito)); - updateStatusVisibility(); - } - - @Override - public void onTabLoadingNTP(NewTabPage ntp) { - super.onTabLoadingNTP(ntp); - updateStatusVisibility(); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - try (TraceEvent e = TraceEvent.scoped("LocationBarPhone.onMeasure")) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - try (TraceEvent e = TraceEvent.scoped("LocationBarPhone.onLayout")) { - super.onLayout(changed, left, top, right, bottom); - } - } - /** Update the status visibility according to the current state held in LocationBar. */ private void updateStatusVisibility() { boolean incognito = getToolbarDataProvider().isIncognito();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarTablet.java index 7916b3af..4b62c4b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarTablet.java
@@ -141,11 +141,6 @@ return selectedTarget.onTouchEvent(event); } - // Returns amount by which to adjust to move value inside the given range. - private static float distanceToRange(float min, float max, float value) { - return value < min ? (min - value) : value > max ? (max - value) : 0; - } - @Override public void handleUrlFocusAnimation(final boolean hasFocus) { super.handleUrlFocusAnimation(hasFocus); @@ -184,15 +179,6 @@ } /** - * @param shouldShowButtons Whether buttons should be displayed in the URL bar when it's not - * focused. - */ - public void setShouldShowButtonsWhenUnfocused(boolean shouldShowButtons) { - mShouldShowButtonsWhenUnfocused = shouldShowButtons; - updateButtonVisibility(); - } - - /** * Updates progress of current the URL focus change animation. * * @param fraction 1.0 is 100% focused, 0 is completely unfocused. @@ -263,6 +249,15 @@ } /** + * @param shouldShowButtons Whether buttons should be displayed in the URL bar when it's not + * focused. + */ + public void setShouldShowButtonsWhenUnfocused(boolean shouldShowButtons) { + mShouldShowButtonsWhenUnfocused = shouldShowButtons; + updateButtonVisibility(); + } + + /** * @param button The {@link View} of the button to show. * @return An animator to run for the given view when showing buttons in the unfocused location * bar. This should also be used to create animators for showing toolbar buttons. @@ -403,6 +398,11 @@ return animators; } + /** Returns amount by which to adjust to move value inside the given range. */ + private static float distanceToRange(float min, float max, float value) { + return value < min ? (min - value) : value > max ? (max - value) : 0; + } + /** * Resets the alpha and translation X for all views affected by the animations for showing or * hiding buttons.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountConsistencyPromoAction.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountConsistencyPromoAction.java index cb1ab0a..c83e121 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountConsistencyPromoAction.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountConsistencyPromoAction.java
@@ -26,6 +26,9 @@ AccountConsistencyPromoAction.SHOWN, AccountConsistencyPromoAction.SUPPRESSED_SIGNIN_NOT_ALLOWED, AccountConsistencyPromoAction.SIGNED_IN_WITH_ADDED_ACCOUNT, + AccountConsistencyPromoAction.DISMISSED_SCRIM, + AccountConsistencyPromoAction.DISMISSED_SWIPE_DOWN, + AccountConsistencyPromoAction.DISMISSED_OTHER, }) @Retention(RetentionPolicy.SOURCE) public @interface AccountConsistencyPromoAction { @@ -79,5 +82,20 @@ */ int SIGNED_IN_WITH_ADDED_ACCOUNT = 8; - int MAX = 9; + /** + * User has dismissed the promo by tapping on the scrim above the bottom sheet. + */ + int DISMISSED_SCRIM = 9; + + /** + * User has dismissed the promo by swiping down the bottom sheet. + */ + int DISMISSED_SWIPE_DOWN = 10; + + /** + * User has dismissed the promo by other means. + */ + int DISMISSED_OTHER = 11; + + int MAX = 12; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetCoordinator.java index 689c47d..5f3a83d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetCoordinator.java
@@ -14,6 +14,7 @@ import org.chromium.chrome.browser.incognito.interstitial.IncognitoInterstitialCoordinator; import org.chromium.chrome.browser.incognito.interstitial.IncognitoInterstitialDelegate; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; +import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason; import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver; import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -28,6 +29,22 @@ private final BottomSheetController mBottomSheetController; private final BottomSheetObserver mBottomSheetObserver = new EmptyBottomSheetObserver() { @Override + public void onSheetClosed(@StateChangeReason int reason) { + super.onSheetClosed(reason); + final @AccountConsistencyPromoAction int promoAction; + if (reason == StateChangeReason.SWIPE) { + promoAction = AccountConsistencyPromoAction.DISMISSED_SWIPE_DOWN; + } else if (reason == StateChangeReason.BACK_PRESS) { + promoAction = AccountConsistencyPromoAction.DISMISSED_BACK; + } else if (reason == StateChangeReason.TAP_SCRIM) { + promoAction = AccountConsistencyPromoAction.DISMISSED_SCRIM; + } else { + promoAction = AccountConsistencyPromoAction.DISMISSED_OTHER; + } + AccountPickerDelegate.recordAccountConsistencyPromoAction(promoAction); + } + + @Override public void onSheetStateChanged(int newState) { super.onSheetStateChanged(newState); if (newState == BottomSheetController.SheetState.HIDDEN) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetMediator.java index d8195d1..4b0f055 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerBottomSheetMediator.java
@@ -115,8 +115,6 @@ return true; } else { // The bottom sheet will be dismissed for all other view states - AccountPickerDelegate.recordAccountConsistencyPromoAction( - AccountConsistencyPromoAction.DISMISSED_BACK); return false; } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedPromoRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedPromoRenderTest.java index 8b6cd35a..83c02bc 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedPromoRenderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedPromoRenderTest.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser.bookmarks; -import android.accounts.Account; import android.view.View; import androidx.test.filters.MediumTest; @@ -33,9 +32,7 @@ import org.chromium.chrome.test.util.BookmarkTestRule; import org.chromium.chrome.test.util.ChromeRenderTestRule; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; -import org.chromium.components.signin.ProfileDataSource; import org.chromium.components.signin.test.util.FakeProfileDataSource; -import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.test.util.NightModeTestUtils; import org.chromium.ui.test.util.UiDisableIf; @@ -49,10 +46,8 @@ public class BookmarkPersonalizedPromoRenderTest { // FakeProfileDataSource is required to create the ProfileDataCache entry with sync_off badge // for Sync promo. - private final FakeProfileDataSource mFakeProfileDataSource = new FakeProfileDataSource(); - private final AccountManagerTestRule mAccountManagerTestRule = - new AccountManagerTestRule(mFakeProfileDataSource); + new AccountManagerTestRule(new FakeProfileDataSource()); private final ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); @@ -67,7 +62,7 @@ @Rule public final ChromeRenderTestRule mRenderTestRule = - ChromeRenderTestRule.Builder.withPublicCorpus().build(); + ChromeRenderTestRule.Builder.withPublicCorpus().setRevision(2).build(); @ParameterAnnotations.UseMethodParameterBefore(NightModeTestUtils.NightModeParams.class) public void setupNightMode(boolean nightModeEnabled) { @@ -84,13 +79,7 @@ public void setUp() { // Native side needs to loaded before signing in test account. mActivityTestRule.startMainActivityOnBlankPage(); - Account account = mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(); - TestThreadUtils.runOnUiThreadBlocking( - () - -> mFakeProfileDataSource.setProfileData(account.name, - new ProfileDataSource.ProfileData(account.name, - mAccountManagerTestRule.createProfileImage(), "Full Name", - "Given Name"))); + mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(); } @After
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/RecentTabsPageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/RecentTabsPageTest.java index e1418d9..cc9c05c9 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/RecentTabsPageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ntp/RecentTabsPageTest.java
@@ -29,7 +29,6 @@ import org.chromium.chrome.test.util.RecentTabsPageTestUtils; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; import org.chromium.components.embedder_support.util.UrlConstants; -import org.chromium.components.signin.ProfileDataSource; import org.chromium.components.signin.test.util.FakeProfileDataSource; import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.CriteriaHelper; @@ -49,18 +48,16 @@ public class RecentTabsPageTest { // FakeProfileDataSource is required to create the ProfileDataCache entry with sync_off badge // for Sync promo. - private final FakeProfileDataSource mFakeProfileDataSource = new FakeProfileDataSource(); - @Rule public final AccountManagerTestRule mAccountManagerTestRule = - new AccountManagerTestRule(mFakeProfileDataSource); + new AccountManagerTestRule(new FakeProfileDataSource()); @Rule public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); @Rule public final ChromeRenderTestRule mRenderTestRule = - ChromeRenderTestRule.Builder.withPublicCorpus().build(); + ChromeRenderTestRule.Builder.withPublicCorpus().setRevision(2).build(); private FakeRecentlyClosedTabManager mManager; private Tab mTab; @@ -104,12 +101,6 @@ @Feature("RenderTest") public void testPersonalizedSigninPromoInRecentTabsPage() throws Exception { Account account = mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(); - TestThreadUtils.runOnUiThreadBlocking( - () - -> mFakeProfileDataSource.setProfileData(account.name, - new ProfileDataSource.ProfileData(account.name, - mAccountManagerTestRule.createProfileImage(), "Full Name", - "Given Name"))); RecentTabsManager.forcePromoStateForTests( RecentTabsManager.PromoState.PROMO_SIGNIN_PERSONALIZED); mPage = loadRecentTabsPage(); @@ -121,12 +112,6 @@ @Feature("RenderTest") public void testPersonalizedSyncPromoInRecentTabsPage() throws Exception { Account account = mAccountManagerTestRule.addTestAccountThenSigninAndEnableSync(); - TestThreadUtils.runOnUiThreadBlocking( - () - -> mFakeProfileDataSource.setProfileData(account.name, - new ProfileDataSource.ProfileData(account.name, - mAccountManagerTestRule.createProfileImage(), "Full Name", - "Given Name"))); RecentTabsManager.forcePromoStateForTests( RecentTabsManager.PromoState.PROMO_SYNC_PERSONALIZED); mPage = loadRecentTabsPage();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java index d699892..e13026d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java
@@ -46,12 +46,15 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.MetricsUtils; +import org.chromium.base.test.util.MetricsUtils.HistogramDelta; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.incognito.IncognitoUtils; import org.chromium.chrome.browser.incognito.interstitial.IncognitoInterstitialDelegate; +import org.chromium.chrome.browser.signin.account_picker.AccountConsistencyPromoAction; import org.chromium.chrome.browser.signin.account_picker.AccountPickerBottomSheetCoordinator; import org.chromium.chrome.browser.signin.account_picker.AccountPickerDelegate; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; @@ -310,18 +313,26 @@ @Test @MediumTest public void testSignInDefaultAccountOnCollapsedSheet() { + MetricsUtils.HistogramDelta accountConsistencyHistogram = + new HistogramDelta("Signin.AccountConsistencyPromoAction", + AccountConsistencyPromoAction.SIGNED_IN_WITH_DEFAULT_ACCOUNT); buildAndShowCollapsedBottomSheet(); clickContinueButtonAndCheckSignInInProgressSheet(); + Assert.assertEquals(1, accountConsistencyHistogram.getDelta()); } @Test @MediumTest public void testSignInAnotherAccount() { + MetricsUtils.HistogramDelta accountConsistencyHistogram = + new HistogramDelta("Signin.AccountConsistencyPromoAction", + AccountConsistencyPromoAction.SIGNED_IN_WITH_NON_DEFAULT_ACCOUNT); buildAndShowExpandedBottomSheet(); onView(withText(PROFILE_DATA2.getAccountName())).perform(click()); CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById( R.id.account_picker_continue_as_button)::isShown); clickContinueButtonAndCheckSignInInProgressSheet(); + Assert.assertEquals(1, accountConsistencyHistogram.getDelta()); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java index 5101b38..a5ae71c 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/SyncErrorCardPreferenceTest.java
@@ -7,7 +7,6 @@ import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; -import android.accounts.Account; import android.view.View; import androidx.test.filters.LargeTest; @@ -38,8 +37,6 @@ import org.chromium.chrome.test.util.ChromeRenderTestRule; import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; -import org.chromium.components.signin.AccountUtils; -import org.chromium.components.signin.ProfileDataSource; import org.chromium.components.signin.base.GoogleServiceAuthError; import org.chromium.components.signin.test.util.FakeProfileDataSource; import org.chromium.content_public.browser.test.util.TestThreadUtils; @@ -55,11 +52,9 @@ public class SyncErrorCardPreferenceTest { // FakeProfileDataSource is required to create the ProfileDataCache entry with sync_error badge // for Sync error card. - private final FakeProfileDataSource mFakeProfileDataSource = new FakeProfileDataSource(); - @Rule public final AccountManagerTestRule mAccountManagerTestRule = - new AccountManagerTestRule(mFakeProfileDataSource); + new AccountManagerTestRule(new FakeProfileDataSource()); @Rule public final ChromeTabbedActivityTestRule mActivityTestRule = @@ -71,7 +66,7 @@ @Rule public final ChromeRenderTestRule mRenderTestRule = - ChromeRenderTestRule.Builder.withPublicCorpus().build(); + ChromeRenderTestRule.Builder.withPublicCorpus().setRevision(2).build(); @Mock private AndroidSyncSettings mAndroidSyncSettingsMock; @@ -96,15 +91,9 @@ // ProfileSyncService. mActivityTestRule.startMainActivityOnBlankPage(); - Account account = - AccountUtils.createAccountFromName(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); TestThreadUtils.runOnUiThreadBlocking(() -> { mFakeProfileSyncService = new FakeProfileSyncService(); ProfileSyncService.overrideForTests(mFakeProfileSyncService); - mFakeProfileDataSource.setProfileData(account.name, - new ProfileDataSource.ProfileData(account.name, - mAccountManagerTestRule.createProfileImage(), "Full Name", - "Given Name")); AndroidSyncSettings.overrideForTests(mAndroidSyncSettingsMock); when(mAndroidSyncSettingsMock.isChromeSyncEnabled()).thenReturn(true); }); @@ -114,7 +103,6 @@ public void tearDown() { TestThreadUtils.runOnUiThreadBlocking(() -> { ProfileSyncService.resetForTests(); - mFakeProfileDataSource.setProfileData(AccountManagerTestRule.TEST_ACCOUNT_EMAIL, null); }); }
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index 5ac901b..4a041b4 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">علامة تبويب Chromium</translation> <translation id="2718390899429598676">لمزيد من الأمان، سيشفر Chromium بياناتك</translation> <translation id="2770231113462710648">تغيير المتصفح التلقائي إلى:</translation> +<translation id="2774556997178638058">لقد أوقف <ph name="BEGIN_LINK" />المشرف<ph name="END_LINK" /> ميزة "التحقُّق من البرامج الضارّة" في متصفِّح Chromium.</translation> <translation id="2799223571221894425">إعادة تشغيل</translation> <translation id="2847479871509788944">إزالة من Chromium</translation> <translation id="2853765747879685679">السؤال عند فتح Chromium</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">حو&ل Chromium</translation> <translation id="2977470724722393594">Chromium محدّث</translation> <translation id="2983934633046890458">يحاول Chromium تعديل كلمات المرور.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل يوم واحد.}zero{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} يوم.}two{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل يومَين ({NUM_DAYS}).}few{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} أيام.}many{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} يومًا.}other{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} يوم.}}</translation> <translation id="3032706164202344641">يتعذّر على Chromium التحقّق من كلمات المرور. يُرجى إعادة المحاولة.</translation> <translation id="3032787606318309379">جارٍ الإضافة إلى Chromium...</translation> <translation id="3068515742935458733">يمكنك المساعدة في تحسين Chromium عن طريق إرسال تقارير الأعطال و<ph name="UMA_LINK" /> إلى Google</translation> @@ -70,6 +72,7 @@ <translation id="347328004046849135">في حال تسجيل الدخول باستخدام كلمة مرور محتمَل تعرّضها للاختراق، سيرسل Chromium إشعارًا إليك.</translation> <translation id="3474745554856756813">سيعمل هذا على حذف <ph name="ITEMS_COUNT" /> من العناصر من هذا الجهاز. لاسترداد بياناتك لاحقًا، سجّل الدخول إلى Chromium كـ <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">يُرجى إغلاق جميع نوافذ Chromium وإعادة المحاولة.</translation> +<translation id="3527440529060401414">يمكن لمتصفِّح Chromium التحقُّق من البرامج الضارّة على جهاز الكمبيوتر.</translation> <translation id="3575459661164320785">هناك برنامج ضار على جهاز الكمبيوتر. ويمكن لمتصفِّح Chrome إزالته واستعادة إعداداتك وإيقاف الإضافات لكي يعمل متصفِّحك بشكلٍ طبيعي من جديد.</translation> <translation id="3639635944603682591">ستُحذَف بيانات تصفُّح هذا المستخدم من هذا الجهاز. ولاسترداد البيانات، سجّل الدخول إلى Chromium بصفتك <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل.}=1{يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نافذة التصفح المتخفي.}two{يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نافذتَي التصفح المتخفي.}few{يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}many{يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}other{يتوفر تحديث جديد لبرنامج Chromium وسيتم تطبيقه عند إعادة التشغيل. لن تتم إعادة فتح نوافذ التصفّح المتخفي البالغ عددها #.}}</translation> @@ -85,18 +88,21 @@ <translation id="3945058413678539331">يحاول Chromium نسخ كلمات المرور. اكتب كلمة مرور Windows للسماح بذلك.</translation> <translation id="4036079820698952681">ساعد في تحسين Chromium بالإبلاغ عن <ph name="BEGIN_LINK" />الإعدادات الحالية<ph name="END_LINK" /></translation> <translation id="4050175100176540509">تحسينات الأمان المهمة والميزات الجديدة متاحة في أحدث إصدار.</translation> +<translation id="4136604564421273381">يزيل متصفِّح Chromium حاليًا البرامج الضارّة من جهاز الكمبيوتر...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - تسجيل الدخول إلى الشبكة - Chromium</translation> <translation id="421369550622382712">اكتشف تطبيقات، وألعاب، وإضافات، ومظاهر رائعة لمتصفح Chromium.</translation> <translation id="4216212958613226427">يتم استخدام هذه اللغة لعرض واجهة مستخدم Chromium</translation> <translation id="4230135487732243613">هل ترغب في ربط بياناتك في Chromium بهذا الحساب؟</translation> <translation id="4271805377592243930">الحصول على مساعدة في Chromium</translation> <translation id="4285930937574705105">تعذّر إتمام عملية التثبيت بسبب خطأ غير محدد. إذا كان Chromium في حالة التشغيل حاليًا، يُرجى إغلاقه وإعادة المحاولة.</translation> +<translation id="4352041330999353637">لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق يوم أمس.</translation> <translation id="4407044323746248786">هل تريد الخروج من Chromium على أي حال؟</translation> <translation id="4415566066719264597">السماح بتشغيل Chromium في الخلفية</translation> <translation id="4423735387467980091">تخصيص Chromium والتحكم فيه</translation> <translation id="4544142686420020088">تعذّر تحديث Chromium بسبب حدوث خطأ. <ph name="BEGIN_LINK" />حلّ مشاكل تحديث Chrome وتعذُّر التحديثات<ph name="END_LINK" /></translation> <translation id="4567424176335768812">لقد سجلت دخولك باعتبارك <ph name="USER_EMAIL_ADDRESS" />. ويُمكنك الآن الاستمتاع بالدخول إلى الإشارات المرجعية، والسجلّ، والإعدادات الأخرى على جميع الأجهزة التي تسجّل الدخول إليها.</translation> <translation id="459535195905078186">تطبيقات Chromium</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل دقيقة واحدة.}zero{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقيقة.}two{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل دقيقتَين ({NUM_MINS}).}few{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقائق.}many{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقيقة.}other{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقيقة.}}</translation> <translation id="4677944499843243528">يبدو أن الملف الشخصي قيد الاستخدام بواسطة عملية أخرى في Chromium (<ph name="PROCESS_ID" />) على جهاز كمبيوتر آخر (<ph name="HOST_NAME" />). وقد تمّ قفل الملف الشخصي من جانب Chromium لضمان عدم تعرضه للتلف. فإذا كنت واثقًا من عدم وجود عمليات أخرى قيد التشغيل على جهاز الكمبيوتر، فيُمكنك فتح قفل الملف الشخصي وإعادة تشغيل Chromium مجددًا.</translation> <translation id="469338717132742108">الحصول على مساعدة في نظام التشغيل Chromium</translation> <translation id="4708774505295300557">سجّل شخص ما الدخول من قبل إلى Chromium على جهاز الكمبيوتر هذا باسم <ph name="ACCOUNT_EMAIL_LAST" />. يُرجى إنشاء حساب مستخدم جديد في Chromium للإبقاء على معلوماتك بشكلٍ منفصل.</translation> @@ -105,6 +111,7 @@ <translation id="4750035648288509542">أوشك التحديث على الانتهاء. يجب إعادة تشغيل Chromium لإكمال التحديث. ولن تتم إعادة فتح نوافذ التصفّح المتخفي.</translation> <translation id="4788777615168560705">يتعذّر على Chromium التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة أو <ph name="BEGIN_LINK" />التحقُّق من كلمات المرور في حسابك على Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">يستخدم ذلك المدقق الإملائي نفسه الذي يتم استخدامه في "بحث Google". ويتم إرسال النص الذي تكتبه في المتصفّح إلى Google. يمكنك دائمًا تغيير هذا السلوك في الإعدادات.</translation> +<translation id="487524289568229802">يتحقّق متصفِّح Chromium حاليًا من البرامج الضارّة على جهاز الكمبيوتر...</translation> <translation id="4888717733111232871">قاعدة الوارد إلى Chromium للسماح بحركة مرور mDNS.</translation> <translation id="4893632094755846570">سيؤدي هذا الإجراء إلى حذف بيانات التصفُّح من هذا الجهاز نهائيًا. لاسترداد البيانات، يُرجى تسجيل الدخول إلى Chromium بحساب</translation> <translation id="4943838377383847465">Chromium في وضع الخلفية.</translation> @@ -169,6 +176,7 @@ قد تكون بعض الميزات غير متاحة. يُرجى تحديد دليل ملف شخصي مختلف أو استخدام إصدار أحدث من Chromium.</translation> <translation id="6734080038664603509">تح&ديث Chromium</translation> <translation id="6734291798041940871">يتم تثبيت Chromium بالفعل لجميع المستخدمين على جهاز الكمبيوتر.</translation> +<translation id="6737557815519435616">لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل قليل.</translation> <translation id="6762551859069255163">يمكنك استخدام ملفات شخصية مختلفة في Chromium للفصل بين التصفُّح الخاص بالعمل والتصفُّح الشخصي، أو للفصل بين عدة أشخاص يستخدمون هذا الجهاز.</translation> <translation id="6774082503108938489">أوقفَ أحد والدَيك "أذونات المواقع الإلكترونية والتطبيقات والإضافات" لمتصفِّح Chromium. ولا يمكن تفعيل <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="6847869444787758381">يتم إعلامك من خلال Chromium في حال تم اختراق كلمات المرور في أي وقت.</translation> @@ -178,6 +186,7 @@ <translation id="6964305034639999644">فتح الرابط في نافذة تصفح متخفٍ في Chromium</translation> <translation id="6990124437352146030">يحتاج Chromium إلى إذن للوصول إلى الميكروفون من أجل الموقع الإلكتروني هذا.</translation> <translation id="701244094609242530">يتعذّر على Chromium التحقّق من الإضافات. يُرجى إعادة المحاولة.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل ساعة واحدة.}zero{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعة.}two{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل ساعتَين ({NUM_HOURS}).}few{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعات.}many{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعة.}other{لم يعثر متصفِّح Chromium على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعة.}}</translation> <translation id="705851970750939768">تحديث Chromium</translation> <translation id="7066436765290594559">تعذر على نظام التشغيل Chromium مزامنة البيانات. يُرجى تحديث عبارة مرور المزامنة.</translation> <translation id="7067091210845072982">في حال لم تتضمن صورة ما وصفًا مفيدًا، سيحاول Chromium توفير وصف لك. لإنشاء الأوصاف، سيتم إرسال الصور إلى Google.</translation> @@ -238,6 +247,7 @@ <translation id="8621669128220841554">تعذّر التثبيت نظرًا لحدوث خطأ غير محدد. يُرجى إعادة تنزيل Chromium.</translation> <translation id="8697124171261953979">كما أنها تتحكم في الصفحة التي تظهر عند تشغيل Chromium أو إجراء بحث من المربع متعدد الاستخدامات.</translation> <translation id="8704119203788522458">هذا هو Chromium الخاص بك</translation> +<translation id="8733034664173984083">حدث خطأ أثناء تحقُّق متصفِّح Chromium من البرامج الضارّة على جهاز الكمبيوتر.</translation> <translation id="8796602469536043152">يحتاج Chromium إلى إذن للوصول إلى الكاميرا والميكروفون من أجل الموقع الإلكتروني هذا.</translation> <translation id="8803635938069941624">بنود نظام تشغيل Chromium</translation> <translation id="8821041990367117597">تعذر على Chromium مزامنة البيانات نظرًا لأن تفاصيل تسجيل الدخول إلى حسابك قديمة.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb index 03ba16e..6813d62 100644 --- a/chrome/app/resources/chromium_strings_fr.xtb +++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -45,6 +45,7 @@ <translation id="2711502716910134313">Onglet Chromium</translation> <translation id="2718390899429598676">Pour plus de sécurité, vos données seront chiffrées dans Chromium.</translation> <translation id="2770231113462710648">Remplacer le navigateur par défaut par :</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />Votre administrateur<ph name="END_LINK" /> a désactivé la détection des logiciels malveillants par Chromium</translation> <translation id="2799223571221894425">Relancer</translation> <translation id="2847479871509788944">Supprimer de Chromium</translation> <translation id="2853765747879685679">Me demander quand j'ouvre Chromium</translation> @@ -52,6 +53,7 @@ <translation id="2910007522516064972">À propos de &Chromium</translation> <translation id="2977470724722393594">Chromium est à jour</translation> <translation id="2983934633046890458">Chromium tente de modifier les mots de passe.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a 1 jour.}one{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_DAYS} jour.}other{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_DAYS} jours.}}</translation> <translation id="3032706164202344641">Chromium ne parvient pas à vérifier vos mots de passe. Réessayez plus tard.</translation> <translation id="3032787606318309379">Ajout à Chromium en cours…</translation> <translation id="3068515742935458733">Aidez-nous à améliorer Chromium en nous envoyant des rapports d'erreur et des <ph name="UMA_LINK" />.</translation> @@ -71,6 +73,7 @@ <translation id="347328004046849135">Chromium vous avertira si vous vous connectez avec un mot de passe compromis</translation> <translation id="3474745554856756813">Cette action aura pour effet de supprimer <ph name="ITEMS_COUNT" /> éléments de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Veuillez fermer toutes les fenêtres de Chromium, puis réessayer.</translation> +<translation id="3527440529060401414">Chromium peut rechercher des logiciels malveillants sur votre ordinateur</translation> <translation id="3575459661164320785">Un logiciel malveillant a été détecté sur votre ordinateur. Chromium peut le supprimer, restaurer vos paramètres et désactiver les extensions pour que votre navigateur fonctionne de nouveau normalement.</translation> <translation id="3639635944603682591">Les données de navigation de cet utilisateur vont être supprimées de cet appareil. Pour les récupérer, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur.}=1{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que la fenêtre de navigation privée ne sera pas rouverte.}one{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que la fenêtre de navigation privée (#) ne sera pas rouverte.}other{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que les # fenêtres de navigation privée ne seront pas rouvertes.}}</translation> @@ -86,18 +89,21 @@ <translation id="3945058413678539331">Chromium tente de copier les mots de passe. Saisissez votre mot de passe Windows pour autoriser cette opération.</translation> <translation id="4036079820698952681">Aidez-nous à améliorer Chromium en nous signalant vos <ph name="BEGIN_LINK" />paramètres actuels<ph name="END_LINK" /></translation> <translation id="4050175100176540509">La dernière version propose d'importantes améliorations de la sécurité ainsi que de nouvelles fonctionnalités.</translation> +<translation id="4136604564421273381">Chromium supprime des logiciels malveillants de votre ordinateur…</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - Connexion au réseau - Chromium</translation> <translation id="421369550622382712">Découvrez des applications, des jeux, des extensions et des thèmes exceptionnels pour Chromium.</translation> <translation id="4216212958613226427">Cette langue est utilisée pour l'UI Chromium</translation> <translation id="4230135487732243613">Associer vos données Chromium à ce compte ?</translation> <translation id="4271805377592243930">Obtenir de l'aide avec Chromium</translation> <translation id="4285930937574705105">Échec de l'installation suite à une erreur non spécifiée. Si Chromium est en cours d'exécution, veuillez le fermer, puis réessayer.</translation> +<translation id="4352041330999353637">Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : hier.</translation> <translation id="4407044323746248786">Quitter Chromium quand même ?</translation> <translation id="4415566066719264597">Laisser Chromium s'exécuter en arrière-plan</translation> <translation id="4423735387467980091">Personnaliser et contrôler Chromium</translation> <translation id="4544142686420020088">Échec de la mise à jour de Chromium en raison d'une erreur. <ph name="BEGIN_LINK" />Découvrez comment résoudre ce type de problème.<ph name="END_LINK" /></translation> <translation id="4567424176335768812">Vous êtes connecté avec l'adresse e-mail <ph name="USER_EMAIL_ADDRESS" />. Vous pouvez maintenant accéder à vos favoris, à l'historique et aux autres paramètres sur tous les appareils sur lesquels vous êtes connecté.</translation> <translation id="459535195905078186">Applications Chromium</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a 1 minute.}one{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_MINS} minute.}other{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_MINS} minutes.}}</translation> <translation id="4677944499843243528">Le profil semble être utilisé dans le cadre d'un autre processus Chromium (<ph name="PROCESS_ID" />) sur un autre ordinateur (<ph name="HOST_NAME" />). Ce profil a été verrouillé de sorte qu'il ne soit pas endommagé. Si vous êtes sûr que le profil n'est utilisé dans le cadre d'aucun autre processus, vous pouvez le déverrouiller et relancer Chromium.</translation> <translation id="469338717132742108">Obtenir de l'aide avec Chromium OS</translation> <translation id="4708774505295300557">Un utilisateur s'est récemment connecté à Chromium sur cet ordinateur en tant que <ph name="ACCOUNT_EMAIL_LAST" />. Veuillez créer un autre utilisateur Chromium pour séparer vos informations.</translation> @@ -106,6 +112,7 @@ <translation id="4750035648288509542">Presque à jour ! Relancez Chromium pour terminer la mise à jour. Sachez que les fenêtres de navigation privée ne seront pas rouvertes.</translation> <translation id="4788777615168560705">Chromium ne parvient pas à vérifier vos mots de passe. Réessayez dans 24 heures ou <ph name="BEGIN_LINK" />vérifiez les mots de passe enregistrés dans votre compte Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Le correcteur orthographique utilisé est le même que celui employé dans la recherche Google. Le texte que vous saisissez dans le navigateur est envoyé à Google. Vous pouvez toujours modifier ce comportement dans les paramètres.</translation> +<translation id="487524289568229802">Chromium recherche des logiciels malveillants sur votre ordinateur…</translation> <translation id="4888717733111232871">Règle de trafic entrant pour Chromium autorisant le trafic mDNS</translation> <translation id="4893632094755846570">Cette action aura pour effet de supprimer définitivement vos données de navigation de cet appareil. Pour les récupérer, connectez-vous à Chromium en tant que</translation> <translation id="4943838377383847465">Chromium est exécuté en mode arrière-plan</translation> @@ -170,6 +177,7 @@ Certaines fonctionnalités seront peut-être indisponibles. Veuillez spécifier un autre répertoire de profil ou utiliser une version plus récente de Chromium.</translation> <translation id="6734080038664603509">Mettre à jour &Chromium</translation> <translation id="6734291798041940871">Chromium est déjà installé pour tous les utilisateurs de votre ordinateur.</translation> +<translation id="6737557815519435616">Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a quelques instants.</translation> <translation id="6762551859069255163">Utilisez plusieurs profils dans Chromium pour distinguer la navigation professionnelle de la navigation personnelle, ou pour les différentes personnes qui utilisent cet appareil</translation> <translation id="6774082503108938489">L'un de tes parents a désactivé l'option "Autorisations des sites, applications et extensions" pour Chromium. Tu ne peux pas activer cette <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="6847869444787758381">Chromium vous indique si vos mots de passe ont été piratés</translation> @@ -179,6 +187,7 @@ <translation id="6964305034639999644">Ouvrir le lien dans la fenêtre de navi&gation privée Chromium</translation> <translation id="6990124437352146030">Chromium a besoin de votre autorisation pour accéder à votre micro pour ce site</translation> <translation id="701244094609242530">Chromium ne parvient pas à vérifier vos extensions. Réessayez plus tard.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a une heure.}one{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heure.}other{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heures.}}</translation> <translation id="705851970750939768">Mettre à jour Chromium</translation> <translation id="7066436765290594559">Impossible de synchroniser vos données dans Chromium OS. Veuillez mettre à jour votre phrase secrète de synchronisation.</translation> <translation id="7067091210845072982">Si une image n'est pas accompagnée d'une description utile, Chromium essaiera de vous en proposer une. Pour nous permettre de créer des descriptions, les images sont envoyées à Google.</translation> @@ -238,6 +247,7 @@ <translation id="8621669128220841554">Échec de l'installation en raison d'une erreur non spécifiée. Veuillez télécharger Chromium à nouveau.</translation> <translation id="8697124171261953979">Elle contrôle également la page qui s'affiche au démarrage de Chromium ou lorsque vous effectuez une recherche dans l'omnibox.</translation> <translation id="8704119203788522458">Voici votre Chromium</translation> +<translation id="8733034664173984083">Une erreur s'est produite alors que Chromium était en train de rechercher des logiciels malveillants sur votre ordinateur</translation> <translation id="8796602469536043152">Chromium a besoin de votre autorisation pour accéder à votre appareil photo et à votre micro pour ce site</translation> <translation id="8803635938069941624">Conditions d'utilisation de Chromium OS</translation> <translation id="8821041990367117597">Impossible de synchroniser vos données dans Chromium, car les informations de connexion de votre compte ne sont plus à jour.</translation>
diff --git a/chrome/app/resources/chromium_strings_gl.xtb b/chrome/app/resources/chromium_strings_gl.xtb index f2ec695..da66022 100644 --- a/chrome/app/resources/chromium_strings_gl.xtb +++ b/chrome/app/resources/chromium_strings_gl.xtb
@@ -46,6 +46,7 @@ <translation id="2711502716910134313">Pestana de Chromium</translation> <translation id="2718390899429598676">Para obter unha maior seguranza, Chromium encriptará os teus datos.</translation> <translation id="2770231113462710648">Cambiar o navegador predeterminado a:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />O teu administrador<ph name="END_LINK" /> desactivou a comprobación de software daniño de Chromium</translation> <translation id="2799223571221894425">Iniciar de novo</translation> <translation id="2847479871509788944">Eliminar de Chromium...</translation> <translation id="2853765747879685679">Preguntar cando abra Chromium</translation> @@ -53,6 +54,7 @@ <translation id="2910007522516064972">Acerca de &Chromium</translation> <translation id="2977470724722393594">Chromium está actualizado</translation> <translation id="2983934633046890458">Chromium está tentando editar contrasinais.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai 1 día.}other{Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai {NUM_DAYS} días.}}</translation> <translation id="3032706164202344641">Chromium non puido comprobar os teus contrasinais. Téntao de novo máis tarde.</translation> <translation id="3032787606318309379">Engadindo a Chromium...</translation> <translation id="3068515742935458733">Axudar a mellorar Chromium enviando informes sobre fallos e <ph name="UMA_LINK" /> a Google</translation> @@ -72,6 +74,7 @@ <translation id="347328004046849135">Chromium enviarache unha notificación cando inicies sesión cun contrasinal vulnerado</translation> <translation id="3474745554856756813">Esta acción eliminará <ph name="ITEMS_COUNT" /> elementos deste dispositivo. Para recuperar os teus datos máis tarde, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Pecha todas as ventás de Chromium e téntao de novo.</translation> +<translation id="3527440529060401414">Chromium pode buscar software daniño no teu ordenador</translation> <translation id="3575459661164320785">O teu ordenador ten software daniño. Chromium pode quitalo, restaurar a configuración e desactivar as extensións para que o navegador funcione con normalidade de novo.</translation> <translation id="3639635944603682591">Os datos de navegación desta persoa eliminaranse deste dispositivo. Para recuperalos, inicia sesión en Chromium como <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Hai dispoñible unha actualización nova para Chromium e aplicarase en canto o reinicies.}=1{Hai dispoñible unha actualización nova para Chromium e aplicarase en canto o reinicies. A ventá do modo de incógnito non se volverá abrir.}other{Hai dispoñible unha actualización nova para Chromium e aplicarase en canto o reinicies. As # ventás do modo de incógnito non se volverán abrir.}}</translation> @@ -87,18 +90,21 @@ <translation id="3945058413678539331">Chromium está tentando copiar os contrasinais. Escribe o teu contrasinal de Windows para permitir esta acción.</translation> <translation id="4036079820698952681">Informa da <ph name="BEGIN_LINK" />configuración actual<ph name="END_LINK" /> para axudar a mellorar Chromium</translation> <translation id="4050175100176540509">A última versión conta con melloras de seguranza importantes e novas funcións.</translation> +<translation id="4136604564421273381">Chromium está quitando software daniño do teu ordenador...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> (Inicio de sesión, Chromium)</translation> <translation id="421369550622382712">Descubre aplicacións, xogos, extensións e temas fantásticos para Chromium.</translation> <translation id="4216212958613226427">Este é o idioma no que se mostra a IU de Chromium</translation> <translation id="4230135487732243613">Queres ligar os teus datos de Chromium a esta conta?</translation> <translation id="4271805377592243930">Obter axuda sobre Chromium</translation> <translation id="4285930937574705105">Non se puido efectuar a instalación debido a un erro non especificado. Se se está executando Chromium actualmente, péchao e téntao de novo.</translation> +<translation id="4352041330999353637">Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: onte.</translation> <translation id="4407044323746248786">Queres saír de Chromium de todas formas?</translation> <translation id="4415566066719264597">Deixar que Chromium se execute en segundo plano</translation> <translation id="4423735387467980091">Personaliza e controla Chromium</translation> <translation id="4544142686420020088">Chromium non se actualizou, xa que se produciu un erro. <ph name="BEGIN_LINK" />Soluciona os problemas de actualización de Chromium e as actualizacións que non se puidesen realizar<ph name="END_LINK" />.</translation> <translation id="4567424176335768812">Iniciaches sesión como <ph name="USER_EMAIL_ADDRESS" />. Agora podes acceder aos teus marcadores, historial e outras configuracións en todos os dispositivos en que iniciaches sesión.</translation> <translation id="459535195905078186">Aplicacións de Chromium</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai 1 minuto.}other{Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai {NUM_MINS} minutos.}}</translation> <translation id="4677944499843243528">Parece que outro proceso de Chromium (<ph name="PROCESS_ID" />) está utilizando o perfil noutro ordenador (<ph name="HOST_NAME" />). Chromium bloqueou o perfil para que non se dane. Se estás seguro de que ningún outro proceso está utilizando este perfil, podes desbloquear o perfil e volver iniciar Chromium.</translation> <translation id="469338717132742108">Obter axuda sobre Chromium OS</translation> <translation id="4708774505295300557">Anteriormente, alguén iniciou sesión como <ph name="ACCOUNT_EMAIL_LAST" /> en Chromium neste ordenador. Crea un novo usuario de Chromium para manter a túa información por separado.</translation> @@ -107,6 +113,7 @@ <translation id="4750035648288509542">A actualización está a piques de rematar. Reinicia Chromium para completala. As ventás do modo de incógnito non se volverán abrir.</translation> <translation id="4788777615168560705">Chromium non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas ou <ph name="BEGIN_LINK" />comproba os contrasinais na túa Conta de Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Esta función utiliza o mesmo corrector ortográfico que o usado na busca de Google. O texto que escribas no navegador enviarase a Google. Podes cambiar esta opción na configuración cando queiras.</translation> +<translation id="487524289568229802">Chromium está buscando software daniño no teu ordenador...</translation> <translation id="4888717733111232871">Norma de entrada para Chromium para permitir tráfico mDNS.</translation> <translation id="4893632094755846570">Esta acción eliminará permanentemente os teus datos de navegación deste dispositivo. Para recuperalos, inicia sesión en Chromium como</translation> <translation id="4943838377383847465">Chromium está no modo de segundo plano.</translation> @@ -171,6 +178,7 @@ É posible que algunhas funcións non estean dispoñibles. Especifica un directorio de perfil diferente ou utiliza unha versión máis actualizada de Chromium.</translation> <translation id="6734080038664603509">Actualizar &Chromium</translation> <translation id="6734291798041940871">Chromium xa está instalado para todos os usuarios no teu ordenador.</translation> +<translation id="6737557815519435616">Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai un momento.</translation> <translation id="6762551859069255163">Utiliza distintos perfís en Chromium para separar a actividade de navegación persoal da do traballo, ou a das diferentes persoas que empregan este dispositivo</translation> <translation id="6774082503108938489">O teu pai ou nai desactivou esta opción en Chromium: Permisos para sitios, aplicacións e extensións. Non está permitido activar esta <ph name="EXTENSION_TYPE_PARAMETER" />.</translation> <translation id="6847869444787758381">Chromium permíteche saber se os teus contrasinais están en risco nalgún momento</translation> @@ -180,6 +188,7 @@ <translation id="6964305034639999644">Abrir ligazón nunha ventá do modo de incó&gnito de Chromium</translation> <translation id="6990124437352146030">Chromium necesita permiso para acceder ao micrófono neste sitio</translation> <translation id="701244094609242530">Chromium non puido comprobar as túas extensións. Téntao de novo máis tarde.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai 1 hora.}other{Chromium non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai {NUM_HOURS} horas.}}</translation> <translation id="705851970750939768">Actualizar Chromium</translation> <translation id="7066436765290594559">Chromium OS non puido sincronizar os teus datos. Actualiza a túa frase de acceso de sincronización.</translation> <translation id="7067091210845072982">Se unha imaxe non ten unha descrición útil, Chromium tentará proporcionarche unha. Para crear descricións, envíanse imaxes a Google.</translation> @@ -240,6 +249,7 @@ <translation id="8621669128220841554">Non se puido efectuar a instalación debido a un erro. Volve descargar Chromium.</translation> <translation id="8697124171261953979">Tamén controla a páxina que se mostra ao iniciar Chromium ou ao realizar unha busca desde Omnibox.</translation> <translation id="8704119203788522458">Este é o teu Chromium</translation> +<translation id="8733034664173984083">Produciuse un erro mentres Chromium buscaba software daniño no teu ordenador</translation> <translation id="8796602469536043152">Chromium necesita permiso para acceder á cámara e ao micrófono neste sitio</translation> <translation id="8803635938069941624">Condicións de Chromium OS</translation> <translation id="8821041990367117597">Chromium non puido sincronizar os teus datos porque os detalles de inicio de sesión da túa conta están desactualizados.</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb index c1d65af..45c768a 100644 --- a/chrome/app/resources/chromium_strings_id.xtb +++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Tab Chromium</translation> <translation id="2718390899429598676">Untuk keamanan tambahan, Chromium akan mengenkripsi data Anda.</translation> <translation id="2770231113462710648">Ubah browser default ke:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />Administrator Anda<ph name="END_LINK" /> telah menonaktifkan pemeriksaan Chromium terhadap software berbahaya</translation> <translation id="2799223571221894425">Luncurkan Ulang</translation> <translation id="2847479871509788944">Buang dari Chromium...</translation> <translation id="2853765747879685679">Tanyakan saat saya membuka Chromium</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">Tentang &Chromium</translation> <translation id="2977470724722393594">Chromium sudah diperbarui</translation> <translation id="2983934633046890458">Chromium mencoba mengedit sandi.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: 1 hari yang lalu.}other{Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: {NUM_DAYS} hari yang lalu.}}</translation> <translation id="3032706164202344641">Chromium tidak dapat memeriksa sandi Anda. Coba lagi nanti.</translation> <translation id="3032787606318309379">Menambahkan Chromium...</translation> <translation id="3068515742935458733">Bantu Chromium menjadi lebih baik dengan mengirim laporan kerusakan dan <ph name="UMA_LINK" /> ke Google</translation> @@ -70,6 +72,7 @@ <translation id="347328004046849135">Chromium akan memberi tahu Anda saat Anda login dengan sandi yang telah dibobol</translation> <translation id="3474745554856756813">Tindakan ini akan menghapus <ph name="ITEMS_COUNT" /> item dari perangkat. Untuk mengambil data nanti, login ke Chromium sebagai <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Tutup semua jendela Chromium dan coba lagi.</translation> +<translation id="3527440529060401414">Chromium dapat memeriksa software berbahaya di komputer Anda</translation> <translation id="3575459661164320785">Ada software berbahaya di komputer Anda. Chromium dapat menghapusnya, memulihkan setelan Anda, dan menonaktifkan ekstensi agar browser berfungsi kembali secara normal.</translation> <translation id="3639635944603682591">Data browsing pengguna ini akan dihapus dari perangkat ini. Untuk memulihkan data, login ke Chromium sebagai <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan kembali.}=1{Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan kembali. Jendela Samaran Anda tidak akan dibuka kembali.}other{Update baru untuk Chromium telah tersedia dan akan diterapkan segera setelah diluncurkan kembali. # jendela Samaran Anda tidak akan dibuka kembali.}}</translation> @@ -85,18 +88,21 @@ <translation id="3945058413678539331">Chromium mencoba menyalin sandi. Ketik sandi Windows Anda untuk mengizinkannya.</translation> <translation id="4036079820698952681">Bantu Chromium jadi lebih baik dengan melaporkan <ph name="BEGIN_LINK" />setelan saat ini<ph name="END_LINK" /></translation> <translation id="4050175100176540509">Peningkatan keamanan dan fitur baru yang penting tersedia di versi terbaru.</translation> +<translation id="4136604564421273381">Chromium menghapus software berbahaya dari komputer Anda ...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - Login Jaringan - Chromium</translation> <translation id="421369550622382712">Temukan aplikasi, game, ekstensi, dan tema yang hebat untuk Chromium.</translation> <translation id="4216212958613226427">Bahasa ini digunakan untuk menampilkan UI Chromium</translation> <translation id="4230135487732243613">Tautkan data Chromium Anda ke akun ini?</translation> <translation id="4271805377592243930">Dapatkan bantuan Chromium</translation> <translation id="4285930937574705105">Pemasangan gagal karena kesalahan yang tidak diketahui. Jika Chromium sedang berjalan, tutup, lalu ulang kembali.</translation> +<translation id="4352041330999353637">Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: kemarin.</translation> <translation id="4407044323746248786">Tetap keluar dari Chromium?</translation> <translation id="4415566066719264597">Jalankan Chromium di Background</translation> <translation id="4423735387467980091">Menyesuaikan dan mengontrol Chromium</translation> <translation id="4544142686420020088">Chromium tidak dapat diupdate, terjadi error. <ph name="BEGIN_LINK" />Perbaiki masalah update Chrome dan update yang gagal.<ph name="END_LINK" /></translation> <translation id="4567424176335768812">Anda login sebagai <ph name="USER_EMAIL_ADDRESS" />. Kini Anda dapat mengakses bookmark, histori, dan setelan lainnya pada seluruh perangkat yang Anda masuki.</translation> <translation id="459535195905078186">Aplikasi Chromium</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: 1 menit yang lalu.}other{Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: {NUM_MINS} menit yang lalu.}}</translation> <translation id="4677944499843243528">Profil tersebut mungkin digunakan pada proses Chromium lainnya (<ph name="PROCESS_ID" />) pada komputer lain (<ph name="HOST_NAME" />). Chromium telah mengunci profil tersebut agar tidak rusak. Jika yakin tidak ada proses lain yang menggunakan profil tersebut, Anda dapat membuka profil dan meluncurkan Chromium kembali.</translation> <translation id="469338717132742108">Dapatkan bantuan Chromium OS</translation> <translation id="4708774505295300557">Sebelumnya ada seseorang yang masuk ke Chromium di komputer ini sebagai <ph name="ACCOUNT_EMAIL_LAST" />. Buat pengguna Chromium baru agar informasi Anda tetap terpisah.</translation> @@ -105,6 +111,7 @@ <translation id="4750035648288509542">Update hampir selesai. Luncurkan ulang Chromium untuk menyelesaikan update. Jendela Samaran tidak akan dibuka kembali.</translation> <translation id="4788777615168560705">Chromium tidak dapat memeriksa sandi Anda. Coba lagi setelah 24 jam atau <ph name="BEGIN_LINK" />periksa sandi di Akun Google Anda<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Tindakan ini akan menggunakan pemeriksa ejaan yang sama dengan yang digunakan di penelusuran Google. Teks yang Anda ketikkan di browser dikirim ke Google. Anda dapat mengubah perilaku ini di setelan.</translation> +<translation id="487524289568229802">Chromium sedang memeriksa software berbahaya di komputer Anda ...</translation> <translation id="4888717733111232871">Inbound rule untuk Chromium guna mengizinkan lalu lintas mDNS.</translation> <translation id="4893632094755846570">Tindakan ini akan menghapus data penjelajahan Anda dari perangkat ini secara permanen. Untuk memulihkan data, login ke Chromium sebagai</translation> <translation id="4943838377383847465">Chromium berjalan di mode latar belakang.</translation> @@ -169,6 +176,7 @@ Sebagian fitur mungkin tidak tersedia. Tentukan direktori profil yang berbeda atau gunakan versi Chromium yang lebih baru.</translation> <translation id="6734080038664603509">Pembaruan &Chromium</translation> <translation id="6734291798041940871">Chromium sudah terpasang untuk semua pengguna di komputer Anda.</translation> +<translation id="6737557815519435616">Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: sesaat yang lalu.</translation> <translation id="6762551859069255163">Gunakan profil berbeda di Chromium untuk memisahkan penjelajahan pribadi dan kerja, atau untuk pengguna lain yang menggunakan perangkat ini</translation> <translation id="6774082503108938489">Orang tuamu telah menonaktifkan "Izin untuk situs, aplikasi, dan ekstensi" untuk Chromium. Tindakan mengaktifkan <ph name="EXTENSION_TYPE_PARAMETER" /> ini tidak diizinkan.</translation> <translation id="6847869444787758381">Chromium akan memberi tahu jika sandi Anda disusupi</translation> @@ -178,6 +186,7 @@ <translation id="6964305034639999644">Buka link di jendela sa&maran Chromium</translation> <translation id="6990124437352146030">Chromium memerlukan izin akses ke mikrofon untuk situs ini</translation> <translation id="701244094609242530">Chromium tidak dapat memeriksa ekstensi Anda. Coba lagi nanti.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: 1 jam yang lalu.}other{Chromium tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: {NUM_HOURS} jam yang lalu}}</translation> <translation id="705851970750939768">Perbarui Chromium</translation> <translation id="7066436765290594559">Chromium OS tidak dapat menyinkronkan data Anda. Perbarui frasa sandi Sinkronisasi Anda.</translation> <translation id="7067091210845072982">Jika gambar tidak memiliki deskripsi yang berguna, Chromium akan mencoba memberikan deskripsi untuk Anda. Untuk membuat deskripsi, gambar akan dikirim ke Google.</translation> @@ -238,6 +247,7 @@ <translation id="8621669128220841554">Pemasangan gagal karena kesalahan yang tidak ditentukan. Download Chromium lagi.</translation> <translation id="8697124171261953979">Juga mengontrol halaman apa yang ditampilkan saat Anda memulai Chromium atau menelusuri dari Omnibox.</translation> <translation id="8704119203788522458">Ini Chromium Anda</translation> +<translation id="8733034664173984083">Terjadi error saat Chromium memeriksa software berbahaya di komputer Anda</translation> <translation id="8796602469536043152">Chromium memerlukan izin akses ke kamera dan mikrofon untuk situs ini</translation> <translation id="8803635938069941624">Persyaratan Chromium OS</translation> <translation id="8821041990367117597">Chromium tidak dapat menyinkronkan data karena detail proses masuk Anda sebelum diperbarui.</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb index 571bfde6..0ccfa20 100644 --- a/chrome/app/resources/chromium_strings_iw.xtb +++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -214,15 +214,15 @@ <translation id="7617377681829253106">Chromium השתפר</translation> <translation id="7628001322379820951">Chromium גילה תוכנות מזיקות במחשב שלך</translation> <translation id="7686590090926151193">Chromium אינו דפדפן ברירת המחדל שלך</translation> -<translation id="7689606757190482937">סינכרון והתאמה אישית של Chromium בכל המכשירים שברשותך</translation> +<translation id="7689606757190482937">סנכרון והתאמה אישית של Chromium בכל המכשירים שברשותך</translation> <translation id="7729447699958282447">Chromium לא הצליח לסנכרן את הנתונים שלך מפני שסנכרון אינו זמין עבור הדומיין שלך.</translation> <translation id="7745317241717453663">פעולה זו תמחק את נתוני הגלישה מהמכשיר. כדי לשחזר את הנתונים מאוחר יותר, היכנס אל Chromium עם <ph name="USER_EMAIL" />.</translation> <translation id="7747138024166251722">המתקין לא הצליח ליצור ספריה זמנית. בדוק את המקום הפנוי בדיסק ואת האישור להתקנת תוכנה.</translation> <translation id="7773960292263897147">אזהרה: Chromium לא יכול למנוע מתוספים לתעד את היסטוריית הגלישה שלך. כדי להשבית את התוסף הזה במצב גלישה בסתר, צריך לבטל את הבחירה של האפשרות הזו.</translation> -<translation id="7790626492778995050"><ph name="PAGE_TITLE" /> - Chromium בגירסת Canary</translation> +<translation id="7790626492778995050"><ph name="PAGE_TITLE" /> – Chromium בגרסת Canary</translation> <translation id="7827169012280634081">קובצי ה-Cookie ונתוני האתר ינוקו בכל יציאה מ-Chromium</translation> <translation id="7857220146454061152">כדי לקבל עדכונים של Chromium בעתיד, נדרשת מערכת הפעלה OS X 10.11 ואילך. במחשב הזה מותקנת מערכת ההפעלה OS X 10.10.</translation> -<translation id="7867198900892795913">עדכון Chromium לגירסה האחרונה לא הצליח, ולכן אין לך גישה אל תכונות חדשות ותיקוני אבטחה.</translation> +<translation id="7867198900892795913">עדכון Chromium לגרסה האחרונה לא הצליח, ולכן אין לך גישה אל תכונות חדשות ותיקוני אבטחה.</translation> <translation id="7898472181347242998">כדי לראות אם המכשיר שלך מעודכן, יש לעבור אל <ph name="LINK_BEGIN" />הגדרות Chromium OS<ph name="LINK_END" /></translation> <translation id="7937630085815544518">נכנסת ל-Chromium כ-<ph name="USER_EMAIL_ADDRESS" />. השתמש באותו חשבון כדי להיכנס שוב.</translation> <translation id="7975919845073681630">זוהי התקנה משנית של Chromium, ולא ניתן להפוך אותו לדפדפן ברירת המחדל שלך.</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb index 11392cf4..bb9cc32 100644 --- a/chrome/app/resources/chromium_strings_kn.xtb +++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Chromium ಟ್ಯಾಬ್</translation> <translation id="2718390899429598676">ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಗಾಗಿ, Chromium ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡುತ್ತದೆ.</translation> <translation id="2770231113462710648">ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಅನ್ನು ಇದ್ಕಕೆ ಬದಲಿಸಿ:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />ನಿಮ್ಮ ನಿರ್ವಾಹಕರು <ph name="END_LINK" /> Chromium ನ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಪರಿಶೀಲಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="2799223571221894425">ಮರುಪ್ರಾರಂಭಿಸು</translation> <translation id="2847479871509788944">Chromium ನಿಂದ ತೆಗೆದುಹಾಕಿ...</translation> <translation id="2853765747879685679">ನಾನು Chromium ಅನ್ನು ತೆರೆದಾಗ ಕೇಳಿ</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">&Chromium ಕುರಿತು</translation> <translation id="2977470724722393594">Chromium ಅಪ್ ಟು ಡೇಟ್ ಆಗಿದೆ</translation> <translation id="2983934633046890458">Chromium, ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: 1 ದಿನದ ಹಿಂದೆ.}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_DAYS} ದಿನಗಳ ಹಿಂದೆ.}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_DAYS} ದಿನಗಳ ಹಿಂದೆ.}}</translation> <translation id="3032706164202344641">Chromium ಗೆ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="3032787606318309379">Chromium ಗೆ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="3068515742935458733">Google ಗೆ ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು ಮತ್ತು <ph name="UMA_LINK" /> ಕಳುಹಿಸುವುದರಿಂದ Chromium ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation> @@ -68,6 +70,7 @@ <translation id="347328004046849135">ಅಪಾಯಕ್ಕೀಡಾದ ಪಾಸ್ವರ್ಡ್ ಬಳಸಿ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದಾಗ, Chromium ನಿಮಗೆ ಸೂಚನೆ ನೀಡುತ್ತದೆ</translation> <translation id="3474745554856756813">ಈ ಸಾಧನದಿಂದ <ph name="ITEMS_COUNT" /> ಐಟಂಗಳನ್ನು ಇದು ಅಳಿಸುತ್ತದೆ. ನಂತರ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮರುಪಡೆಯಲು, <ph name="USER_EMAIL" /> ನಂತೆ Chromium ಗೆ ಸೈನ್ಇನ್ ಮಾಡಿ.</translation> <translation id="3509308970982693815">ದಯವಿಟ್ಟು ಎಲ್ಲಾ Chromium ವಿಂಡೋಗಳನ್ನು ಮುಚ್ಚಿರಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="3527440529060401414">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ, Chromium ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಪರಿಶೀಲಿಸಬಹುದು</translation> <translation id="3575459661164320785">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಕಂಡುಬಂದಿದೆ. Chromium ಅದನ್ನು ತೆಗೆದುಹಾಕಬಹುದು, ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ಪುನಃ ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವಂತೆ ಮಾಡಲು ವಿಸ್ತರಣೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation> <translation id="3639635944603682591">ಈ ವ್ಯಕ್ತಿಯ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಈ ಸಾಧನದಿಂದ ಅಳಿಸಲಾಗುತ್ತದೆ. ಡೇಟಾವನ್ನು ಪುನಃ ಪಡೆದುಕೊಳ್ಳಲು, Chromium ನಲ್ಲಿ <ph name="USER_EMAIL" /> ಎಂದು ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.}=1{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ ಅಜ್ಞಾತ ವಿಂಡೋವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}one{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}other{Chromium ಗಾಗಿ ಹೊಸತೊಂದು ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ ಮತ್ತು ನೀವು ಮರುಪ್ರಾರಂಭಿಸಿದ ಕೂಡಲೇ ಅದನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ # ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.}}</translation> @@ -83,18 +86,21 @@ <translation id="3945058413678539331">Chromium, ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ನಕಲಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ. ಇದನ್ನು ಅನುಮತಿಸಲು ನಿಮ್ಮ Windows ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಟೈಪ್ ಮಾಡಿ.</translation> <translation id="4036079820698952681"><ph name="BEGIN_LINK" />ಪ್ರಸ್ತುತ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು<ph name="END_LINK" /> ವರದಿ ಮಾಡುವ ಮೂಲಕ Chromium ಅನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation> <translation id="4050175100176540509">ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯಲ್ಲಿ ಪ್ರಮುಖವಾದ ಭದ್ರತಾ ಸುಧಾರಣೆಗಳು ಮತ್ತು ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು ಲಭ್ಯವಿದೆ.</translation> +<translation id="4136604564421273381">Chromium ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಿಂದ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕುತ್ತಿದೆ...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - ನೆಟ್ವರ್ಕ್ ಸೈನ್ ಇನ್ - Chromium</translation> <translation id="421369550622382712">Chromium ಗಾಗಿ ಅದ್ಭುತ ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಗೇಮ್ಗಳು, ವಿಸ್ತರಣೆಗಳು ಹಾಗೂ ಥೀಮ್ಗಳನ್ನು ಅನ್ವೇಷಿಸಿ.</translation> <translation id="4216212958613226427">Chromium UI ತೋರಿಸಲು ಈ ಭಾಷೆಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ</translation> <translation id="4230135487732243613">ಈ ಖಾತೆಗೆ ನಿಮ್ಮ Chromium ಡೇಟಾವನ್ನು ಲಿಂಕ್ ಮಾಡುವುದೇ?</translation> <translation id="4271805377592243930">Chromium ಜೊತೆಗೆ ಸಹಾಯ ಪಡೆಯಿರಿ</translation> <translation id="4285930937574705105">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆಯು ವಿಫಲಗೊಂಡಿದೆ. Chromium ಪ್ರಸ್ತುತ ಚಾಲನೆಯಲ್ಲಿದ್ದರೆ, ದಯವಿಟ್ಟು ಅದನ್ನು ಮುಚ್ಚಿರಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="4352041330999353637">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: ನಿನ್ನೆ.</translation> <translation id="4407044323746248786">ಹೇಗಿದ್ದರೂ Chromium ನಿಂದ ನಿರ್ಗಮಿಸುವುದೇ?</translation> <translation id="4415566066719264597">Chromium ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗಲು ಅನುಮತಿಸಿ</translation> <translation id="4423735387467980091">Chromium ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ</translation> <translation id="4544142686420020088">Chromium ಅಪ್ಡೇಟ್ ಆಗಲಿಲ್ಲ, ಏನೋ ಸಮಸ್ಯೆಯಾಗಿದೆ. <ph name="BEGIN_LINK" />Chromium ಅಪ್ಡೇಟ್ ಸಮಸ್ಯೆಗಳು ಹಾಗೂ ವಿಫಲವಾದ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಸರಿಪಡಿಸಿ.<ph name="END_LINK" /></translation> <translation id="4567424176335768812"><ph name="USER_EMAIL_ADDRESS" /> ನಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಿರುವಿರಿ. ನೀವು ಇದೀಗ ನಿಮ್ಮ ಎಲ್ಲಾ ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪ್ರವೇಶಿಸಬಹುದು.</translation> <translation id="459535195905078186">Chromium ಅಪ್ಲಿಕೇಶನ್ಗಳು</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: 1 ನಿಮಿಷದ ಹಿಂದೆ.}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_MINS} ನಿಮಿಷಗಳ ಹಿಂದೆ.}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_MINS} ನಿಮಿಷಗಳ ಹಿಂದೆ.}}</translation> <translation id="4677944499843243528">ಮತ್ತೊಂದು ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ (<ph name="HOST_NAME" />) ಇನ್ನೊಂದು Chromium ಪ್ರಕ್ರಿಯೆಯ (<ph name="PROCESS_ID" />) ಮೂಲಕ ಪ್ರೊಫೈಲ್ ಬಳಕೆಯಲ್ಲಿರುವಂತೆ ತೋರುತ್ತಿದೆ. ಪ್ರೊಫೈಲ್ ದೋಷಪೂರಿತಗೊಳ್ಳದಂತೆ ಅದನ್ನು Chromium ಲಾಕ್ ಮಾಡಿದೆ. ಇತರ ಯಾವುದೇ ಪ್ರಕ್ರಿಯೆಗಳು ಈ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಬಳಸುತ್ತಿಲ್ಲವೆಂದು ನಿಮಗೆ ಖಚಿತವಾಗಿದ್ದರೆ, ನೀವು ಪ್ರೊಫೈಲ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಬಹುದು ಮತ್ತು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬಹುದು.</translation> <translation id="469338717132742108">Chromium OS ಕುರಿತಾಗಿ ಸಹಾಯ ಪಡೆಯಿರಿ</translation> <translation id="4708774505295300557">ಈ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ <ph name="ACCOUNT_EMAIL_LAST" /> ನಂತೆ Chromium ಗೆ ಯಾರೋ ಈ ಹಿಂದೆಯೇ ಸೈನ್ ಇನ್ ಮಾಡಿದ್ದಾರೆ. ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಲು ಹೊಸ Chromium ಬಳಕೆದಾರರನ್ನು ರಚಿಸಿ.</translation> @@ -103,6 +109,7 @@ <translation id="4750035648288509542">ಬಹುತೇಕ ಅಪ್ ಟು ಡೇಟ್ ಆಗಿದೆ! ಅಪ್ಡೇಟ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು Chromium ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ. ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ಮರಳಿ ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="4788777615168560705">Chromium ಗೆ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. 24 ಗಂಟೆಗಳ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ <ph name="BEGIN_LINK" />ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿರುವ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ<ph name="END_LINK" />.</translation> <translation id="479167709087336770">ಇದು Google ಹುಡುಕಾಟದಲ್ಲಿ ಬಳಸಲಾದ ಅದೇ ಕಾಗುಣಿತ ಪರೀಕ್ಷೆಯನ್ನು ಬಳಸುತ್ತದೆ. ನೀವು ಬ್ರೌಸರ್ನಲ್ಲಿ ಟೈಪ್ ಮಾಡುವ ಪಠ್ಯವನ್ನು Google ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನೀವು ಈ ವರ್ತನೆಯನ್ನು ಯಾವಾಗ ಬೇಕಾದರೂ ಬದಲಾಯಿಸಬಹುದು.</translation> +<translation id="487524289568229802">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು Chromium ಪರಿಶೀಲಿಸುತ್ತಿದೆ...</translation> <translation id="4888717733111232871">mDNS ಟ್ರಾಫಿಕ್ಗೆ ಅನುಮತಿಸುವ ನಿಟ್ಟಿನಲ್ಲಿ Chromium ಗೆ ಒಳಬರುವ ನಿಯಮ.</translation> <translation id="4893632094755846570">ಇದು ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುತ್ತದೆ. ಡೇಟಾವನ್ನು ಮರಳಿ ಪಡೆದುಕೊಳ್ಳಲು, Chromium ನಲ್ಲಿ ಇದರಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="4943838377383847465">Chromium ಹಿನ್ನೆಲೆ ಮೋಡ್ನಲ್ಲಿದೆ.</translation> @@ -165,6 +172,7 @@ <translation id="6717134281241384636">Chromium ನ ಹೊಸ ಆವೃತ್ತಿಯಾಗಿರುವುದರಿಂದ ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ. ಕೆಲವೊಂದು ವೈಶಿಷ್ಟ್ಯಗಳು ಲಭ್ಯವಿಲ್ಲದಿರಬಹುದು. ದಯವಿಟ್ಟು ಬೇರೆ ಒಂದು ಪೊಫೈಲ್ ಡೈರೆಕ್ಟರಿ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ ಅಥವಾ Chromium ನ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಬಳಸಿ.</translation> <translation id="6734080038664603509">&Chromium ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> <translation id="6734291798041940871">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿನ ಎಲ್ಲ ಬಳಕೆದಾರರಿಗೆ ಈಗಾಗಲೇ Chromium ಸ್ಥಾಪಿತವಾಗಿದೆ.</translation> +<translation id="6737557815519435616">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: ಸ್ವಲ್ಪ ಸಮಯದ ಹಿಂದೆ.</translation> <translation id="6762551859069255163">ಕೆಲಸ ಮತ್ತು ವೈಯಕ್ತಿಕ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು ಅಥವಾ ಈ ಸಾಧನವನ್ನು ಬಳಸುವ ವಿಭಿನ್ನ ಜನರಿಗೆ Chromium ನಲ್ಲಿ ವಿಭಿನ್ನ ಪ್ರೊಫೈಲ್ಗಳನ್ನು ಬಳಸಿ</translation> <translation id="6774082503108938489">ನಿಮ್ಮ ಪೋಷಕರು Chromium ನಲ್ಲಿ "ಸೈಟ್ಗಳು, ಆ್ಯಪ್ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳಿಗಾಗಿ ಅನುಮತಿಗಳನ್ನು" ಆಫ್ ಮಾಡಿದ್ದಾರೆ. ಈ <ph name="EXTENSION_TYPE_PARAMETER" /> ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಅನುಮತಿಯಿಲ್ಲ.</translation> <translation id="6847869444787758381">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳು ಎಂದಾದರೂ ಹ್ಯಾಕ್ ಆಗಿವೆಯೇ ಎಂಬುದನ್ನು Chromium ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ</translation> @@ -174,6 +182,7 @@ <translation id="6964305034639999644">Chromium ಅ&ದೃಶ್ಯ ವಿಂಡೋದಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation> <translation id="6990124437352146030">ಈ ಸೈಟ್ಗಾಗಿ ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ಗೆ ಪ್ರವೇಶಿಸಲು Chromium ಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation> <translation id="701244094609242530">Chromium ಗೆ ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: 1 ಗಂಟೆಯ ಹಿಂದೆ.}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_HOURS} ಗಂಟೆಗಳ ಹಿಂದೆ.}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chromium ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_HOURS} ಗಂಟೆಗಳ ಹಿಂದೆ.}}</translation> <translation id="705851970750939768">Chromium ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> <translation id="7066436765290594559">ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು Chromium OS ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ.</translation> <translation id="7067091210845072982">ಚಿತ್ರದಲ್ಲಿ ಉಪಯುಕ್ತ ವಿವರಣೆಯು ಇಲ್ಲದಿದ್ದರೆ, Chromium ನಿಮಗಾಗಿ ಒಂದು ವಿವರಣೆಯನ್ನು ಒದಗಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ವಿವರಣೆಗಳನ್ನು ರಚಿಸಲು, ಚಿತ್ರಗಳನ್ನು Google ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ.</translation> @@ -231,6 +240,7 @@ <translation id="8621669128220841554">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೊಮ್ಮೆ Chromium ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ.</translation> <translation id="8697124171261953979">ನೀವು Chromium ಪ್ರಾರಂಭಿಸಿದಾಗ ಅಥವಾ ಓಮ್ನಿಬಾಕ್ಸ್ನಿಂದ ಹುಡುಕಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="8704119203788522458">ಇದು ನಿಮ್ಮ Chromium</translation> +<translation id="8733034664173984083">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ, Chromium ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಪರಿಶೀಲಿಸುತ್ತಿರುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ</translation> <translation id="8796602469536043152">ಈ ಸೈಟ್ಗಾಗಿ ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ಗೆ ಪ್ರವೇಶಿಸಲು Chromium ಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation> <translation id="8803635938069941624">Chromium OS ನಿಯಮಗಳು</translation> <translation id="8821041990367117597">ನಿಮ್ಮ ಖಾತೆಯ ಸೈನ್ ಇನ್ ವಿವರಗಳ ಅವಧಿ ಮುಗಿದಿರುವ ಕಾರಣ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು Chromium ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation>
diff --git a/chrome/app/resources/chromium_strings_ne.xtb b/chrome/app/resources/chromium_strings_ne.xtb index f24f27a..1105e5a 100644 --- a/chrome/app/resources/chromium_strings_ne.xtb +++ b/chrome/app/resources/chromium_strings_ne.xtb
@@ -46,6 +46,7 @@ <translation id="2711502716910134313">Chromium को ट्याब</translation> <translation id="2718390899429598676">थप गरिएको सुरक्षाका लागि क्रोमियमले तपाईँको डेटा इन्क्रिप्ट गर्ने छ।</translation> <translation id="2770231113462710648">पूर्वनिर्धारित ब्राउजरलाई यसमा बदल्नुहोस्:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />तपाईंका एड्मिन<ph name="END_LINK" />ले Chromium को हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँच गर्ने सुविधा असक्षम पार्नुभएको छ</translation> <translation id="2799223571221894425">पुन: सुरुवात गर्नुहोस्</translation> <translation id="2847479871509788944">Chromium बाट हटाउनुहोस् ...</translation> <translation id="2853765747879685679">मैले Chromium खोल्दा सोधियोस्</translation> @@ -53,6 +54,7 @@ <translation id="2910007522516064972">&क्रोमियमको बारेमा</translation> <translation id="2977470724722393594">Chromium अद्यावधिक छ</translation> <translation id="2983934633046890458">Chromium ले पासवर्डहरू सम्पादन गर्ने प्रयास गरिरहेको छ।</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: १ दिनअघि।}other{Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: {NUM_DAYS} दिनअघि।}}</translation> <translation id="3032706164202344641">Chromium ले तपाईंका पासवर्डहरूको जाँच गर्न सकेन। पछि फेरि प्रयास गर्नुहोस्।</translation> <translation id="3032787606318309379">Chromium मा थप्दै...</translation> <translation id="3068515742935458733">गुगललाई दुर्घटना प्रतिवेदन र <ph name="UMA_LINK" /> पठाएर राम्रो क्रोमियम बनाउन सहयोग गर्नुहोस् ।</translation> @@ -70,6 +72,7 @@ <translation id="347328004046849135">तपाईंले अरूले देखेको पासवर्ड प्रयोग गरी साइन इन गर्दा Chromium ले तपाईंलाई त्यसबारे सूचित गर्ने छ</translation> <translation id="3474745554856756813">यसले यो यन्त्रका <ph name="ITEMS_COUNT" /> वस्तुहरू मेट्नेछ। पछि आफ्नो डेटा प्राप्त गर्न Chromium मा <ph name="USER_EMAIL" /> को रूपमा साइन इन गर्नुहोस्।</translation> <translation id="3509308970982693815">कृपया सबै Chromium सन्झ्यालहरू बन्द गर्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation> +<translation id="3527440529060401414">Chromium ले तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँच्न सक्छ</translation> <translation id="3575459661164320785">तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छ। Chromium ले यसलाई हटाउन, तपाईंका सेटिङहरू पुनर्स्थापना गर्न र तपाईंको ब्राउजरलाई फेरि सामान्य ढङ्गले काम गर्ने बनाउन विस्तारहरू सक्षम पार्न सक्छ।</translation> <translation id="3639635944603682591">यस यन्त्रबाट यो व्यक्तिको ब्राउजिङ डेटा मेटाइने छ। उक्त डेटा पुनः प्राप्त गर्न <ph name="USER_EMAIL" /> का रूपमा Chromium मा साइन इन गर्नुहोस्।</translation> <translation id="364817392622123556">{COUNT,plural, =0{Chromium को नयाँ अद्यावधिक उपलब्ध छ र तपाईंले Chromium पुनः सुरु गर्ने बित्तिकै यो अद्यावधिक लागू हुने छ।}=1{Chromium को नयाँ अद्यावधिक उपलब्ध छ र तपाईंले Chromium पुनः सुरु गर्ने बित्तिकै यो अद्यावधिक लागू हुने छ। तपाईंको इन्कोग्निटो विन्डो पुनः खुल्ने छैन।}other{Chromium को नयाँ अद्यावधिक उपलब्ध छ र तपाईंले Chromium पुनः सुरु गर्ने बित्तिकै यो अद्यावधिक लागू हुने छ। तपाईंका # वटा इन्कोग्निटो विन्डो पुनः खुल्ने छैनन्।}}</translation> @@ -85,18 +88,21 @@ <translation id="3945058413678539331">Chromium ले पासवर्ड प्रतिलिपि गर्ने प्रयास गरिरहेको छ। यसो गर्ने अनुमति दिन Windows को आफ्नो पासवर्ड टाइप गर्नुहोस्।</translation> <translation id="4036079820698952681"><ph name="BEGIN_LINK" />हालका सेटिङहरू <ph name="END_LINK" /> को रिपोर्ट गरेर Chromium लाई अझ राम्रो बनाउन मद्दत गर्नुहोस्</translation> <translation id="4050175100176540509">नवीनतम संस्करणमा महत्वपूर्ण सुरक्षा सुधारहरू र नयाँ सुविधाहरू उपलब्ध छन्।</translation> +<translation id="4136604564421273381">Chromium ले तपाईंको कम्प्युटरबाट हानिकारक सफ्टवेयर हटाउँदै छ...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - नेटवर्क साइन इन - Chromium</translation> <translation id="421369550622382712">Chromium का लागि महान एपहरू, खेलहरू, विस्तारहरू र विषयवस्तुहरू पत्ता लगाउनुहोस्।</translation> <translation id="4216212958613226427">Chromium UI प्रदर्शन गर्न यो भाषाको प्रयोग गरिन्छ</translation> <translation id="4230135487732243613">तपाइँको Chromium लगत यस खातामा लिङ्क गर्ने?</translation> <translation id="4271805377592243930">Chromium को सम्बन्धमा मद्दत प्राप्त गर्नुहोस्</translation> <translation id="4285930937574705105">अनिश्चित त्रुटिको कारणले गर्दा स्थापना असफल भयो। यदि Chromium हालै चालू छ भने, कृपया त्यसलाई बन्द गर्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation> +<translation id="4352041330999353637">Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: हिजो।</translation> <translation id="4407044323746248786">जे भए पनि Chromium बाट बाहिरिने हो?</translation> <translation id="4415566066719264597">Chromium लाई पृष्ठभूमिमा चल्न दिनुहोस्</translation> <translation id="4423735387467980091">Chromium आफू अनुकूल र नियन्त्रण गर्नुहोस्</translation> <translation id="4544142686420020088">Chromium अद्यावधिक भएन, केही चिज गडबड भयो। <ph name="BEGIN_LINK" />Chromium अद्यावधिक गर्दा देखिएका समस्या तथा अद्यावधिक नहुने समस्याहरू समाधान गर्नुहोस्।<ph name="END_LINK" /></translation> <translation id="4567424176335768812">तपाइँ <ph name="USER_EMAIL_ADDRESS" /> को रूपमा साइन इन हुनुभएको छ। अब तपाइँले तपाइँका सबै साइन इन भएका यन्त्रहरूमा तपाइँका पृष्ठमञ्जूषाहरू, इतिहास, र अन्य सेटिङहरू पहुँच गर्न सक्नुहुन्छ।</translation> <translation id="459535195905078186">क्रोमियम एप्स</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: १ मिनेटअघि।}other{Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: {NUM_MINS} मिनेटअघि।}}</translation> <translation id="4677944499843243528">यो प्रोफाइल अर्को Chromium प्रक्रिया (<ph name="PROCESS_ID" />) द्वारा अर्को कम्प्युटर (<ph name="HOST_NAME" />) मा प्रयोग गरिएको देखिएको छ। Chromium ले प्रोफाइल लक गरेको छ जसले गर्दा त्यो दूषित हुँदैन। यदि तपाइँ यस प्रोफाइललाई अन्य कुनै प्रक्रियाहरूले प्रयोग गरिरहेको छैन भनेर निश्चय हुनुहुन्छ भमे, तपाइँले प्रोफाइल अनलक गर्न र Chromium फेरि सुरु गर्न सक्नुहुन्छ।</translation> <translation id="469338717132742108">Chromium OS को सम्बन्धमा मद्दत प्राप्त गर्नुहोस्</translation> <translation id="4708774505295300557">कुनै व्यक्तिले अघिल्लो पटक यस कम्प्युटरमा <ph name="ACCOUNT_EMAIL_LAST" /> को रूपमा Chromium मा साइन इन गरेको थियो। कृपया आफ्नो जानकारी छुट्टै राख्न Chromium मा एउटा नयाँ प्रयोगकर्ता सिर्जना गर्नुहोस्।</translation> @@ -105,6 +111,7 @@ <translation id="4750035648288509542">अद्यावधिक गर्ने कार्य लगभग सम्पन्न भइसक्यो! अद्यावधिक गर्ने कार्य सम्पन्न गर्न Chromium पुनः सुरु गर्नुहोस् इन्कोग्निटो विन्डोहरू पुनः खुल्ने छैनन्।</translation> <translation id="4788777615168560705">Chromium तपाईंका पासवर्डहरू जाँच्न सक्दैन। २४ घन्टापछि फेरि प्रयास गर्नुहोस् वा <ph name="BEGIN_LINK" />आफ्नो Google खातामा गई आफ्ना पासवर्डहरू जाँच्नुहोस्<ph name="END_LINK" />।</translation> <translation id="479167709087336770">यसले Google खोजमा प्रयोग गरिएकै हिज्जे परीक्षक प्रयोग गर्दछ। तपाईंले ब्राउजरमा टाइप गर्ने पाठ Google मा पठाइन्छ। तपाईं सेटिङमा गई जुनसुकै बेला उक्त व्यवहार परिवर्तन गर्न सक्नुहुन्छ।</translation> +<translation id="487524289568229802">Chromium ले तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँचिरहको छ...</translation> <translation id="4888717733111232871">mDNS ट्राफिक अनुमति दिन Chromium को लागि इन्बाउन्ड नियम।</translation> <translation id="4893632094755846570">तपाईंले यो प्रोफाइल हटाउनुभयो भने यो यन्त्रबाट तपाईंको ब्राउजिङ डेटा सदाका लागि मेटाइने छ। उक्त डेटा पुनः प्राप्त गर्न निम्न खाता प्रयोग गरी Chromium मा साइन इन गर्नुहोस्</translation> <translation id="4943838377383847465">Chromium पृष्ठभूमि मोडमा छ।</translation> @@ -169,6 +176,7 @@ केही सुविधाहरू अनुपलब्ध हुन सक्छन्। कृपया एउटा भिन्न प्रोफाइल डाइरेक्टरी निर्दिष्ट गर्नुहोस् वा Chromium को कुनै अझ नया सँस्करण प्रयोग गर्नुहोस्।</translation> <translation id="6734080038664603509">&Chromium अपडेट गर्नुहोस्</translation> <translation id="6734291798041940871">तपाईँको कम्प्युटरमा पहिले नै सबै प्रयोगकर्ताहरूका लागि Chromium को स्थापना गरिएको छ।</translation> +<translation id="6737557815519435616">Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: केही बेरअघि।</translation> <translation id="6762551859069255163">कामका सिलसिलामा गरिने ब्राउजिङ र व्यक्तिगत रूपमा गरिने ब्राउजिङ अलग गर्न वा यो यन्त्र प्रयोग गर्ने विभिन्न मान्छेहरूका लागि Chromium मा विभिन्न प्रोफाइलहरू बनाउनुहोस्</translation> <translation id="6774082503108938489">तपाईंका अभिभावकले Chromium का हकमा "साइट, एप तथा एक्सटेन्सनसम्बन्धी अनुमति" निष्क्रिय पार्नुभएको छ। तपाईंसँग यो <ph name="EXTENSION_TYPE_PARAMETER" /> सक्षम पार्ने अनुमति छैन।</translation> <translation id="6847869444787758381">तपाईंको पासवर्ड ह्याक भएको खण्डमा Chromium ले तपाईंलाई त्यसको जानकारी दिन्छ</translation> @@ -178,6 +186,7 @@ <translation id="6964305034639999644">लिंकलाई Chromium को इन्कोग्निटो विन्डोमा खोल्नुहोस्</translation> <translation id="6990124437352146030">Chromium लाई यो साइटका लागि तपाईंको माइक्रोफोनमाथि पहुँच राख्ने अनुमति चाहिन्छ</translation> <translation id="701244094609242530">Chromium ले तपाईंका एक्स्टेन्सनहरूको जाँच गर्न सकेन। पछि फेरि प्रयास गर्नुहोस्।</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: १ घन्टाअघि।}other{Chromium ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: {NUM_HOURS} घन्टाअघि।}}</translation> <translation id="705851970750939768">Chromium अपडेट गर्नुहोस्</translation> <translation id="7066436765290594559">क्रोमियम ओएसले तपाईंको डाटा सिंक गर्न सकेन। कृपया आफ्नो सिंक पासफ्रेज अपडेट गर्नुहोस्।</translation> <translation id="7067091210845072982">कुनै छविमा उपयोगी विवरण नभएका खण्डमा Chromium ले तपाईंलाई एउटा विवरण उपलब्ध गराउने प्रयास गर्ने छ। विवरणहरू सिर्जना गर्न छविहरू Google मा पठाइन्छ।</translation> @@ -238,6 +247,7 @@ <translation id="8621669128220841554">अनिश्</translation> <translation id="8697124171261953979">तपाइँले Chromium सुरु गर्दा वा ओम्निबाकसबाट खोज्दा कुन पृष्ठ देखाउँछ भनेर पनि यसले नियन्त्रण गर्छ।</translation> <translation id="8704119203788522458">यो तपाइँको Chromium हो</translation> +<translation id="8733034664173984083">Chromium ले तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँचिरहेका बेला कुनै त्रुटि भयो</translation> <translation id="8796602469536043152">Chromium लाई यो साइटका लागि तपाईंको क्यामेरा र माइक्रोफोनमाथि पहुँच राख्ने अनुमति चाहिन्छ</translation> <translation id="8803635938069941624">Chromium OS सर्तहरू</translation> <translation id="8821041990367117597">क्रोमियमले तपाईंको डाटा समक्रमण गर्न सकेन किनकी तपाईंको खाता साइन-इन विवरणहरूको म्याद सकिएको छ।</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index 6523865..7f707577 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Вкладка Chromium</translation> <translation id="2718390899429598676">В целях повышения безопасности Chromium шифрует ваши данные.</translation> <translation id="2770231113462710648">Назначить браузером по умолчанию:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />Администратор<ph name="END_LINK" /> отключил выполнение браузером Chromium проверки на наличие вредоносного ПО.</translation> <translation id="2799223571221894425">Перезапустить</translation> <translation id="2847479871509788944">Удалить из Chromium</translation> <translation id="2853765747879685679">Спрашивать во время запуска Chromium</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">О &Chromium</translation> <translation id="2977470724722393594">Вы используете последнюю версию Chromium</translation> <translation id="2983934633046890458">Chromium пытается изменить пароли</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: 1 день назад.}one{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} день назад.}few{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} дня назад.}many{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} дней назад.}other{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} дня назад.}}</translation> <translation id="3032706164202344641">Не удается запустить проверку паролей в Chromium. Повторите попытку позже.</translation> <translation id="3032787606318309379">Добавление в Chromium...</translation> <translation id="3068515742935458733">Помочь улучшить Chromium, отправляя в Google отчеты о сбоях и <ph name="UMA_LINK" /></translation> @@ -68,6 +70,7 @@ <translation id="347328004046849135">Вы получите уведомление от Chromium, если войдете в аккаунт с паролем, который был раскрыт.</translation> <translation id="3474745554856756813">С устройства будут удалены объекты (<ph name="ITEMS_COUNT" />). Чтобы восстановить данные позже, войдите в Chromium как <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Закройте все окна Chromium и повторите попытку снова.</translation> +<translation id="3527440529060401414">Браузер Chromium может проверить компьютер на наличие вредоносного ПО.</translation> <translation id="3575459661164320785">На компьютере обнаружено вредоносное ПО. Chromium может удалить его, восстановить настройки и отключить расширения. Это вернет браузер в обычное состояние.</translation> <translation id="3639635944603682591">Данные о работе этого пользователя в браузере будут удалены с устройства. Чтобы восстановить их, войдите в Chromium как <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера.}=1{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. Окно в режиме инкогнито не будет открыто повторно.}one{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окно в режиме инкогнито не будет открыто повторно.}few{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окна в режиме инкогнито не будут открыты повторно.}many{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окон в режиме инкогнито не будут открыты повторно.}other{Для Chromium доступно обновление. Оно будет установлено при перезапуске браузера. # окна в режиме инкогнито не будут открыты повторно.}}</translation> @@ -83,18 +86,21 @@ <translation id="3945058413678539331">Chromium пытается скопировать пароли. Чтобы разрешить это действие, введите свой пароль Windows.</translation> <translation id="4036079820698952681">Отправьте отчет о <ph name="BEGIN_LINK" />текущих настройках Chromium<ph name="END_LINK" />, чтобы помочь нам улучшить браузер</translation> <translation id="4050175100176540509">В последней версии улучшена защита и добавлены новые функции.</translation> +<translation id="4136604564421273381">Браузер Chromium удаляет с компьютера вредоносное ПО…</translation> <translation id="419998258129752635">"<ph name="PAGE_TITLE" />" – вход в сеть – Chromium</translation> <translation id="421369550622382712">Широкий выбор приложений, игр, расширений и тем для Chromium.</translation> <translation id="4216212958613226427">На этом языке отображается интерфейс Chromium</translation> <translation id="4230135487732243613">Связать данные Chromium с этим аккаунтом?</translation> <translation id="4271805377592243930">Справка Chromium</translation> <translation id="4285930937574705105">Установка не удалась из-за неизвестной ошибки. Если Chromium продолжает работать, закройте его и повторите попытку.</translation> +<translation id="4352041330999353637">Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: вчера.</translation> <translation id="4407044323746248786">Закрыть Chromium?</translation> <translation id="4415566066719264597">Разрешить Chromium работать в фоновом режиме</translation> <translation id="4423735387467980091">Настройка и управление Chromium</translation> <translation id="4544142686420020088">Не удалось обновить Chromium. <ph name="BEGIN_LINK" />Выяснить причины неполадок и устранить их<ph name="END_LINK" /></translation> <translation id="4567424176335768812">Вы вошли с помощью аккаунта <ph name="USER_EMAIL_ADDRESS" />. Ваши закладки, история и другие настройки теперь доступны на всех устройствах, где вы используете этот аккаунт.</translation> <translation id="459535195905078186">Приложения Chromium</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: 1 минуту назад.}one{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минуту назад.}few{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минуты назад.}many{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минут назад.}other{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минуты назад.}}</translation> <translation id="4677944499843243528">Скорее всего, профиль используется другим процессом Chromium (<ph name="PROCESS_ID" />) на другом компьютере (<ph name="HOST_NAME" />). Во избежание сбоев профиль был заблокирован. Если вы уверены, что профиль не используется другими процессами, разблокируйте его и перезапустите Chromium.</translation> <translation id="469338717132742108">Справка Chromium OS</translation> <translation id="4708774505295300557">Ранее вход в Chromium на этом компьютере выполнялся из аккаунта <ph name="ACCOUNT_EMAIL_LAST" />. Чтобы ваши данные хранились отдельно, создайте новый профиль Chromium.</translation> @@ -103,6 +109,7 @@ <translation id="4750035648288509542">Почти готово! Чтобы завершить обновление, перезапустите Chromium. Окна в режиме инкогнито не будут открыты повторно.</translation> <translation id="4788777615168560705">Не удается проверить пароли в Chromium. Повторите попытку через 24 часа или <ph name="BEGIN_LINK" />проверьте пароли в аккаунте Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Используется та же технология проверки правописания, что и в Google Поиске. Текст, который вы введете в браузере, будет отправлен в Google. Этот параметр можно изменить в настройках.</translation> +<translation id="487524289568229802">Браузер Chromium проверяет компьютер на наличие вредоносного ПО…</translation> <translation id="4888717733111232871">Разрешить в Chromium передачу входящего трафика по протоколу mDNS</translation> <translation id="4893632094755846570">Все данные о работе в браузере будут удалены с устройства. Чтобы восстановить их, войдите в Chromium как</translation> <translation id="4943838377383847465">Chromium работает в фоновом режиме</translation> @@ -167,6 +174,7 @@ Некоторые возможности могут быть недоступны. Укажите другой каталог профиля либо используйте более новую версию Chromium.</translation> <translation id="6734080038664603509">Обновить &Chromium</translation> <translation id="6734291798041940871">Chromium уже установлен для всех пользователей вашего компьютера</translation> +<translation id="6737557815519435616">Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: только что.</translation> <translation id="6762551859069255163">Разные профили Chromium нужны для раздельного использования браузера в личных и рабочих целях или если с ним работают разные люди.</translation> <translation id="6774082503108938489">Родители отключили в Chromium параметр "Разрешения для сайтов, приложений и расширений". Включать это <ph name="EXTENSION_TYPE_PARAMETER" /> запрещено.</translation> <translation id="6847869444787758381">Chromium сообщит вам, если возникнет проблема с безопасностью ваших паролей.</translation> @@ -176,6 +184,7 @@ <translation id="6964305034639999644">Открыть ссылку в режиме инкогнито браузера Chromium</translation> <translation id="6990124437352146030">Для этого сайта Chromium запрашивает доступ к микрофону.</translation> <translation id="701244094609242530">Не удается запустить проверку паролей в Chromium. Повторите попытку позже.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: 1 час назад.}one{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} час назад.}few{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} часа назад.}many{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} часов назад.}other{Браузер Chromium не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} часа назад.}}</translation> <translation id="705851970750939768">Обновить Chromium</translation> <translation id="7066436765290594559">Не удалось синхронизировать данные. Обновите кодовую фразу в Sync.</translation> <translation id="7067091210845072982">Если у изображения нет понятного описания, Chromium попытается его найти. Для создания описаний изображения отправляются в Google.</translation> @@ -233,6 +242,7 @@ <translation id="8621669128220841554">В процессе установки произошла неизвестная ошибка. Скачайте Chromium ещё раз.</translation> <translation id="8697124171261953979">Кроме того, расширение изменило стартовую страницу Chromium и поисковую систему, используемую по умолчанию при вводе запроса в омнибокс.</translation> <translation id="8704119203788522458">Ваш персональный Chromium</translation> +<translation id="8733034664173984083">При проверке браузером Chromium компьютера на наличие вредоносного ПО произошла ошибка.</translation> <translation id="8796602469536043152">Для этого сайта Chromium запрашивает доступ к камере и микрофону.</translation> <translation id="8803635938069941624">Условия использования Chromium OS</translation> <translation id="8821041990367117597">Chromium не удалось синхронизировать данные, поскольку ваши учетные сведения устарели.</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb index 22fdb0d..cc7b02c7 100644 --- a/chrome/app/resources/chromium_strings_te.xtb +++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Chromium ట్యాబ్</translation> <translation id="2718390899429598676">అదనపు భద్రత కోసం, Chromium మీ డేటాను ఎన్క్రిప్ట్ చేస్తుంది.</translation> <translation id="2770231113462710648">డిఫాల్ట్ బ్రౌజర్ను దీనికి మార్చు:</translation> +<translation id="2774556997178638058">హానికరమైన సాఫ్ట్వేర్ను Chromium చెక్ చేయడాన్ని <ph name="BEGIN_LINK" />మీ అడ్మినిస్ట్రేటర్<ph name="END_LINK" /> డిజేబుల్ చేశారు</translation> <translation id="2799223571221894425">మళ్లీ ప్రారంభించు</translation> <translation id="2847479871509788944">Chromium నుండి తీసివేయి...</translation> <translation id="2853765747879685679">నేను Chromium తెరిచినప్పుడు అడుగు</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">&Chromium గురించి</translation> <translation id="2977470724722393594">Chromium తాజాగా ఉంది</translation> <translation id="2983934633046890458">Chromium పాస్వర్డ్లను ఎడిట్ చేయడానికి ప్రయత్నిస్తోంది.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: 1 రోజు క్రితం.}other{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: {NUM_DAYS} రోజుల క్రితం.}}</translation> <translation id="3032706164202344641">Chromium మీ పాస్వర్డ్లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation> <translation id="3032787606318309379">Chromiumకి జోడిస్తోంది...</translation> <translation id="3068515742935458733">Googleకు వినియోగ గణాంకాలు, <ph name="UMA_LINK" />ను పంపడం ద్వారా Chromiumను మెరుగుపరచడంలో సహాయపడండి</translation> @@ -68,6 +70,7 @@ <translation id="347328004046849135">చోరీకి గురైన పాస్వర్డ్తో మీరు సైన్ ఇన్ చేసినప్పుడు Chromium మీకు తెలియజేస్తుంది</translation> <translation id="3474745554856756813">ఇది ఈ పరికరం నుండి <ph name="ITEMS_COUNT" /> అంశాలను తొలగిస్తుంది. మీ డేటాను తర్వాత తిరిగి పొందడానికి, Chromiumకు <ph name="USER_EMAIL" /> లాగా సైన్ ఇన్ చేయండి.</translation> <translation id="3509308970982693815">దయచేసి అన్ని Chromium విండోలను మూసివేసి, మళ్లీ ప్రయత్నించండి.</translation> +<translation id="3527440529060401414">హానికరమైన సాఫ్ట్వేర్ కోసం Chromium మీ కంప్యూటర్ను చెక్ చేయగలదు</translation> <translation id="3575459661164320785">మీ కంప్యూటర్లో మీ భద్రతకు హాని కలిగించే సాఫ్ట్వేర్ ఉంది. మీ బ్రౌజర్ని మళ్లీ సాధారణంగా పని చేసేలా చేయడానికి Chromium దానిని తీసివేసి, మీ సెట్టింగ్లను పునరుద్ధరించి, ఎక్స్టెన్షన్లను నిలిపివేయగలదు.</translation> <translation id="3639635944603682591">ఈ వ్యక్తి బ్రౌజింగ్ డేటా ఈ పరికరం నుండి తొలగించబడుతుంది. డేటాను పునరుద్ధరించడానికి, <ph name="USER_EMAIL" />గా Chromiumకు సైన్ ఇన్ చేయండి.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Chromiumకు కొత్త అప్డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది.}=1{Chromiumకు కొత్త అప్డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది. మీ అజ్ఞాత విండో మళ్లీ తెరవబడదు.}other{Chromiumకు కొత్త అప్డేట్ అందుబాటులో ఉంది, మీరు పునఃప్రారంభించిన వెంటనే వర్తింపజేయబడుతుంది. మీ # అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.}}</translation> @@ -83,18 +86,21 @@ <translation id="3945058413678539331">పాస్వర్డ్లను కాపీ చేయడానికి Chromium ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్వర్డ్ను టైప్ చేయండి.</translation> <translation id="4036079820698952681"><ph name="BEGIN_LINK" />ప్రస్తుత సెట్టింగ్లను<ph name="END_LINK" /> నివేదించడం ద్వారా Chromiumను మెరుగుపరచడంలో సహాయపడండి</translation> <translation id="4050175100176540509">ముఖ్యమైన భద్రతా మెరుగుదలలు మరియు కొత్త ఫీచర్లు తాజా వెర్షన్లో అందుబాటులో ఉన్నాయి.</translation> +<translation id="4136604564421273381">Chromium మీ కంప్యూటర్ నుండి హానికరమైన సాఫ్ట్వేర్ను తీసివేస్తోంది...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - నెట్వర్క్ సైన్ ఇన్ - Chromium</translation> <translation id="421369550622382712">Chromium కోసం గొప్ప అనువర్తనాలు, ఆటలు, పొడిగింపులు మరియు థీమ్లను కనుగొనండి.</translation> <translation id="4216212958613226427">Chromium UI ప్రదర్శించడం కోసం ఈ భాష ఉపయోగించబడింది</translation> <translation id="4230135487732243613">మీ Chromium డేటాను ఈ ఖాతాకు జోడించాలా?</translation> <translation id="4271805377592243930">Chromium గురించి సహాయాన్ని పొందండి</translation> <translation id="4285930937574705105">పేర్కొనబడని ఎర్రర్ కారణంగా ఇన్స్టాలేషన్ విఫలమైంది. ప్రస్తుతం Chromium అమలు చేయబడుతుంటే, దయచేసి దీనిని మూసివేసి, మళ్లీ ప్రయత్నించండి.</translation> +<translation id="4352041330999353637">మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: నిన్న.</translation> <translation id="4407044323746248786">ఏదేమైనా Chromium నుండి నిష్క్రమించాలా?</translation> <translation id="4415566066719264597">నేపథ్యంలో అమలయ్యేందుకు Chromiumని అనుమతించండి</translation> <translation id="4423735387467980091">Chromiumను అనుకూలీకరించండి మరియు నియంత్రించండి</translation> <translation id="4544142686420020088">Chromium అప్డేట్ అవ్వలేదు, ఏదో తప్పు జరిగింది. <ph name="BEGIN_LINK" />Chromium అప్డేట్ సమస్యలు, విఫలమైన అప్డేట్లను పరిష్కరించండి.<ph name="END_LINK" /></translation> <translation id="4567424176335768812">మీరు <ph name="USER_EMAIL_ADDRESS" />గా సైన్ ఇన్ చేసారు. ఇప్పుడు మీరు సైన్ ఇన్ చేసిన అన్ని పరికరాల్లో మీ బుక్మార్క్లు, చరిత్ర మరియు ఇతర సెట్టింగ్లను యాక్సెస్ చేయవచ్చు.</translation> <translation id="459535195905078186">Chromium అనువర్తనాలు</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: 1 నిమిషం క్రితం.}other{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: {NUM_MINS} నిమిషాల క్రితం.}}</translation> <translation id="4677944499843243528">ఈ ప్రొఫైల్ను మరొక కంప్యూటర్ (<ph name="HOST_NAME" />)లో మరో Chromium ప్రాసెస్ (<ph name="PROCESS_ID" />) ఉపయోగిస్తున్నట్లు కనిపిస్తోంది. Chromium ప్రొఫైల్ను లాక్ చేసినందున అది పాడవదు. ఈ ప్రొఫైల్ను వేరే ప్రాసెస్లు ఏవీ ఉపయోగించడం లేదని మీకు ఖచ్చితంగా తెలిస్తే, ప్రొఫైల్ను అన్లాక్ చేసి Chromiumను మళ్లీ ప్రారంభించవచ్చు.</translation> <translation id="469338717132742108">Chromium OS గురించి సహాయాన్ని పొందండి</translation> <translation id="4708774505295300557">ఒకరు ఈ కంప్యూటర్లో మునుపు <ph name="ACCOUNT_EMAIL_LAST" /> లాగా Chromiumకు సైన్ ఇన్ చేశారు. దయచేసి మీ సమాచారాన్ని విడిగా ఉంచేందుకు కొత్త Chromium వినియోగదారును సృష్టించండి.</translation> @@ -103,6 +109,7 @@ <translation id="4750035648288509542">దాదాపుగా తాజాగా ఉంది! అప్డేట్ చేయడాన్ని పూర్తి చేయడానికి Chromiumను మళ్లీ ప్రారంభించండి. అజ్ఞాత విండోలు మళ్లీ తెరవబడవు.</translation> <translation id="4788777615168560705">Chromium మీ పాస్వర్డ్లను చెక్ చేయలేకపోయింది. 24 గంటల తర్వాత మళ్లీ ట్రై చేయండి లేదా <ph name="BEGIN_LINK" />మీ Google ఖాతాలో పాస్వర్డ్లను చెక్ చేయండి<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Google Searchలో ఉపయోగించే స్పెల్ చెకర్నే ఇది ఉపయోగిస్తుంది. మీరు బ్రౌజర్లో టైప్ చేసే టెక్స్ట్ను Googleకు పంపుతుంది. ఈ ఆప్షన్ను తర్వాత ఎప్పుడైనా మీరు సెట్టింగ్లలో మార్చవచ్చు.</translation> +<translation id="487524289568229802">హానికరమైన సాఫ్ట్వేర్ కోసం Chromium మీ కంప్యూటర్ను చెక్ చేస్తోంది...</translation> <translation id="4888717733111232871">mDNS ట్రాఫిక్ను అనుమతించడానికి Chromium ఇన్బౌండ్ నియమం.</translation> <translation id="4893632094755846570">ఇది మీ బ్రౌజింగ్ డేటాను ఈ పరికరం నుండి శాశ్వతంగా తొలగిస్తుంది. డేటాను తిరిగి పొందడానికి, Chromiumకు ఇలా సైన్ ఇన్ చేయండి</translation> <translation id="4943838377383847465">Chromium నేపథ్య మోడ్లో ఉంది.</translation> @@ -167,6 +174,7 @@ కొన్ని ఫీచర్లు అందుబాటులో ఉండకపోవచ్చు. దయచేసి వేరొక ప్రొఫైల్ డైరెక్టరీని పేర్కొనండి లేదా Chromium యొక్క కొత్త వెర్షన్ను ఉపయోగించండి.</translation> <translation id="6734080038664603509">&Chromiumను అప్డేట్ చేయండి</translation> <translation id="6734291798041940871">మీ కంప్యూటర్లోని వినియోగదారులందరికీ Chromium ఇప్పటికే ఇన్స్టాల్ చేయబడింది.</translation> +<translation id="6737557815519435616">మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: ఒక క్షణం క్రితం.</translation> <translation id="6762551859069255163">ఈ పరికరాన్ని ఉపయోగించే వేర్వేరు వ్యక్తుల కోసం లేదా ఆఫీస్, వ్యక్తిగత బ్రౌజింగ్లను విడిగా ఉంచడానికి Chromiumలో వేర్వేరు ప్రొఫైల్లను ఉపయోగించండి</translation> <translation id="6774082503108938489">Chromiumలో సైట్లు, యాప్లు, ఎక్స్టెన్షన్లకు సంబంధించిన అనుమతులను మీ తల్లి/తండ్రి ఆఫ్ చేశారు. ఈ <ph name="EXTENSION_TYPE_PARAMETER" />ను ఎనేబుల్ చేయడానికి అనుమతి లేదు.</translation> <translation id="6847869444787758381">మీ పాస్వర్డ్లు ఎప్పుడైనా హ్యాక్ అయితే, Chromium మీకు తెలియచేస్తుంది</translation> @@ -176,6 +184,7 @@ <translation id="6964305034639999644">Chromium అజ్ఞా&త విండోలో లింక్ను తెరువు</translation> <translation id="6990124437352146030">ఈ సైట్ కోసం మీ మైక్రోఫోన్ను యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం</translation> <translation id="701244094609242530">Chromium మీ ఎక్స్టెన్షన్లను తనిఖీ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: 1 గంట క్రితం.}other{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chromium కనుగొనలేదు. చివరగా చెక్ చేసినది: {NUM_HOURS} గంటల క్రితం.}}</translation> <translation id="705851970750939768">Chromiumను అప్డేట్ చేయి</translation> <translation id="7066436765290594559">Chromium OS మీ డేటాను సింక్ చేయలేకపోయింది. దయచేసి మీ సింక్ రహస్య పదబంధాన్ని అప్డేట్ చేయండి.</translation> <translation id="7067091210845072982">చిత్రంలో ఉపయోగకరమైన వివరణ లేకుంటే, మీ కోసం ఒక వివరణను అందించడానికి Chromium ప్రయత్నిస్తుంది. వివరణలను సృష్టించడానికి, చిత్రాలు Googleకు పంపబడతాయి.</translation> @@ -234,6 +243,7 @@ <translation id="8621669128220841554">తెలియని ఎర్రర్ కారణంగా ఇనస్టలేషన్ విఫలమైంది. దయచేసి Chromiumను మళ్లీ డౌన్లోడ్ చేయండి.</translation> <translation id="8697124171261953979">ఇది మీరు Chromiumను ప్రారంభించేటప్పుడు లేదా ఓమ్నిబాక్స్ నుండి వెతికేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation> <translation id="8704119203788522458">ఇది మీ Chromium</translation> +<translation id="8733034664173984083">హానికరమైన సాఫ్ట్వేర్ కోసం Chromium మీ కంప్యూటర్ను చెక్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది</translation> <translation id="8796602469536043152">ఈ సైట్ కోసం మీ కెమెరా మరియు మైక్రోఫోన్ను యాక్సెస్ చేయడానికి Chromiumకు అనుమతి అవసరం</translation> <translation id="8803635938069941624">Chromium OS నిబంధనలు</translation> <translation id="8821041990367117597">Chromium మీ డేటాను సింక్ చేయలేకపోయింది ఎందుకంటే మీ ఖాతా సైన్-ఇన్ వివరాల గడువు ముగిసింది.</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb index b1299bc5..eec3289a 100644 --- a/chrome/app/resources/chromium_strings_tr.xtb +++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Chromium Sekmesi</translation> <translation id="2718390899429598676">Chromium ek güvenlik için verilerinizi şifreler.</translation> <translation id="2770231113462710648">Varsayılan tarayıcıyı şuna dönüştür:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />Yöneticiniz<ph name="END_LINK" /> Chromium'un zararlı yazılım kontrolünü devre dışı bıraktı</translation> <translation id="2799223571221894425">Yeniden başlat</translation> <translation id="2847479871509788944">Chromium'dan kaldır...</translation> <translation id="2853765747879685679">Chromium'u açtığımda sor</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">&Chromium hakkında</translation> <translation id="2977470724722393594">Chromium güncel durumda</translation> <translation id="2983934633046890458">Chromium şifreleri düzenlemeye çalışıyor.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: 1 gün önce.}other{Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: {NUM_DAYS} gün önce.}}</translation> <translation id="3032706164202344641">Chromium, şifrelerinizi kontrol edemiyor. Daha sonra tekrar deneyin.</translation> <translation id="3032787606318309379">Chromium'a ekleniyor ...</translation> <translation id="3068515742935458733">Kilitlenme raporlarını ve <ph name="UMA_LINK" /> bilgilerini Google'a göndererek, Chromium'u daha iyi hale getirmeye yardımcı olun</translation> @@ -68,6 +70,7 @@ <translation id="347328004046849135">Chromium, güvenliği ihlal edilmiş bir şifreyle oturum açtığınızda size haber verir</translation> <translation id="3474745554856756813">Bu işlem, <ph name="ITEMS_COUNT" /> öğeyi bu cihazdan silecektir. Verilerinizi daha sonra geri almak için Chromium'da <ph name="USER_EMAIL" /> hesabıyla oturum açın.</translation> <translation id="3509308970982693815">Lütfen tüm Chromium pencerelerini kapatıp tekrar deneyin.</translation> +<translation id="3527440529060401414">Chromium, bilgisayarınızda zararlı yazılım olup olmadığını kontrol edebilir</translation> <translation id="3575459661164320785">Bilgisayarınızda zararlı yazılım var. Chromium, tarayıcınızın tekrar normal şekilde çalışmasını sağlamak için bunu kaldırabilir, ayarlarınızı geri yükleyebilir ve uzantıları devre dışı bırakabilir.</translation> <translation id="3639635944603682591">Bu kullanıcının tarama verileri bu cihazdan silinecektir. Verileri kurtarmak için Chromium'da <ph name="USER_EMAIL" /> olarak oturum açın.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Chromium için yeni bir güncelleme var. Yeniden başlattığınızda güncelleme hemen uygulanacaktır.}=1{Chromium için yeni bir güncelleme var. Yeniden başlattığınızda güncelleme hemen uygulanacaktır. Gizli pencereniz yeniden açılmayacak.}other{Chromium için yeni bir güncelleme var. Yeniden başlattığınızda güncelleme hemen uygulanacaktır. # Gizli pencereniz yeniden açılmayacak.}}</translation> @@ -83,18 +86,21 @@ <translation id="3945058413678539331">Chromium şifreleri kopyalamaya çalışıyor. Buna izin vermek için Windows şifrenizi yazın.</translation> <translation id="4036079820698952681"><ph name="BEGIN_LINK" />Mevcut ayarlarınızı<ph name="END_LINK" /> bildirerek Chromium'u daha iyi hale getirmemize yardımcı olun</translation> <translation id="4050175100176540509">Son sürümde güvenlikle ilgili önemli iyileştirmeler ve yeni özellikler mevcuttur.</translation> +<translation id="4136604564421273381">Chromium, bilgisayarınızdan zararlı yazılımı kaldırıyor...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - Ağda Oturum Açın - Chromium</translation> <translation id="421369550622382712">Chromium'a özgü harika uygulamaları, oyunları, uzantıları ve temaları keşfedin.</translation> <translation id="4216212958613226427">Bu dil, Chromium kullanıcı arayüzünü görüntülemek için kullanılır</translation> <translation id="4230135487732243613">Chromium verileriniz bu hesaba bağlansın mı?</translation> <translation id="4271805377592243930">Chromium'la ilgili yardım alın</translation> <translation id="4285930937574705105">Belirlenemeyen bir hata nedeniyle yükleme başarısız oldu. Chromium şu anda çalışır durumdaysa kapatıp yeniden deneyin.</translation> +<translation id="4352041330999353637">Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: Dün.</translation> <translation id="4407044323746248786">Yine de Chromium'dan çıkılsın mı?</translation> <translation id="4415566066719264597">Chromium'un Arka Planda Çalışmasına İzin Ver</translation> <translation id="4423735387467980091">Chromium'u özelleştirin ve kontrol edin</translation> <translation id="4544142686420020088">Chromium güncellenmedi. Bir sorun oluştu. <ph name="BEGIN_LINK" />Chrome güncelleme sorunlarını ve başarısız güncellemeleri düzeltin.<ph name="END_LINK" /></translation> <translation id="4567424176335768812"><ph name="USER_EMAIL_ADDRESS" /> olarak oturum açtınız. Şimdi oturum açtığınız tüm cihazlarda yer işaretlerinize, geçmişinize ve diğer ayarlarınıza erişebilirsiniz.</translation> <translation id="459535195905078186">Chromium Uygulamaları</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: 1 dakika önce.}other{Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: {NUM_MINS} dakika önce.}}</translation> <translation id="4677944499843243528">Profilin başka bir bilgisayarda (<ph name="HOST_NAME" />) başka bir Chromium işlemi (<ph name="PROCESS_ID" />) tarafından kullanıldığı anlaşılıyor. Chromium, profili bozulmaması için kilitledi. Bu profili başka hiçbir işlemin kullanmadığından eminseniz profilin kilidini açabilir ve Chromium'u tekrar başlatabilirsiniz.</translation> <translation id="469338717132742108">Chromium OS ile ilgili yardım alın</translation> <translation id="4708774505295300557">Birisi daha önce bu bilgisayarda <ph name="ACCOUNT_EMAIL_LAST" /> olarak Chromium oturumu açmış. Bilgilerinizi ayrı tutmak için yeni bir Chromium kullanıcısı oluşturun.</translation> @@ -103,6 +109,7 @@ <translation id="4750035648288509542">Güncel hale gelmek üzere! Güncellemenin tamamlanması için Chromium'u yeniden başlatın. Gizli pencereler yeniden açılmayacak.</translation> <translation id="4788777615168560705">Chromium, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin veya <ph name="BEGIN_LINK" />şifreleri Google Hesabınızda kontrol edin<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Bu işlev, Google Arama'da kullanılan yazım denetiminin aynısını kullanır. Tarayıcıda yazdığınız metin Google'a gönderilir. Bu davranışı istediğiniz zaman ayarlardan değiştirebilirsiniz.</translation> +<translation id="487524289568229802">Chromium, bilgisayarınızda zararlı yazılım olup olmadığını kontrol ediyor...</translation> <translation id="4888717733111232871">Chromium'un mDNS trafiğine izin vermeyi sağlayan gelen trafik kuralı.</translation> <translation id="4893632094755846570">Bu işlem, tarama verilerinizi bu cihazdan kalıcı olarak silecektir. Verileri kurtarmak için Chromium'da şu hesapla oturum açın:</translation> <translation id="4943838377383847465">Chromium arka plan modunda.</translation> @@ -167,6 +174,7 @@ Bazı özellikler kullanılamayabilir. Lütfen farklı bir profil dizini belirtin veya daha yeni bir Chromium sürümünü kullanın.</translation> <translation id="6734080038664603509">&Chromium'u güncelle</translation> <translation id="6734291798041940871">Chromium zaten bilgisayarınızdaki tüm kullanıcılar için yüklendi.</translation> +<translation id="6737557815519435616">Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: Biraz önce.</translation> <translation id="6762551859069255163">İş için yaptığınız göz atma işlemleriyle kişisel göz atma işlemlerinizi birbirinden ayırmak amacıyla ya da bu cihazı kullanan farklı kişiler için Chromium'da farklı profiller kullanın</translation> <translation id="6774082503108938489">Ebeveyniniz, Chromium'a yönelik "Siteler, uygulamalar ve uzantılar için izinler"i kapattı. Bu <ph name="EXTENSION_TYPE_PARAMETER" /> uzantısının etkinleştirilmesine izin verilmiyor.</translation> <translation id="6847869444787758381">Chromium, şifrelerinizin güvenliğinin ihlal edilip edilmediğini size bildirir</translation> @@ -176,6 +184,7 @@ <translation id="6964305034639999644">Bağlantıyı Chromium &gizli penceresinde aç</translation> <translation id="6990124437352146030">Chromium'un bu sitede mikrofonunuza erişmesi için izin gerekiyor</translation> <translation id="701244094609242530">Chromium, uzantılarınızı kontrol edemiyor. Daha sonra tekrar deneyin.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: 1 saat önce.}other{Chromium, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: {NUM_HOURS} saat önce.}}</translation> <translation id="705851970750939768">Chromium'u güncelle</translation> <translation id="7066436765290594559">Chromium OS, verilerinizi senkronize edemedi. Lütfen Senkronizasyon parolanızı güncelleyin.</translation> <translation id="7067091210845072982">Bir resmin işe yarar bir açıklaması yoksa, Chromium sizin için bir açıklama sağlamaya çalışır. Açıklama oluşturmak için resimler Google'a gönderilir.</translation> @@ -236,6 +245,7 @@ <translation id="8621669128220841554">Yükleme belirtilmeyen bir hata nedeniyle başarısız oldu. Lütfen Chromium'u tekrar indirin.</translation> <translation id="8697124171261953979">Ayrıca Chromium'u başlattığınızda veya Çok Amaçlı Adres Çubuğu'ndan arama yaptığınızda gösterilecek sayfayı da denetler.</translation> <translation id="8704119203788522458">Bu sizin Chromium'unuz</translation> +<translation id="8733034664173984083">Chromium, bilgisayarınızda zararlı yazılım olup olmadığını kontrol ederken bir hata oluştu</translation> <translation id="8796602469536043152">Chromium'un bu sitede kameranıza ve mikrofonunuza erişmesi için izin gerekiyor</translation> <translation id="8803635938069941624">Chromium OS şartları</translation> <translation id="8821041990367117597">Hesap oturum açma ayrıntılarınız güncel olmadığından Chromium, verilerinizi senkronize edemedi.</translation>
diff --git a/chrome/app/resources/chromium_strings_uz.xtb b/chrome/app/resources/chromium_strings_uz.xtb index 4d310ca..411e399 100644 --- a/chrome/app/resources/chromium_strings_uz.xtb +++ b/chrome/app/resources/chromium_strings_uz.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Chromium sahifasi</translation> <translation id="2718390899429598676">Xavfsizlik himoyasini oshirish maqsadida Chromium ma’lumotlaringizni shifrlaydi.</translation> <translation id="2770231113462710648">Standart brauzer etib tayinlash:</translation> +<translation id="2774556997178638058">Chromium zararli dasturlarni aniqlash vositasi <ph name="BEGIN_LINK" />administrator<ph name="END_LINK" /> tomonidan faolsizlantirilgan</translation> <translation id="2799223571221894425">Qaytadan ishga tushirish</translation> <translation id="2847479871509788944">Chromium‘dan o‘chirish...</translation> <translation id="2853765747879685679">Chromium ochilganda soʻralsin</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">&Chromium haqida</translation> <translation id="2977470724722393594">Siz Chromium brauzerining eng oxirgi versiyasidan foydalanyapsiz.</translation> <translation id="2983934633046890458">Chromium parollarni tahrirlashga urinmoqda.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: 1 kun oldin tekshirilgan.}other{Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: {NUM_DAYS} kun oldin tekshirilgan.}}</translation> <translation id="3032706164202344641">Chromium parollaringizni tekshira olmadi. Keyinroq qayta urining.</translation> <translation id="3032787606318309379">Chromium‘ga o‘rnatilmoqda...</translation> <translation id="3068515742935458733">Google‘ga ishdan chiqishlar hisoboti va <ph name="UMA_LINK" />‘ni jo‘natib Chromium yaxshilanishiga yordam berish.</translation> @@ -68,6 +70,7 @@ <translation id="347328004046849135">Google hisobingizga kirsangiz, Chromium oshkor qilingan parollar haqida xabar qiladi</translation> <translation id="3474745554856756813">Ushbu qurilmadagi <ph name="ITEMS_COUNT" /> ta element butunlay o‘chiriladi. Ma’lumotlaringizni keyinroq olish uchun Chromium brauzeriga <ph name="USER_EMAIL" /> sifatida kiring.</translation> <translation id="3509308970982693815">Barcha Chromium oynalarini yoping va qaytadan urinib ko‘ring.</translation> +<translation id="3527440529060401414">Chromium kompyuteringizni zararli dasturlarni aniqlash uchun tekshira oladi</translation> <translation id="3575459661164320785">Kompyuteringizda zararli dasturlar topildi. Chromium uni tozalab, sozlamalarni qayta tiklashi, kengaytmalarni oʻchirib qoʻyishi mumkin.</translation> <translation id="3639635944603682591">Bu foydalanuvchi brauzerining tarixi ushbu qurilmadan butunlay tozalanadi. Axborotlarni tiklash uchun brauzerga <ph name="USER_EMAIL" /> sifatida kiring.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Chromium uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi.}=1{Chromium uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi. Inkognito oynalar qayta ochilmaydi.}other{Chromium uchun yangilanish mavjud va brauzer qayta ishga tushirilganda oʻrnatiladi. # ta inkognito oyna qayta ochilmaydi.}}</translation> @@ -83,18 +86,21 @@ <translation id="3945058413678539331">Chromium parollarni nusxalashga urinmoqda. Ruxsat berish uchun Windows parolingizni kiriting.</translation> <translation id="4036079820698952681">Chromium brauzerining <ph name="BEGIN_LINK" />joriy sozlamalari<ph name="END_LINK" /> asosida hisobot yuboring va brauzerning ishlashini yaxshilashga yordamlashing</translation> <translation id="4050175100176540509">So‘nggi versiyada himoya devori yaxshilandi va yangi funksiyalar qo‘shildi.</translation> +<translation id="4136604564421273381">Chromium kompyuteringizdan zararli dasturni olib tashlamoqda...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - Tarmoqqa kirish - Chromium</translation> <translation id="421369550622382712">Chromium uchun zo‘r ilovalar, o‘yinlar va kengaytmalar bilan tanishing.</translation> <translation id="4216212958613226427">Chromium UI interfeysi hozir shu tilda</translation> <translation id="4230135487732243613">Chromium ma’lumotlari bu hisob bilan bog‘lanib qo‘yilsinmi?</translation> <translation id="4271805377592243930">Chromium yordam markazi</translation> <translation id="4285930937574705105">Noma’lum xatolik tufayli o‘rnatish amalga oshmadi. Agar hozirda Chromium ishlab turgan bo‘lsa, iltimos brauzeringizni yoping va qaytadan urinib ko‘ring.</translation> +<translation id="4352041330999353637">Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: kecha tekshirilgan.</translation> <translation id="4407044323746248786">Chromium baribir yopilsinmi?</translation> <translation id="4415566066719264597">Chromium fonda ishlashiga ruxsat</translation> <translation id="4423735387467980091">Chromium’ni sozlash va boshqarish</translation> <translation id="4544142686420020088">Notanish xatolik tufayli Chromium yangilanmadi. <ph name="BEGIN_LINK" />Chromiumdagi yangilanish muammolari va xatoliklarni tuzatish.<ph name="END_LINK" /></translation> <translation id="4567424176335768812">Siz <ph name="USER_EMAIL_ADDRESS" /> hisobidan kirtingiz. Barcha xatcho‘plar, brauzer tarixi va boshqa sozlamalaringiz endi bu hisobdan foydalanadigan barcha qurilmalaringizda mavjud.</translation> <translation id="459535195905078186">Chromium ilovalari</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: 1 daqiqa oldin tekshirilgan.}other{Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: {NUM_MINS} daqiqa oldin tekshirilgan.}}</translation> <translation id="4677944499843243528">Profil boshqa kompyuterdagi (<ph name="HOST_NAME" />) boshqa Chromium jarayonida (<ph name="PROCESS_ID" />) foydalanilayotgan ko‘rinadi. Ishdan chiqishlarni oldini olish maqsadida profil qulflandi. Agar aniq o‘zingiz foydalanayotgan bo‘lsangiz, qulfdan yeching va Chromium‘ni qaytadan ishga tushiring.</translation> <translation id="469338717132742108">Chromium OS yordam markazi</translation> <translation id="4708774505295300557">Oldinroq Chrome profiliga kimdir bu kompyuterdan <ph name="ACCOUNT_EMAIL_LAST" /> sifatida kirgan. Ma’lumotlaringizni alohida saqlash uchun yangi Chromium profilini yarating.</translation> @@ -103,6 +109,7 @@ <translation id="4750035648288509542">Deyarli yangilandi! Yangilash tugashi uchun Chromium brauzerini qayta ishga tushiring. Inkognito oynalar qayta ochilmaydi.</translation> <translation id="4788777615168560705">Chromium parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining yoki <ph name="BEGIN_LINK" />Google hisobingizdagi parollarni tekshiring<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Google qidiruvida ishlatiladigan imlo tekshiruvi vositasidan foydalanadi. Brauzerda kiritiladigan matn Google serverlariga yuboriladi. Buni istalgan vaqtda sozlamalar orqali oʻzgartirish mumkin.</translation> +<translation id="487524289568229802">Chromium kompyuteringizni zararli dasturlar uchun tekshirmoqda...</translation> <translation id="4888717733111232871">Chromium‘ga kiruvchi trafikni mDNS protokoli orqali uzatishga ruxsat berish</translation> <translation id="4893632094755846570">Bu foydalanuvchi brauzerining tarixi ushbu qurilmadan butunlay tozalanadi. Axborotlarni tiklash uchun brauzerga quyidagi foydalanuvchi sifatida kiring:</translation> <translation id="4943838377383847465">Chromium orqa fon rejimida ishlamoqda.</translation> @@ -167,6 +174,7 @@ Ba’zi imkoniyatlar ishlamasligi mumkin. Profilni saqlash uchun boshqa jild tayinlang yoki yangiroq Chromium versiyasidan foydalaning.</translation> <translation id="6734080038664603509">&Chromium‘ni yangilash</translation> <translation id="6734291798041940871">Chromium allaqachon kompyuterdagi barcha foydalanuvchilar uchun o‘rnatilgan.</translation> +<translation id="6737557815519435616">Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: hozirgina tekshirilgan.</translation> <translation id="6762551859069255163">Internetni ish va shaxsiy maqsadlarda yoki bu qurilmadagi boshqa foydalanuvchilar kezishini ajratish uchun Chromiumda turli profillardan foydalaning</translation> <translation id="6774082503108938489">Chromiumdagi “Sayt, ilova va kengaytmalarga ruxsat” ota-onangiz tomonidan faolsizlantirilgan. Bu <ph name="EXTENSION_TYPE_PARAMETER" /> yoqilishi taqiqlangan.</translation> <translation id="6847869444787758381">Parollaringiz oshkor etilsa, Chromium bu haqida xabar qiladi</translation> @@ -176,6 +184,7 @@ <translation id="6964305034639999644">Havolani Chromium &inkognito oynasida ochish</translation> <translation id="6990124437352146030">Bu sayt mikrofoningizdan foydalanishi uchun Chromium brauzeriga ruxsat berishingiz lozim</translation> <translation id="701244094609242530">Chromium kengaytmalaringizni tekshira olmadi. Keyinroq qayta urining.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: 1 soat oldin tekshirilgan.}other{Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: {NUM_HOURS} soat oldin tekshirilgan.}}</translation> <translation id="705851970750939768">Chromium‘ni yangilash</translation> <translation id="7066436765290594559">Chromium OS ma’lumotlaringizni sinxronlay olmadi. Sync kodli iborasini yangilang.</translation> <translation id="7067091210845072982">Agar rasmga foydali tavsif berilmagan boʻlsa, Chromium uni sizga tavsiflaydi. Tavsif yaratish uchun rasmlar Googlega yuboriladi.</translation> @@ -236,6 +245,7 @@ <translation id="8621669128220841554">O‘rnatish vaqtida kutilmagan xatolik yuz berdi. Chromium‘ni qaytadan yuklab oling.</translation> <translation id="8697124171261953979">Bundan tashqari kengaytma Chromium boshlash sahifasini va omniboksdagi so‘rovlar uchun foydalaniladigan birlamchi qidiruv tizimini o‘zgartirdi.</translation> <translation id="8704119203788522458">Bu sizning shaxsiy Chromium brauzeringiz</translation> +<translation id="8733034664173984083">Chromium kompyuteringizni zararli dasturlar uchun tekshirayotganda xatolik yuz berdi</translation> <translation id="8796602469536043152">Bu sayt kamera va mikrofoningizdan foydalanishi uchun Chromium brauzeriga ruxsat berishingiz lozim</translation> <translation id="8803635938069941624">Chromium OS shartlari</translation> <translation id="8821041990367117597">Chromium ma’lumotlaringizni sinxronlay olmadi, chunki hisobingiz haqidagi ma’lumotlar eskirgan.</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb index 53a8a81e..e1d6001 100644 --- a/chrome/app/resources/chromium_strings_vi.xtb +++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -44,6 +44,7 @@ <translation id="2711502716910134313">Thẻ Chromium</translation> <translation id="2718390899429598676">Để bảo mật hơn, Chromium sẽ mã hóa dữ liệu của bạn.</translation> <translation id="2770231113462710648">Thay đổi trình duyệt mặc định thành:</translation> +<translation id="2774556997178638058"><ph name="BEGIN_LINK" />Quản trị viên của bạn<ph name="END_LINK" /> đã tắt tính năng kiểm tra phần mềm gây hại trên Chromium</translation> <translation id="2799223571221894425">Chạy lại</translation> <translation id="2847479871509788944">Xóa khỏi Chromium...</translation> <translation id="2853765747879685679">Hỏi khi tôi mở Chromium</translation> @@ -51,6 +52,7 @@ <translation id="2910007522516064972">Giới thiệu về &Chromium</translation> <translation id="2977470724722393594">Chromium đã được cập nhật</translation> <translation id="2983934633046890458">Chromium đang cố gắng chỉnh sửa mật khẩu.</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: 1 ngày trước.}other{Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: {NUM_DAYS} ngày trước.}}</translation> <translation id="3032706164202344641">Chromium không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau.</translation> <translation id="3032787606318309379">Đang thêm vào Chromium...</translation> <translation id="3068515742935458733">Giúp cải thiện Chromium bằng cách gửi báo cáo sự cố và <ph name="UMA_LINK" /> tới Google</translation> @@ -70,6 +72,7 @@ <translation id="347328004046849135">Chromium sẽ thông báo cho bạn khi bạn đăng nhập bằng mật khẩu bị lộ</translation> <translation id="3474745554856756813">Thao tác này sẽ xóa <ph name="ITEMS_COUNT" /> mục khỏi thiết bị này. Để truy xuất dữ liệu của bạn sau, hãy đăng nhập vào Chromium dưới dạng <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Hãy đóng tất cả cửa sổ Chromium và thử lại.</translation> +<translation id="3527440529060401414">Chromium có thể kiểm tra máy tính của bạn để tìm phần mềm gây hại</translation> <translation id="3575459661164320785">Máy tính của bạn có phần mềm độc hại. Chromium có thể xóa phần mềm này, khôi phục các tùy chọn cài đặt của bạn và tắt tiện ích để giúp trình duyệt hoạt động lại bình thường.</translation> <translation id="3639635944603682591">Dữ liệu duyệt web của người này sẽ bị xóa khỏi thiết bị này. Để khôi phục dữ liệu, hãy đăng nhập vào Chromium bằng <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Đã có bản cập nhật Chromium mới và bản cập nhật này sẽ áp dụng ngay khi bạn chạy lại Chromium.}=1{Đã có bản cập nhật Chromium mới và bản cập nhật này sẽ áp dụng ngay khi bạn chạy lại Chromium. Cửa sổ ẩn danh của bạn sẽ không mở lại.}other{Đã có bản cập nhật Chromium mới và bản cập nhật này sẽ áp dụng ngay khi bạn chạy lại Chromium. # cửa sổ ẩn danh của bạn sẽ không mở lại.}}</translation> @@ -85,18 +88,21 @@ <translation id="3945058413678539331">Chromium đang cố gắng sao chép mật khẩu. Hãy nhập mật khẩu Windows của bạn để cho phép việc này.</translation> <translation id="4036079820698952681">Giúp cải thiện Chromium bằng cách báo cáo <ph name="BEGIN_LINK" />cài đặt hiện tại<ph name="END_LINK" /></translation> <translation id="4050175100176540509">Cải thiện bảo mật quan trọng và tính năng mới có trong phiên bản mới nhất.</translation> +<translation id="4136604564421273381">Chromium đang xóa phần mềm gây hại khỏi máy tính của bạn...</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> – Đăng nhập vào mạng – Chromium</translation> <translation id="421369550622382712">Khám phá các ứng dụng, trò chơi, tiện ích và chủ đề tuyệt vời cho Chromium.</translation> <translation id="4216212958613226427">Ngôn ngữ này dùng để hiển thị giao diện người dùng của Chromium</translation> <translation id="4230135487732243613">Bạn muốn liên kết dữ liệu Chromium của bạn với tài khoản này?</translation> <translation id="4271805377592243930">Nhận trợ giúp về Chromium</translation> <translation id="4285930937574705105">Không thể cài đặt do lỗi chưa xác định. Nếu Chromium hiện đang chạy, hãy đóng Chromium và thử lại.</translation> +<translation id="4352041330999353637">Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: hôm qua.</translation> <translation id="4407044323746248786">Bạn vẫn muốn thoát khỏi Chromium?</translation> <translation id="4415566066719264597">Cho phép Chromium chạy trong nền</translation> <translation id="4423735387467980091">Tùy chỉnh và điều khiển Chromium</translation> <translation id="4544142686420020088">Đã xảy ra lỗi nên Chromium chưa cập nhật được. <ph name="BEGIN_LINK" />Hãy khắc phục các vấn đề cập nhật và các bản cập nhật không thành công của Chromium.<ph name="END_LINK" /></translation> <translation id="4567424176335768812">Bạn đã đăng nhập với tên <ph name="USER_EMAIL_ADDRESS" />. Bây giờ, bạn có thể truy cập dấu trang, lịch sử và các cài đặt khác trên tất cả những thiết bị đã đăng nhập của bạn.</translation> <translation id="459535195905078186">Ứng dụng Chromium</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: 1 phút trước.}other{Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: {NUM_MINS} phút trước.}}</translation> <translation id="4677944499843243528">Dường như cấu hình này đang được quy trình Chromium khác (<ph name="PROCESS_ID" />) trên máy tính khác (<ph name="HOST_NAME" />) sử dụng. Chromium đã khóa cấu hình này để cấu hình không bị lỗi. Nếu bạn chắc chắn không có quy trình nào khác đang sử dụng cấu hình này, bạn có thể mở khóa cấu hình và chạy lại Chromium.</translation> <translation id="469338717132742108">Nhận trợ giúp về Chromium OS</translation> <translation id="4708774505295300557">Ai đó trước đây đã đăng nhập vào Chromium trên máy tính này bằng <ph name="ACCOUNT_EMAIL_LAST" />. Vui lòng tạo người dùng Chromium mới để giữ riêng biệt thông tin của bạn.</translation> @@ -105,6 +111,7 @@ <translation id="4750035648288509542">Sắp cập nhật xong rồi! Hãy chạy lại Chromium để hoàn tất quá trình cập nhật. Các cửa sổ ẩn danh sẽ không mở lại.</translation> <translation id="4788777615168560705">Chromium không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau 24 giờ hoặc <ph name="BEGIN_LINK" />kiểm tra các mật khẩu trong Tài khoản Google của bạn<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Dịch vụ này sử dụng cùng một trình kiểm tra chính tả dùng trong Google Tìm kiếm. Thông tin bạn nhập vào trình duyệt sẽ được gửi tới Google. Bạn luôn có thể thay đổi hành động này trong phần cài đặt.</translation> +<translation id="487524289568229802">Chromium đang kiểm tra máy tính của bạn để tìm phần mềm gây hại...</translation> <translation id="4888717733111232871">Quy tắc kết nối để Chromium cho phép lưu lượng truy cập mDNS.</translation> <translation id="4893632094755846570">Thao tác này sẽ xóa vĩnh viễn dữ liệu duyệt web của bạn khỏi thiết bị này. Để khôi phục dữ liệu, hãy đăng nhập vào Chromium bằng</translation> <translation id="4943838377383847465">Chromium đang chạy trong nền.</translation> @@ -169,6 +176,7 @@ Một số tính năng có thể không khả dụng. Hãy chỉ định thư mục cấu hình khác hoặc sử dụng phiên bản Chromium mới hơn.</translation> <translation id="6734080038664603509">Cập nhật &Chromium</translation> <translation id="6734291798041940871">Chromium đã được cài đặt cho tất cả người dùng trên máy tính của bạn.</translation> +<translation id="6737557815519435616">Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: vài phút trước.</translation> <translation id="6762551859069255163">Dùng nhiều hồ sơ trong Chromium để tách biệt giữa hoạt động duyệt web liên quan đến công việc và cá nhân, hoặc khi có nhiều người sử dụng thiết bị này</translation> <translation id="6774082503108938489">Cha mẹ bạn đã tắt tùy chọn "Quyền của các trang web, ứng dụng và tiện ích" đối với Chromium. Bạn không được phép bật <ph name="EXTENSION_TYPE_PARAMETER" /> này.</translation> <translation id="6847869444787758381">Chromium cho bạn biết mật khẩu của bạn có bị đánh cắp hay không</translation> @@ -178,6 +186,7 @@ <translation id="6964305034639999644">Mở liên kết trong cửa sổ ẩn danh của Chromium</translation> <translation id="6990124437352146030">Chromium cần có quyền truy cập vào micrô của bạn cho trang web này</translation> <translation id="701244094609242530">Chromium không thể kiểm tra các tiện ích của bạn. Hãy thử lại sau.</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: 1 giờ trước.}other{Chromium không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: {NUM_HOURS} giờ trước.}}</translation> <translation id="705851970750939768">Cập nhật Chromium</translation> <translation id="7066436765290594559">Chromium OS không thể đồng bộ hóa dữ liệu của bạn. Vui lòng cập nhật cụm mật khẩu Đồng bộ hóa của bạn.</translation> <translation id="7067091210845072982">Chromium sẽ cố gắng mô tả cho bạn những hình ảnh không có nội dung mô tả hữu ích. Để tạo nội dung mô tả, các hình ảnh sẽ được gửi đến Google.</translation> @@ -238,6 +247,7 @@ <translation id="8621669128220841554">Không thể cài đặt do xảy ra lỗi không xác định. Hãy tải xuống Chromium lại lần nữa.</translation> <translation id="8697124171261953979">Tiện ích này cũng điều khiển trang nào được hiển thị khi bạn khởi động Chromium hoặc tìm kiếm từ Thanh địa chỉ.</translation> <translation id="8704119203788522458">Đây là Chromium của bạn</translation> +<translation id="8733034664173984083">Đã xảy ra lỗi khi Chromium kiểm tra máy tính của bạn để tìm phần mềm gây hại</translation> <translation id="8796602469536043152">Chromium cần có quyền truy cập vào máy ảnh và micrô của bạn cho trang web này</translation> <translation id="8803635938069941624">Điều khoản Chromium OS</translation> <translation id="8821041990367117597">Chromium không thể đồng bộ hóa dữ liệu của bạn vì chi tiết đăng nhập tài khoản của bạn đã cũ.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 1f652d8..680e760 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> het ADB-ontfouting gedeaktiveer. Dit sal jou <ph name="DEVICE_TYPE" /> oor 24 uur terugstel. Rugsteun enige lêers wat jy wil hou.</translation> <translation id="1977965994116744507">Bring jou foon nader om jou <ph name="DEVICE_TYPE" /> te ontsluit.</translation> <translation id="1978006917103730774">Toekomstige sagteware- en sekuriteitopdaterings sal outomaties geïnstalleer word.</translation> +<translation id="1978057560491495741">Verwyder adres</translation> <translation id="1979095679518582070">As jy hierdie kenmerk afskakel, beïnvloed dit nie hierdie toestel se vermoë om die inligting te stuur wat nodig is vir noodsaaklike dienste soos stelselopdaterings en sekuriteit nie.</translation> <translation id="1979280758666859181">Jy verander tans na 'n kanaal met 'n ouer weergawe van <ph name="PRODUCT_NAME" />. Die kanaalverandering sal toegepas word wanneer die kanaalweergawe ooreenstem met die weergawe wat tans op jou toestel geïnstalleer is.</translation> <translation id="197989455406964291">KDC steun nie enkripsiesoort nie</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Hierdie instelling behoort aan <ph name="OWNER_EMAIL" /> .</translation> <translation id="2224551243087462610">Wysig vouernaam</translation> <translation id="2225864335125757863">Verander hierdie wagwoorde onmiddellik om jou rekening veilig te hou:</translation> +<translation id="2226204716217107988">Skakel oor na 'n ander profiel?</translation> <translation id="2226449515541314767">Hierdie werf is geblokkeer om volle beheer oor MIDI-toestelle te hê.</translation> <translation id="2226907662744526012">Ontsluit outomaties nadat PIN ingevoer is</translation> <translation id="222704500187107962">Hierdie uitsondering sal outomaties verwyder word nadat jy die huidige Incognito-sessie verlaat het</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Stel netwerk op</translation> <translation id="230927227160767054">Hierdie bladsy wil 'n dienshanteerder installeer.</translation> <translation id="2309620859903500144">Hierdie werf is gekeer om toegang tot jou beweging- en ligsensors te kry.</translation> +<translation id="2312219318583366810">Bladsy-URL</translation> <translation id="2314165183524574721">Huidige sigbaarheidinstelling word versteek</translation> <translation id="2314774579020744484">Taal wat gebruik word wanneer bladsye vertaal word</translation> <translation id="2315414688463285945">Kon nie Linux-lêers opstel nie. Probeer weer.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Hierdie sekuriteitsleutel het geen aanmelddata nie</translation> <translation id="3714195043138862580">Hierdie demonstrasietoestel is in 'n verwyderde staat geplaas.</translation> <translation id="3714633008798122362">webkalender</translation> +<translation id="3715954932774762075">Programme en webwerwe wat in veelvuldige tale beskikbaar is, sal die eerste gesteunde taal op hierdie lys gebruik. Hierdie voorkeure word met jou blaaierinstellings gesinkroniseer. <ph name="BEGIN_LINK_LEARN_MORE" />Kom meer te wete<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Tuisblad</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Jy en Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Bestaande video van kamera of lêer af</translation> <translation id="3886446263141354045">Jou versoek om by hierdie werf in te gaan, is na <ph name="NAME" /> gestuur</translation> <translation id="3888550877729210209">Maak tans notas met <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Skakel Chrome-sinkronisering aan om Wi-fi-sinkronisering te gebruik</translation> <translation id="3892414795099177503">Voeg OpenVPN / L2TP by …</translation> <translation id="3893536212201235195">Lees en verander jou toeganklikheidinstellings</translation> <translation id="3893630138897523026">ChromeVox (gesproke terugvoer)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Boekmerk alle oortjies</translation> <translation id="5449716055534515760">Maak venster toe</translation> <translation id="5452974209916053028">Huidige incognitosessie: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Het onderskrifborrel geskuif na <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% dwars, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% af</translation> <translation id="5454166040603940656">met <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ongeldig</translation> <translation id="5457459357461771897">Lees en vee foto's, musiek en ander media van jou rekenaar af uit</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Vee boekmerke, geskiedenis, wagwoorde en meer van hierdie toestel af uit</translation> <translation id="5605623530403479164">Ander soekenjins</translation> <translation id="5605758115928394442">'n Kennisgewing is na jou foon toe gestuur om te bevestig dat dit jy is.</translation> +<translation id="560834977503641186">Wi-fi-sinkronisering, kom meer te wete</translation> <translation id="5608580678041221894">Tik op die volgende sleutels om die snoei-area te verstel of te skuif</translation> <translation id="5609231933459083978">Dit lyk of die program ongeldig is.</translation> <translation id="5610038042047936818">Wissel na kameramodus</translation> @@ -4113,6 +4120,7 @@ <translation id="5841270259333717135">Stel Ethernet op</translation> <translation id="5842497610951477805">Aktiveer Bluetooth</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Intydse Onderskrifte is sigbaar; druk F6 om fokus te verander</translation> <translation id="5844574845205796324">Stel nuwe inhoud voor om te verken</translation> <translation id="5846200638699387931">Verhoudingsinsboufout: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Installeer opdaterings en programme. As jy voortgaan, stem jy in dat hierdie toestel ook outomaties opdaterings en programme vanaf Google, jou diensverskaffer en jou toestel se vervaardiger kan aflaai en installeer, moontlik met gebruik van sellulêre data. Sommige van hierdie programme sal dalk inprogramaankope aanbied.</translation> @@ -5369,6 +5377,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> is nou volskerm.</translation> <translation id="7340650977506865820">Werf deel tans jou skerm</translation> <translation id="7341834142292923918">Wil toegang tot hierdie werf hê</translation> +<translation id="7343372807593926528">Beskryf asseblief die probleem voordat jy terugvoer stuur.</translation> <translation id="7345706641791090287">Bevestig jou wagwoord</translation> <translation id="7346909386216857016">OK, het dit</translation> <translation id="7347452120014970266">Dit sal alle data en webkoekies uitvee wat deur <ph name="ORIGIN_NAME" /> en sy geïnstalleerde programme geberg is</translation> @@ -5785,6 +5794,7 @@ <translation id="7819857487979277519">PSK (WPA of RSN)</translation> <translation id="7819992334107904369">Chrome-sinkronisering</translation> <translation id="782057141565633384">Kopieer video-adres</translation> +<translation id="7822187537422052256">Is jy seker jy wil hierdie adres verwyder?</translation> <translation id="7824864914877854148">Rugsteun kon weens 'n probleem nie voltooi word nie</translation> <translation id="7825666486843191125">Alle kontakte naby jou wanneer jou skerm ontsluit is</translation> <translation id="782590969421016895">Gebruik huidige bladsye</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Soekresultate vir "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Welkom by jou <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Redigeer woordeboekinskrywings</translation> +<translation id="8421361468937925547">Intydse Onderskrifte (net Engels)</translation> <translation id="8422787418163030046">Laai ontbreek</translation> <translation id="8425213833346101688">Verander</translation> <translation id="8425492902634685834">Speld aan taakbalk vas</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Bestuur berging</translation> <translation id="8452135315243592079">Verlore SIM-kaart</translation> <translation id="8455026683977728932">Kon nie ADB-illustrasie aktiveer nie</translation> +<translation id="8456398879271637452">Intydse Onderskrifte is sigbaar; druk Ctrl + Back of Ctrl + Forward om fokus te verander</translation> <translation id="845702320058262034">Kan nie koppel nie. Maak seker jou foon se Bluetooth is aangeskakel.</translation> <translation id="8457451314607652708">Voer boekmerke in</translation> <translation id="8458627787104127436">Maak almal (<ph name="URL_COUNT" />) in nuwe venster oop</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Maak skakel in nuwe oortjie oop</translation> <translation id="9030515284705930323">Jou organisasie het nie Google Play Winkel vir jou rekening geaktiveer nie. Kontak jou administrateur vir meer inligting.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> word nie meer gesteun nie</translation> <translation id="9031549947500880805">Rugsteun in Google Drive. Laai jou data maklik terug of wissel enige tyd jou toestel. Jou rugsteun sluit programdata in.</translation> <translation id="9033765790910064284">Gaan in elk geval voort</translation> <translation id="9033857511263905942">Plak</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Jy het een poging oor.}other{Jy het # pogings oor.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Dateer wagwoord op vir <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Intydse Onderskrifte is sigbaar; druk ⌘ + Option + oppyl of afpyl of fokus te verander</translation> <translation id="9041692268811217999">Toegang tot plaaslike lêers op jou masjien is deur jou administrateur gedeaktiveer</translation> <translation id="904224458472510106">Hierdie handeling kan nie ontdoen word nie</translation> <translation id="9042893549633094279">Privaatheid en sekuriteit</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">Kon nie Linux opstel nie. Koppel aan die internet en probeer weer.</translation> <translation id="9088917181875854783">Bevestig asseblief dat hierdie wagsleutel op "<ph name="DEVICE_NAME" />" gewys word:</translation> <translation id="9089416786594320554">Invoermetodes</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> se profiel is reeds aangemeld by <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Dit word aanbeveel dat lêers gerugsteun word ingeval die opgradering nie voltooi kan word nie. As die opgradering begin word, sal dit veroorsaak dat Linux (beta) afgeskakel word. Stoor asseblief oop lêers voordat jy voortgaan.</translation> <translation id="9094033019050270033">Dateer wagwoord op</translation> <translation id="9094038138851891550">Gebruikernaam is ongeldig</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">Lus</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Vestig tans beveiligde verbinding …</translation> +<translation id="99731366405731005">Skakel <ph name="LINK1_BEGIN" />Chrome-sinkronisering<ph name="LINK1_END" /> aan om Wi-fi-sinkronisering te gebruik. <ph name="LINK2_BEGIN" />Kom meer te wete<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Ondersoek</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 5171057..615b776b 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> የADB ስሕተት ማረሚያን አሰናክሏል። ይህ የእርስዎን <ph name="DEVICE_TYPE" /> በ24 ሰዓታት ውስጥ ዳግም ያስጀምረዋል። ለማቆየት የሚፈልጓቸውን ማናቸውም ፋይሎች ምትኬ ያስቀምጡላቸው።</translation> <translation id="1977965994116744507">የእርስዎን <ph name="DEVICE_TYPE" /> ለመክፈት የእርስዎን ስልክ ያስጠጉት።</translation> <translation id="1978006917103730774">ወደፊት ሶፍትዌር እና ደህንነት ዝማኔዎች በራስሰር ይጫናሉ።</translation> +<translation id="1978057560491495741">አድራሻ አስወግድ</translation> <translation id="1979095679518582070">ይህን ባሕሪ ማጥፋት ይህ መሣሪያ እንደ የሥርዓት ዝማኔዎች እና ደህንነት ላሉ አስፈላጊ አገልግሎቶች የሚያስፈልገውን መረጃ የመላክ ችሎታው ላይ ተጽዕኖ አያሳርፍበትም።</translation> <translation id="1979280758666859181">የቆየ የ<ph name="PRODUCT_NAME" /> ስሪት ወዳለው ሰርጥ እየቀየሩ ነው። የስርጡ ስሪት አሁን በመሣሪያዎ ላይ ከተጫነው ስሪት ጋር ሲዛመድ ነው የሰርጡ ለውጥ የሚተገበረው።</translation> <translation id="197989455406964291">KDC የምስጠራ ዓይነትን አይደግፍም</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">ይህ ቅንብር የ<ph name="OWNER_EMAIL" /> ነው።</translation> <translation id="2224551243087462610">የአቃፊ ስም አርትዕ</translation> <translation id="2225864335125757863">የመለያዎን ደህንነት ለመጠበቅ እነዚህን የይለፍ ቃላት ወዲያውኑ ይቀይሩ፦</translation> +<translation id="2226204716217107988">ወደ ሌላ መገለጫ ይቀየር?</translation> <translation id="2226449515541314767">ይህ ጣቢያ የMIDI መሳሪያዎች ሙሉ ቁጥጥር እንዳይኖረው ታግዷል።</translation> <translation id="2226907662744526012">አንዴ ፒን ከገባ በኋላ በራስ-ሰር ክፈት</translation> <translation id="222704500187107962">ይህ የማይካተተው እርስዎ ከአሁኑ ማንነት የማያሳውቅ ክፍለ-ጊዜ ከወጡ በኋላ በራስ-ሰር ይወገዳል</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">አውታረ መረብ አዋቅር</translation> <translation id="230927227160767054">ይህ ገጽ የአገልግሎት ተቆጣጣሪ ለመጫን ይፈልጋል።</translation> <translation id="2309620859903500144">ይህ ጣቢያ የእርስዎን እንቅስቃሴ ወይም የብርሃን ዳሳሾችን እንዳይደርስ አግዷል።</translation> +<translation id="2312219318583366810">የገጽ ዩ.አር.ኤል.</translation> <translation id="2314165183524574721">የአሁኑ የታይነት ቅንብር ተደብቋል</translation> <translation id="2314774579020744484">ገጾችን ሲተረጎሙ ጥቅም ላይ የዋለ ቋንቋ</translation> <translation id="2315414688463285945">የLinux ፋይሎችን ማዋቀር ላይ ስህተት። እባክዎ እንደገና ይሞክሩ።</translation> @@ -2345,6 +2348,7 @@ <translation id="3713047097299026954">ይህ የደህንነት ቁልፍ ምንም በመለያ መግቢያ ውሂብ የለውም</translation> <translation id="3714195043138862580">ይህ የቅንጭብ ማሳያ መሣሪያ ወደ አቅርቦትን ማስወገድ ሁኔታ ተመድቧል።</translation> <translation id="3714633008798122362">የድር ቀን መቁጠሪያ</translation> +<translation id="3715954932774762075">በርካታ ቋንቋዎችን የሚገኙ መተግበሪያዎች እና ድር ጣቢያዎች በዚህ ዝርዝር ውስጥ የመጀመሪያውን የተደገፈ ቋንቋ ይጠቀማሉ። እነዚህ ምርጫዎች ከአሳሽዎ ቅንብሮች ጋር ይሰምራሉ። <ph name="BEGIN_LINK_LEARN_MORE" />የበለጠ ለመረዳት<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">መነሻ ገጽ</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">እርስዎ እና Google</translation> @@ -2505,6 +2509,7 @@ <translation id="3882165008614329320">ከካሜራ ወይም ፋይል ላይ ያለ ቪዲዮ</translation> <translation id="3886446263141354045">ይህን ጣቢያ የመድረስ ጥያቄዎ ለ<ph name="NAME" /> ተልኳል</translation> <translation id="3888550877729210209">ማስታወሻዎችን በ<ph name="LOCK_SCREEN_APP_NAME" /> በመውሰድ ላይ</translation> +<translation id="3890064827463908288">የWi-Fi ስምረትን ለመጠቀም የChrome ስምረትን ያብሩ</translation> <translation id="3892414795099177503">OpenVPN / L2TP ያክሉ...</translation> <translation id="3893536212201235195">የተደራሽነት ቅንብሮችዎን ያነብባል እና ይቀይራል</translation> <translation id="3893630138897523026">ChromeVox (የሚነገር ግብረመልስ)</translation> @@ -3776,6 +3781,7 @@ <translation id="5449588825071916739">ለሁሉም ትሮች ዕልባት አብጅ</translation> <translation id="5449716055534515760">&መስኮት ዝጋ</translation> <translation id="5452974209916053028">የአሁኑ ማንነት የማያሳውቅ ክፍለ-ጊዜ፦ <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />፣ <ph name="RECENT_PERMISSIONS_CHANGE_1" />፣ <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">የመግለጫ ጽሑፍ ዓረፋ ወደ <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% ተወስዷል፣ <ph name="POSITION_ON_SCREEN_FROM_TOP" />% ወደ ታች</translation> <translation id="5454166040603940656">ከ<ph name="PROVIDER" /> ጋር</translation> <translation id="5457113250005438886">ልክ ያልሆነ</translation> <translation id="5457459357461771897">በኮምፒውተርዎ ላይ ፎቶዎችን፣ ሙዚቃ እና ሌላ ማህደረ መረጃን ያነብባል</translation> @@ -3919,6 +3925,7 @@ <translation id="5602765853043467355">ዕልባቶችን፣ ታሪክ፣ የይለፍ ቃላት እና ተጨማሪ ነገሮችን ከዚህ መሣሪያ ላይ አጽዳ</translation> <translation id="5605623530403479164">ሌላ የፍለጋ ፕሮግራሞች</translation> <translation id="5605758115928394442">እርስዎ መሆንዎን ለማረጋገጥ አንድ ማሳወቂያ ወደ ስልክዎ ተልኳል።</translation> +<translation id="560834977503641186">የWi-Fi ስምረት፣ የበለጠ ለመረዳት</translation> <translation id="5608580678041221894">የመከርከሚያ አካባቢውን ለማስተካከል ወይም ለመውሰድ የሚከተሉትን ቁልፎች መታ ያድርጉ</translation> <translation id="5609231933459083978">መተግበሪያው ልክ ያልሆነ ይመስላል።</translation> <translation id="5610038042047936818">ወደ ካሜራ ሁነታ ቀይር</translation> @@ -4109,6 +4116,7 @@ <translation id="5841270259333717135">ኤተርኔት ያዋቅሩ</translation> <translation id="5842497610951477805">ብሉቱዝን አንቃ</translation> <translation id="5843706793424741864">ፋራናይት</translation> +<translation id="584451707753263735">የቀጥታ መግለጫ ጽሑፍ ይታያል፣ ለዑደት ትኩረት F6ን ይጫኑ</translation> <translation id="5844574845205796324">አዲስ የሚታሰስ ይዘትን ጠቁም</translation> <translation id="5846200638699387931">የዝምድና አጻጻፍ ስህተት፦ <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">ዝማኔዎችን እና መተግበሪያዎችን ይጫኑ። በመቀጠልዎ ይህ መሣሪያ በተጨማሪም በራስ-ሰር ዝማኔዎችን እና መተግበሪያዎች ከGoogle፣ ከአገልግሎት አቅራቢዎ እና ከመሣሪያዎ አምራች፣ ምናልባትም ተንቀሳቃሽ ስልክ ውሂብን በመጠቀም፣ ሊያወርድ እና ሊጭን እንደሚችል መስማማትዎን ያረጋግጣሉ። ከእነዚህ መተግበሪያዎች ውስጥ አንዳንዶቹ የውስጠ-መተግበሪያ ግዢዎችን ሊያቀርቡ ይችላሉ።</translation> @@ -5365,6 +5373,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> አሁን በሙሉ ማያ ገጽ ላይ ነው።</translation> <translation id="7340650977506865820">ጣቢያ የእርስዎን ማያ ገጽ በማጋራት ላይ ነው</translation> <translation id="7341834142292923918">የዚህ ጣቢያ መዳረሻ ይፈልጋል</translation> +<translation id="7343372807593926528">እባክዎ ግብረመልስ ከመላክዎ በፊት ችግሩን ይግለጹ።</translation> <translation id="7345706641791090287">የይለፍ ቃልዎን ያረጋግጡ</translation> <translation id="7346909386216857016">እሺ፣ ገባኝ</translation> <translation id="7347452120014970266">ይህ በ<ph name="ORIGIN_NAME" /> እና የተጫኑ መተግበሪያዎች የተከማቹ ሁሉንም ውሂብ እና ኩኪዎች ያጠፋል።</translation> @@ -5781,6 +5790,7 @@ <translation id="7819857487979277519">PSK (WPA ወይም RSN)</translation> <translation id="7819992334107904369">Chrome ሥምረት</translation> <translation id="782057141565633384">የቪዲዮ አድራሻ &ቅዳ</translation> +<translation id="7822187537422052256">ይህን አድራሻ ማስወገድ እንደሚፈልጉ እርግጠኛ ነዎት?</translation> <translation id="7824864914877854148">በስህተት ምክንያት በምትኬ ማስቀመጥ ሊጠናቀቅ አልተቻለም</translation> <translation id="7825666486843191125">የእርስዎ ማያ ገጽ ሲከፈት ከእርስዎ አቅራቢያ ያሉ ሁሉም እውቂያዎች</translation> <translation id="782590969421016895">የአሁኑ ገጾችን ይጠቀሙ</translation> @@ -6310,6 +6320,7 @@ <translation id="8419098111404128271">የ«<ph name="SEARCH_TEXT" />» ውጤቶችን ይፈልጉ</translation> <translation id="8419368276599091549">እንኳን ወደ የእርስዎ <ph name="DEVICE_TYPE" /> በደህና መጡ!</translation> <translation id="8420308167132684745">የመዝገበ ቃላት ግቤቶችን ያርትዑ</translation> +<translation id="8421361468937925547">የቀጥታ መግለጫ ጽሑፍ (በእንግሊዝኛ ብቻ)</translation> <translation id="8422787418163030046">ትሪ ይጎድላል</translation> <translation id="8425213833346101688">ለውጥ</translation> <translation id="8425492902634685834">ከተግባር አሞሌ ጋር አጣብቅ</translation> @@ -6338,6 +6349,7 @@ <translation id="8449036207308062757">የማከማቻ ያቀናብሩ</translation> <translation id="8452135315243592079">ሲም ካርድ ይጎድላል</translation> <translation id="8455026683977728932">የ ADB ሥዕልን ማንቃት አልተሳካም</translation> +<translation id="8456398879271637452">የቀጥታ መግለጫ ጽሑፍ ይታያል፣ ለዑደት ትኩረት Ctrl + ወደኋላ ወይም Ctrl + አስተላልፍን ይጫኑ</translation> <translation id="845702320058262034">ማገናኘት አይቻልም። የእርስዎ ስልክ ብሉቱዝ እንደበራ ያረጋግጡ።</translation> <translation id="8457451314607652708">ዕልባቶችን አስመጣ</translation> <translation id="8458627787104127436">ሁሉንም (<ph name="URL_COUNT" />) በአዲስ መስኮት ውስጥ ክፈት</translation> @@ -6848,6 +6860,7 @@ <translation id="9027459031423301635">አገናኙን በአዲስ &ትር ክፈት</translation> <translation id="9030515284705930323">የእርስዎ ድርጅት Google Play መደብርን ለመለያዎ አላነቃም። ተጨማሪ መረጃን ለማግኘት አስተዳዳሪዎን ያነጋግሩ።</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> ከእንግዲህ አይደገፍም</translation> <translation id="9031549947500880805">ምትኬ ወደ Google Drive ያስቀምጡ። በማንኛውም ጊዜ ውሂብዎን በቀላሉ ወደነበሩበት ይመልሱ ወይም መሣሪያን ይቀይሩ። የእርስዎ ምትኬ የመተግበሪያ ውሂብን ያካትታል።</translation> <translation id="9033765790910064284">ለማንኛውም ቀጥል</translation> <translation id="9033857511263905942">&ለጥፍ</translation> @@ -6856,6 +6869,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{አንድ ቀሪ ሙከራ አለዎት።}one{# ቀሪ ሙከራዎች አለዎት።}other{# ቀሪ ሙከራዎች አለዎት።}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">ለ<ph name="ORIGIN" /> የይለፍ ቃል ይዘምን?</translation> +<translation id="9041049756004505730">የቀጥታ መግለጫ ጽሑፍ ይታያል፣ ለዑደት ትኩረት ⌘ + አማራጭ + የላይ ቀስት ወይም የታች ቀስትን ይጫኑ</translation> <translation id="9041692268811217999">ማሽንዎ ላይ የአካባቢያዊ ፋይሎች መዳረሻ በአስተዳዳሪዎ ተሰናክሏል</translation> <translation id="904224458472510106">ይህ ክወና ሊቀለበስ አይችልም</translation> <translation id="9042893549633094279">ግላዊነት እና ደኅንነት</translation> @@ -6894,6 +6908,7 @@ <translation id="9088446193279799727">Linuxን ማዋቀር አልተቻለም። ከበይነመረቡ ጋር ይገናኙና እንደገና ይሞክሩ።</translation> <translation id="9088917181875854783">እባክዎ ይህን የይለፍ ቁልፍ በ«<ph name="DEVICE_NAME" />» ላይ መታየቱን ያረጋግጡ፦</translation> <translation id="9089416786594320554">የግቤት ስልቶች</translation> +<translation id="909108997331068008">የ<ph name="EXISTING_USER" /> መገለጫ ቀድሞውኑ ወደ <ph name="NEW_USER" /> ገብቷል</translation> <translation id="9093429538970210897">ማላቅ መጠናቀቅ የማይችል ከሆነ የፋይሎች ምትኬን ማስቀመጥ ይመከራል። ማላቅ መጀመሩ Linuxን (ቅድመ-ይሁንታ) ይዘገዋል። ከመቀጠልዎ በፊት እባክዎ የተከፈቱ ፋይሎችን ያስቀምጡ።</translation> <translation id="9094033019050270033">የይለፍ ቃል ያዘምኑ</translation> <translation id="9094038138851891550">ልክ ያልሆነ ተጠቃሚ ስም</translation> @@ -7067,5 +7082,6 @@ <translation id="994289308992179865">&ደጋግም</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">ደህንነቱ የተጠበቀ ግንኙነት በመመስረት ላይ...</translation> +<translation id="99731366405731005">የWi-Fi ስምረትን ለመጠቀም <ph name="LINK1_BEGIN" />የChrome ስምረት<ph name="LINK1_END" />ን ያብሩ። <ph name="LINK2_BEGIN" />የበለጠ ለመረዳት<ph name="LINK2_END" /></translation> <translation id="998747458861718449">&መርምር</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index a516bd8..c39e1d91 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">ستتم مزامنة الإشارات المرجعية والسجل وغير ذلك من الإعدادات مع حسابك على Google.</translation> <translation id="1314565355471455267">الشبكة الظاهرية الخاصة (VPN) في Android</translation> <translation id="131461803491198646">الشبكة الرئيسية، بلا تجوال</translation> +<translation id="1315056510003830387">المواقع الإلكترونية التي لا يُسمح لها باستخدام Flash</translation> <translation id="1315144594965013365">تأكَّد من فتح قفل كلا الجهازَين وقرِّبهما من بعضهما وفعِّل البلوتوث فيهما. وإذا كنت تشارك الملفات مع Chromebook، تأكَّد من تفعيل ميزة "المشاركة عن قرب" (افتح منطقة الحالة من خلال اختيار الوقت، ثم اختَر "المشاركة عن قرب").</translation> <translation id="1316136264406804862">جارِ البحث...</translation> <translation id="1316495628809031177">تم إيقاف المزامنة مؤقتًا</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">تفعيل بطاقة SIM</translation> <translation id="1387519831959169718">للحفاظ على بيانات التصفُّح الخاصة بك مفصولة، يمكنك إنشاء ملف شخصي جديد للمستخدِم <ph name="NEW_USER" />.</translation> <translation id="138784436342154190">هل تريد استعادة صفحة بدء التشغيل التلقائية؟</translation> +<translation id="1388253969141979417">المواقع الإلكترونية التي يُسمح لها باستخدام الميكروفون</translation> <translation id="1388728792929436380">ستتم إعادة تشغيل جهاز <ph name="DEVICE_TYPE" /> عند اكتمال التحديثات.</translation> <translation id="1389342855416376185">حظر المحتوى المحمي</translation> <translation id="1390548061267426325">فتح كعلامة تبويب عادية</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">السؤال قبل الوصول</translation> <translation id="1434696352799406980">سيعيد هذا تعيين صفحة بدء التشغيل، وصفحة علامة تبويب جديدة، ومحرك البحث، وعلامات التبويب المثبتة. وستعطِّل أيضًا جميع الإضافات وتمحو البيانات المؤقتة مثل ملفات تعريف الارتباط. ولن يتم محو الإشارات المرجعية، والسجل، وكلمات المرور المحفوظة.</translation> <translation id="1434886155212424586">الصفحة الرئيسية هي صفحة "علامة تبويب جديدة"</translation> +<translation id="1435515966666225466">المواقع الإلكترونية التي يُسمح لها باستخدام مكوِّن إضافي للوصول إلى جهاز الكمبيوتر</translation> <translation id="1436390408194692385">صالحة لمدة <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">متابعة الإعداد</translation> <translation id="1436784010935106834">تمت الإزالة</translation> @@ -473,6 +476,7 @@ <translation id="1530838837447122178">فتح إعدادات الجهاز للماوس ولوحة اللمس</translation> <translation id="1531004739673299060">نافذة التطبيق</translation> <translation id="1531275250079031713">عرض مربع الحوار "إضافة شبكة Wi-Fi جديدة"</translation> +<translation id="1535228823998016251">صوت عالٍ</translation> <translation id="1536754031901697553">جارٍ قطع الاتصال…</translation> <translation id="1537254971476575106">مكبّر بملء الشاشة</translation> <translation id="15373452373711364">مؤشر الماوس الكبير</translation> @@ -556,6 +560,7 @@ <translation id="1627408615528139100">تم التنزيل من قبل</translation> <translation id="1628948239858170093">هل تريد فحص الملف قبل فتحه؟</translation> <translation id="1629314197035607094">انتهت صلاحية كلمة المرور.</translation> +<translation id="163072119192489970">المواقع الإلكترونية التي يُسمح لها بإنهاء إرسال البيانات أو استلامها</translation> <translation id="1630768113285622200">إعادة التشغيل والمواصلة</translation> <translation id="1632082166874334883">كلمة المرور المُخزَّنة في حسابك على Google</translation> <translation id="1632803087685957583">تسمح لك بضبط معدل تكرار لوحة المفاتيح، وتوقّع الكلمات، والمزيد</translation> @@ -753,6 +758,7 @@ <translation id="1841705068325380214">تم إيقاف <ph name="EXTENSION_NAME" /></translation> <translation id="184273675144259287">استبدال تطبيقات وملفات Linux بنسخة احتياطية سابقة</translation> <translation id="1842766183094193446">هل تريد حقًا تفعيل الوضع التجريبي؟</translation> +<translation id="1845727111305721124">المواقع الإلكترونية التي يُسمح لها بتشغيل الصوت</translation> <translation id="1846308012215045257">انقر بالماوس مع الضغط على مفتاح Ctrl لتشغيل <ph name="PLUGIN_NAME" /></translation> <translation id="1849186935225320012">تتضمن هذه الصفحة إمكانية تحكم شامل في أجهزة MIDI.</translation> <translation id="1850508293116537636">تدوير &في اتجاه عقارب الساعة</translation> @@ -777,6 +783,7 @@ <translation id="187145082678092583">عرض تطبيقات أقل</translation> <translation id="1871534214638631766">يمكنك عرض معلومات ذات صلة عند النقر بزر الماوس الأيمن أو الضغط مع الاستمرار على المحتوى.</translation> <translation id="1871615898038944731">جهاز <ph name="DEVICE_TYPE" /> مُحدّث</translation> +<translation id="1874248162548993294">المواقع الإلكترونية التي يُسمح لها بعرض كل أنواع الإعلانات</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{نقل علامة تبويب واحدة إلى نافذة أخرى}zero{نقل علامات تبويب إلى نافذة أخرى}two{نقل علامتَي تبويب إلى نافذة أخرى}few{نقل علامات تبويب إلى نافذة أخرى}many{نقل علامات تبويب إلى نافذة أخرى}other{نقل علامات تبويب إلى نافذة أخرى}}</translation> <translation id="1875386316419689002">علامة التبويب هذه متصّلة بجهاز HID.</translation> <translation id="1875387611427697908">لا يمكن إضافة ذلك إلا من <ph name="CHROME_WEB_STORE" />.</translation> @@ -832,6 +839,7 @@ <translation id="1931152874660185993">لم يتم تثبيت أي مكونات.</translation> <translation id="1932098463447129402">أول يوم لتفعيل الصلاحية</translation> <translation id="1933809209549026293">يُرجى توصيل الماوس أو لوحة المفاتيح. إذا كنت تستخدم جهاز Bluetooth، فتأكد من أنه جاهز للإقران.</translation> +<translation id="1935303383381416800">المواقع الإلكترونية التي يُسمح لها بالاطّلاع على موقعك الجغرافي</translation> <translation id="1936931585862840749">استخدِم رقمًا للإشارة إلى عدد النُسخ المطلوب طباعتها (من 1 إلى <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">يتعذّر استيراد نوع بنية الحاوية <ph name="ARCHITECTURE_CONTAINER" /> باستخدام هذا الجهاز الذي يمثل <ph name="ARCHITECTURE_DEVICE" />.يمكنك محاولة استعادة هذه الحاوية على جهاز مختلف، أو يمكنك الوصول إلى الملفات داخل صورة الحاوية هذه عن طريق فتح تطبيق "الملفات".</translation> <translation id="1938351510777341717">مفتاح Command الخارجي</translation> @@ -949,6 +957,7 @@ <translation id="2090165459409185032">لاسترداد معلومات حسابك، انتقل إلى: google.com/accounts/recovery</translation> <translation id="2090876986345970080">إعداد أمان النظام</translation> <translation id="2091887806945687916">الصوت</translation> +<translation id="209539936453343974">لإعداد أدوات الرقابة الأبوية، يجب أن يكون للطفل حساب على Google يديره أحد الوالدَين. تسمح أجهزة <ph name="DEVICE_TYPE_PLURAL" /> للوالدَين بضبط حدود وقت النظر إلى الشاشة والموافقة على المواقع الإلكترونية أو حظرها والمزيد باستخدام تطبيق Family Link. ويمكن إضافة حساب مؤسسة تعليمية لاحقًا في حال احتاج الطفل إلى أداء الواجبات المدرسية على مواقع إلكترونية مثل Google Classroom.</translation> <translation id="2096715839409389970">حذف ملفات تعريف الارتباط التابعة لجهات خارجية</translation> <translation id="2097372108957554726">يلزمك تسجيل الدخول إلى Chrome لتسجيل الأجهزة الجديدة</translation> <translation id="2098805196501063469">التحقُّق من كلمات المرور المتبقية</translation> @@ -1099,6 +1108,7 @@ <translation id="2261323523305321874">أجرى المشرف تغييرًا عبر النظام بأكمله يعمل على إيقاف بعض الملفات الشخصية القديمة.</translation> <translation id="2262332168014443534">يعمل الوضع البسيط الآن على جعل التصفُّح أسرع في جميع الصفحات، بما في ذلك HTTPS.</translation> <translation id="2262477216570151239">تأخير قبل التكرار</translation> +<translation id="2262888617381992508">المواقع الإلكترونية التي لا يُسمح لها بتشغيل المحتوى المحمي</translation> <translation id="2263189956353037928">الخروج وإعادة تسجيل الدخول</translation> <translation id="2263371730707937087">معدّل إعادة تحميل الشاشة</translation> <translation id="22665427234727190">طلب الإذن عند محاولة موقع إلكتروني الوصول إلى أجهزة البلوتوث (مقترَح)</translation> @@ -1367,6 +1377,7 @@ <translation id="2571655996835834626">يمكنك تغيير الإعدادات التي تتحكَّم في وصول المواقع الإلكترونية إلى ميزات مثل ملفات تعريف الارتباط وجافا سكريبت والمكوّنات الإضافية والمواقع الجغرافية والميكروفون والكاميرا وغيرها.</translation> <translation id="2572032849266859634">تم منح إذن دخول للقراءة فقط إلى <ph name="VOLUME_NAME" />.</translation> <translation id="2575247648642144396">سيكون هذا الرمز مرئيًا عندما تتمكن الإضافة من تنفيذ الإجراءات على الصفحة الحالية. يمكنك استخدام هذه الإضافة بالنقر على الرمز أو بالضغط على <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="2575441894380764255">المواقع الإلكترونية التي لا يُسمح لها بعرض الإعلانات المضلِّلة أو غير المرغوب فيها</translation> <translation id="257779572837908839">الإعداد كجهاز Chromebox للاجتماعات</translation> <translation id="2579232805407578790">تعذَّر الاتصال بالخادم. يُرجى التحقّق من الاتصال بالشبكة وإعادة المحاولة. وإذا استمرت هذه المشكلة، يُرجى إعادة تشغيل جهاز Chromebook. رمز الخطأ: <ph name="ERROR_CODE" /></translation> <translation id="2580889980133367162">السماح دائمًا لـ <ph name="HOST" /> بتنزيل عدة ملفات</translation> @@ -1633,6 +1644,7 @@ <translation id="2880660355386638022">موضِع النافذة</translation> <translation id="2881076733170862447">عند النقر على "الإضافة"</translation> <translation id="2882943222317434580">ستتم إعادة تشغيل <ph name="IDS_SHORT_PRODUCT_NAME" /> وإعادة تعيينه بعد وهلة.</translation> +<translation id="288387288628762616">المواقع الإلكترونية التي يُسمح لها باستخدام Flash</translation> <translation id="2885378588091291677">إدارة المهام</translation> <translation id="2885729872133513017">حدثت مشكلة في فك رمز استجابة الخادم.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1667,6 +1679,7 @@ <translation id="2923234477033317484">إزالة هذا الحساب</translation> <translation id="2926085873880284723">استعادة الاختصارات التلقائية</translation> <translation id="2927017729816812676">مساحة التخزين لذاكرة التخزين المؤقت</translation> +<translation id="2928795416630981206">المواقع الإلكترونية التي يُسمح لها بتتبّع موضع الكاميرا</translation> <translation id="2931157624143513983">ملاءمة المنطقة القابلة للطباعة</translation> <translation id="2932085390869194046">اقتراح كلمة مرور...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (حساب للأطفال)</translation> @@ -1674,6 +1687,7 @@ <translation id="2932883381142163287">الإبلاغ عن إساءة الاستخدام</translation> <translation id="2933632078076743449">آخر تحديث</translation> <translation id="2934999512438267372">تم السماح بالتحكُّم الكامل لأجهزة MIDI</translation> +<translation id="2935654492420446828">إضافة حساب مؤسسة تعليمية لاحقًا</translation> <translation id="2936851848721175671">النسخ الاحتياطي والاستعادة</translation> <translation id="2938225289965773019">فتح روابط <ph name="PROTOCOL" /></translation> <translation id="2938845886082362843">يمكنك عرض بيانات تسجيل الدخول المخزّنة على مفتاح الأمان وحذفها.</translation> @@ -1777,6 +1791,7 @@ <translation id="3060379269883947824">تفعيل الاختيار والاستماع</translation> <translation id="3060952009917586498">تغيير لغة الجهاز اللغة الحالية هي <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">التعليقات المرتبطة بعلامة التبويب المعطلة.</translation> +<translation id="306535478112428611">المواقع الإلكترونية التي لا يُسمح لها بتعديل الملفات والمجلدات على جهازك</translation> <translation id="3065522099314259755">وقت استجابة التكرار في لوحة المفاتيح</translation> <translation id="3067198179881736288">هل تريد تثبيت التطبيق؟</translation> <translation id="3067198360141518313">تشغيل هذا المكون الإضافي</translation> @@ -1912,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - خطأ في الشبكة</translation> <translation id="3248902735035392926">الحفاظ على الأمان من أهم أولوياتنا. يُرجى <ph name="BEGIN_LINK" />التحقُّق من الإضافات الآن<ph name="END_LINK" />.</translation> <translation id="3251759466064201842"><ليس جزءًا من الشهادة></translation> +<translation id="325238099842880997">يمكنك ضبط القواعد الرقمية الأساسية لمساعدة الأطفال على اللعب والاستكشاف وأداء الواجبات المدرسية في المنزل.</translation> <translation id="3253225298092156258">غير متاح</translation> <translation id="3253448572569133955">حساب غير معروف</translation> <translation id="3254084468305910013">{COUNT,plural, =0{لم يتم العثور على مشاكل أمان.}=1{تم العثور على مشكلة أمان واحدة ({COUNT}).}two{تم العثور على مشكلتَي أمان ({COUNT}).}few{تم العثور على {COUNT} مشاكل أمان.}many{تم العثور على {COUNT} مشكلة أمان.}other{تم العثور على {COUNT} مشكلة أمان.}}</translation> @@ -2039,6 +2055,7 @@ <translation id="3404249063913988450">تفعيل شاشة التوقف</translation> <translation id="3405664148539009465">تخصيص الخطوط</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">المواقع الإلكترونية التي يُسمح لها باستخدام أجهزة الواقع الافتراضي وبياناتها</translation> <translation id="3406396172897554194">البحث حسب اللغة أو اسم أسلوب الإدخال</translation> <translation id="3406605057700382950">&عرض شريط الإشارات</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{قد تكون هذه الإضافة خطيرة}zero{قد تكون هذه الإضافات خطيرة}two{قد تكون هاتان الإضافتان خطيرتَين}few{قد تكون هذه الإضافات خطيرة}many{قد تكون هذه الإضافات خطيرة}other{قد تكون هذه الإضافات خطيرة}}</translation> @@ -2203,6 +2220,7 @@ <translation id="3586806079541226322">يتعذّر فتح هذا الملف</translation> <translation id="3586931643579894722">إخفاء التفاصيل</translation> <translation id="3587482841069643663">الكل</translation> +<translation id="3588790464166520201">المواقع الإلكترونية التي يُسمح لها بتثبيت معالجات الدفع</translation> <translation id="3589766037099229847">تم حظر محتوى غير آمن</translation> <translation id="3590194807845837023">فتح قفل الملف الشخصي، وإعادة التشغيل من جديد</translation> <translation id="3590295622232282437">جارٍ الدخول إلى الجلسة المُدارة.</translation> @@ -2428,6 +2446,7 @@ <translation id="3822559385185038546">تم فرض هذا الخادم الوكيل بواسطة المشرف</translation> <translation id="3823310065043511710">يُنصَح بتوفير <ph name="INSTALL_SIZE" /> على الأقل من المساحة لنظام التشغيل Linux.</translation> <translation id="3824621460022590830">الرمز المميز لتسجيل الجهاز غير صالح. يُرجى التواصل مع مشرف الجهاز أو مالكه. رمز الخطأ: <ph name="ERROR_CODE" /></translation> +<translation id="3826071569074535339">المواقع الإلكترونية التي يُسمح لها باستخدام مستشعرات الحركة</translation> <translation id="3826440694796503677">لقد أوقف المشرف إمكانية إضافة المزيد من حسابات Google.</translation> <translation id="3827306204503227641">متابعة السماح للمكونات الإضافية غير المحمية</translation> <translation id="3827774300009121996">&ملء الشاشة</translation> @@ -2480,6 +2499,8 @@ <translation id="3873423927483480833">إظهار أرقام التعريف الشخصية</translation> <translation id="3873915545594852654">حدثت مشكلة في "وقت تشغيل التطبيقات في Chrome (ARC++)".</translation> <translation id="3874164307099183178">تفعيل خدمة "مساعد Google"</translation> +<translation id="3877075909000773256">إعدادات ميزة "المشاركة عن قرب" لجهاز <ph name="USER_NAME" /> الذي يشارك البيانات عبر حساب <ph name="USER_EMAIL" /></translation> +<translation id="387771067039689031">المواقع الإلكترونية التي لا يُسمح لها باستخدام مكوِّن إضافي للوصول إلى جهاز الكمبيوتر</translation> <translation id="3879748587602334249">تطبيق إدارة التنزيل</translation> <translation id="3881478300875776315">عرض أسطر أقل</translation> <translation id="3882165008614329320">الفيديو الحالي من الكاميرا أو الملف</translation> @@ -2516,6 +2537,7 @@ <translation id="3919145445993746351">للحصول على الإضافات على جميع أجهزة الكمبيوتر، يُرجى تفعيل المزامنة</translation> <translation id="3920504717067627103">سياسات الشهادة</translation> <translation id="392089482157167418">تفعيل ChromeVox (التعليقات المنطوقة)</translation> +<translation id="3920909973552939961">المواقع الإلكترونية التي لا يُسمح لها بتثبيت معالجات الدفع</translation> <translation id="3923184630988645767">استخدام البيانات</translation> <translation id="3923676227229836009">يتم السماح لهذه الصفحة بعرض الملفات.</translation> <translation id="3924145049010392604">Meta</translation> @@ -2637,6 +2659,7 @@ <translation id="4058793769387728514">فحص المستند الآن</translation> <translation id="406070391919917862">تطبيقات الخلفية</translation> <translation id="4061374428807229313">للمشاركة، انقر بزر الماوس الأيمن على مجلد في تطبيق "الملفات"، ثم اختَر "المشاركة مع نظام Parallels Desktop".</translation> +<translation id="406213378265872299">الإعدادات المخصَّصة</translation> <translation id="4065876735068446555">قد تتطلب الشبكة التي تستخدمها <ph name="NETWORK_ID" /> زيارة صفحة تسجيل الدخول التابعة لها.</translation> <translation id="4066207411788646768">يُرجى التحقق من الاتصال بالإنترنت لمعرفة الطابعات المتاحة في شبكتك.</translation> <translation id="4068776064906523561">بصمات الإصبع المحفوظة</translation> @@ -2784,6 +2807,7 @@ <translation id="425573743389990240">بطارية تفريغ شحن البطارية بوحدة الوات (القيمة السالب تعني أنه جارٍ شحن البطارية)</translation> <translation id="4256316378292851214">حف&ظ الفيديو باسم...</translation> <translation id="4258348331913189841">أنظمة الملفات</translation> +<translation id="4259388776256904261">قد يستغرق هذا الإعداد بعض الوقت.</translation> <translation id="4260182282978351200">قد يكون الملف <ph name="FILE_NAME" /> خطيرًا. هل تريد إرساله إلى برنامج "الحماية المتقدّمة" من Google لفحصه؟ ما عليك سوى الضغط على Shift+F6 للانتقال إلى منطقة شريط عمليات التنزيل.</translation> <translation id="4263223596040212967">يُرجى التحقق من تنسيق لوحة المفاتيح وإعادة المحاولة.</translation> <translation id="4263757076580287579">تم إلغاء تسجيل الطابعة.</translation> @@ -2891,6 +2915,7 @@ <translation id="4400632832271803360">اضغط على مفتاح Launcher باستمرار لتبديل سلوك مفاتيح الصف العلوي</translation> <translation id="4400963414856942668">يمكنك النقر على النجمة لوضع إشارة مرجعية على علامة تبويب.</translation> <translation id="4403775189117163360">اختيار مجلد آخر</translation> +<translation id="440391631796167175">لم يتم العثور على أي كلمات مرور ضعيفة.</translation> <translation id="4404136731284211429">البحث مرة أخرى</translation> <translation id="4404843640767531781">حظَر أحد الوالدَين تطبيق <ph name="APP_NAME" />. يُرجى طلب الإذن لتتمكّن من استخدام هذا التطبيق مرة أخرى.</translation> <translation id="4405117686468554883">jpeg.* وjpg.* وpng.*</translation> @@ -2935,6 +2960,7 @@ <translation id="4450974146388585462">التشخيص</translation> <translation id="4451479197788154834">تم حفظ كلمة المرور على هذا الجهاز وعلى حسابك في Google.</translation> <translation id="4451757071857432900">تم حظر الإعلانات على المواقع الإلكترونية التي تعرض إعلانات مضلِّلة أو غير مرغوب فيها (مُستحسَن)</translation> +<translation id="4453205916657964690">قناع الشبكة الفرعية</translation> <translation id="4453946976636652378">البحث في <ph name="SEARCH_ENGINE_NAME" /> أو كتابة عنوان URL</translation> <translation id="4459169140545916303">نشط قبل <ph name="DEVICE_LAST_ACTIVATED_TIME" /> يوم</translation> <translation id="4460014764210899310">تفكيك</translation> @@ -2962,6 +2988,7 @@ <translation id="4481530544597605423">الأجهزة التي تم إلغاء إقرانها</translation> <translation id="4483049906298469269">تعذَّر فحص اتصال بوابة الشبكة غير التلقائية.</translation> <translation id="4487489714832036847">تستخدم أجهزة Chromebook تطبيقات بدلاً من برامج تقليدية. يمكنك الحصول على تطبيقات لزيادة الإنتاجية والترفيه والمزيد.</translation> +<translation id="4488257340342212116">المواقع الإلكترونية التي يُسمح لها باستخدام الكاميرا</translation> <translation id="4488502501195719518">هل تريد محو جميع البيانات؟</translation> <translation id="449232563137139956">تعمل المواقع الإلكترونية عادةً على عرض الصور لتوفير صور توضيحية مثل صور متاجر على الإنترنت أو مقالات إخبارية.</translation> <translation id="4493468155686877504">موصى به (<ph name="INSTALL_SIZE" />)</translation> @@ -2994,6 +3021,7 @@ <translation id="4524832533047962394">لا يمكن استخدام وضع التسجيل المُقدَّم على هذا الإصدار من نظام التشغيل. يُرجى التأكد من استخدام أحدث إصدار.</translation> <translation id="4527186207340858212">هل تريد إنشاء ملف شخصي جديد للعمل؟</translation> <translation id="452750746583162491">مراجعة البيانات المتزامنة</translation> +<translation id="4527929807707405172">تفعيل "عكس اتجاه التنقّل في الصفحة". <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation> <translation id="4528494169189661126">اقتراح الترجمة</translation> <translation id="4530494379350999373">الأصل</translation> <translation id="4531924570968473143">من الشخص الذي تريد إضافته إلى جهاز <ph name="DEVICE_TYPE" />؟</translation> @@ -3014,6 +3042,7 @@ <translation id="4545028762441890696">لإعادة تفعليها ، اقبل الأذونات الجديدة:</translation> <translation id="4545759655004063573">لا يمكن الحفظ نظرًا لأن الأذونات غير كافية. يُرجى الحفظ في مكان آخر.</translation> <translation id="4546308221697447294">استمتع بالتصفح السريع باستخدام Google Chrome</translation> +<translation id="4546345569117159016">زر الماوس الأيمن</translation> <translation id="4546692474302123343">الإدخال الصوتي في "مساعد Google"</translation> <translation id="4547659257713117923">ليست هناك علامات تبويب من أجهزة أخرى</translation> <translation id="4547672827276975204">ضبط المنطقة الزمنية تلقائيًا</translation> @@ -3073,6 +3102,7 @@ <translation id="4608500690299898628">&بحث...</translation> <translation id="4608520674724523647">صورة توضيحية للتسجيل بنجاح</translation> <translation id="4608703838363792434">الملف <ph name="FILE_NAME" /> به محتوى حسّاس.</translation> +<translation id="4609987916561367134">المواقع الإلكترونية التي يُسمح لها باستخدام JavaScript</translation> <translation id="4610162781778310380">حدث خطأ في <ph name="PLUGIN_NAME" />.</translation> <translation id="4610637590575890427">هل قصدت الذهاب إلى الموقع <ph name="SITE" />؟</translation> <translation id="4611114513649582138">اتصال البيانات متاح</translation> @@ -3184,6 +3214,7 @@ <translation id="473775607612524610">تحديث</translation> <translation id="473936925429402449">تم الاختيار، المحتوى الإضافي <ph name="CURRENT_ELEMENT" /> من أصل <ph name="TOTAL_ELEMENTS" />.</translation> <translation id="4739639199548674512">التذاكر</translation> +<translation id="4742334355511750246">المواقع الإلكترونية التي لا يُسمح لها بعرض الصور</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />التعرّف على كيفية تحديث التطبيقات<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{إعادة صوت موقع إلكتروني واحد}zero{إعادة صوت المواقع الإلكترونية}two{إعادة صوت موقعيِّ الويب}few{إعادة صوت المواقع الإلكترونية}many{إعادة صوت المواقع الإلكترونية}other{إعادة صوت المواقع الإلكترونية}}</translation> <translation id="4746351372139058112">الرسائل</translation> @@ -3319,6 +3350,7 @@ <translation id="4908811072292128752">فتح علامة تبويب جديدة لتصفح موقعي ويب في وقت واحد</translation> <translation id="4909038193460299775">نظرًا لأنه تتم إدارة هذا الحساب من قبل <ph name="DOMAIN" />، سيتم محو الإشارات والسجل وكلمات المرور والإعدادات الأخرى من هذا الجهاز. ومع ذلك ستبقى بياناتك مخزنة في حسابك في Google ويمكن إدارتها على <ph name="BEGIN_LINK" />لوحة تحكم Google<ph name="END_LINK" />.</translation> <translation id="4912643508233590958">عمليات التنشيط من الوضع بعيد</translation> +<translation id="4915961947098019832">المواقع الإلكترونية التي يُسمح لها بعرض الصور</translation> <translation id="4916542008280060967">هل تريد السماح للموقع الإلكتروني بتعديل <ph name="FILE_NAME" />؟</translation> <translation id="491691592645955587">التبديل إلى متصفح آمن</translation> <translation id="4917385247580444890">قوية</translation> @@ -3406,6 +3438,7 @@ <translation id="5027550639139316293">شهادة البريد الإلكتروني</translation> <translation id="5027562294707732951">تثبيت إضافة</translation> <translation id="5029568752722684782">محو النسخة</translation> +<translation id="5033137252639132982">المواقع الإلكترونية التي لا يُسمح لها باستخدام مستشعرات الحركة</translation> <translation id="5033266061063942743">الأشكال الهندسية</translation> <translation id="5036662165765606524">عدم السماح لأي موقع بتنزيل عدة ملفات تلقائيًا</translation> <translation id="5037676449506322593">اختيار الكل</translation> @@ -3455,6 +3488,7 @@ <translation id="5088172560898466307">اسم مضيف الخادم</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 مع ترميز RSA</translation> <translation id="5089810972385038852">الولاية</translation> +<translation id="5090637338841444533">المواقع الإلكترونية التي لا يُسمح لها بتتبّع موضع الكاميرا</translation> <translation id="5094721898978802975">الاتصال بتطبيقات التعاون الأصلية</translation> <translation id="5097002363526479830">تعذّر الاتصال بشبكة "<ph name="NAME" />": <ph name="DETAILS" /></translation> <translation id="5097649414558628673">الأداة: <ph name="PRINT_NAME" /></translation> @@ -3764,6 +3798,7 @@ <translation id="5471768120198416576">مرحبًا! هذا صوت ميزة تحويل النص إلى كلام.</translation> <translation id="5472627187093107397">حفظ كلمات المرور لهذا الموقع الإلكتروني</translation> <translation id="5473333559083690127">إعادة إدخال رقم التعريف الشخصي الجديد</translation> +<translation id="5481273127572794904">المواقع الإلكترونية التي لا يُسمح لها بتنزيل الملفات المتعدّدة تلقائيًا</translation> <translation id="5481941284378890518">إضافة طابعات مجاورة</translation> <translation id="5483785310822538350">إبطال الوصول للملف والجهاز</translation> <translation id="5485080380723335835">يتم قفل جهاز <ph name="DEVICE_TYPE" /> للأمان. أدخل كلمة مرورك يدويًا للمتابعة.</translation> @@ -3785,6 +3820,7 @@ <translation id="5495466433285976480">سيؤدي ذلك إلى إزالة جميع المستخدمين والملفات والبيانات والإعدادات الأخرى على المستوى المحلي بعد عملية إعادة التشغيل. وسيحتاج جميع المستخدمين إلى تسجيل الدخول من جديد.</translation> <translation id="5495597166260341369">استمرار تشغيل الشاشة</translation> <translation id="5496587651328244253">تنظيم</translation> +<translation id="5496730470963166430">المواقع الإلكترونية التي لا يُسمح لها بإرسال النوافذ المنبثقة أو استخدام عمليات إعادة التوجيه</translation> <translation id="5497251278400702716">هذا الملف</translation> <translation id="5498967291577176373">تساعدك الاقتراحات المضمّنة لاسمك أو عنوانك أو رقم هاتفك على الكتابة بشكلٍ أسرع.</translation> <translation id="5499313591153584299">قد يلحق هذا الملف الضرر بجهاز الكمبيوتر.</translation> @@ -3792,6 +3828,7 @@ <translation id="5500709606820808700">تم تفعيل ميزة "تأكيد السلامة" اليوم.</translation> <translation id="5501809658163361512">{COUNT,plural, =1{تعذّر استلام <ph name="ATTACHMENTS" /> من جهاز <ph name="DEVICE_NAME" />}zero{تعذّر استلام <ph name="ATTACHMENTS" /> من جهاز <ph name="DEVICE_NAME" />}two{تعذّر استلام <ph name="ATTACHMENTS" /> من جهاز <ph name="DEVICE_NAME" />}few{تعذّر استلام <ph name="ATTACHMENTS" /> من جهاز <ph name="DEVICE_NAME" />}many{تعذّر استلام <ph name="ATTACHMENTS" /> من جهاز <ph name="DEVICE_NAME" />}other{تعذّر استلام <ph name="ATTACHMENTS" /> من جهاز <ph name="DEVICE_NAME" />}}</translation> <translation id="5502500733115278303">تمّ الاستيراد من متصفّح فايرفوكس</translation> +<translation id="5502915260472117187">طفل</translation> <translation id="5503982651688210506">مواصلة السماح للمضيف <ph name="HOST" /> باستخدام الكاميرا وتحريكها واستخدام الميكروفون</translation> <translation id="5505264765875738116">منع المواقع الإلكترونية من طلب إرسال إشعارات</translation> <translation id="5505307013568720083">نفد الحبر</translation> @@ -3879,6 +3916,7 @@ <translation id="5596627076506792578">خيارات إضافية</translation> <translation id="5600706100022181951">سيستهلك تنزيل التحديث <ph name="UPDATE_SIZE_MB" /> ميغابايت من بيانات الجوّال. هل ترغب في المتابعة؟</translation> <translation id="5601503069213153581">رقم التعريف الشخصي</translation> +<translation id="5601823921345337195">المواقع الإلكترونية التي لا يُسمح لها بالاتصال بأجهزة MIDI</translation> <translation id="5602765853043467355">محو الإشارات المرجعية والسجلّ وكلمات المرور وغيرها من البيانات على هذا الجهاز</translation> <translation id="5605623530403479164">محرّكات البحث الأخرى</translation> <translation id="5605758115928394442">تم إرسال إشعار إلى هاتفك لتأكيد هويتك.</translation> @@ -3999,6 +4037,7 @@ <translation id="5747552184818312860">تاريخ انتهاء الصلاحية</translation> <translation id="5747785204778348146">المطوّر - غير ثابت</translation> <translation id="5747809636523347288">ل&صق والانتقال إلى <ph name="URL" /></translation> +<translation id="5754152670305761216">المواقع الإلكترونية التي يُسمح لها بتشغيل المحتوى المحمي</translation> <translation id="5756163054456765343">مركز المساعدة</translation> <translation id="5759728514498647443">يمكن قراءة المستندات التي ترسلها إلى الطباعة عبر <ph name="APP_NAME" /> بواسطة <ph name="APP_NAME" />.</translation> <translation id="5763751966069581670">لم يتم العثور على أي أجهزة USB</translation> @@ -4468,6 +4507,7 @@ <translation id="6295158916970320988">جميع المواقع</translation> <translation id="6295855836753816081">جارٍ الحفظ...</translation> <translation id="6298962879096096191">استخدام Google Play لتثبيت تطبيقات Android</translation> +<translation id="6300177430812514606">المواقع الإلكترونية التي لا يُسمح لها بإنهاء إرسال البيانات أو استلامها</translation> <translation id="630065524203833229">إن&هاء</translation> <translation id="6300718114348072351">تعذّر ضبط <ph name="PRINTER_NAME" /> تلقائيًا. يُرجى تحديد التفاصيل المتقدّمة للطابعة. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation> <translation id="6301076166764763868">للفصل بين التصفُّح الشخصي والتصفُّح باستخدام حساب <ph name="EXISTING_USER" />، يمكنك إنشاء ملف شخصي جديد للمستخدِم <ph name="NEW_USER" />.</translation> @@ -4545,6 +4585,7 @@ <translation id="6390020764191254941">نقل علامة التبويب إلى نافذة جديدة</translation> <translation id="6390799748543157332">لن تُظهر الصفحات التي تعرضها في هذه النافذة في سجل المتصفح، ولن تترك أي آثار أخرى، مثل ملفات تعريف الارتباط، في الكمبيوتر بعد إغلاق جميع النوافذ المفتوحة بالضيف. ومع هذا سيتم الاحتفاظ بأي ملفات يتم تنزيلها.</translation> <translation id="6393156038355142111">اقتراح كلمة مرور قوية</translation> +<translation id="6393550101331051049">المواقع الإلكترونية التي يُسمح لها بعرض المحتوى غير الآمن</translation> <translation id="6395423953133416962">إرسال <ph name="BEGIN_LINK1" />معلومات النظام<ph name="END_LINK1" /> و<ph name="BEGIN_LINK2" />المقاييس<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">حظر المواقع الإلكترونية من استخدام مستشعرات الحركة</translation> <translation id="6398715114293939307">إزالة متجر Google Play</translation> @@ -4577,6 +4618,7 @@ <translation id="6425556984042222041">معدّل "تحويل النص إلى كلام"</translation> <translation id="6426200009596957090">فتح إعدادات Chromevox</translation> <translation id="642654727595919401">يطلُب <ph name="DOMAIN" /> منك الاحتفاظ بنسخة احتياطية من بياناتك وإرجاع جهاز <ph name="DEVICE_TYPE" /> هذا خلال أسبوع واحد. <ph name="LINK_BEGIN" />عرض التفاصيل<ph name="LINK_END" /></translation> +<translation id="642729974267661262">المواقع الإلكترونية التي لا يُسمح لها بتشغيل الصوت</translation> <translation id="6428982734197629783">جارٍ معالجة الصورة…</translation> <translation id="6429384232893414837">خطأ في التحديث</translation> <translation id="6430814529589430811">حفظ شهادة واحدة بتشفير ASCII المرمّز باستخدام Base64</translation> @@ -4605,6 +4647,7 @@ <translation id="6458701200018867744">تعذَّر التحميل (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">استخدام التحديد للبحث</translation> <translation id="6459799433792303855">تم نقل نافذة نشطة إلى شاشة عرض أخرى.</translation> +<translation id="6460566145397380451">المواقع الإلكترونية التي يُسمح لها بالاتصال بأجهزة MIDI</translation> <translation id="6460601847208524483">البحث عن التالي</translation> <translation id="6461170143930046705">جارٍ البحث عن شبكات...</translation> <translation id="6463795194797719782">ت&عديل</translation> @@ -4636,6 +4679,7 @@ <translation id="6499681088828539489">عدم السماح بالخوادم الوكيلة للشبكات المشتركة</translation> <translation id="650266656685499220">لإنشاء ألبومات، انتقِل إلى "صور Google".</translation> <translation id="6503077044568424649">الأكثر زيارة</translation> +<translation id="650457560773015827">زر الماوس الأيسر</translation> <translation id="6504611359718185067">الاتصال بالإنترنت لإضافة طابعة</translation> <translation id="6506374932220792071">توقيع X9.62 ECDSA باستخدام SHA-256</translation> <translation id="6508248480704296122">ذات صلة بـ <ph name="NAME_PH" /></translation> @@ -4837,6 +4881,7 @@ <translation id="676560328519657314">طُرق الدفع المُستخدَمة في Google Pay</translation> <translation id="6767566652486411142">اختيار لغة أخرى...</translation> <translation id="6767639283522617719">يتعذَّر ضم الجهاز إلى النطاق. يُرجى التأكُّد من صحة الإعدادات في الوحدة التنظيمية.</translation> +<translation id="6768034047581882264">المواقع الإلكترونية التي لا يُسمح لها بعرض المحتوى غير الآمن</translation> <translation id="6769557323306147204">تنصحك <ph name="ORGANIZATION_NAME" /> بتحديث هذا الجهاز.</translation> <translation id="6769712124046837540">جارٍ إضافة طابعة...</translation> <translation id="6770602306803890733">تحسين الأمان من أجلك ومن أجل جميع المستخدمين على الإنترنت</translation> @@ -4928,6 +4973,7 @@ <translation id="6865313869410766144">الملء التلقائي للبيانات</translation> <translation id="6865598234501509159">الصفحة ليست باللغة <ph name="LANGUAGE" />.</translation> <translation id="6865708901122695652">سجلّات أحداث WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">صوت هادئ</translation> <translation id="686664946474413495">درجة حرارة الألوان</translation> <translation id="6868934826811377550">عرض التفاصيل</translation> <translation id="6871644448911473373">مستجيب OCSP: <ph name="LOCATION" /></translation> @@ -4977,6 +5023,7 @@ <translation id="6922745772873733498">يُرجى إدخال رقم التعريف الشخصي للطباعة.</translation> <translation id="6923132443355966645">التمرير / النقر على</translation> <translation id="6923633482430812883">حدث خطأ أثناء تحميل المشاركة. لذا يُرجى التحقّق من أن خادم الملفات الذي تتصل به يدعم بروتوكول SMB الإصدار 2 أو الإصدارات الأحدث.</translation> +<translation id="6929126689972602640">ميزة "أدوات الرقابة الأبوية" غير متاحة لحسابات المؤسسات التعليمية. لإضافة حساب مؤسسة تعليمية للوصول إلى Google Classroom والمواقع الإلكترونية الأخرى لأداء الواجبات المدرسية، يُرجى تسجيل الدخول باستخدام الحساب الشخصي لطفلك أولاً. ويمكنك إضافة حساب المؤسسة التعليمية لاحقًا خلال عملية الإعداد.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">مفتاح الأمان الخارجي أو جهاز الاستشعار المدمج</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{تم رفض إضافة واحدة.}zero{تم رفض # إضافة.}two{تم رفض إضافتَين.}few{تم رفض # إضافات.}many{تم رفض # إضافةً.}other{تم رفض # إضافة.}}</translation> @@ -5017,6 +5064,7 @@ <translation id="6972629891077993081">أجهزة HID</translation> <translation id="6972754398087986839">البدء</translation> <translation id="6972887130317925583">تمّ تغيير كلمة المرور المحتمَل تعرّضها للاختراق. يمكنك التحقُّق من كلمات المرور في أيّ وقت في <ph name="SETTINGS" />.</translation> +<translation id="697312151395002334">المواقع الإلكترونية التي يُسمح لها بإرسال النوافذ المنبثقة واستخدام عمليات إعادة التوجيه</translation> <translation id="6973611239564315524">تتوفّر ترقية إلى Debian 10 (Buster).</translation> <translation id="6974609594866392343">وضع تجريبي بلا اتصال بالإنترنت</translation> <translation id="6977381486153291903">مراجعة البرامج الثابتة</translation> @@ -5039,6 +5087,7 @@ <translation id="6995899638241819463">التحذير إذا تم الكشف عن كلمات المرور في عملية اختراق بيانات</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - سجلّ الأنشطة</translation> <translation id="6997707937646349884">على أجهزتك:</translation> +<translation id="6998093258894828179">إخفاء البطاقات</translation> <translation id="6998793565256476099">تسجيل الجهاز لمؤتمر الفيديو</translation> <translation id="6999956497249459195">مجموعة جديدة</translation> <translation id="7000206553895739324">تم توصيل <ph name="PRINTER_NAME" /> ولكنها بحاجة إلى الضبط</translation> @@ -5055,6 +5104,7 @@ <translation id="7005848115657603926">نطاق صفحة غير صالح، استخدم <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">الهامش السفلي</translation> <translation id="7007648447224463482">فتح الكل في نافذة جديدة</translation> +<translation id="7009709314043432820">يستخدم تطبيق <ph name="APP_NAME" /> الكاميرا.</translation> <translation id="701080569351381435">عرض المصدر</translation> <translation id="7014174261166285193">تعذّر التثبيت.</translation> <translation id="7017004637493394352">قل "Ok Google" مرة أخرى</translation> @@ -5074,6 +5124,7 @@ <translation id="7038632520572155338">الوصول عبر مفتاح التحويل</translation> <translation id="7039326228527141150">الدخول إلى أجهزة USB من <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">تسجيل دخول البطاقة الذكية لـ Microsoft</translation> +<translation id="7039951224110875196">إنشاء حساب Google لطفل</translation> <translation id="7040230719604914234">مشغل شبكة الجوّال</translation> <translation id="7043108582968290193">انتهى الإجراء. لم يتم العثور على أي تطبيقات غير متوافقة.</translation> <translation id="7044124535091449260">مزيد من المعلومات عن إمكانية الوصول إلى الموقع الإلكتروني</translation> @@ -5145,6 +5196,7 @@ <translation id="7121362699166175603">يتم محو السجلّ وعمليات الإكمال التلقائي في شريط العناوين. وقد يتضمّن حسابك على Google نماذج أخرى من سجلّ التصفّح في <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">وضع مطوِّر البرامج</translation> <translation id="7121728544325372695">الشرطات الذكية</translation> +<translation id="7123030151043029868">المواقع الإلكترونية التي يُسمح لها بتنزيل الملفات المتعدّدة تلقائيًا</translation> <translation id="7123360114020465152">الطابعة ليست مدعومة بعد الآن.</translation> <translation id="7125148293026877011">حذف نظام التشغيل Crostini</translation> <translation id="7127980134843952133">سجل التنزيل</translation> @@ -5159,6 +5211,7 @@ <translation id="7136984461011502314">مرحبًا بك في <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">حدث خطأ. يُرجى إعادة المحاولة عن طريق اختيار صور أخرى.</translation> <translation id="713888829801648570">عفوًا، لا يمكن التحقق من كلمة المرور لأنك بلا إنترنت.</translation> +<translation id="7139627972753429585">يستخدم تطبيق <ph name="APP_NAME" /> الميكروفون.</translation> <translation id="7140928199327930795">لا توجد أجهزة أخرى متاحة.</translation> <translation id="7141105143012495934">فشل تسجيل الدخول، نظرًا لعدم القدرة على استرداد تفاصيل حسابك، يُرجى الاتصال بالمسؤول أو إعادة المحاولة.</translation> <translation id="7143207342074048698">اتصال</translation> @@ -5298,6 +5351,7 @@ <translation id="7324297612904500502">منتدى الإصدار التجريبي</translation> <translation id="7325209047678309347">الورقة عالقة</translation> <translation id="7325437708553334317">إضافة التباين العالي</translation> +<translation id="7326004502692201767">إعداد جهاز <ph name="DEVICE_TYPE" /> هذا لطفل</translation> <translation id="7328699668338161242">يستطيع "مساعد Google" التعرُّف على صوتك بالفعل</translation> <translation id="7328867076235380839">مجموعة غير صالحة</translation> <translation id="7329154610228416156">فشل تسجيل الدخول نظرًا لأنه قد تم ضبطه على استخدام عنوان URL غير آمن <ph name="BLOCKED_URL" />. يُرجى الاتصال بالمسؤول.</translation> @@ -5422,6 +5476,7 @@ <translation id="7465635034594602553">حدث خطأ. يُرجى الانتظار بضع دقائق، ثم إعادة تشغيل <ph name="APP_NAME" />.</translation> <translation id="7465778193084373987">عنوان URL لإبطال شهادة Netscape</translation> <translation id="7469894403370665791">الاتصال بهذه الشبكة تلقائيًا</translation> +<translation id="7470424110735398630">المواقع الإلكترونية التي يُسمح لها بالاطّلاع على الحافظة</translation> <translation id="747114903913869239">خطأ: تعذر فك ترميز الإضافة</translation> <translation id="7473891865547856676">لا، شكرًا</translation> <translation id="747459581954555080">استرداد الكل</translation> @@ -5531,6 +5586,7 @@ <translation id="7607002721634913082">تعليق التحميل</translation> <translation id="7608810328871051088">إعدادات Android المفضّلة</translation> <translation id="7609148976235050828">يُرجى الاتصال بالإنترنت وإعادة المحاولة.</translation> +<translation id="7612655942094160088">تفعيل ميزات الهاتف المرتبطة</translation> <translation id="7614260613810441905">طلب الإذن عند محاولة موقع إلكتروني تعديل الملفات والمجلدات على أجهزتك (مقترَح)</translation> <translation id="761530003705945209">يمكنك الاحتفاظ بنسخة احتياطية في Google Drive. ويمكنك استعادة بياناتك أو تبديل جهازك بسهولة وفي أي وقت. تتضمّن نسختك الاحتياطية بيانات التطبيق، حيث يتمّ تحميل النُسخ الاحتياطية إلى Google ويتم ترميزها باستخدام كلمة مرور حسابك على Google.</translation> <translation id="7615365294369022248">حدث خطأ أثناء إضافة حساب</translation> @@ -5649,6 +5705,7 @@ <translation id="7732111077498238432">هناك سياسة تحكم هذه الشبكة</translation> <translation id="7737115349420013392">جارٍ الإقران مع "<ph name="DEVICE_NAME" />" ...</translation> <translation id="7737238973539693982">حذف Linux (إصدار تجريبي)</translation> +<translation id="7737948071472253612">المواقع الإلكترونية التي لا يُسمح لها باستخدام الكاميرا</translation> <translation id="7740996059027112821">عادي</translation> <translation id="7742706086992565332">يمكنك ضبط مستوى التكبير أو التصغير على بعض المواقع الإلكترونية.</translation> <translation id="774377079771918250">اختَر مكان الحفظ</translation> @@ -5657,6 +5714,7 @@ <translation id="7750228210027921155">نافذة ضمن النافذة</translation> <translation id="7751260505918304024">عرض الكل</translation> <translation id="7753735457098489144">تعذَّر التثبيت لعدم توفُّر مساحة تخزين. لتوفير مساحة، يمكنك حذف الملفات من مساحة تخزين الجهاز.</translation> +<translation id="7754347746598978109">المواقع الإلكترونية التي لا يُسمح لها باستخدام JavaScript</translation> <translation id="7754704193130578113">السؤال عن مكان حفظ الملفّات قبل تنزيلها</translation> <translation id="7755287808199759310">قد يلغي والداك الحظر لك</translation> <translation id="7757592200364144203">تغيير اسم الجهاز</translation> @@ -5709,6 +5767,7 @@ <translation id="7798844538707273832">تم حظر إذن <ph name="PERMISSION" /> تلقائيًا.</translation> <translation id="7799299114731150374">تم ضبط الخلفية بنجاح</translation> <translation id="7800518121066352902">تدوير ع&كس اتجاه عقارب الساعة</translation> +<translation id="7802539296536804623">عدم عرض البطاقات في هذه الصفحة</translation> <translation id="780301667611848630">لا، شكرًا</translation> <translation id="7804072833593604762">تم إغلاق علامة التبويب.</translation> <translation id="7805768142964895445">الحالة</translation> @@ -6137,6 +6196,7 @@ <translation id="826905130698769948">شهادة العميل غير صالحة</translation> <translation id="8270242299912238708">مستندات PDF</translation> <translation id="827097179112817503">عرض زر الصفحة الرئيسية</translation> +<translation id="8271379370373330993">الخطوات التالية مخصَّصة للوالدَين. يمكنك إعادة جهاز <ph name="DEVICE_TYPE" /> للطفل بعد إعداد الحساب.</translation> <translation id="8272443605911821513">يمكنك إدارة الإضافات من خلال النقر على "الإضافات" في قائمة "المزيد من الأدوات".</translation> <translation id="8274332263553132018">إرسال الملف</translation> <translation id="8274924778568117936">لا توقف تشغيل جهاز <ph name="DEVICE_TYPE" /> أو تُغلقه لحين الانتهاء من التحديث. ستتم إعادة تشغيل جهاز <ph name="DEVICE_TYPE" /> بعد اكتمال التثبيت.</translation> @@ -6160,6 +6220,7 @@ <translation id="8300011035382349091">تعديل الإشارة المرجعية لعلامة التبويب هذه</translation> <translation id="8300374739238450534">أزرق ليلي</translation> <translation id="8300849813060516376">تعذّرت OTASP</translation> +<translation id="8304383784961451596">غير مصرّح لك باستخدام هذا الجهاز. يُرجى التواصل مع المشرف للحصول على إذن تسجيل الدخول أو تسجيل الدخول باستخدام حساب Google خاضع لإشراف أحد الوالدَين عبر تطبيق Family Link.</translation> <translation id="8308179586020895837">الرجوع إليك عند رغبة <ph name="HOST" /> في الدخول إلى الكاميرا</translation> <translation id="830868413617744215">تجريبي</translation> <translation id="8309458809024885768">الشهادة موجودة من قَبل</translation> @@ -6173,6 +6234,7 @@ <translation id="8322814362483282060">تم حظر دخول هذه الصفحة إلى الميكروفون التابع لك.</translation> <translation id="8323167517179506834">اكتب عنوان URL</translation> <translation id="8324784016256120271">يسمح هذا الإجراء للمواقع الإلكترونية باستخدام ملفات تعريف الارتباط للاطّلاع على نشاط التصفُّح الخاص بك على المواقع الإلكترونية المختلفة، وذلك لتقديم إعلانات مخصَّصة لك مثلاً.</translation> +<translation id="8325413836429495820">المواقع الإلكترونية التي لا يُسمح لها بالاطّلاع على الحافظة</translation> <translation id="8326478304147373412">PKCS #7، سلسلة شهادات</translation> <translation id="8327039559959785305">حدث خطأ أثناء تثبيت ملفات نظام التشغيل Linux. يُرجى إعادة المحاولة.</translation> <translation id="8327676037044516220">إعدادات المحتوى والأذونات</translation> @@ -6222,6 +6284,7 @@ <translation id="8382913212082956454">نسخ عنوان البريد الإل&كتروني</translation> <translation id="8386091599636877289">تعذَّر العثور على السياسة.</translation> <translation id="8386903983509584791">اكتملت عملية الفحص.</translation> +<translation id="8387361103813440603">المواقع الإلكترونية التي لا يُسمح لها بالاطّلاع على موقعك الجغرافي</translation> <translation id="8389416080014625855">إنشاء رمز استجابة سريعة لهذه الصفحة</translation> <translation id="8389492867173948260">السماح لهذه الإضافة بقراءة جميع بياناتك وتغييرها على المواقع الإلكترونية التي تزورها:</translation> <translation id="8390449457866780408">الخادم غير متاح.</translation> @@ -6406,6 +6469,7 @@ <translation id="8621866727807194849">هناك برنامج ضار على جهاز الكمبيوتر. يعمل متصفِّح Chrome على إزالته وعلى استعادة إعداداتك وإيقاف الإضافات. سيؤدي هذا الإجراء إلى عمل متصفِّحك بشكلٍ طبيعي من جديد.</translation> <translation id="8621979332865976405">مشاركة الشاشة بالكامل</translation> <translation id="862542460444371744">&الإضافات</translation> +<translation id="8625663000550647058">المواقع الإلكترونية التي لا يُسمح لها باستخدام الميكروفون</translation> <translation id="862727964348362408">معلقة</translation> <translation id="862750493060684461">ذاكرة التخزين المؤقت للغة CSS</translation> <translation id="8627706565932943526">حدث خطأ أثناء المزامنة</translation> @@ -6486,6 +6550,7 @@ <translation id="8714838604780058252">رسومات الخلفية</translation> <translation id="8715480913140015283">هناك علامة تبويب خلفية تستخدم الكاميرا</translation> <translation id="8716931980467311658">هل تريد حذف جميع تطبيقات نظام التشغيل Linux والبيانات الواردة في مجلد ملفات نظام التشغيل Linux من جهاز <ph name="DEVICE_TYPE" /> هذا؟</translation> +<translation id="8717145295869185525">المواقع الإلكترونية التي لا يُسمح لها باستخدام أجهزة الواقع الافتراضي وبياناتها</translation> <translation id="8717864919010420084">نسخ الرابط</translation> <translation id="8719472795285728850">جارٍ الاستماع إلى أنشطة الإضافات...</translation> <translation id="8719653885894320876">تعذّر تنزيل <ph name="PLUGIN_NAME" /></translation> @@ -6907,6 +6972,7 @@ <translation id="9179734824669616955">إعداد نظام التشغيل Linux (الإصدار التجريبي) على جهاز <ph name="DEVICE_TYPE" /></translation> <translation id="9180281769944411366">قد تستغرق هذه العملية بضع دقائق. جارٍ بدء تشغيل حاوية نظام التشغيل Linux.</translation> <translation id="9180380851667544951">يمكن للموقع الإلكتروني مشاركة شاشتك.</translation> +<translation id="9186963452600581158">تسجيل الدخول باستخدام حساب طفل على Google</translation> <translation id="9188732951356337132">يمكنك إرسال بيانات الاستخدام والتشخيص. يرسل هذا الجهاز حاليًا بيانات استخدام التطبيق والجهاز والتشخيص تلقائيًا إلى Google. لن يتم استخدام هذا لتعريف حسابك الفرعي وسيساعد في استقرار عمل النظام والتطبيقات، بالإضافة إلى التحسينات الأخرى. كما ستساعد بعض البيانات المجمّعة تطبيقات Google وشركائها، مثل مطوّري برامج نظام التشغيل Android. في حال تفعيل إعداد "النشاط الإضافي على الويب وفي التطبيقات" لحسابك الفرعي، قد يتم حفظ هذه البيانات في حسابك على Google. <ph name="BEGIN_LINK2" />مزيد من المعلومات<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPSec + المفتاح المشترك مسبقًا</translation> <translation id="9198090666959937775">استخدام هاتفك الذي يعمل بنظام التشغيل Android كمفتاح أمان</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index a8e5deab..1865c7a 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -390,6 +390,7 @@ <translation id="1436390408194692385"><ph name="TICKET_TIME_LEFT" /> ব্যবহার করা যাবে</translation> <translation id="1436671784520050284">সেট-আপ চালিয়ে যান</translation> <translation id="1436784010935106834">সরানো হয়েছে</translation> +<translation id="1437986450143295708">সমস্যাটির বিবরণ দিন</translation> <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" />টি নির্বাচিত হয়েছে</translation> <translation id="1442851588227551435">অ্যাক্টিভ Kerberos টিকিট সেট করুন</translation> <translation id="1444628761356461360">এই সেটিংটি ডিভাইসের মালিকের দ্বারা <ph name="OWNER_EMAIL" /> পরিচালিত হয়৷</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index eff1790..4ec8102a 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">Domena <ph name="DOMAIN" /> je onemogućila otklanjanje grešaka putem ADB-a. Ovim će se uređaj <ph name="DEVICE_TYPE" /> vratiti na zadano za 24 sata. Napravite kopiju svih fajlova koje želite sačuvati.</translation> <translation id="1977965994116744507">Približite telefon da otključate uređaj <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Buduća ažuriranja softvera i sigurnosna ažuriranja će se automatski instalirati.</translation> +<translation id="1978057560491495741">Uklonite adresu</translation> <translation id="1979095679518582070">Isključivanjem ove funkcije uređaj će i dalje moći slati informacije potrebne za ključne usluge kao što su ažuriranja sistema i sigurnost.</translation> <translation id="1979280758666859181">Prelazite na kanal sa starijom verzijom proizvoda <ph name="PRODUCT_NAME" />. Promjena kanala će se primijeniti kada verzija kanala bude odgovarala verziji koja je trenutno instalirana na vašem uređaju.</translation> <translation id="197989455406964291">KDC ne podržava vrstu šifriranja</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Vlasnik ove postavke je <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Uređivanje naziva foldera</translation> <translation id="2225864335125757863">Odmah promijenite ove lozinke da zaštitite račun:</translation> +<translation id="2226204716217107988">Prebaciti se na drugi profil?</translation> <translation id="2226449515541314767">Ovoj web lokaciji je blokirana puna kontrola nad MIDI uređajima.</translation> <translation id="2226907662744526012">Otključaj automatski nakon unosa PIN-a</translation> <translation id="222704500187107962">Ovaj izuzetak će se automatski ukloniti nakon što izađete iz trenutne sesije anonimnog načina rada</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Konfiguriraj mrežu</translation> <translation id="230927227160767054">Ova stranica želi instalirati obrađivača usluge.</translation> <translation id="2309620859903500144">Ovoj stranici je blokiran pristup vašim senzorima pokreta ili svjetla.</translation> +<translation id="2312219318583366810">URL stranice</translation> <translation id="2314165183524574721">Trenutna postavka vidljivosti je Skriveno</translation> <translation id="2314774579020744484">Jezik koji se koristi prilikom prevođenja stranica</translation> <translation id="2315414688463285945">Greška prilikom konfiguriranja Linux fajlova. Pokušajte ponovo.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Na ovom sigurnosnom ključu nisu pohranjeni podaci za prijavu</translation> <translation id="3714195043138862580">Ovom uređaju za demonstraciju je opozvan pristup.</translation> <translation id="3714633008798122362">web kalendar</translation> +<translation id="3715954932774762075">Aplikacije i web lokacije, koje su dostupne na više jezika, će koristiti prvi podržani jezik s liste. Ove postavke se sinhroniziraju s postavkama preglednika. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Početna stranica</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Vi i Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Postojeći videozapis s kamere ili fajla</translation> <translation id="3886446263141354045">Vaš zahtjev za pristup ovoj web lokaciji je poslan korisniku <ph name="NAME" /></translation> <translation id="3888550877729210209">Kreiranje bilježaka pomoću aplikacije <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Uključivanje Sinhronizacije Chromea radi korištenja WiFi sinhronizacije</translation> <translation id="3892414795099177503">Dodaj OpenVPN/L2TP...</translation> <translation id="3893536212201235195">Čitanje i mijenjanje postavki za pristupačnost</translation> <translation id="3893630138897523026">ChromeVox (govorne povratne informacije)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Označavanje svih kartica</translation> <translation id="5449716055534515760">Zatvori prozor</translation> <translation id="5452974209916053028">Trenutna sesija u anonimnom načinu rada: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Oblačić titla je premješten <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% ustranu, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% nadolje</translation> <translation id="5454166040603940656">s pružaocem usluge <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Nevažeće</translation> <translation id="5457459357461771897">čitati i brisati fotografije, glazbu i druge medije s vašeg računala</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Obriši oznake, historiju, lozinke i drugo s ovog uređaja</translation> <translation id="5605623530403479164">Ostali pretraživači</translation> <translation id="5605758115928394442">Na vaš telefon je poslano obavještenje da potvrdimo vaš identitet.</translation> +<translation id="560834977503641186">WiFi sinhronizacija, saznajte više</translation> <translation id="5608580678041221894">Dodirnite sljedeće tipke da podesite ili pomjerite područje za rezanje</translation> <translation id="5609231933459083978">Čini se da je aplikacija nevažeća.</translation> <translation id="5610038042047936818">Prebaci na način rada za kameru</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Konfigurirajte ethernet</translation> <translation id="5842497610951477805">Omogućavanje Bluetootha</translation> <translation id="5843706793424741864">Farenhajt</translation> +<translation id="584451707753263735">Automatski titlovi su vidljivi. Pritisnite F6 da mijenjate fokus</translation> <translation id="5844574845205796324">Predloži novi sadržaj za istraživanje</translation> <translation id="5846200638699387931">Sintaksička greška odnosa: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instalirajte ažuriranja i aplikacije. Ako nastavite, pristajete da ovaj uređaj također može automatski preuzimati i instalirati ažuriranja i aplikacije s Googlea, od vašeg mobilnog operatera i proizvođača vašeg uređaja, uz mogući prijenos podataka na mobilnoj mreži. Neke od tih aplikacija mogu nuditi kupovinu unutar aplikacije.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> se sada prikazuje preko cijelog ekrana.</translation> <translation id="7340650977506865820">Web lokacija dijeli vaš ekran</translation> <translation id="7341834142292923918">Želi pristupiti ovoj web lokaciji</translation> +<translation id="7343372807593926528">Prije nego što pošaljete povratne informacije, opišite problem.</translation> <translation id="7345706641791090287">Potvrdite lozinku</translation> <translation id="7346909386216857016">Uredu, razumijem</translation> <translation id="7347452120014970266">Ovim će se obrisati svi podaci i kolačići koje je pohranila web lokacija <ph name="ORIGIN_NAME" /> i njene instalirane aplikacije</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA ili RSN)</translation> <translation id="7819992334107904369">Sinhronizacija Chromea</translation> <translation id="782057141565633384">K&opiraj adresu videozapisa</translation> +<translation id="7822187537422052256">Jeste li sigurni da želite ukloniti ovu adresu?</translation> <translation id="7824864914877854148">Izrada sigurnosne kopije nije uspjela zbog greške</translation> <translation id="7825666486843191125">Svi kontakti u blizini dok je ekran otključan</translation> <translation id="782590969421016895">Upotrijebi trenutačne stranice</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Rezultati pretraživanja za "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Dobro došli u <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Uredi unose rječnika</translation> +<translation id="8421361468937925547">Automatski titlovi (samo engleski)</translation> <translation id="8422787418163030046">Nedostaje ladica</translation> <translation id="8425213833346101688">Izmijeni</translation> <translation id="8425492902634685834">Zakači na programsku traku</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Upravljaj prostorom za pohranu</translation> <translation id="8452135315243592079">Nedostaje SIM kartica</translation> <translation id="8455026683977728932">Omogućavanje ADB ilustracije nije uspjelo</translation> +<translation id="8456398879271637452">Automatski titlovi su vidljivi. Pritisnite Ctrl + natrag ili Ctrl + naprijed da mijenjate fokus</translation> <translation id="845702320058262034">Nije se moguće povezati. Provjerite je li Bluetooth na vašem telefonu uključen.</translation> <translation id="8457451314607652708">Uvezi oznake</translation> <translation id="8458627787104127436">Otvori sve (<ph name="URL_COUNT" />) u novom prozoru</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Otvori link u novoj kar&tici</translation> <translation id="9030515284705930323">Vaša organizacija nije omogućila Trgovinu Google Play za vaš račun. Više informacija zatražite od administratora.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Dodatak <ph name="PLUGIN_NAME" /> više nije podržan</translation> <translation id="9031549947500880805">Izradite sigurnosne kopije na Google disku. Jednostavno u svakom trenutku vratite svoje podatke ili promijenite uređaj. Vaša sigurnosna kopija obuhvata podatke o aplikacijama.</translation> <translation id="9033765790910064284">Ipak nastavi</translation> <translation id="9033857511263905942">Zalije&pi</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Preostao vam je još jedan pokušaj.}one{Preostao vam je još # pokušaj.}few{Preostala su vam još # pokušaja.}other{Preostalo vam je još # pokušaja.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Ažurirati lozinku za <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Automatski titlovi su vidljivi. Pritisnite ⌘ + Option + Strelica nagore ili nadolje da mijenjate fokus</translation> <translation id="9041692268811217999">Administrator je onemogućio pristup lokalnim fajlovima na vašem računaru</translation> <translation id="904224458472510106">Ova radnja se ne može opozvati</translation> <translation id="9042893549633094279">Privatnost i sigurnost</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">Konfiguriranje Linuxa nije uspjelo. Povežite se s internetom i pokušajte ponovo.</translation> <translation id="9088917181875854783">Potvrdite da se ovaj pristupni kôd prikazuje na uređaju "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Načini unosa</translation> +<translation id="909108997331068008">Profil koji koristi <ph name="EXISTING_USER" /> je već prijavljen na <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Kreiranje sigurnosne kopije fajlova se preporučuje u slučaju neuspješnog završetka nadogradnje. Započinjanjem nadogradnje će se isključiti Linux (Beta). Sačuvajte otvorene fajlove prije nego što nastavite.</translation> <translation id="9094033019050270033">Ažuriraj lozinku</translation> <translation id="9094038138851891550">Korisničko ime je nevažeće</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">&Ponavljaj</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Uspostavljanje sigurne veze…</translation> +<translation id="99731366405731005">Uključite <ph name="LINK1_BEGIN" />Sinhronizaciju Chromea<ph name="LINK1_END" /> da koristite WiFi sinhronizaciju. <ph name="LINK2_BEGIN" />Saznajte više<ph name="LINK2_END" /></translation> <translation id="998747458861718449">P&rovjeri</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 976c8bf1..8cd3ff3 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> ha desactivat la depuració d'ADB. Aquesta acció restablirà el teu dispositiu <ph name="DEVICE_TYPE" /> en un termini de 24 hores. Fes una còpia de seguretat de tots els fitxers que vols conservar.</translation> <translation id="1977965994116744507">Acosta el telèfon per desbloquejar <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Les properes actualitzacions de seguretat i de programari s'instal·laran automàticament.</translation> +<translation id="1978057560491495741">Suprimeix l'adreça</translation> <translation id="1979095679518582070">Si aquesta funció es desactiva, no afectarà la capacitat d'aquest dispositiu d'enviar la informació necessària per rebre serveis bàsics, com ara seguretat i actualitzacions del sistema.</translation> <translation id="1979280758666859181">Esteu a punt de canviar a un canal amb una versió més antiga de <ph name="PRODUCT_NAME" />. El canvi de canal s'aplicarà quan la versió del canal coincideixi amb la versió qui hi ha instal·lada actualment en el vostre dispositiu.</translation> <translation id="197989455406964291">El Centre de distribució de claus de Kerberos no admet aquest tipus d'encriptació</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Aquesta configuració pertany a <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Edita el nom de la carpeta</translation> <translation id="2225864335125757863">Canvia aquestes contrasenyes immediatament per protegir el teu compte:</translation> +<translation id="2226204716217107988">Vols canviar a un altre perfil?</translation> <translation id="2226449515541314767">S'ha impedit que aquest lloc tingui control total dels dispositius MIDI.</translation> <translation id="2226907662744526012">Desbloqueja automàticament quan s'introdueix el PIN</translation> <translation id="222704500187107962">Aquesta excepció se suprimirà automàticament quan surtis de la sessió d'incògnit actual</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Configura la xarxa</translation> <translation id="230927227160767054">Aquesta pàgina vol instal·lar un gestor de serveis.</translation> <translation id="2309620859903500144">Aquest lloc web no té permís per accedir als sensors de llum o moviment.</translation> +<translation id="2312219318583366810">URL de la pàgina</translation> <translation id="2314165183524574721">L'opció de configuració de visibilitat actual és Amagat</translation> <translation id="2314774579020744484">Idioma utilitzat per traduir pàgines</translation> <translation id="2315414688463285945">S'ha produït un error en configurar els fitxers de Linux. Torna-ho a provar.</translation> @@ -2345,6 +2348,7 @@ <translation id="3713047097299026954">Aquesta clau de seguretat no té dades d'inici de sessió</translation> <translation id="3714195043138862580">Aquest dispositiu de demostració s'ha donat de baixa.</translation> <translation id="3714633008798122362">calendari web</translation> +<translation id="3715954932774762075">Les aplicacions i els llocs web que estan disponibles en diversos idiomes utilitzaran el primer idioma admès d'aquesta llista. Aquestes preferències se sincronitzen amb la configuració del navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Més informació<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Pàgina d'inici</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Tu i Google</translation> @@ -2505,6 +2509,7 @@ <translation id="3882165008614329320">Vídeo existent de la càmera o d'un fitxer</translation> <translation id="3886446263141354045">La teva sol·licitud per accedir a aquest lloc s'ha enviat a <ph name="NAME" /></translation> <translation id="3888550877729210209">Escriu notes amb <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Activa l'opció Sincronització de Chrome per utilitzar la funció Sincronització Wi‑Fi</translation> <translation id="3892414795099177503">Afegeix OpenVPN/L2TP…</translation> <translation id="3893536212201235195">Llegir i canviar la configuració d'accessibilitat</translation> <translation id="3893630138897523026">ChromeVox (avisos de veu)</translation> @@ -3778,6 +3783,7 @@ <translation id="5449588825071916739">Afegeix totes les pestanyes a les adreces d'interès</translation> <translation id="5449716055534515760">Tanca la &finestra</translation> <translation id="5452974209916053028">Sessió d'incògnit actual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" /> i <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">El quadre dels subtítols s'ha mogut un <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% en horitzontal i un <ph name="POSITION_ON_SCREEN_FROM_TOP" />% cap avall</translation> <translation id="5454166040603940656">amb <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">No vàlides</translation> <translation id="5457459357461771897">Llegeix i suprimeix fotos, música i altres elements multimèdia de l'ordinador</translation> @@ -3921,6 +3927,7 @@ <translation id="5602765853043467355">Esborra les adreces d'interès, l'historial, les contrasenyes i altres dades d'aquest dispositiu</translation> <translation id="5605623530403479164">Altres motors de cerca</translation> <translation id="5605758115928394442">S'ha enviat una notificació al teu telèfon per confirmar la teva identitat.</translation> +<translation id="560834977503641186">Sincronització Wi‑Fi, més informació</translation> <translation id="5608580678041221894">Toca aquestes tecles per ajustar o moure l'àrea per retallar</translation> <translation id="5609231933459083978">Sembla que l'aplicació no és vàlida.</translation> <translation id="5610038042047936818">Canvia al mode de càmera</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Configura Ethernet</translation> <translation id="5842497610951477805">Activa el Bluetooth</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Els subtítols instantanis estan visibles; prem F6 per canviar el focus</translation> <translation id="5844574845205796324">Suggereix contingut nou per explorar</translation> <translation id="5846200638699387931">Error de sintaxi de la relació: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instal·la aplicacions i actualitzacions. En continuar, acceptes que aquest dispositiu també pugui baixar i instal·lar automàticament actualitzacions i aplicacions de Google, de l'operador i del fabricant del dispositiu, i que és possible que ho faci utilitzant dades mòbils. Pot ser que algunes d'aquestes aplicacions ofereixin compres des de l'aplicació.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413">Ara <ph name="FULLSCREEN_ORIGIN" /> a pantalla completa.</translation> <translation id="7340650977506865820">El lloc web està compartint la pantalla</translation> <translation id="7341834142292923918">Vol accedir a aquest lloc web</translation> +<translation id="7343372807593926528">Descriu el problema abans d'enviar suggeriments.</translation> <translation id="7345706641791090287">Confirma la contrasenya</translation> <translation id="7346909386216857016">D'acord</translation> <translation id="7347452120014970266">Amb aquesta acció s'esborraran totes les dades i galetes emmagatzemades per <ph name="ORIGIN_NAME" /> i per les seves aplicacions instal·lades</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA o RSN)</translation> <translation id="7819992334107904369">Sincronització de Chrome</translation> <translation id="782057141565633384">C&opia l'adreça del vídeo</translation> +<translation id="7822187537422052256">Confirmes que vols suprimir aquesta adreça?</translation> <translation id="7824864914877854148">La còpia de seguretat no s'ha pogut completar a causa d'un error</translation> <translation id="7825666486843191125">Tots els contactes a prop teu quan tens la pantalla desbloquejada</translation> <translation id="782590969421016895">Utilitza les pàgines actuals</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Resultats de la cerca per a "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Et donem la benvinguda al teu <ph name="DEVICE_TYPE" /></translation> <translation id="8420308167132684745">Edita les entrades del diccionari</translation> +<translation id="8421361468937925547">Subtítols instantanis (només en anglès)</translation> <translation id="8422787418163030046">No es troba la safata</translation> <translation id="8425213833346101688">Canvia</translation> <translation id="8425492902634685834">Fixa a la barra de tasques</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Gestiona l'emmagatzematge</translation> <translation id="8452135315243592079">Falta la targeta SIM</translation> <translation id="8455026683977728932">No s'ha pogut activar la il·lustració d'ADB</translation> +<translation id="8456398879271637452">Els subtítols instantanis estan visibles; prem Ctrl+Enrere o Ctrl+Endavant per canviar el focus</translation> <translation id="845702320058262034">No es pot establir la connexió. Comprova que el Bluetooth del telèfon estigui activat.</translation> <translation id="8457451314607652708">Importa les adreces d'interès</translation> <translation id="8458627787104127436">Obre'ls tots (<ph name="URL_COUNT" />) en una finestra nova</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Obre l'enllaç en una pes&tanya nova</translation> <translation id="9030515284705930323">La teva organització no t'ha activat Google Play Store al compte. Contacta amb l'administrador per obtenir més informació.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Ja no s'admet <ph name="PLUGIN_NAME" /></translation> <translation id="9031549947500880805">Crea còpies de seguretat a Google Drive. Canvia de dispositiu o restaura'n les dades fàcilment en qualsevol moment. La còpia de seguretat inclou dades d'aplicacions.</translation> <translation id="9033765790910064284">Continua igualment</translation> <translation id="9033857511263905942">&Enganxa</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Et queda un intent.}other{Et queden # intents.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Vols actualitzar la contrasenya per a <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Els subtítols instantanis estan visibles; prem ⌘+Opció+fletxa amunt o fletxa avall per canviar el focus</translation> <translation id="9041692268811217999">L'administrador ha desactivat l'accés als fitxers locals de l'ordinador</translation> <translation id="904224458472510106">Aquesta operació no es pot desfer</translation> <translation id="9042893549633094279">Privadesa i seguretat</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">No s'ha pogut configurar Linux. Connecta't a Internet i torna-ho a provar.</translation> <translation id="9088917181875854783">Confirmeu que aquesta clau d'accés apareix a "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Mètodes d'entrada</translation> +<translation id="909108997331068008">El perfil <ph name="EXISTING_USER" /> ja s'ha utilitzat per iniciar la sessió a <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Es recomana fer una còpia de seguretat dels fitxers si l'actualització no es pot completar. En iniciar l'actualització, Linux (versió beta) s'apagarà. Desa els fitxers oberts abans de continuar.</translation> <translation id="9094033019050270033">Actualitza la contrasenya</translation> <translation id="9094038138851891550">El nom d'usuari no és vàlid</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">&Bucle</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">S'està establint una connexió segura...</translation> +<translation id="99731366405731005">Activa l'opció <ph name="LINK1_BEGIN" />Sincronització de Chrome<ph name="LINK1_END" /> per utilitzar la funció Sincronització Wi‑Fi. <ph name="LINK2_BEGIN" />Més informació<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspecciona</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 6573081..9b935c0 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -87,7 +87,7 @@ <translation id="1094607894174825014">Der blev anmodet om en læse- eller skrivehandling med en ugyldig forskydning på: "<ph name="DEVICE_NAME" />".</translation> <translation id="109647177154844434">Hvis du afinstallerer Parallels Desktop, slettes dit Windows-billede. Dette omfatter dens apps, indstillinger og data. Er du sikker på, at du vil fortsætte?</translation> <translation id="1097515232094183876">{COUNT,plural, =1{1 link}one{# link}other{# links}}</translation> -<translation id="1097658378307015415">Før du logger ind, skal du logge ind som gæst for at aktivere netværket <ph name="NETWORK_ID" /></translation> +<translation id="1097658378307015415">Før du logger ind, skal du starte en gæstesession for at aktivere netværket <ph name="NETWORK_ID" /></translation> <translation id="1099962274138857708">Billede kopieret fra <ph name="DEVICE_NAME" /></translation> <translation id="1102187190604780492">Giv Assistent mulighed for proaktivt at vise oplysninger, der er relateret til det, der vises på skærmen</translation> <translation id="1103523840287552314">Oversæt altid <ph name="LANGUAGE" /></translation> @@ -2229,7 +2229,7 @@ <translation id="3593152357631900254">Aktiver tilstanden Fuzzy-pinyin</translation> <translation id="3593965109698325041">Begrænsninger for certifikatnavn</translation> <translation id="3596235046596950091">Aktivér skytjenester</translation> -<translation id="3596414637720633074">Bloker tredjepartscookies i Inkognito</translation> +<translation id="3596414637720633074">Bloker tredjepartscookies i inkognito</translation> <translation id="3599221874935822507">Hævet</translation> <translation id="3599863153486145794">Rydder historikken på alle enheder, hvor du er logget ind. Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="3600051066689725006">Oplysninger om webanmodning</translation> @@ -3661,7 +3661,7 @@ <translation id="5300287940468717207">Vil du nulstille websitetilladelserne?</translation> <translation id="5300589172476337783">Vis</translation> <translation id="5300719150368506519">Sender webadresserne for de sider, du besøger, til Google</translation> -<translation id="5301751748813680278">Gæsteadgang.</translation> +<translation id="5301751748813680278">Anvender som gæst.</translation> <translation id="5301954838959518834">OK, det er forstået</translation> <translation id="5302048478445481009">Sprog</translation> <translation id="5302932258331363306">Vis erstatninger</translation> @@ -4858,7 +4858,7 @@ <translation id="6731877319426971768">Filerne til talegenkendelse blev downloadet</translation> <translation id="6732801395666424405">Certifikaterne blev ikke indlæst</translation> <translation id="6732900235521116609">Genvejen kan ikke fjernes</translation> -<translation id="6734468588183300211">Når du er i Inkognito, kan websites ikke bruge dine cookies til at se din browserhistorik på forskellige websites, til f.eks. at tilpasse annoncer. Funktioner på visse websites virker muligvis ikke.</translation> +<translation id="6734468588183300211">Når du er i inkognito, kan websites ikke bruge dine cookies til at se din browserhistorik på forskellige websites, til f.eks. at tilpasse annoncer. Funktioner på visse websites virker muligvis ikke.</translation> <translation id="6735304988756581115">Vis cookies og andre websitedata...</translation> <translation id="6736243959894955139">Adresse</translation> <translation id="6736329909263487977"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />]</translation> @@ -6775,7 +6775,7 @@ <translation id="8948939328578167195"><ph name="WEBSITE" /> anmoder om at se din sikkerhedsnøgles fabrikat og model</translation> <translation id="895054485242522631">Websites kan bruge bevægelsessensorer</translation> <translation id="8951256747718668828">Gendannelsen kunne ikke fuldføres på grund af en fejl</translation> -<translation id="8951465597020890363">Vil du afslutte delefunktionen?</translation> +<translation id="8951465597020890363">Vil du afslutte gæstesessionen?</translation> <translation id="8952831374766033534">Konfigurationsmuligheden understøttes ikke: <ph name="ERROR_LINE" /></translation> <translation id="8953476467359856141">Under opladning</translation> <translation id="895347679606913382">Begynder...</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 98de5c3e..8915bb6 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">Ο τομέας <ph name="DOMAIN" /> απενεργοποίησε τον εντοπισμό και τη διόρθωση σφαλμάτων ADB. Αυτό θα επαναφέρει τη συσκευή σας <ph name="DEVICE_TYPE" /> σε 24 ώρες. Δημιουργήστε αντίγραφα ασφαλείας των αρχείων που θέλετε να κρατήσετε.</translation> <translation id="1977965994116744507">Πλησιάστε το τηλέφωνό σας, για να ξεκλειδώσει το <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Οι μελλοντικές ενημερώσεις λογισμικού και ασφαλείας θα εγκαθίστανται αυτόματα.</translation> +<translation id="1978057560491495741">Κατάργηση διεύθυνσης</translation> <translation id="1979095679518582070">Η απενεργοποίηση αυτής της λειτουργίας δεν επηρεάζει τη δυνατότητα αυτής της συσκευής να στέλνει τις πληροφορίες που απαιτούνται για βασικές υπηρεσίες, όπως είναι οι ενημερώσεις συστήματος και η ασφάλεια.</translation> <translation id="1979280758666859181">Έχετε επιλέξει ένα κανάλι με μια παλαιότερη έκδοση του <ph name="PRODUCT_NAME" />. Η αλλαγή καναλιού θα πραγματοποιηθεί όταν η έκδοση του καναλιού συμφωνεί με την έκδοση που είναι εγκατεστημένη στη συσκευή σας.</translation> <translation id="197989455406964291">Το KDC δεν υποστηρίζει τον τύπο κρυπτογράφησης</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Αυτή η ρύθμιση ανήκει στον χρήστη <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Επεξεργασία ονόματος φακέλου</translation> <translation id="2225864335125757863">Αλλάξτε αυτούς τους κωδικούς πρόσβασης άμεσα για να διατηρήσετε τον λογαριασμό σας ασφαλή:</translation> +<translation id="2226204716217107988">Εναλλαγή σε κάποιο άλλο προφίλ;</translation> <translation id="2226449515541314767">Αυτός ο ιστότοπος έχει αποκλειστεί από τον πλήρη έλεγχο των συσκευών MIDI.</translation> <translation id="2226907662744526012">Αυτόματο ξεκλείδωμα μετά την εισαγωγή του PIN</translation> <translation id="222704500187107962">Αυτή η εξαίρεση θα καταργηθεί αυτόματα αφού αποχωρήσετε από την τρέχουσα περίοδο λειτουργίας ανώνυμης περιήγησης.</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Διαμόρφωση δικτύου</translation> <translation id="230927227160767054">Αυτή η σελίδα θέλει να κάνει εγκατάσταση ενός δείκτη χειρισμού υπηρεσιών.</translation> <translation id="2309620859903500144">Έχει αποκλειστεί η πρόσβαση αυτού του ιστοτόπου στους αισθητήρες κίνησης και φωτός.</translation> +<translation id="2312219318583366810">URL σελίδας</translation> <translation id="2314165183524574721">Η τρέχουσα ρύθμιση ορατότητας είναι Κρυφή</translation> <translation id="2314774579020744484">Χρησιμοποιούμενη γλώσσα για τη μετάφραση σελίδων</translation> <translation id="2315414688463285945">Παρουσιάστηκε σφάλμα κατά τη διαμόρφωση αρχείων Linux. Δοκιμάστε ξανά.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Αυτό το κλειδί ασφαλείας δεν διαθέτει δεδομένα σύνδεσης.</translation> <translation id="3714195043138862580">Αυτή η συσκευή επίδειξης έχει τεθεί σε κατάσταση κατάργησης παροχής.</translation> <translation id="3714633008798122362">ημερολόγιο ιστού</translation> +<translation id="3715954932774762075">Οι εφαρμογές και οι ιστότοποι που διατίθενται σε πολλές γλώσσες θα χρησιμοποιούν την πρώτη υποστηριζόμενη γλώσσα από αυτήν τη λίστα. Αυτές οι προτιμήσεις συγχρονίζονται με τις ρυθμίσεις του προγράμματος περιήγησης. <ph name="BEGIN_LINK_LEARN_MORE" />Μάθετε περισσότερα<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Αρχική σελίδα</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Εσείς και η Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Υπάρχον βίντεο από την κάμερα ή από αρχείο</translation> <translation id="3886446263141354045">Το αίτημά σας για να αποκτήσετε πρόσβαση σε αυτόν τον ιστότοπο έχει σταλεί στον/η(ν) <ph name="NAME" /></translation> <translation id="3888550877729210209">Λήψη σημειώσεων με την εφαρμογή <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Ενεργοποιήστε τον Συγχρονισμό Chrome για να χρησιμοποιήσετε τον Συγχρονισμό Wi-Fi</translation> <translation id="3892414795099177503">Προσθήκη OpenVPN / L2TP…</translation> <translation id="3893536212201235195">Ανάγνωση και αλλαγή των ρυθμίσεων προσβασιμότητας</translation> <translation id="3893630138897523026">ChromeVox (προφορικά σχόλια)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Δημιουργία σελιδοδείκτη για όλες τις καρτέλες</translation> <translation id="5449716055534515760">Κλείσιμο παραθύρου</translation> <translation id="5452974209916053028">Τρέχουσα περίοδος λειτουργίας ανώνυμης περιήγησης: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Το συννεφάκι υποτίτλων μετακινήθηκε <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% οριζόντια, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% προς τα κάτω</translation> <translation id="5454166040603940656">με <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Μη έγκυρο</translation> <translation id="5457459357461771897">Ανάγνωση και διαγραφή φωτογραφιών, μουσικής και άλλων μέσων από τον υπολογιστή σας</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Διαγραφή σελιδοδεικτών, ιστορικού, κωδικών πρόσβασης κ.ά. από αυτή τη συσκευή</translation> <translation id="5605623530403479164">Άλλες μηχανές αναζήτησης</translation> <translation id="5605758115928394442">Στάλθηκε μια ειδοποίηση στο τηλέφωνό σας για την επιβεβαίωση της ταυτότητάς σας.</translation> +<translation id="560834977503641186">Συγχρονισμός Wi-Fi, Μάθετε περισσότερα</translation> <translation id="5608580678041221894">Πατήστε τα παρακάτω πλήκτρα για να προσαρμόσετε ή να μετακινήσετε την περιοχή περικοπής</translation> <translation id="5609231933459083978">Φαίνεται πως η εφαρμογή δεν είναι έγκυρη.</translation> <translation id="5610038042047936818">Εναλλαγή σε λειτουργία κάμερας</translation> @@ -4113,6 +4120,7 @@ <translation id="5841270259333717135">Διαμόρφωση ethernet</translation> <translation id="5842497610951477805">Ενεργοποίηση Bluetooth</translation> <translation id="5843706793424741864">Βαθμοί Φαρενάιτ</translation> +<translation id="584451707753263735">Οι Ζωντανοί υπότιτλοι είναι ορατοί, πιέστε F6 για εναλλαγή εστίασης.</translation> <translation id="5844574845205796324">Προτάσεις για την εξερεύνηση νέου περιεχομένου</translation> <translation id="5846200638699387931">Σφάλμα σύνταξης σχέσης: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Εγκατάσταση ενημερώσεων και εφαρμογών. Αν συνεχίσετε, αποδέχεστε ότι η συσκευή ενδέχεται επίσης να κατεβάζει και να εγκαθιστά αυτόματα ενημερώσεις και εφαρμογές από την Google, την εταιρεία κινητής τηλεφωνίας και τον κατασκευαστή της συσκευής, πιθανόν με τη χρήση δεδομένων κινητής τηλεφωνίας. Ορισμένες από αυτές τις εφαρμογές μπορεί να προσφέρουν αγορές εντός εφαρμογής.</translation> @@ -5369,6 +5377,7 @@ <translation id="7340431621085453413">Το <ph name="FULLSCREEN_ORIGIN" /> εμφανίζεται σε πλήρη οθόνη.</translation> <translation id="7340650977506865820">Ο ιστότοπος μοιράζεται την οθόνη σας</translation> <translation id="7341834142292923918">Ζητάει πρόσβαση σε αυτόν τον ιστότοπο</translation> +<translation id="7343372807593926528">Περιγράψτε το πρόβλημα προτού στείλετε τα σχόλιά σας.</translation> <translation id="7345706641791090287">Επιβεβαιώστε τον κωδικό πρόσβασής σας</translation> <translation id="7346909386216857016">OK, το κατάλαβα</translation> <translation id="7347452120014970266">Με αυτήν την ενέργεια θα διαγραφούν όλα τα δεδομένα και τα cookie που έχουν αποθηκευτεί από <ph name="ORIGIN_NAME" /> και τις εγκατεστημένες εφαρμογές του.</translation> @@ -5785,6 +5794,7 @@ <translation id="7819857487979277519">PSK (WPA ή RSN)</translation> <translation id="7819992334107904369">Συγχρονισμός Chrome</translation> <translation id="782057141565633384">Α&ντιγραφή διεύθυνσης βίντεο</translation> +<translation id="7822187537422052256">Είστε βέβαιοι ότι θέλετε να καταργήσετε αυτήν τη διεύθυνση;</translation> <translation id="7824864914877854148">Δεν ήταν δυνατή η ολοκλήρωση δημιουργίας αντιγράφων ασφαλείας λόγω σφάλματος</translation> <translation id="7825666486843191125">Όλες οι επαφές που βρίσκονται κοντά σας όταν η οθόνη σας είναι ξεκλειδωμένη.</translation> <translation id="782590969421016895">Χρήση τρεχουσών σελίδων</translation> @@ -6310,6 +6320,7 @@ <translation id="8419098111404128271">Αποτελέσματα αναζήτησης για "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Καλώς ήρθατε στο <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Επεξεργασία καταχωρίσεων λεξικού</translation> +<translation id="8421361468937925547">Ζωντανοί υπότιτλοι (μόνο στα αγγλικά)</translation> <translation id="8422787418163030046">Λείπει δίσκος</translation> <translation id="8425213833346101688">Αλλαγή</translation> <translation id="8425492902634685834">Καρφίτσωμα στη γραμμή εργασιών</translation> @@ -6338,6 +6349,7 @@ <translation id="8449036207308062757">Διαχείριση αποθηκευτικού χώρου</translation> <translation id="8452135315243592079">Κάρτα SIM που λείπει</translation> <translation id="8455026683977728932">Η ενεργοποίηση της εικόνας adb απέτυχε</translation> +<translation id="8456398879271637452">Οι Ζωντανοί υπότιτλοι είναι ορατοί, πιέστε Ctrl + Πίσω ή Ctrl + Εμπρός για εναλλαγή εστίασης.</translation> <translation id="845702320058262034">Δεν είναι δυνατή η σύνδεση. Βεβαιωθείτε ότι το Bluetooth του τηλεφώνου σας είναι ενεργοποιημένο.</translation> <translation id="8457451314607652708">Εισαγωγή σελιδοδεικτών</translation> <translation id="8458627787104127436">Άνοιγμα όλων (<ph name="URL_COUNT" />) σε νέο παράθυρο</translation> @@ -6846,6 +6858,7 @@ <translation id="9027459031423301635">Άνοιγμα Συνδέσμου σε Νέα Καρτέ&λα</translation> <translation id="9030515284705930323">Ο οργανισμός σας δεν έχει ενεργοποιήσει το Google Play Store για τον λογαριασμό σας. Για περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Η προσθήκη <ph name="PLUGIN_NAME" /> δεν υποστηρίζεται πλέον</translation> <translation id="9031549947500880805">Δημιουργία αντιγράφων ασφαλείας στο Google Drive. Επαναφέρετε τα δεδομένα σας ή αλλάξτε συσκευή ανά πάσα στιγμή με ευκολία. Το αντίγραφο ασφαλείας συμπεριλαμβάνει τα δεδομένα εφαρμογών.</translation> <translation id="9033765790910064284">Συνέχεια</translation> <translation id="9033857511263905942">&Επικόλληση</translation> @@ -6854,6 +6867,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Σας απομένει 1 προσπάθεια.}other{Σας απομένουν # προσπάθειες.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Ενημέρωση κωδικού πρόσβασης για <ph name="ORIGIN" />;</translation> +<translation id="9041049756004505730">Οι Ζωντανοί υπότιτλοι είναι ορατοί, πιέστε ⌘ + Option + επάνω βέλος ή κάτω βέλος για εναλλαγή εστίασης.</translation> <translation id="9041692268811217999">Η πρόσβαση στα τοπικά αρχεία στο μηχάνημά σας έχει απενεργοποιηθεί από το διαχειριστή σας</translation> <translation id="904224458472510106">Αυτή η λειτουργία δεν μπορεί να αναιρεθεί</translation> <translation id="9042893549633094279">Απόρρητο και ασφάλεια</translation> @@ -6892,6 +6906,7 @@ <translation id="9088446193279799727">Δεν ήταν δυνατή η διαμόρφωση των Linux. Συνδεθείτε στο διαδίκτυο και δοκιμάστε ξανά.</translation> <translation id="9088917181875854783">Επιβεβαιώστε ότι αυτό το κλειδί πρόσβασης εμφανίζεται στη συσκευή "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Μέθοδοι εισαγωγής</translation> +<translation id="909108997331068008">Το προφίλ του χρήστη <ph name="EXISTING_USER" /> είναι ήδη συνδεδεμένο στον λογαριασμό <ph name="NEW_USER" />.</translation> <translation id="9093429538970210897">Συνιστάται η δημιουργία αντιγράφων ασφαλείας των αρχείων σε περίπτωση που δεν είναι δυνατή η ολοκλήρωση της αναβάθμισης. Η έναρξη της αναβάθμισης θα προκαλέσει τον τερματισμό λειτουργίας του Linux (Beta). Αποθηκεύστε τα ανοικτά αρχεία πριν συνεχίσετε.</translation> <translation id="9094033019050270033">Ενημέρωση κωδικού πρόσβασης</translation> <translation id="9094038138851891550">Μη έγκυρο όνομα χρήστη</translation> @@ -7065,5 +7080,6 @@ <translation id="994289308992179865">&Επανάληψη</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Δημιουργία ασφαλούς σύνδεσης...</translation> +<translation id="99731366405731005">Ενεργοποιήστε τον <ph name="LINK1_BEGIN" />Συγχρονισμό Chrome<ph name="LINK1_END" /> για να χρησιμοποιήσετε τον Συγχρονισμό Wi-Fi. <ph name="LINK2_BEGIN" />Μάθετε περισσότερα<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Έ&λεγχος</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 52e59ff..9b55515 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> has disabled ADB debugging. This will reset your <ph name="DEVICE_TYPE" /> in 24 hours. Back up any files that you'd like to keep.</translation> <translation id="1977965994116744507">Bring your phone closer to unlock your <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Future software and security updates will install automatically.</translation> +<translation id="1978057560491495741">Remove address</translation> <translation id="1979095679518582070">Turning off this feature doesn't affect this device's ability to send the information needed for essential services such as system updates and security.</translation> <translation id="1979280758666859181">You are changing to a channel with an older version of <ph name="PRODUCT_NAME" />. The channel change will be applied when the channel version matches the version currently installed on your device.</translation> <translation id="197989455406964291">KDC does not support encryption type</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">This setting belongs to <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Edit folder name</translation> <translation id="2225864335125757863">Change these passwords immediately to keep your account safe:</translation> +<translation id="2226204716217107988">Switch to another profile?</translation> <translation id="2226449515541314767">This site has been blocked from having full control of MIDI devices.</translation> <translation id="2226907662744526012">Unlock automatically once PIN is entered</translation> <translation id="222704500187107962">This exception will be automatically removed after you exit the current Incognito session</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Configure network</translation> <translation id="230927227160767054">This page wants to install a service handler.</translation> <translation id="2309620859903500144">This site has been blocked from accessing your motion or light sensors.</translation> +<translation id="2312219318583366810">Page URL</translation> <translation id="2314165183524574721">Current visibility setting is hidden</translation> <translation id="2314774579020744484">Language used when translating pages</translation> <translation id="2315414688463285945">Error configuring Linux files. Please try again.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">This security key does not have any sign-in data</translation> <translation id="3714195043138862580">This demo device has been placed into a deprovisioned state.</translation> <translation id="3714633008798122362">web calendar</translation> +<translation id="3715954932774762075">Apps and websites that are available in multiple languages will use the first supported language from this list. These preferences are synced with your browser settings. <ph name="BEGIN_LINK_LEARN_MORE" />Learn more<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Homepage</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">You and Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Existing video from camera or file</translation> <translation id="3886446263141354045">Your request to access this site has been sent to <ph name="NAME" /></translation> <translation id="3888550877729210209">Taking notes with <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Turn on Chrome Sync to use Wi-Fi Sync</translation> <translation id="3892414795099177503">Add OpenVPN/L2TP...</translation> <translation id="3893536212201235195">Read and change your accessibility settings</translation> <translation id="3893630138897523026">ChromeVox (spoken feedback)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Bookmark All Tabs</translation> <translation id="5449716055534515760">Close Win&dow</translation> <translation id="5452974209916053028">Current incognito session: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Moved caption bubble to <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% across, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% down</translation> <translation id="5454166040603940656">with <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Invalid</translation> <translation id="5457459357461771897">Read and delete photos, music and other media from your computer</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Clear bookmarks, history, passwords and more from this device</translation> <translation id="5605623530403479164">Other search engines</translation> <translation id="5605758115928394442">A notification was sent to your phone to confirm that it's you.</translation> +<translation id="560834977503641186">Wi-Fi Sync, learn more</translation> <translation id="5608580678041221894">Tap the following keys to adjust or move the cropping area</translation> <translation id="5609231933459083978">The application appears to be invalid.</translation> <translation id="5610038042047936818">Switch to camera mode</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Configure Ethernet</translation> <translation id="5842497610951477805">Bluetooth enable</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Live Caption visible; press F6 to cycle focus</translation> <translation id="5844574845205796324">Suggest new content to explore</translation> <translation id="5846200638699387931">Relation syntax error: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Install updates and apps. By continuing, you agree that this device may also automatically download and install updates and apps from Google, your operator and your device's manufacturer, possibly using mobile data. Some of these apps may offer in-app purchases.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> is now full screen.</translation> <translation id="7340650977506865820">Site is sharing your screen</translation> <translation id="7341834142292923918">Wants access to this site</translation> +<translation id="7343372807593926528">Please describe the problem before sending feedback.</translation> <translation id="7345706641791090287">Confirm your password</translation> <translation id="7346909386216857016">OK, got it</translation> <translation id="7347452120014970266">This will clear all data and cookies stored by <ph name="ORIGIN_NAME" /> and its installed apps</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA or RSN)</translation> <translation id="7819992334107904369">Chrome sync</translation> <translation id="782057141565633384">C&opy video address</translation> +<translation id="7822187537422052256">Are you sure that you want to remove this address?</translation> <translation id="7824864914877854148">Backup couldn't be completed due to an error</translation> <translation id="7825666486843191125">All contacts near you when your screen is unlocked</translation> <translation id="782590969421016895">Use current pages</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Search results for '<ph name="SEARCH_TEXT" />'</translation> <translation id="8419368276599091549">Welcome to your <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Edit dictionary entries</translation> +<translation id="8421361468937925547">Live Caption (English only)</translation> <translation id="8422787418163030046">Tray is missing</translation> <translation id="8425213833346101688">Change</translation> <translation id="8425492902634685834">Pin to task bar</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Manage storage</translation> <translation id="8452135315243592079">Missing SIM card</translation> <translation id="8455026683977728932">Failed to enable ADB illustration</translation> +<translation id="8456398879271637452">Live Caption visible, press Ctrl + Back or Ctrl + Forward to cycle focus</translation> <translation id="845702320058262034">Can’t connect. Make sure that your phone’s Bluetooth is turned on.</translation> <translation id="8457451314607652708">Import bookmarks</translation> <translation id="8458627787104127436">Open all (<ph name="URL_COUNT" />) in new window</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Open Link in New &Tab</translation> <translation id="9030515284705930323">Your organisation has not enabled Google Play Store for your account. Contact your administrator for more information.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> is no longer supported</translation> <translation id="9031549947500880805">Back up to Google Drive. Easily restore your data or switch device at any time. Your backup includes app data.</translation> <translation id="9033765790910064284">Continue anyway</translation> <translation id="9033857511263905942">&Paste</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{You have one attempt remaining.}other{You have # attempts remaining.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Update password for <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Live Caption visible, press ⌘ + Option + up arrow or down arrow to cycle focus</translation> <translation id="9041692268811217999">Access to local files on your machine is disabled by your administrator</translation> <translation id="904224458472510106">This operation cannot be undone</translation> <translation id="9042893549633094279">Privacy and security</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">Could not configure Linux. Connect to the Internet and try again.</translation> <translation id="9088917181875854783">Please confirm that this passkey is shown on "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Input methods</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" />'s profile is already signed in to <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Backing up files is recommended in case the upgrade cannot be completed. Starting the upgrade will cause Linux (beta) to shut down. Please save open files before proceeding.</translation> <translation id="9094033019050270033">Update password</translation> <translation id="9094038138851891550">Username invalid</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">&Loop</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Establishing secure connection...</translation> +<translation id="99731366405731005">Turn on <ph name="LINK1_BEGIN" />Chrome Sync<ph name="LINK1_END" /> to use Wi-Fi Sync. <ph name="LINK2_BEGIN" />Learn more<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspect</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 09fa1ce..d04157e1 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -869,6 +869,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> اشکالزدایی ADB (پل اشکالزدایی Android) را غیرفعال کرده است. با این کار، <ph name="DEVICE_TYPE" /> ظرف ۲۴ ساعت بازنشانی خواهد شد. از فایلهایی که مایلید نگه دارید پشتیبانگیری کنید.</translation> <translation id="1977965994116744507">برای باز کردن قفل <ph name="DEVICE_TYPE" />، تلفنتان را نزدیکتر کنید.</translation> <translation id="1978006917103730774">بهروزرسانیهای امنیتی و نرمافزار درآینده بهطور خودکار نصب میشوند.</translation> +<translation id="1978057560491495741">حذف نشانی</translation> <translation id="1979095679518582070">خاموش کردن این ویژگی توانایی این دستگاه را برای ارسال اطلاعات موردنیاز برای سرویسهای ضروری، مانند امنیت و بهروزرسانیهای سیستم تحتتأثیر قرار نمیدهد.</translation> <translation id="1979280758666859181">شما در حال تغییر کانال به نسخه قدیمیتر <ph name="PRODUCT_NAME" /> هستید. تغییر کانال زمانی اعمال میشود که نسخه کانال با نسخه فعلی نصب شده در دستگاه یکسان باشد.</translation> <translation id="197989455406964291">KDC از نوع رمزگذاری پشتیبانی نمیکند</translation> @@ -1071,6 +1072,7 @@ <translation id="2224444042887712269">این تنظیم به <ph name="OWNER_EMAIL" /> متعلق است.</translation> <translation id="2224551243087462610">ویرایش نام پوشه</translation> <translation id="2225864335125757863">برای حفظ ایمنی حسابتان، این گذرواژهها را فوراً تغییر دهید:</translation> +<translation id="2226204716217107988">به نمایه دیگری میروید؟</translation> <translation id="2226449515541314767">این سایت از داشتن کنترل کامل دستگاههای MIDI ممانعت شده است.</translation> <translation id="2226907662744526012">باز شدن خودکار قفل بعد از وارد کردن پین</translation> <translation id="222704500187107962">پس از خروج از جلسه ناشناس فعلی، این استثنا بهطور خودکار برداشته میشود</translation> @@ -1140,6 +1142,7 @@ <translation id="2307462900900812319">پیکربندی شبکه</translation> <translation id="230927227160767054">این صفحه، میخواهد یک کنترلکننده سرویس نصب کند.</translation> <translation id="2309620859903500144">دسترسی این سایت به حسگرهای نور یا حرکت مسدود شده است.</translation> +<translation id="2312219318583366810">نشانی وب صفحه</translation> <translation id="2314165183524574721">تنظیم نمایان بودن کنونی «پنهان» است</translation> <translation id="2314774579020744484">زبان استفادهشده هنگام ترجمه صفحات</translation> <translation id="2315414688463285945">هنگام پیکربندی فایلهای Linux خطایی روی داد. لطفاً دوباره امتحان کنید.</translation> @@ -2343,6 +2346,7 @@ <translation id="3713047097299026954">این کلید امنیتی هیچ داده ورود به سیستمی ندارد</translation> <translation id="3714195043138862580">این دستگاه نمایشی در وضعیت لغو مجوز دسترسی قرار داده شده است.</translation> <translation id="3714633008798122362">تقویم وب</translation> +<translation id="3715954932774762075">برنامهها و وبسایتهایی که به چند زبان دردسترس هستند، از اولین زبان پشتیبانیشده در این فهرست استفاده خواهند کرد. این اولویتها با تنظیمات مرورگرتان همگامسازی میشود. <ph name="BEGIN_LINK_LEARN_MORE" />بیشتر بدانید<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">صفحه اصلی</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">شما و Google</translation> @@ -2393,7 +2397,7 @@ <translation id="3771294271822695279">فایلهای ویدئویی</translation> <translation id="3775432569830822555">گواهی سرور SSL</translation> <translation id="3775705724665058594">ارسال به دستگاههایتان</translation> -<translation id="3776796446459804932">این افزونه حریم خصوصی «نتبازار Chrome» را نقض میکند.</translation> +<translation id="3776796446459804932">این افزونه حریمخصوصی «نتبازار Chrome» را نقض میکند.</translation> <translation id="3777483481409781352">دستگاه تلفن همراه فعال نشد</translation> <translation id="3777806571986431400">برنامه افزودنی فعال شد</translation> <translation id="3778152852029592020">بارگیری لغو شد.</translation> @@ -2503,6 +2507,7 @@ <translation id="3882165008614329320">ویدیوی موجود از دوربین یا فایل</translation> <translation id="3886446263141354045">درخواست شما برای دسترسی به این سایت برای <ph name="NAME" /> ارسال شده است</translation> <translation id="3888550877729210209">یادداشتبرداری با <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">روشن کردن «همگامسازی Chrome» برای استفاده از «همگامسازی Wi-Fi»</translation> <translation id="3892414795099177503">افزودن OpenVPN / L2TP…</translation> <translation id="3893536212201235195">خواندن و تغییر تنظیمات دسترسپذیری شما</translation> <translation id="3893630138897523026">ChromeVox (بازخورد گفتاری)</translation> @@ -3776,6 +3781,7 @@ <translation id="5449588825071916739">نشانکگذاری همه برگهها...</translation> <translation id="5449716055534515760">بستن &پنجره</translation> <translation id="5452974209916053028">جلسه ناشناس کنونی: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />، <ph name="RECENT_PERMISSIONS_CHANGE_1" />، <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">حبابک زیرنویس ناشنوایان <ph name="POSITION_ON_SCREEN_FROM_LEFT" />٪ به طرف مقابل، <ph name="POSITION_ON_SCREEN_FROM_TOP" />٪ بهپایین منتقل شد</translation> <translation id="5454166040603940656">با <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">نامعتبر</translation> <translation id="5457459357461771897">خواندن و حذف عکسها، موسیقی، و سایر رسانهها از رایانهتان</translation> @@ -3919,6 +3925,7 @@ <translation id="5602765853043467355">نشانکها، سابقه، گذرواژهها و موارد دیگر از این دستگاه پاک شود</translation> <translation id="5605623530403479164">موتورهای جستجوی دیگر</translation> <translation id="5605758115928394442">برای تأیید اینکه خودتان هستید، اعلانی به تلفنتان ارسال شد.</translation> +<translation id="560834977503641186">«همگامسازی Wi-Fi»، بیشتر بدانید</translation> <translation id="5608580678041221894">برای تنظیم یا انتقال ناحیه بریدهشده، روی کلیدهای زیر ضربه بزنید</translation> <translation id="5609231933459083978">به نظر میرسد این برنامه معتبر نیست.</translation> <translation id="5610038042047936818">تغییر به حالت دوربین</translation> @@ -4109,6 +4116,7 @@ <translation id="5841270259333717135">پیکربندی اترنت</translation> <translation id="5842497610951477805">فعال کردن بلوتوث</translation> <translation id="5843706793424741864">فارنهایت</translation> +<translation id="584451707753263735">«زیرنویس ناشنوایان زنده» نمایان است، کلید F6 را برای تغییر مکان تمرکز فشار دهید</translation> <translation id="5844574845205796324">پیشنهاد محتوای جدید برای کاوش</translation> <translation id="5846200638699387931">خطای دستوری رابطه: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">نصب بهروزرسانیها و برنامهها. با ادامه دادن، موافقت میکنید این دستگاه همچنین میتواند بهطور خودکار بهروزرسانی و برنامه از Google، شرکت مخابراتی، و سازنده دستگاهتان بارگیری و نصب کند و احتمالاً این کار با مصرف داده شبکه تلفن همراه خواهد بود. بعضی از این برنامهها ممکن است خریدهای درونبرنامه ارائه دهند.</translation> @@ -4630,7 +4638,7 @@ <translation id="6444909401984215022"><ph name="WINDOW_TITLE" /> - اسکن بلوتوث فعال است</translation> <translation id="6445450263907939268">اگر این تغییرات مدنظر شما نبود، میتوانید تنظیمات قبلیتان را بازیابی کنید.</translation> <translation id="6447842834002726250">کوکیها</translation> -<translation id="6450876761651513209">تغییر تنظیمات مربوط به حریم خصوصی شما</translation> +<translation id="6450876761651513209">تغییر تنظیمات مربوط به حریمخصوصی شما</translation> <translation id="6451180435462401570">مدیریت دستگاههای Cloud Print</translation> <translation id="6451591602925140504">{NUM_PAGES,plural, =0{<ph name="PAGE_TITLE" />}=1{<ph name="PAGE_TITLE" /> و ۱ برگه دیگر}one{<ph name="PAGE_TITLE" /> و # برگه دیگر}other{<ph name="PAGE_TITLE" /> و # برگه دیگر}}</translation> <translation id="6451689256222386810">اگر عبارت عبورتان را فراموش کردهاید یا میخواهید این تنظیم را تغییر دهید، <ph name="BEGIN_LINK" />همگامسازی را بازنشانی کنید<ph name="END_LINK" />.</translation> @@ -5365,6 +5373,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> اکنون در حالت تمام صفحه است.</translation> <translation id="7340650977506865820">سایت درحال همرسانی صفحهنمایش شما است</translation> <translation id="7341834142292923918">میخواهد به این سایت دسترسی پیدا کند</translation> +<translation id="7343372807593926528">لطفاً قبلاز ارسال بازخورد، مشکل را شرح دهید.</translation> <translation id="7345706641791090287">گذرواژهتان را تأیید کنید</translation> <translation id="7346909386216857016">بله متوجه شدم.</translation> <translation id="7347452120014970266">با این کار همه دادهها و کوکیهای ذخیرهشده توسط <ph name="ORIGIN_NAME" /> و برنامههای نصبشده آن پاک میشود</translation> @@ -5780,6 +5789,7 @@ <translation id="7819857487979277519">PSK (WPA یا RSN)</translation> <translation id="7819992334107904369">همگامسازی Chrome</translation> <translation id="782057141565633384">کپی آدرس ویدئو</translation> +<translation id="7822187537422052256">مطمئنید میخواهید این نشانی را حذف کنید؟</translation> <translation id="7824864914877854148">بهدلیل بروز خطا، پشتیبانگیری کامل نشد</translation> <translation id="7825666486843191125">همه مخاطبین مجاور، زمانی که قفل صفحهنمایش باز است</translation> <translation id="782590969421016895">استفاده از صفحات فعلی</translation> @@ -5862,7 +5872,7 @@ <translation id="7897900149154324287">در آینده، مطمئن شوید که قبل از جدا کردن دستگاه قابل حملتان، آن را در برنامه Files خارج کنید. در غیر این صورت ممکن است دادههایتان را از دست بدهید.</translation> <translation id="7898627924844766532">نگه داشتن در نوار ابزار</translation> <translation id="7898725031477653577">همیشه ترجمه شود</translation> -<translation id="790040513076446191">دستکاری تنظیمات مربوط به حریم خصوصی</translation> +<translation id="790040513076446191">دستکاری تنظیمات مربوط به حریمخصوصی</translation> <translation id="7903345046358933331">صفحه پاسخ نمیدهد. میتوانید صبر کنید تا پاسخ بدهد یا آن را ببندید.</translation> <translation id="7903742244674067440">گواهیهایی برای فایل دارید که اعتبارهای این گواهی را شناسایی میکنند</translation> <translation id="7903859912536385558">پایدار (آزمایشگر معتمد)</translation> @@ -6306,6 +6316,7 @@ <translation id="8419098111404128271">نتایج جستجو برای «<ph name="SEARCH_TEXT" />»</translation> <translation id="8419368276599091549">به <ph name="DEVICE_TYPE" /> خوش آمدید!</translation> <translation id="8420308167132684745">ویرایش ورودیهای واژهنامه</translation> +<translation id="8421361468937925547">زیرنویس ناشنوایان زنده (فقط انگلیسی)</translation> <translation id="8422787418163030046">سینی موجود نیست</translation> <translation id="8425213833346101688">تغییر</translation> <translation id="8425492902634685834">کوچک کردن در نوار وظیفه</translation> @@ -6334,6 +6345,7 @@ <translation id="8449036207308062757">مدیریت فضای ذخیرهسازی</translation> <translation id="8452135315243592079">سیمکارت وجود ندارد</translation> <translation id="8455026683977728932">مصورسازی ADB فعال نشد</translation> +<translation id="8456398879271637452">«زیرنویس ناشنوایان زنده» نمایان است، کلیدهای Ctrl + «عقب» یا Ctrl + «جلو» را برای تغییر مکان تمرکز فشار دهید</translation> <translation id="845702320058262034">اتصال برقرار نشد. مطمئن شوید که بلوتوث تلفن روشن است.</translation> <translation id="8457451314607652708">وارد کردن نشانکها</translation> <translation id="8458627787104127436">باز کردن همه (<ph name="URL_COUNT" /> مورد) در پنجره جدید</translation> @@ -6569,7 +6581,7 @@ <translation id="8731851055419582926">گذرواژههای بررسیشده</translation> <translation id="8732030010853991079">با کلیک کردن روی این نماد از این برنامه افزودنی استفاده کنید.</translation> <translation id="8732212173949624846">خواندن و تغییر سابقه مرورتان در همه دستگاههای وارد به سیستم خودتان</translation> -<translation id="8732844209475700754">تنظیمات بیشتر مرتبط با حریم خصوصی، امنیت و جمعآوری دادهها</translation> +<translation id="8732844209475700754">تنظیمات بیشتر مرتبط با حریمخصوصی، امنیت و جمعآوری دادهها</translation> <translation id="8734073480934656039">فعال کردن این تنظیم به برنامههای کیوسک اجازه میدهد تا به صورت خودکار در شروع به کار راهاندازی شوند.</translation> <translation id="8734674662128056360">مسدود کردن کوکیهای شخص ثالث</translation> <translation id="873545264931343897">وفتی بهروزرسانی <ph name="PLUGIN_NAME" /> تمام شد، برای فعال کردن آن، صفحه را تازهسازی کنید</translation> @@ -6844,6 +6856,7 @@ <translation id="9027459031423301635">باز کردن پیوند در &برگه جدید</translation> <translation id="9030515284705930323">سازمان شما فروشگاه Google Play را برای حسابتان فعال نکرده است. برای اطلاعات بیشتر با سرپرستتان تماس بگیرید.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> دیگر پشتیبانی نمیشود</translation> <translation id="9031549947500880805">در Google Drive پشتیبانگیری کنید. بهآسانی دادههای خود را بازیابی کنید یا هرزمان خواستید دستگاهتان را عوض کنید. نسخه پشتیبان شما حاوی دادههای برنامه است.</translation> <translation id="9033765790910064284">ادامه درهرصورت</translation> <translation id="9033857511263905942">&جایگذاری</translation> @@ -6852,9 +6865,10 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{یک بار دیگر میتوانید امتحان کنید.}one{# بار دیگر میتوانید امتحان کنید.}other{# بار دیگر میتوانید امتحان کنید.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">گذرواژه <ph name="ORIGIN" /> بهروزرسانی شود؟</translation> +<translation id="9041049756004505730">«زیرنویس ناشنوایان زنده» نمایان است، کلیدهای ⌘ + گزینه + پیکان بالا یا پایین را برای تغییر مکان تمرکز فشار دهید</translation> <translation id="9041692268811217999">دسترسی به فایلهای محلی موجود در دستگاهتان، توسط سرپرست شما غیرفعال شده است</translation> <translation id="904224458472510106">این عملیات را نمیتوان واگرد کرد</translation> -<translation id="9042893549633094279">حریم خصوصی و امنیت</translation> +<translation id="9042893549633094279">حریمخصوصی و امنیت</translation> <translation id="904451693890288097">لطفاً کلیدواژه را برای "<ph name="DEVICE_NAME" />" وارد کنید:</translation> <translation id="9044646465488564462">اتصال به شبکه انجام نشد: <ph name="DETAILS" /></translation> <translation id="9045430190527754450">نشانی وب صفحهای را که باز میکنید به Google ارسال میکند</translation> @@ -6890,6 +6904,7 @@ <translation id="9088446193279799727">Linux پیکربندی نشد. به اینترنت متصل شوید و دوباره امتحان کنید.</translation> <translation id="9088917181875854783">لطفاً تأیید کنید که این کلیدواژه در دستگاه "<ph name="DEVICE_NAME" />" نشان داده میشود:</translation> <translation id="9089416786594320554">روشهای ورودی</translation> +<translation id="909108997331068008">نمایه <ph name="EXISTING_USER" /> قبلاً به سیستم <ph name="NEW_USER" /> وارد شده است</translation> <translation id="9093429538970210897">توصیه میشود از فایلهای پشتیبان بگیرید تا اگر ارتقا انجام نشد با مشکلی مواجه نشوید. با شروع ارتقا دادن، Linux (بتا) خاموش میشود. لطفاً قبل از ادامه کار، فایلهای باز را ذخیره کنید.</translation> <translation id="9094033019050270033">بهروزرسانی گذرواژه</translation> <translation id="9094038138851891550">نام کاربری نامعتبر است</translation> @@ -6902,7 +6917,7 @@ <translation id="9102610709270966160">فعال کردن افزونه</translation> <translation id="9103868373786083162">برای دیدن سابقه، دکمه را فشار دهید تا به عقب، و به منوی بافت برگردید</translation> <translation id="9108072915170399168">تنظیم کنونی مصرف داده روی «بدون اینترنت» است</translation> -<translation id="9108692355621501797"><ph name="LINK_BEGIN" />اعلان حریم خصوصی G Suite for Education<ph name="LINK_END" /> برای این درنظر گرفته شده است تا به کاربران و والدین کمک کند متوجه شوند محصول موردنظر چه دادههایی را جمعآوری میکند، چرا این دادهها را جمعآوری میکند، و چه کاری با آنها انجام میشود.</translation> +<translation id="9108692355621501797"><ph name="LINK_BEGIN" />اعلان حریمخصوصی G Suite for Education<ph name="LINK_END" /> برای این درنظر گرفته شده است تا به کاربران و والدین کمک کند متوجه شوند محصول موردنظر چه دادههایی را جمعآوری میکند، چرا این دادهها را جمعآوری میکند، و چه کاری با آنها انجام میشود.</translation> <translation id="9108808586816295166">ممکن است DNS ایمن همیشه در دسترس نباشد</translation> <translation id="9109122242323516435">برای آزاد کردن فضا، فایلها را در حافظه دستگاه حذف کنید.</translation> <translation id="9109283579179481106">اتصال به شبکه تلفن همراه</translation> @@ -7063,5 +7078,6 @@ <translation id="994289308992179865">&حلقه</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">در حال برقراری اتصال ایمن...</translation> +<translation id="99731366405731005">برای استفاده از «همگامسازی Wi-Fi»، <ph name="LINK1_BEGIN" />همگامسازی Chrome<ph name="LINK1_END" /> را روشن کنید. <ph name="LINK2_BEGIN" />بیشتر بدانید<ph name="LINK2_END" /></translation> <translation id="998747458861718449">بازرسی</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index a8a816e..d36b36b 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">Vos favoris, votre historique et d'autres paramètres seront synchronisés avec votre compte Google.</translation> <translation id="1314565355471455267">VPN Android</translation> <translation id="131461803491198646">Réseau domestique, sans itinérance</translation> +<translation id="1315056510003830387">Non autorisé à utiliser Flash</translation> <translation id="1315144594965013365">Assurez-vous que les deux appareils sont déverrouillés, à proximité l'un de l'autre, et que le Bluetooth est activé sur chacun d'eux. Si vous partagez des fichiers à l'aide d'un Chromebook, assurez-vous que la fonctionnalité Partage à proximité est activée sur celui-ci. Pour cela, ouvrez la zone d'état en sélectionnant l'heure, puis sélectionnez "Partage à proximité".</translation> <translation id="1316136264406804862">Recherche en cours…</translation> <translation id="1316495628809031177">Synchronisation en pause</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">Activer une carte SIM physique</translation> <translation id="1387519831959169718">Pour distinguer votre navigation, vous pouvez créer un nouveau profil pour <ph name="NEW_USER" /></translation> <translation id="138784436342154190">Restaurer la page de démarrage par défaut ?</translation> +<translation id="1388253969141979417">Autorisé à utiliser votre micro</translation> <translation id="1388728792929436380">Ce <ph name="DEVICE_TYPE" /> va redémarrer lorsque les mises à jour seront installées.</translation> <translation id="1389342855416376185">Bloquer le contenu protégé</translation> <translation id="1390548061267426325">Ouvrir dans un onglet standard</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">Demander avant d'accéder</translation> <translation id="1434696352799406980">Cette fonctionnalité réinitialise la page de démarrage, la page Nouvel onglet, le moteur de recherche et les onglets épinglés. Elle désactive en outre toutes les extensions, et efface les données temporaires telles que les cookies. Vos favoris, votre historique et vos mots de passe enregistrés ne sont pas supprimés.</translation> <translation id="1434886155212424586">La page Nouvel onglet est la page d'accueil.</translation> +<translation id="1435515966666225466">Autorisé à utiliser un plug-in pour accéder à votre ordinateur</translation> <translation id="1436390408194692385">Valide pendant <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Poursuivre la configuration</translation> <translation id="1436784010935106834">Supprimé</translation> @@ -473,6 +476,7 @@ <translation id="1530838837447122178">Accéder aux paramètres de la souris et du pavé tactile</translation> <translation id="1531004739673299060">Fenêtre de l'application</translation> <translation id="1531275250079031713">Afficher la boîte de dialogue "Ajouter un réseau Wi-Fi"</translation> +<translation id="1535228823998016251">Fort</translation> <translation id="1536754031901697553">Déconnexion…</translation> <translation id="1537254971476575106">Loupe plein écran</translation> <translation id="15373452373711364">Grand curseur</translation> @@ -556,6 +560,7 @@ <translation id="1627408615528139100">Déjà téléchargé</translation> <translation id="1628948239858170093">Analyser le fichier avant de l'ouvrir ?</translation> <translation id="1629314197035607094">Le mot de passe est arrivé à expiration</translation> +<translation id="163072119192489970">Autorisé à terminer l'envoi et la réception de données</translation> <translation id="1630768113285622200">Redémarrer et continuer</translation> <translation id="1632082166874334883">Mot de passe stocké dans votre compte Google</translation> <translation id="1632803087685957583">Permet d'ajuster le taux de répétition du clavier, la prédiction de mots et bien plus</translation> @@ -753,6 +758,7 @@ <translation id="1841705068325380214">L'extension <ph name="EXTENSION_NAME" /> est désactivée</translation> <translation id="184273675144259287">Remplacer vos applications et fichiers Linux avec une sauvegarde existante</translation> <translation id="1842766183094193446">Voulez-vous vraiment activer le mode de démonstration ?</translation> +<translation id="1845727111305721124">Autorisé à lire des sons</translation> <translation id="1846308012215045257">Cliquez ici en maintenant la touche Ctrl enfoncée pour exécuter <ph name="PLUGIN_NAME" />.</translation> <translation id="1849186935225320012">Le contrôle total des appareils MIDI est activé pour cette page</translation> <translation id="1850508293116537636">Rotation &dans le sens des aiguilles d'une montre</translation> @@ -777,6 +783,7 @@ <translation id="187145082678092583">Moins d'applications</translation> <translation id="1871534214638631766">Afficher des informations associées lorsque vous effectuez un clic droit ou que vous appuyez de manière prolongée sur un contenu</translation> <translation id="1871615898038944731">Votre <ph name="DEVICE_TYPE" /> est à jour</translation> +<translation id="1874248162548993294">Autorisé à afficher des annonces</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Déplacer l'onglet vers une autre fenêtre}one{Déplacer l'onglet vers une autre fenêtre}other{Déplacer les onglets vers une autre fenêtre}}</translation> <translation id="1875386316419689002">Cet onglet est associé à un appareil HID.</translation> <translation id="1875387611427697908">Cet élément doit être installé depuis le <ph name="CHROME_WEB_STORE" /></translation> @@ -832,6 +839,7 @@ <translation id="1931152874660185993">Aucun composant installé</translation> <translation id="1932098463447129402">Pas avant le</translation> <translation id="1933809209549026293">Connectez une souris ou un clavier. Si vous utilisez un périphérique Bluetooth, assurez-vous qu'il est prêt à être associé.</translation> +<translation id="1935303383381416800">Autorisé à connaître votre position</translation> <translation id="1936931585862840749">Indiquez le nombre de copies à imprimer (1 à <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Impossible d'importer le type d'architecture de conteneur <ph name="ARCHITECTURE_CONTAINER" /> avec l'appareil <ph name="ARCHITECTURE_DEVICE" />. Vous pouvez essayer de restaurer ce conteneur dans un autre appareil ou accéder aux fichiers inclus dans l'image de ce conteneur en les ouvrant dans l'application Fichiers.</translation> <translation id="1938351510777341717">Commande externe</translation> @@ -949,6 +957,7 @@ <translation id="2090165459409185032">Pour récupérer les informations de votre compte, consultez la page google.com/accounts/recovery.</translation> <translation id="2090876986345970080">Paramètres de sécurité du système</translation> <translation id="2091887806945687916">Son</translation> +<translation id="209539936453343974">Pour configurer le contrôle parental, il faut que l'enfant dispose d'un compte Google géré par l'un des parents. Les <ph name="DEVICE_TYPE_PLURAL" /> permettent aux parents de définir des durées d'utilisation, d'approuver ou de bloquer des sites Web, et d'en faire plus avec l'application Family Link. Si un enfant doit faire ses devoirs sur des sites tels que Google Classroom, un compte scolaire peut être ajouté ultérieurement.</translation> <translation id="2096715839409389970">Effacer les cookies tiers</translation> <translation id="2097372108957554726">Vous devez vous connecter à Chrome pour enregistrer de nouveaux périphériques.</translation> <translation id="2098805196501063469">Vérifier les mots de passe restants</translation> @@ -1099,6 +1108,7 @@ <translation id="2261323523305321874">Votre administrateur a effectué une modification s'appliquant à tout le système qui désactive certains anciens profils.</translation> <translation id="2262332168014443534">Désormais, le mode simplifié accélère la navigation sur toutes les pages, y compris sur les pages HTTPS.</translation> <translation id="2262477216570151239">Délai avant répétition</translation> +<translation id="2262888617381992508">Non autorisé à lire du contenu protégé</translation> <translation id="2263189956353037928">Se déconnecter et se reconnecter</translation> <translation id="2263371730707937087">Fréquence d'actualisation de l'écran</translation> <translation id="22665427234727190">Me demander lorsqu'un site souhaite accéder aux appareils Bluetooth (recommandé)</translation> @@ -1367,6 +1377,7 @@ <translation id="2571655996835834626">Modifier les paramètres qui contrôlent l'accès des sites Web à des fonctionnalités telles que les cookies, le code JavaScript, les plug-ins, la géolocalisation, le micro, la caméra, etc.</translation> <translation id="2572032849266859634">L'accès en lecture seule à "<ph name="VOLUME_NAME" />" a été accordé.</translation> <translation id="2575247648642144396">Cette icône s'affiche lorsque l'extension peut être utilisée au sein de la page qui s'affiche actuellement. Pour utiliser cette extension, cliquez sur l'icône ou appuyez sur <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="2575441894380764255">Non autorisé à afficher des annonces intrusives ou trompeuses</translation> <translation id="257779572837908839">Configurer en tant que Chromebox pour la visioconférence</translation> <translation id="2579232805407578790">Impossible de se connecter au serveur. Veuillez vérifier votre connexion réseau, puis réessayer. Si le problème persiste, redémarrez votre Chromebook. Code d'erreur : <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">Toujours autoriser <ph name="HOST" /> à télécharger plusieurs fichiers</translation> @@ -1633,6 +1644,7 @@ <translation id="2880660355386638022">Positionnement des fenêtres</translation> <translation id="2881076733170862447">Lorsque vous cliquez sur l'extension</translation> <translation id="2882943222317434580">Dans un instant, <ph name="IDS_SHORT_PRODUCT_NAME" /> va redémarrer et être réinitialisé.</translation> +<translation id="288387288628762616">Autorisé à utiliser Flash</translation> <translation id="2885378588091291677">Gestionnaire de tâches</translation> <translation id="2885729872133513017">Un problème est survenu lors du décodage de la réponse du serveur.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1667,6 +1679,7 @@ <translation id="2923234477033317484">Supprimer ce compte</translation> <translation id="2926085873880284723">Restaurer les raccourcis par défaut</translation> <translation id="2927017729816812676">Espace de stockage du cache</translation> +<translation id="2928795416630981206">Autorisé à suivre la position de la caméra</translation> <translation id="2931157624143513983">Ajuster à la zone imprimable</translation> <translation id="2932085390869194046">Suggérer un mot de passe…</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (compte pour enfants)</translation> @@ -1674,6 +1687,7 @@ <translation id="2932883381142163287">Signaler un abus</translation> <translation id="2933632078076743449">Dernière mise à jour</translation> <translation id="2934999512438267372">Contrôle total des appareils MIDI autorisé</translation> +<translation id="2935654492420446828">Ajoutez un compte scolaire ultérieurement</translation> <translation id="2936851848721175671">Sauvegarde et restauration</translation> <translation id="2938225289965773019">Ouvrir les liens "<ph name="PROTOCOL" />"</translation> <translation id="2938845886082362843">Afficher et supprimer les données de connexion stockées sur votre clé de sécurité</translation> @@ -1777,6 +1791,7 @@ <translation id="3060379269883947824">Activer "Sélectionner pour prononcer"</translation> <translation id="3060952009917586498">Modifier la langue de l'appareil. La langue actuelle est : <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Commentaires relatifs à l'arrêt de l'onglet</translation> +<translation id="306535478112428611">Non autorisé à modifier des fichiers et des dossiers sur votre appareil</translation> <translation id="3065522099314259755">Latence de répétition du clavier</translation> <translation id="3067198179881736288">Installer l'application ?</translation> <translation id="3067198360141518313">Exécuter ce plug-in</translation> @@ -1912,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – Erreur réseau</translation> <translation id="3248902735035392926">La sécurité est essentielle. Prenez quelques instants pour <ph name="BEGIN_LINK" />vérifier vos extensions dès maintenant<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><Ne fait pas partie du certificat></translation> +<translation id="325238099842880997">Établissez des règles de base concernant l'utilisation des appareils numériques pour aider vos enfants à jouer, à explorer et à faire leurs devoirs à la maison</translation> <translation id="3253225298092156258">Indisponible</translation> <translation id="3253448572569133955">Compte inconnu</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Aucun problème de sécurité n'a été détecté}=1{{COUNT} problème de sécurité détecté}one{{COUNT} problème de sécurité détecté}other{{COUNT} problèmes de sécurité détectés}}</translation> @@ -2039,6 +2055,7 @@ <translation id="3404249063913988450">Activer l'économiseur d'écran</translation> <translation id="3405664148539009465">Personnaliser les polices</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">Autorisé à utiliser des données et des appareils de réalité virtuelle</translation> <translation id="3406396172897554194">Faites une recherche par langue ou mode de saisie</translation> <translation id="3406605057700382950">&Afficher la barre de favoris</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Cette extension peut être dangereuse}one{Cette extension peut être dangereuse}other{Ces extensions peuvent être dangereuses}}</translation> @@ -2203,6 +2220,7 @@ <translation id="3586806079541226322">Impossible d'ouvrir ce fichier</translation> <translation id="3586931643579894722">Masquer les détails</translation> <translation id="3587482841069643663">Tous</translation> +<translation id="3588790464166520201">Autorisé à installer des gestionnaires de paiement</translation> <translation id="3589766037099229847">Contenu non sécurisé bloqué</translation> <translation id="3590194807845837023">Déverrouiller le profil et relancer</translation> <translation id="3590295622232282437">Ouverture d'une session gérée.</translation> @@ -2428,6 +2446,7 @@ <translation id="3822559385185038546">Ce proxy est appliqué par votre administrateur</translation> <translation id="3823310065043511710">Espace libre recommandé pour Linux : <ph name="INSTALL_SIZE" />.</translation> <translation id="3824621460022590830">Le jeton d'enregistrement de l'appareil n'est pas valide. Veuillez contacter le propriétaire ou l'administrateur de l'appareil. Code d'erreur : <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Autorisé à utiliser des capteurs de mouvement</translation> <translation id="3826440694796503677">Votre administrateur a désactivé la fonctionnalité d'ajout d'autres comptes Google</translation> <translation id="3827306204503227641">Continuer à autoriser l'exécution hors bac à sable des plug-ins</translation> <translation id="3827774300009121996">&Plein écran</translation> @@ -2480,6 +2499,8 @@ <translation id="3873423927483480833">Afficher les codes</translation> <translation id="3873915545594852654">Un problème est survenu avec ARC++.</translation> <translation id="3874164307099183178">Activer l'Assistant Google</translation> +<translation id="3877075909000773256">Paramètres de partage à proximité pour l'appareil de <ph name="USER_NAME" /> dans le compte <ph name="USER_EMAIL" />.</translation> +<translation id="387771067039689031">Non autorisé à utiliser un plug-in pour accéder à votre ordinateur</translation> <translation id="3879748587602334249">Gestionnaire de téléchargement</translation> <translation id="3881478300875776315">Afficher moins de lignes</translation> <translation id="3882165008614329320">Vidéo existante filmée avec la caméra ou lue à partir d'un fichier</translation> @@ -2516,6 +2537,7 @@ <translation id="3919145445993746351">Pour synchroniser vos extensions sur tous vos ordinateurs, activez la synchronisation</translation> <translation id="3920504717067627103">Stratégies de certificat</translation> <translation id="392089482157167418">Activer ChromeVox (commentaires audio)</translation> +<translation id="3920909973552939961">Non autorisé à installer des gestionnaires de paiement</translation> <translation id="3923184630988645767">Consommation des données</translation> <translation id="3923676227229836009">Cette page est autorisée à afficher les fichiers</translation> <translation id="3924145049010392604">Meta</translation> @@ -2640,6 +2662,7 @@ <translation id="4058793769387728514">Vérifier le document maintenant</translation> <translation id="406070391919917862">Applications en arrière-plan</translation> <translation id="4061374428807229313">Pour partager un dossier, faites un clic droit dessus dans l'application Fichiers, puis sélectionnez "Partager avec Parallels Desktop".</translation> +<translation id="406213378265872299">Comportements personnalisés</translation> <translation id="4065876735068446555">Pour utiliser ce réseau (<ph name="NETWORK_ID" />), il est possible que vous deviez vous rendre sur la page de connexion correspondante.</translation> <translation id="4066207411788646768">Veuillez vérifier votre connexion pour afficher les imprimantes disponibles sur le réseau</translation> <translation id="4068776064906523561">Empreintes digitales enregistrées</translation> @@ -2787,6 +2810,7 @@ <translation id="425573743389990240">Taux de décharge de la batterie en watts (une valeur négative signifie que la batterie est en charge)</translation> <translation id="4256316378292851214">En&registrer la vidéo sous...</translation> <translation id="4258348331913189841">Systèmes de fichiers</translation> +<translation id="4259388776256904261">Cette opération peut prendre quelques instants</translation> <translation id="4260182282978351200">Le fichier <ph name="FILE_NAME" /> est peut-être dangereux. Souhaitez-vous l'envoyer au service Protection Avancée de Google pour analyse ? Appuyez sur Maj+F6 pour accéder à la barre de téléchargements.</translation> <translation id="4263223596040212967">Vérifiez la disposition de votre clavier et réessayez.</translation> <translation id="4263757076580287579">L'enregistrement de l'imprimante a été annulé.</translation> @@ -2894,6 +2918,7 @@ <translation id="4400632832271803360">Maintenir la touche du lanceur d'applications enfoncée pour modifier la fonction des touches de la rangée supérieure</translation> <translation id="4400963414856942668">Vous pouvez cliquer sur l'étoile pour ajouter un onglet à vos favoris</translation> <translation id="4403775189117163360">Choisir un autre dossier</translation> +<translation id="440391631796167175">Aucun mot de passe peu sécurisé trouvé</translation> <translation id="4404136731284211429">Analyser de nouveau</translation> <translation id="4404843640767531781">L'application <ph name="APP_NAME" /> est bloquée par l'un de tes parents. Tu as besoin de leur autorisation pour l'utiliser.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2938,6 +2963,7 @@ <translation id="4450974146388585462">Analyser</translation> <translation id="4451479197788154834">Votre mot de passe est enregistré sur cet appareil et dans votre compte Google</translation> <translation id="4451757071857432900">Bloqué sur les sites qui affichent des annonces intrusives ou trompeuses (recommandé)</translation> +<translation id="4453205916657964690">Masque de sous-réseau</translation> <translation id="4453946976636652378">Effectuez une recherche sur <ph name="SEARCH_ENGINE_NAME" /> ou saisissez une URL</translation> <translation id="4459169140545916303">Actif il y a <ph name="DEVICE_LAST_ACTIVATED_TIME" /> jours</translation> <translation id="4460014764210899310">Dégrouper</translation> @@ -2965,6 +2991,7 @@ <translation id="4481530544597605423">Appareils dissociés</translation> <translation id="4483049906298469269">Impossible de pinguer la passerelle du réseau non défini par défaut</translation> <translation id="4487489714832036847">Les Chromebooks utilisent des applications au lieu des logiciels traditionnels. Téléchargez des applications pour augmenter votre productivité, vous divertir et plus encore.</translation> +<translation id="4488257340342212116">Autorisé à utiliser votre caméra</translation> <translation id="4488502501195719518">Effacer toutes les données ?</translation> <translation id="449232563137139956">Les sites affichent généralement des images à des fins d'illustration, par exemple des photos dans les boutiques en ligne ou les articles d'actualités</translation> <translation id="4493468155686877504">Recommandée (<ph name="INSTALL_SIZE" />)</translation> @@ -2997,6 +3024,7 @@ <translation id="4524832533047962394">Le mode d'enregistrement proposé n'est pas compatible avec cette version du système d'exploitation. Vérifiez que vous utilisez bien la version la plus récente.</translation> <translation id="4527186207340858212">Créer un profil pour le travail ?</translation> <translation id="452750746583162491">Examiner vos données synchronisées</translation> +<translation id="4527929807707405172">Activer le défilement inversé. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Suggestion de traduction</translation> <translation id="4530494379350999373">Origine</translation> <translation id="4531924570968473143">Qui souhaitez-vous ajouter à cet appareil <ph name="DEVICE_TYPE" /> ?</translation> @@ -3017,6 +3045,7 @@ <translation id="4545028762441890696">Pour réactiver cette extension, acceptez les nouvelles autorisations :</translation> <translation id="4545759655004063573">Impossible d'enregistrer en raison d'autorisations insuffisantes. Veuillez changer d'emplacement.</translation> <translation id="4546308221697447294">Naviguez à toute vitesse avec Google Chrome</translation> +<translation id="4546345569117159016">Bouton droit</translation> <translation id="4546692474302123343">Saisie vocale avec l'Assistant Google</translation> <translation id="4547659257713117923">Aucun onglet issu d'autres appareils</translation> <translation id="4547672827276975204">Définir automatiquement</translation> @@ -3076,6 +3105,7 @@ <translation id="4608500690299898628">&Rechercher...</translation> <translation id="4608520674724523647">Illustration d'inscription réussie</translation> <translation id="4608703838363792434">Le contenu du fichier "<ph name="FILE_NAME" />" est sensible</translation> +<translation id="4609987916561367134">Autorisé à utiliser JavaScript</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> a rencontré une erreur</translation> <translation id="4610637590575890427">Vouliez-vous accéder à <ph name="SITE" /> ?</translation> <translation id="4611114513649582138">Connexion de données disponible</translation> @@ -3187,6 +3217,7 @@ <translation id="473775607612524610">Mettre à jour</translation> <translation id="473936925429402449">Sélectionné, contenu supplémentaire <ph name="CURRENT_ELEMENT" /> sur <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tickets</translation> +<translation id="4742334355511750246">Non autorisé à afficher des images</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Découvrir comment mettre à jour des applications<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Réactiver le son du site}one{Réactiver le son du site}other{Réactiver le son des sites}}</translation> <translation id="4746351372139058112">Messages</translation> @@ -3322,6 +3353,7 @@ <translation id="4908811072292128752">Ouvrez un nouvel onglet pour naviguer sur deux sites Web en même temps</translation> <translation id="4909038193460299775">Étant donné que ce compte est géré par <ph name="DOMAIN" />, vos favoris, votre historique, vos mots de passe et les autres paramètres sont effacés de cet appareil. Cependant, vos données restent stockées dans votre compte Google et peuvent être gérées dans le <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> <translation id="4912643508233590958">Sorties de veille</translation> +<translation id="4915961947098019832">Autorisé à afficher des images</translation> <translation id="4916542008280060967">Autoriser le site à modifier le fichier <ph name="FILE_NAME" /> ?</translation> <translation id="491691592645955587">Passez à un navigateur sécurisé</translation> <translation id="4917385247580444890">Très bon</translation> @@ -3409,6 +3441,7 @@ <translation id="5027550639139316293">Certificat de courrier électronique</translation> <translation id="5027562294707732951">Ajouter l'extension</translation> <translation id="5029568752722684782">Effacer la copie</translation> +<translation id="5033137252639132982">Non autorisé à utiliser des capteurs de mouvement</translation> <translation id="5033266061063942743">Formes géométriques</translation> <translation id="5036662165765606524">N'autoriser le téléchargement automatique de plusieurs fichiers pour aucun site</translation> <translation id="5037676449506322593">Tout sélectionner</translation> @@ -3458,6 +3491,7 @@ <translation id="5088172560898466307">Nom d'hôte du serveur</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 avec chiffrement RSA</translation> <translation id="5089810972385038852">État</translation> +<translation id="5090637338841444533">Non autorisé à suivre la position de la caméra</translation> <translation id="5094721898978802975">Communiquer avec les applications natives associées</translation> <translation id="5097002363526479830">Échec de la connexion au réseau "<ph name="NAME" />" : <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Outil : <ph name="PRINT_NAME" /></translation> @@ -3766,6 +3800,7 @@ <translation id="5471768120198416576">Bonjour ! Je suis la voix de votre synthèse vocale.</translation> <translation id="5472627187093107397">Enregistrer les mots de passe pour ce site</translation> <translation id="5473333559083690127">Saisir encore le nouveau code</translation> +<translation id="5481273127572794904">Non autorisé à télécharger automatiquement plusieurs fichiers</translation> <translation id="5481941284378890518">Ajouter des imprimantes à proximité</translation> <translation id="5483785310822538350">Retirer les droits d'accès aux fichiers et aux appareils</translation> <translation id="5485080380723335835">Votre <ph name="DEVICE_TYPE" /> est verrouillé pour des raisons de sécurité. Saisissez votre mot de passe manuellement pour continuer.</translation> @@ -3787,6 +3822,7 @@ <translation id="5495466433285976480">Cette option a pour effet de supprimer tous les utilisateurs, les fichiers, les données et les autres paramètres en local au prochain redémarrage. Tous les utilisateurs devront se reconnecter.</translation> <translation id="5495597166260341369">Laisser l'écran activé</translation> <translation id="5496587651328244253">Organiser</translation> +<translation id="5496730470963166430">Non autorisé à afficher des pop-ups ni à utiliser des redirections</translation> <translation id="5497251278400702716">Ce fichier</translation> <translation id="5498967291577176373">Accélérez la saisie de texte grâce aux suggestions intégrées qui s'affichent pour votre nom, votre adresse ou votre numéro de téléphone</translation> <translation id="5499313591153584299">Ce fichier peut être néfaste pour votre ordinateur.</translation> @@ -3794,6 +3830,7 @@ <translation id="5500709606820808700">Contrôle de sécurité effectué aujourd'hui</translation> <translation id="5501809658163361512">{COUNT,plural, =1{Échec de la réception de <ph name="ATTACHMENTS" /> de l'appareil "<ph name="DEVICE_NAME" />"}one{Échec de la réception de <ph name="ATTACHMENTS" /> de l'appareil "<ph name="DEVICE_NAME" />"}other{Échec de la réception de <ph name="ATTACHMENTS" /> de l'appareil "<ph name="DEVICE_NAME" />"}}</translation> <translation id="5502500733115278303">Importés depuis Firefox</translation> +<translation id="5502915260472117187">Un enfant</translation> <translation id="5503982651688210506">Continuer d'autoriser <ph name="HOST" /> à utiliser et bouger la caméra, et à utiliser le micro</translation> <translation id="5505264765875738116">Les sites ne peuvent pas vous demander l'autorisation d'envoyer des notifications</translation> <translation id="5505307013568720083">À court d'encre</translation> @@ -3881,6 +3918,7 @@ <translation id="5596627076506792578">Plus d'options</translation> <translation id="5600706100022181951">Le téléchargement de la mise à jour utilisera <ph name="UPDATE_SIZE_MB" /> Mo de données mobiles. Voulez-vous continuer ?</translation> <translation id="5601503069213153581">Code d'accès</translation> +<translation id="5601823921345337195">Non autorisé à se connecter à des appareils MIDI</translation> <translation id="5602765853043467355">Effacer les favoris, l'historique, les mots de passe et autres paramètres de cet appareil</translation> <translation id="5605623530403479164">Autres moteurs de recherche</translation> <translation id="5605758115928394442">Une notification a été envoyée à votre téléphone pour que vous puissiez confirmer votre identité.</translation> @@ -4002,6 +4040,7 @@ <translation id="5747552184818312860">Date d'expiration</translation> <translation id="5747785204778348146">Développeur (instable)</translation> <translation id="5747809636523347288">Coller et accéder à <ph name="URL" /></translation> +<translation id="5754152670305761216">Autorisé à lire du contenu protégé</translation> <translation id="5756163054456765343">C&entre d'aide</translation> <translation id="5759728514498647443">Les documents envoyés pour impression via "<ph name="APP_NAME" />" sont lisibles avec "<ph name="APP_NAME" />"</translation> <translation id="5763751966069581670">Aucun appareil USB détecté</translation> @@ -4470,6 +4509,7 @@ <translation id="6295158916970320988">Tous les sites</translation> <translation id="6295855836753816081">Enregistrement…</translation> <translation id="6298962879096096191">Utilise Google Play pour installer des applications Android</translation> +<translation id="6300177430812514606">Non autorisé à terminer l'envoi ou la réception de données</translation> <translation id="630065524203833229">&Quitter</translation> <translation id="6300718114348072351">Impossible de configurer automatiquement <ph name="PRINTER_NAME" />. Veuillez définir des paramètres avancés pour cette imprimante. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Pour distinguer votre navigation personnelle de celle associée au compte <ph name="EXISTING_USER" />, créez un profil pour <ph name="NEW_USER" /></translation> @@ -4547,6 +4587,7 @@ <translation id="6390020764191254941">Déplacer l'onglet vers une nouvelle fenêtre</translation> <translation id="6390799748543157332">Les pages que vous consultez dans cette fenêtre ne sont pas consignées dans l'historique du navigateur et ne laissent aucune autre trace sur votre ordinateur (des cookies, par exemple), une fois que vous avez fermé toutes les fenêtres Invité ouvertes. Tous les fichiers téléchargés sont toutefois conservés.</translation> <translation id="6393156038355142111">Suggérer un mot de passe sécurisé</translation> +<translation id="6393550101331051049">Autorisé à afficher du contenu non sécurisé</translation> <translation id="6395423953133416962">Envoyer les <ph name="BEGIN_LINK1" />informations système<ph name="END_LINK1" /> et les <ph name="BEGIN_LINK2" />statistiques<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">Bloquer l'accès à vos capteurs de mouvement pour certains sites</translation> <translation id="6398715114293939307">Supprimer le Google Play Store</translation> @@ -4579,6 +4620,7 @@ <translation id="6425556984042222041">Débit de la voix de la synthèse vocale</translation> <translation id="6426200009596957090">Ouvrir les paramètres ChromeVox</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> vous demande de sauvegarder vos données et de retourner ce <ph name="DEVICE_TYPE" /> sous une semaine. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Non autorisé à lire des sons</translation> <translation id="6428982734197629783">Traitement de l'image en cours</translation> <translation id="6429384232893414837">Erreur de mise à jour</translation> <translation id="6430814529589430811">Certificat unique codé Base 64 ASCII</translation> @@ -4607,6 +4649,7 @@ <translation id="6458701200018867744">Échec de l'importation (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Rechercher la sélection</translation> <translation id="6459799433792303855">Fenêtre active transférée vers un autre écran.</translation> +<translation id="6460566145397380451">Autorisé à se connecter à des appareils MIDI</translation> <translation id="6460601847208524483">Rechercher le suivant</translation> <translation id="6461170143930046705">Recherche de réseaux…</translation> <translation id="6463795194797719782">&Modifier</translation> @@ -4638,6 +4681,7 @@ <translation id="6499681088828539489">Interdire les proxys pour les réseaux partagés</translation> <translation id="650266656685499220">Pour créer des albums, accédez à Google Photos</translation> <translation id="6503077044568424649">Les + visités</translation> +<translation id="650457560773015827">Bouton gauche</translation> <translation id="6504611359718185067">Connectez-vous à Internet pour ajouter une imprimante</translation> <translation id="6506374932220792071">Signature X9.62 ECDSA avec SHA-256</translation> <translation id="6508248480704296122">En rapport avec <ph name="NAME_PH" /></translation> @@ -4839,6 +4883,7 @@ <translation id="676560328519657314">Vos modes de paiement dans Google Pay</translation> <translation id="6767566652486411142">Sélectionner une autre langue…</translation> <translation id="6767639283522617719">Impossible d'effectuer l'association au domaine. Assurez-vous que les paramètres sont corrects pour l'unité organisationnelle.</translation> +<translation id="6768034047581882264">Non autorisé à afficher du contenu non sécurisé</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> vous recommande de mettre à jour cet appareil.</translation> <translation id="6769712124046837540">Ajout d'une imprimante en cours…</translation> <translation id="6770602306803890733">Renforce votre sécurité et celle de tous les utilisateurs sur le Web</translation> @@ -4930,6 +4975,7 @@ <translation id="6865313869410766144">Données de saisie automatique</translation> <translation id="6865598234501509159">La page n'est pas en <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">Journaux d'événements WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Fort</translation> <translation id="686664946474413495">Température des couleurs</translation> <translation id="6868934826811377550">Voir les détails</translation> <translation id="6871644448911473373">Répondeur OCSP : <ph name="LOCATION" /></translation> @@ -4979,6 +5025,7 @@ <translation id="6922745772873733498">Saisissez un code pour imprimer</translation> <translation id="6923132443355966645">Défilement/Clic</translation> <translation id="6923633482430812883">Erreur lors de l'installation du partage. Veuillez vérifier que le serveur de fichiers auquel vous vous connectez est compatible avec le protocole SMB (version 2 ou ultérieure).</translation> +<translation id="6929126689972602640">Il n'est pas possible de définir un contrôle parental pour les comptes scolaires. Pour ajouter un compte scolaire afin d'accéder à Google Classroom et à d'autres sites Web pour les devoirs à la maison, connectez-vous d'abord avec le compte personnel de l'enfant. Vous pourrez ajouter le compte scolaire ultérieurement dans les paramètres.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">Clé de sécurité externe ou capteur intégré</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Une extension a été refusée}one{# extension a été refusée}other{# extensions ont été refusées}}</translation> @@ -5019,6 +5066,7 @@ <translation id="6972629891077993081">Appareils HID</translation> <translation id="6972754398087986839">Démarrer</translation> <translation id="6972887130317925583">Le mot de passe compromis a bien été changé. Sachez que vous pouvez vérifier vos mots de passe à tout moment dans <ph name="SETTINGS" />.</translation> +<translation id="697312151395002334">Autorisé à afficher des pop-ups et à utiliser des redirections</translation> <translation id="6973611239564315524">Une mise à niveau vers Debian 10 (Buster) est disponible</translation> <translation id="6974609594866392343">Mode de démonstration hors connexion</translation> <translation id="6977381486153291903">Version du micrologiciel</translation> @@ -5041,6 +5089,7 @@ <translation id="6995899638241819463">Recevoir une alerte si des mots de passe sont compromis lors d'une violation des données</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Journal d'activité</translation> <translation id="6997707937646349884">Sur vos appareils :</translation> +<translation id="6998093258894828179">Masquer les cartes</translation> <translation id="6998793565256476099">Enregistrer un appareil pour la visioconférence</translation> <translation id="6999956497249459195">Nouveau groupe</translation> <translation id="7000206553895739324">L'imprimante <ph name="PRINTER_NAME" /> est connectée, mais doit être configurée.</translation> @@ -5057,6 +5106,7 @@ <translation id="7005848115657603926">Plage de pages non valide, veuillez utiliser <ph name="EXAMPLE_PAGE_RANGE" />.</translation> <translation id="7006634003215061422">Marge inférieure</translation> <translation id="7007648447224463482">Tout ouvrir dans une nouvelle fenêtre</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> utilise votre caméra</translation> <translation id="701080569351381435">Code source</translation> <translation id="7014174261166285193">Échec de l'installation</translation> <translation id="7017004637493394352">Dites une nouvelle fois "Ok Google".</translation> @@ -5076,6 +5126,7 @@ <translation id="7038632520572155338">Switch Access</translation> <translation id="7039326228527141150">Accéder aux appareils USB de <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Ouverture de session par carte à puce Microsoft</translation> +<translation id="7039951224110875196">Créer un compte Google pour un enfant</translation> <translation id="7040230719604914234">Opérateur</translation> <translation id="7043108582968290193">Recherche terminée. Aucune application incompatible détectée.</translation> <translation id="7044124535091449260">En savoir plus sur l'accès aux sites</translation> @@ -5147,6 +5198,7 @@ <translation id="7121362699166175603">Efface l'historique et les saisies semi-automatiques dans la barre d'adresse. Votre compte Google conserve peut-être d'autres formes d'historique de navigation sur la page <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Mode développeur</translation> <translation id="7121728544325372695">Tirets longs</translation> +<translation id="7123030151043029868">Autorisé à télécharger automatiquement plusieurs fichiers</translation> <translation id="7123360114020465152">L'imprimante est désormais incompatible</translation> <translation id="7125148293026877011">Supprimer Crostini</translation> <translation id="7127980134843952133">Historique des téléchargements</translation> @@ -5161,6 +5213,7 @@ <translation id="7136984461011502314">Bienvenue dans <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Une erreur s'est produite. Veuillez réessayer en sélectionnant d'autres images.</translation> <translation id="713888829801648570">Votre mot de passe n'a pas pu être vérifié, car votre appareil est hors connexion.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> utilise votre micro</translation> <translation id="7140928199327930795">Aucun autre périphérique disponible</translation> <translation id="7141105143012495934">Échec de la connexion, car il est impossible de récupérer les informations relatives à votre compte. Veuillez contacter votre administrateur ou réessayer.</translation> <translation id="7143207342074048698">Connexion</translation> @@ -5300,6 +5353,7 @@ <translation id="7324297612904500502">Forum bêta</translation> <translation id="7325209047678309347">Bourrage papier</translation> <translation id="7325437708553334317">Extension Contraste élevé</translation> +<translation id="7326004502692201767">Configurer cet appareil <ph name="DEVICE_TYPE" /> pour un enfant</translation> <translation id="7328699668338161242">L'Assistant sait déjà reconnaître votre voix</translation> <translation id="7328867076235380839">Combinaison non valide</translation> <translation id="7329154610228416156">La connexion a échoué, car elle a été configurée pour utiliser une URL non sécurisée (<ph name="BLOCKED_URL" />). Veuillez contacter votre administrateur.</translation> @@ -5424,6 +5478,7 @@ <translation id="7465635034594602553">Un problème est survenu. Veuillez patienter quelques minutes, puis relancer <ph name="APP_NAME" />.</translation> <translation id="7465778193084373987">URL de révocation de certificat Netscape</translation> <translation id="7469894403370665791">Se connecter automatiquement à ce réseau</translation> +<translation id="7470424110735398630">Autorisé à voir votre presse-papiers</translation> <translation id="747114903913869239">Erreur : impossible de décoder l'extension.</translation> <translation id="7473891865547856676">Non, merci</translation> <translation id="747459581954555080">Tout restaurer</translation> @@ -5533,6 +5588,7 @@ <translation id="7607002721634913082">Suspendu</translation> <translation id="7608810328871051088">Préférences Android</translation> <translation id="7609148976235050828">Veuillez vous connecter à Internet, puis réessayer.</translation> +<translation id="7612655942094160088">Activation des fonctionnalités connectées du téléphone.</translation> <translation id="7614260613810441905">Vous demander lorsqu'un site souhaite modifier des fichiers ou des dossiers sur votre appareil (recommandé)</translation> <translation id="761530003705945209">Sauvegarder dans Google Drive. Restaurez vos données ou changez d'appareil facilement et à tout moment. Les données des applications sont également sauvegardées. Vos sauvegardes sont importées dans Google et chiffrées à l'aide du mot de passe de votre compte Google.</translation> <translation id="7615365294369022248">Une erreur s'est produite lors de l'ajout d'un compte</translation> @@ -5651,6 +5707,7 @@ <translation id="7732111077498238432">Le réseau est soumis à des règles</translation> <translation id="7737115349420013392">Association avec "<ph name="DEVICE_NAME" />" en cours…</translation> <translation id="7737238973539693982">Effacer Linux (Bêta)</translation> +<translation id="7737948071472253612">Non autorisé à utiliser votre caméra</translation> <translation id="7740996059027112821">Standard</translation> <translation id="7742706086992565332">Vous pouvez définir le niveau de zoom à appliquer à certains sites Web</translation> <translation id="774377079771918250">Choisir l'emplacement d'enregistrement</translation> @@ -5659,6 +5716,7 @@ <translation id="7750228210027921155">Mode PIP (Picture-in-Picture)</translation> <translation id="7751260505918304024">Tout afficher</translation> <translation id="7753735457098489144">Échec de l'installation en raison de l'espace de stockage insuffisant. Pour libérer de l'espace, supprimez des fichiers de l'espace de stockage de l'appareil.</translation> +<translation id="7754347746598978109">Non autorisé à utiliser JavaScript</translation> <translation id="7754704193130578113">Toujours demander où enregistrer les fichiers</translation> <translation id="7755287808199759310">Ton parent peut te le débloquer</translation> <translation id="7757592200364144203">Modifier le nom de l'appareil</translation> @@ -5711,6 +5769,7 @@ <translation id="7798844538707273832">Autorisation "<ph name="PERMISSION" />" bloquée automatiquement</translation> <translation id="7799299114731150374">Le fond d'écran a bien été défini.</translation> <translation id="7800518121066352902">Rotation &antihoraire</translation> +<translation id="7802539296536804623">Ne pas afficher de cartes sur cette page</translation> <translation id="780301667611848630">Non merci</translation> <translation id="7804072833593604762">Onglet fermé</translation> <translation id="7805768142964895445">État</translation> @@ -6139,6 +6198,7 @@ <translation id="826905130698769948">Certificat client non valide</translation> <translation id="8270242299912238708">Documents PDF</translation> <translation id="827097179112817503">Afficher le bouton Accueil</translation> +<translation id="8271379370373330993">Les étapes suivantes sont réservées aux parents. Vous pourrez rendre le <ph name="DEVICE_TYPE" /> à votre enfant après la configuration du compte.</translation> <translation id="8272443605911821513">Cliquer sur "Extensions" dans le menu "Autres outils" pour gérer les extensions</translation> <translation id="8274332263553132018">Caster le fichier</translation> <translation id="8274924778568117936">N'éteignez pas et ne fermez pas votre <ph name="DEVICE_TYPE" /> avant la fin de la mise à jour. Votre <ph name="DEVICE_TYPE" /> redémarrera une fois l'installation terminée.</translation> @@ -6162,6 +6222,7 @@ <translation id="8300011035382349091">Modifier le favori de cet onglet</translation> <translation id="8300374739238450534">Bleu nuit</translation> <translation id="8300849813060516376">Échec de l'opération OTASP</translation> +<translation id="8304383784961451596">Vous n'êtes pas autorisé à utiliser cet appareil. Veuillez contacter l'administrateur pour obtenir l'autorisation de connexion ou connectez-vous à l'aide d'un compte Google supervisé par Family Link.</translation> <translation id="8308179586020895837">Demander si l'accès à votre caméra est requis sur <ph name="HOST" /></translation> <translation id="830868413617744215">Bêta</translation> <translation id="8309458809024885768">Ce certificat existe déjà</translation> @@ -6175,6 +6236,7 @@ <translation id="8322814362483282060">L'accès à votre micro est bloqué pour cette page</translation> <translation id="8323167517179506834">Saisir une URL</translation> <translation id="8324784016256120271">Les sites peuvent utiliser des cookies afin de voir votre activité de navigation sur l'ensemble des différents sites (par exemple, pour personnaliser les annonces)</translation> +<translation id="8325413836429495820">Non autorisé à voir votre presse-papiers</translation> <translation id="8326478304147373412">PKCS #7, chaîne de certificats</translation> <translation id="8327039559959785305">Erreur lors de l'installation des fichiers Linux. Veuillez réessayer.</translation> <translation id="8327676037044516220">Autorisations et paramètres de contenu</translation> @@ -6224,6 +6286,7 @@ <translation id="8382913212082956454">Copi&er l'adresse e-mail</translation> <translation id="8386091599636877289">Règle introuvable.</translation> <translation id="8386903983509584791">Recherche terminée</translation> +<translation id="8387361103813440603">Non autorisé à connaître votre position</translation> <translation id="8389416080014625855">Créer un code QR pour cette page</translation> <translation id="8389492867173948260">Autorisez cette extension à lire et à modifier toutes vos données sur les sites Web que vous consultez :</translation> <translation id="8390449457866780408">Serveur indisponible.</translation> @@ -6408,6 +6471,7 @@ <translation id="8621866727807194849">Un logiciel malveillant a été détecté sur votre ordinateur. Chrome va le supprimer, restaurer vos paramètres et désactiver les extensions. Ceci permettra à votre navigateur de fonctionner à nouveau normalement.</translation> <translation id="8621979332865976405">Partager l'intégralité de votre écran</translation> <translation id="862542460444371744">&Extensions</translation> +<translation id="8625663000550647058">Non autorisé à utiliser votre micro</translation> <translation id="862727964348362408">Suspendu</translation> <translation id="862750493060684461">Cache CSS</translation> <translation id="8627706565932943526">Erreur de synchronisation.</translation> @@ -6488,6 +6552,7 @@ <translation id="8714838604780058252">Graphiques d'arrière-plan</translation> <translation id="8715480913140015283">Votre appareil photo est utilisé par un onglet d'arrière-plan</translation> <translation id="8716931980467311658">Supprimer toutes les applications et les données Linux de votre dossier "Fichiers Linux" sur cet appareil <ph name="DEVICE_TYPE" /> ?</translation> +<translation id="8717145295869185525">Non autorisé à utiliser des données et des appareils de réalité virtuelle</translation> <translation id="8717864919010420084">Copier le lien</translation> <translation id="8719472795285728850">Analyse des activités des extensions…</translation> <translation id="8719653885894320876">Échec du téléchargement de <ph name="PLUGIN_NAME" /></translation> @@ -6909,6 +6974,7 @@ <translation id="9179734824669616955">Configurer Linux (version bêta) sur votre <ph name="DEVICE_TYPE" /></translation> <translation id="9180281769944411366">Cette opération peut prendre quelques minutes. Démarrage du conteneur Linux…</translation> <translation id="9180380851667544951">Le site peut partager votre écran</translation> +<translation id="9186963452600581158">Se connecter avec le compte Google d'un enfant</translation> <translation id="9188732951356337132">Envoyer des données d'utilisation et de diagnostic. À l'heure actuelle, cet appareil envoie automatiquement à Google des données relatives aux diagnostics et à l'utilisation de l'appareil et des applications. Ces informations ne seront pas utilisées pour identifier votre enfant, mais elles nous aideront à améliorer, entre autres, la stabilité du système et des applications. Certaines données globales seront également utiles aux développeurs des applications Google et à nos partenaires, tels que les développeurs Android. Si vous activez le paramètre relatif à l'activité supplémentaire sur le Web et les applications pour votre enfant, ces données peuvent être enregistrées dans son compte Google. <ph name="BEGIN_LINK2" />En savoir plus<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPSec + Clé pré-partagée</translation> <translation id="9198090666959937775">Utiliser votre téléphone Android comme clé de sécurité</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 38377b5..5588275 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">Os teus marcadores, historiais e demais configuracións sincronizaranse coa túa conta de Google.</translation> <translation id="1314565355471455267">VPN de Android</translation> <translation id="131461803491198646">Rede doméstica, sen itinerancia</translation> +<translation id="1315056510003830387">Sitios que non poden usar Flash</translation> <translation id="1315144594965013365">Asegúrate de que os dous dispositivos estean desbloqueados, preto o un do outro e co Bluetooth activado. Se vas compartir contido cun Chromebook, asegúrate de que teña activada a función Compartir por Nearby (abre a área de estado seleccionando a hora e, a continuación, selecciona Compartir por Nearby).</translation> <translation id="1316136264406804862">Buscando...</translation> <translation id="1316495628809031177">A sincronización púxose en pausa</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">Activar SIM física</translation> <translation id="1387519831959169718">Para manter separada a túa actividade de navegación, podes crearlle un novo perfil a <ph name="NEW_USER" /></translation> <translation id="138784436342154190">Queres restaurar a páxina de inicio predeterminada?</translation> +<translation id="1388253969141979417">Sitios que poden usar o micrófono</translation> <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> reiniciarase cando se completen as actualizacións.</translation> <translation id="1389342855416376185">Bloquear contido protexido</translation> <translation id="1390548061267426325">Abrir como pestana normal</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">Preguntar antes de acceder</translation> <translation id="1434696352799406980">Esta función restablecerá a túa páxina de inicio, a páxina Nova pestana, o motor de busca e as pestanas fixadas. Tamén desactivará todas as extensións e borrará datos temporais como as cookies. Non se borrarán os teus marcadores, o historial nin os contrasinais gardados.</translation> <translation id="1434886155212424586">A páxina de inicio é a páxina da pestana nova</translation> +<translation id="1435515966666225466">Sitios que poden usar un complemento para acceder ao teu ordenador</translation> <translation id="1436390408194692385">Válido durante <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Continuar coa configuración</translation> <translation id="1436784010935106834">Eliminados</translation> @@ -472,6 +475,7 @@ <translation id="1530838837447122178">Abrir a configuración do rato e do panel táctil do dispositivo</translation> <translation id="1531004739673299060">Ventá da aplicación</translation> <translation id="1531275250079031713">Mostrar cadro de diálogo Engadir nova wifi</translation> +<translation id="1535228823998016251">Máximo</translation> <translation id="1536754031901697553">Desconectando…</translation> <translation id="1537254971476575106">Lupa de pantalla completa</translation> <translation id="15373452373711364">Cursor do rato grande</translation> @@ -555,6 +559,7 @@ <translation id="1627408615528139100">O ficheiro xa se descargou.</translation> <translation id="1628948239858170093">Queres analizar o ficheiro antes de abrilo?</translation> <translation id="1629314197035607094">Caducou o contrasinal</translation> +<translation id="163072119192489970">Sitios que poden rematar de enviar ou recibir datos</translation> <translation id="1630768113285622200">Reiniciar e continuar</translation> <translation id="1632082166874334883">Contrasinal almacenado na túa conta de Google</translation> <translation id="1632803087685957583">Permíteche axustar o índice de repetición, a predición de palabras e outras funcións do teclado</translation> @@ -752,6 +757,7 @@ <translation id="1841705068325380214">Desactivouse: <ph name="EXTENSION_NAME" /></translation> <translation id="184273675144259287">Substitúe as aplicacións e os ficheiros de Linux por unha copia de seguranza creada anteriormente</translation> <translation id="1842766183094193446">Seguro que queres activar o modo de demostración?</translation> +<translation id="1845727111305721124">Sitios que poden reproducir son</translation> <translation id="1846308012215045257">Fai clic mentres mantés premida a tecla Control para executar <ph name="PLUGIN_NAME" />.</translation> <translation id="1849186935225320012">Esta páxina ten control total sobre os dispositivos MIDI.</translation> <translation id="1850508293116537636">Xirar á &dereita</translation> @@ -776,6 +782,7 @@ <translation id="187145082678092583">Menos aplicacións</translation> <translation id="1871534214638631766">Mostra información relacionada cando manteñas premido o contido ou fagas clic co botón dereito nel</translation> <translation id="1871615898038944731">O dispositivo <ph name="DEVICE_TYPE" /> está actualizado</translation> +<translation id="1874248162548993294">Sitios que poden mostrar calquera anuncio</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Mover pestana a outra ventá}other{Mover pestanas a outra ventá}}</translation> <translation id="1875386316419689002">Esta pestana está conectada a un dispositivo HID.</translation> <translation id="1875387611427697908">Este elemento só se pode engadir desde <ph name="CHROME_WEB_STORE" /></translation> @@ -831,6 +838,7 @@ <translation id="1931152874660185993">Non se instalou ningún compoñente.</translation> <translation id="1932098463447129402">Posterior a</translation> <translation id="1933809209549026293">Conecta un rato ou teclado. Se estás utilizando un dispositivo Bluetooth, asegúrate de que está preparado para a sincronización.</translation> +<translation id="1935303383381416800">Sitios que poden ver a túa localización</translation> <translation id="1936931585862840749">Utiliza un número para indicar cantas copias se deben imprimir (de 1 a <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Non se pode importar a arquitectura do contedor de tipo <ph name="ARCHITECTURE_CONTAINER" /> con este dispositivo, que é <ph name="ARCHITECTURE_DEVICE" />. Podes tentar restaurar este contedor nun dispositivo diferente ou podes acceder aos ficheiros incluídos na imaxe deste contedor abrindo a aplicación Ficheiros.</translation> <translation id="1938351510777341717">Comando externo</translation> @@ -948,6 +956,7 @@ <translation id="2090165459409185032">Para recuperar a información da túa conta, accede a: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Configuración de seguranza do sistema</translation> <translation id="2091887806945687916">Son</translation> +<translation id="209539936453343974">Para configurar os controis parentais, o neno ou nena debe ter unha Conta de Google xestionada por un pai ou nai. O dispositivo (<ph name="DEVICE_TYPE_PLURAL" />) permítelles aos pais configurar límites de uso, aprobar ou bloquear sitios web e tirar o máximo proveito da aplicación Family Link. Se o neno ou nena necesita realizar tarefas da clase en sitios como Google Classroom, pódese engadir unha conta escolar máis tarde.</translation> <translation id="2096715839409389970">Borrar cookies de terceiros</translation> <translation id="2097372108957554726">Tes que iniciar sesión en Chrome para rexistrar novos dispositivos</translation> <translation id="2098805196501063469">Comprobar contrasinais restantes</translation> @@ -1098,6 +1107,7 @@ <translation id="2261323523305321874">O teu administrador realizou un cambio que afecta a todo o sistema e que desactiva algúns perfís antigos.</translation> <translation id="2262332168014443534">Co modo básico a navegación é máis rápida en todas as páxinas, incluso en HTTPS.</translation> <translation id="2262477216570151239">Tempo antes da repetición</translation> +<translation id="2262888617381992508">Sitios que non poden reproducir contido protexido</translation> <translation id="2263189956353037928">Pechar sesión e volver iniciala</translation> <translation id="2263371730707937087">Taxa de actualización da pantalla</translation> <translation id="22665427234727190">Preguntar cando un sitio queira acceder aos dispositivos Bluetooth (recomendado)</translation> @@ -1366,6 +1376,7 @@ <translation id="2571655996835834626">Cambiar as opcións de configuración que controlan o acceso dos sitios web a funcións como as cookies, o JavaScript, os complementos, a xeolocalización, o micrófono, a cámara etc.</translation> <translation id="2572032849266859634">Concedeuse acceso de só lectura a <ph name="VOLUME_NAME" />.</translation> <translation id="2575247648642144396">Esta icona estará visible cando a extensión se poida utilizar na páxina actual. Para utilizar a extensión, fai clic na icona ou preme <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="2575441894380764255">Sitios que non poden mostrar anuncios enganosos ou intrusivos</translation> <translation id="257779572837908839">Configurar como Chromebox para reunións</translation> <translation id="2579232805407578790">Non se puido establecer conexión co servidor. Comproba a conexión de rede e téntao de novo. Se o problema persiste, reinicia o Chromebook. Código de erro: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">Permitir sempre a <ph name="HOST" /> descargar varios ficheiros</translation> @@ -1632,6 +1643,7 @@ <translation id="2880660355386638022">Colocación das ventás</translation> <translation id="2881076733170862447">Cando fagas clic na extensión</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> reiniciarase e restablecerase momentaneamente</translation> +<translation id="288387288628762616">Sitios que poden usar Flash</translation> <translation id="2885378588091291677">Xestor de tarefas</translation> <translation id="2885729872133513017">Produciuse un problema ao descodificar a resposta do servidor.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1666,6 +1678,7 @@ <translation id="2923234477033317484">Quitar esta conta</translation> <translation id="2926085873880284723">Restablecer atallos predeterminados</translation> <translation id="2927017729816812676">Almacenamento da caché</translation> +<translation id="2928795416630981206">Sitios que poden facer un seguimento da posición da cámara</translation> <translation id="2931157624143513983">Axustar á área de impresión</translation> <translation id="2932085390869194046">Suxerir contrasinal…</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (conta para nenos)</translation> @@ -1673,6 +1686,7 @@ <translation id="2932883381142163287">Informar de uso inadecuado</translation> <translation id="2933632078076743449">Última actualización</translation> <translation id="2934999512438267372">Permitiuse o control total dos dispositivos MIDI</translation> +<translation id="2935654492420446828">Engade unha conta de centro educativo máis tarde</translation> <translation id="2936851848721175671">Copia de seguranza e restauración</translation> <translation id="2938225289965773019">Abrir <ph name="PROTOCOL" /> ligazóns</translation> <translation id="2938845886082362843">Consulta e elimina os datos de inicio de sesión almacenados na túa chave de seguranza</translation> @@ -1776,6 +1790,7 @@ <translation id="3060379269883947824">Activar Escoitar selección</translation> <translation id="3060952009917586498">Cambia o idioma do dispositivo. Actualmente úsase o <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Suxestións sobre o peche da pestana.</translation> +<translation id="306535478112428611">Sitios que non poden editar ficheiros ou cartafoles do teu dispositivo</translation> <translation id="3065522099314259755">Latencia de repetición do teclado</translation> <translation id="3067198179881736288">Queres instalar a aplicación?</translation> <translation id="3067198360141518313">Executar este plugin</translation> @@ -1911,6 +1926,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" />: erro da rede</translation> <translation id="3248902735035392926">A seguranza é importante. Dedica un momento a <ph name="BEGIN_LINK" />comprobar as túas extensións agora<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><Non forma parte do certificado></translation> +<translation id="325238099842880997">Define normas básicas para axudar aos nenos a xogar, a explorar o mundo dixital e a realizar tarefas escolares na casa</translation> <translation id="3253225298092156258">Non dispoñible</translation> <translation id="3253448572569133955">Conta descoñecida</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Non se atopou ningún problema de seguranza}=1{Atopouse {COUNT} problema de seguranza}other{Atopáronse {COUNT} problemas de seguranza}}</translation> @@ -2038,6 +2054,7 @@ <translation id="3404249063913988450">Activar protector de pantalla</translation> <translation id="3405664148539009465">Personalizar tipos de letra</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">Sitios que poden usar datos e dispositivos de realidade virtual</translation> <translation id="3406396172897554194">Busca un idioma ou o nome dun método de introdución de texto</translation> <translation id="3406605057700382950">&Mostrar a barra de marcadores</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Esta extensión pode ser perigosa}other{Estas extensións poden ser perigosas}}</translation> @@ -2202,6 +2219,7 @@ <translation id="3586806079541226322">Non se pode abrir este ficheiro</translation> <translation id="3586931643579894722">Ocultar detalles</translation> <translation id="3587482841069643663">Todos</translation> +<translation id="3588790464166520201">Sitios que poden instalar controladores de pagos</translation> <translation id="3589766037099229847">Contido non seguro bloqueado</translation> <translation id="3590194807845837023">Desbloquear perfil e volver iniciar</translation> <translation id="3590295622232282437">Introducindo sesión xestionada.</translation> @@ -2427,6 +2445,7 @@ <translation id="3822559385185038546">A configuración deste proxy aplícaa o teu administrador</translation> <translation id="3823310065043511710">É recomendable dispoñer polo menos de <ph name="INSTALL_SIZE" /> de espazo para Linux.</translation> <translation id="3824621460022590830">O token de inscrición do dispositivo non é válido. Ponte en contacto co propietario ou co administrador do dispositivo. Código de erro: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Sitios que poden usar sensores de movemento</translation> <translation id="3826440694796503677">O teu administrador desactivou a opción de engadir máis Contas de Google</translation> <translation id="3827306204503227641">Continuar permitindo os plugins non incluídos no illamento de procesos</translation> <translation id="3827774300009121996">&Pantalla completa</translation> @@ -2479,6 +2498,8 @@ <translation id="3873423927483480833">Mostrar PIN</translation> <translation id="3873915545594852654">Produciuse un problema con ARC++.</translation> <translation id="3874164307099183178">Activar Asistente de Google</translation> +<translation id="3877075909000773256">Configuración de Compartir por Nearby para o dispositivo de <ph name="USER_NAME" />, compartindo contido desde a conta <ph name="USER_EMAIL" />.</translation> +<translation id="387771067039689031">Sitios que non poden usar un complemento para acceder ao teu ordenador</translation> <translation id="3879748587602334249">Administrador de descargas</translation> <translation id="3881478300875776315">Mostrar menos liñas</translation> <translation id="3882165008614329320">Vídeo existente da cámara ou do ficheiro</translation> @@ -2515,6 +2536,7 @@ <translation id="3919145445993746351">Para dispoñer das túas extensións en todos os ordenadores, activa a sincronización</translation> <translation id="3920504717067627103">Políticas de certificados</translation> <translation id="392089482157167418">Activar ChromeVox (mensaxes de voz)</translation> +<translation id="3920909973552939961">Sitios que non poden instalar controladores de pagos</translation> <translation id="3923184630988645767">Uso de datos</translation> <translation id="3923676227229836009">Esta páxina ten permiso para ver os ficheiros</translation> <translation id="3924145049010392604">Meta</translation> @@ -2639,6 +2661,7 @@ <translation id="4058793769387728514">Comprobar documento agora</translation> <translation id="406070391919917862">Aplicacións en segundo plano</translation> <translation id="4061374428807229313">Para compartir un cartafol, fai clic co botón dereito sobre el na aplicación Ficheiros e despois selecciona Compartir con Parallels Desktop.</translation> +<translation id="406213378265872299">Comportamentos personalizados</translation> <translation id="4065876735068446555">É posible que a rede que utilizas (<ph name="NETWORK_ID" />) solicite o acceso á súa páxina de inicio de sesión.</translation> <translation id="4066207411788646768">Comproba a conexión para ver as impresoras dispoñibles na túa rede.</translation> <translation id="4068776064906523561">Impresións dixitais gardadas</translation> @@ -2786,6 +2809,7 @@ <translation id="425573743389990240">Taxa de descarga da batería en watts (se o valor é negativo, significa que a batería se está cargando)</translation> <translation id="4256316378292851214">Gardar &vídeo como...</translation> <translation id="4258348331913189841">Sistemas de ficheiros</translation> +<translation id="4259388776256904261">Este proceso pode tardar uns intres</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> pode ser perigoso. Queres envialo á Protección avanzada de Google para analizalo? Preme Maiús + F6 para acceder á área da barra de descargas.</translation> <translation id="4263223596040212967">Comproba a distribución do teclado e téntao de novo.</translation> <translation id="4263757076580287579">Cancelouse o rexistro da impresora.</translation> @@ -2893,6 +2917,7 @@ <translation id="4400632832271803360">Mantén premida a tecla do menú de aplicacións para cambiar o comportamento das teclas da fila superior</translation> <translation id="4400963414856942668">Podes facer clic na estrela para engadir unha pestana aos marcadores</translation> <translation id="4403775189117163360">Escoller un cartafol diferente</translation> +<translation id="440391631796167175">Non se atopou ningún contrasinal pouco seguro</translation> <translation id="4404136731284211429">Buscar de novo</translation> <translation id="4404843640767531781">O teu pai ou nai bloqueou <ph name="APP_NAME" />. Pídelle permiso para utilizar esta aplicación.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg e *.png</translation> @@ -2937,6 +2962,7 @@ <translation id="4450974146388585462">Diagnosticar</translation> <translation id="4451479197788154834">O contrasinal está gardado neste dispositivo e na túa Conta de Google</translation> <translation id="4451757071857432900">Bloqueados en sitios que mostran anuncios intrusivos ou enganosos (recomendado)</translation> +<translation id="4453205916657964690">Máscara de subrede</translation> <translation id="4453946976636652378">Fai unha busca en <ph name="SEARCH_ENGINE_NAME" /> ou escribe un URL</translation> <translation id="4459169140545916303">Dispositivo activo hai <ph name="DEVICE_LAST_ACTIVATED_TIME" /> días</translation> <translation id="4460014764210899310">Desagrupar</translation> @@ -2964,6 +2990,7 @@ <translation id="4481530544597605423">Dispositivos desincronizados</translation> <translation id="4483049906298469269">Produciuse un erro ao facer ping na pasarela de rede non predeterminada</translation> <translation id="4487489714832036847">Os Chromebooks utilizan aplicacións en lugar de software tradicional. Obtén aplicacións de produtividade, entretemento e moito máis.</translation> +<translation id="4488257340342212116">Sitios que poden usar a cámara</translation> <translation id="4488502501195719518">Queres borrar todos os datos?</translation> <translation id="449232563137139956">Os sitios adoitan mostrar imaxes (por exemplo, fotos de tendas en liña ou de artigos de noticias)</translation> <translation id="4493468155686877504">Recomendado (<ph name="INSTALL_SIZE" />)</translation> @@ -2996,6 +3023,7 @@ <translation id="4524832533047962394">O modo de inscrición indicado non é compatible con esta versión do sistema operativo. Asegúrate de dispoñer da versión máis recente.</translation> <translation id="4527186207340858212">Queres crear un novo perfil para o traballo?</translation> <translation id="452750746583162491">Revisar os datos sincronizados</translation> +<translation id="4527929807707405172">Activar desprazamento inverso. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Suxestión de tradución</translation> <translation id="4530494379350999373">Orixe</translation> <translation id="4531924570968473143">Queres engadir estas persoas ao <ph name="DEVICE_TYPE" />?</translation> @@ -3016,6 +3044,7 @@ <translation id="4545028762441890696">Para volver activar a extensión, acepta os novos permisos</translation> <translation id="4545759655004063573">Non se pode gardar debido a que non hai permisos suficientes. Garda o contido noutra localización.</translation> <translation id="4546308221697447294">Navega rápido con Google Chrome</translation> +<translation id="4546345569117159016">Botón dereito</translation> <translation id="4546692474302123343">Entrada de voz do Asistente de Google</translation> <translation id="4547659257713117923">Non hai pestanas doutros dispositivos</translation> <translation id="4547672827276975204">Definir automaticamente</translation> @@ -3075,6 +3104,7 @@ <translation id="4608500690299898628">&Buscar...</translation> <translation id="4608520674724523647">Ilustración de inscrición correcta</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> inclúe contido confidencial</translation> +<translation id="4609987916561367134">Sitios que poden usar JavaScript</translation> <translation id="4610162781778310380">O complemento <ph name="PLUGIN_NAME" /> detectou un erro</translation> <translation id="4610637590575890427">Talvez querías acceder a <ph name="SITE" />?</translation> <translation id="4611114513649582138">Está dispoñible a conexión de datos</translation> @@ -3186,6 +3216,7 @@ <translation id="473775607612524610">Actualizar</translation> <translation id="473936925429402449">Botón de contido extra (seleccionado): <ph name="CURRENT_ELEMENT" /> de <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tíckets</translation> +<translation id="4742334355511750246">Sitios que non poden mostrar imaxes</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Máis información sobre como actualizar as aplicacións<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Activar o son do sitio}other{Activar o son dos sitios}}</translation> <translation id="4746351372139058112">Mensaxes</translation> @@ -3321,6 +3352,7 @@ <translation id="4908811072292128752">Abre unha nova pestana para explorar dous sitios á vez</translation> <translation id="4909038193460299775">Debido a que esta conta está xestionada por <ph name="DOMAIN" />, borraranse os favoritos, o historial, os contrasinais e outras configuracións deste dispositivo. Non obstante, os teus datos permanecerán almacenados na túa conta de Google e poden xestionarse a través do <ph name="BEGIN_LINK" />Panel de control de Google<ph name="END_LINK" />.</translation> <translation id="4912643508233590958">Activacións desde o modo inactivo</translation> +<translation id="4915961947098019832">Sitios que poden mostrar imaxes</translation> <translation id="4916542008280060967">Queres permitir que o sitio edite <ph name="FILE_NAME" />?</translation> <translation id="491691592645955587">Cambiar a un navegador seguro</translation> <translation id="4917385247580444890">Forte</translation> @@ -3408,6 +3440,7 @@ <translation id="5027550639139316293">Certificado de correo electrónico</translation> <translation id="5027562294707732951">Engadir extensión</translation> <translation id="5029568752722684782">Borrar copia</translation> +<translation id="5033137252639132982">Sitios que non poden usar sensores de movemento</translation> <translation id="5033266061063942743">Figuras xeométricas</translation> <translation id="5036662165765606524">Non permitir que ningún sitio descargue varios ficheiros automaticamente</translation> <translation id="5037676449506322593">Seleccionar todo</translation> @@ -3457,6 +3490,7 @@ <translation id="5088172560898466307">Nome do host do servidor</translation> <translation id="5088534251099454936">PKCS n.º 1 SHA-512 con cifrado RSA</translation> <translation id="5089810972385038852">Estado</translation> +<translation id="5090637338841444533">Sitios que non poden facer un seguimento da posición da cámara</translation> <translation id="5094721898978802975">Comunicarse con aplicacións nativas de cooperación</translation> <translation id="5097002363526479830">Erro ao conectar coa rede "<ph name="NAME" />": <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Ferramenta: <ph name="PRINT_NAME" /></translation> @@ -3765,6 +3799,7 @@ <translation id="5471768120198416576">Ola! Son a túa voz de síntese de voz.</translation> <translation id="5472627187093107397">Gardar os contrasinais deste sitio</translation> <translation id="5473333559083690127">Volve introducir o novo PIN</translation> +<translation id="5481273127572794904">Sitios que non poden descargar automaticamente varios ficheiros</translation> <translation id="5481941284378890518">Engadir impresoras que estean cerca</translation> <translation id="5483785310822538350">Revogar acceso a ficheiros e dispositivos</translation> <translation id="5485080380723335835">O <ph name="DEVICE_TYPE" /> está bloqueado por cuestións de seguranza. Para continuar, introduce manualmente o teu contrasinal.</translation> @@ -3786,6 +3821,7 @@ <translation id="5495466433285976480">Esta acción eliminará todos os usuarios, ficheiros, datos e outras configuracións locais a próxima vez que reinicies. Todos os usuarios deberán iniciar sesión de novo.</translation> <translation id="5495597166260341369">Manter a pantalla activada</translation> <translation id="5496587651328244253">Organizar</translation> +<translation id="5496730470963166430">Sitios que non poden mostrar ventás emerxentes ou usar redireccións</translation> <translation id="5497251278400702716">Este ficheiro</translation> <translation id="5498967291577176373">Escribe máis rápido coas suxestións inseridas para o teu nome, enderezo ou número de teléfono</translation> <translation id="5499313591153584299">É posible que este ficheiro sexa daniño para o teu ordenador.</translation> @@ -3793,6 +3829,7 @@ <translation id="5500709606820808700">A comprobación de seguranza executouse hoxe</translation> <translation id="5501809658163361512">{COUNT,plural, =1{Produciuse un erro ao recibir <ph name="ATTACHMENTS" /> deste dispositivo: <ph name="DEVICE_NAME" />}other{Produciuse un erro ao recibir <ph name="ATTACHMENTS" /> deste dispositivo: <ph name="DEVICE_NAME" />}}</translation> <translation id="5502500733115278303">Importados desde Firefox</translation> +<translation id="5502915260472117187">Un neno ou nena</translation> <translation id="5503982651688210506">Seguir permitindo que <ph name="HOST" /> use e mova a túa cámara, e que use o teu micrófono</translation> <translation id="5505264765875738116">Os sitios non poden pedir permiso para enviar notificacións</translation> <translation id="5505307013568720083">Non hai tinta</translation> @@ -3880,6 +3917,7 @@ <translation id="5596627076506792578">Máis opcións</translation> <translation id="5600706100022181951">Para descargar a actualización utilizaranse <ph name="UPDATE_SIZE_MB" /> MB de datos móbiles. Queres continuar?</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5601823921345337195">Sitios que non poden conectarse a dispositivos MIDI</translation> <translation id="5602765853043467355">Borrar marcadores, historial, contrasinais etc., deste dispositivo</translation> <translation id="5605623530403479164">Outros motores de busca</translation> <translation id="5605758115928394442">Enviouse unha notificación ao teu teléfono para confirmar a túa identidade.</translation> @@ -4000,6 +4038,7 @@ <translation id="5747552184818312860">Data de caducidade</translation> <translation id="5747785204778348146">Programador: inestable</translation> <translation id="5747809636523347288">Pegar e ir a <ph name="URL" /></translation> +<translation id="5754152670305761216">Sitios que poden reproducir contido protexido</translation> <translation id="5756163054456765343">C&entro de axuda</translation> <translation id="5759728514498647443">Os documentos que envías a imprimir a través de <ph name="APP_NAME" /> pódense ler con <ph name="APP_NAME" />.</translation> <translation id="5763751966069581670">Non se encontrou ningún dispositivo USB</translation> @@ -4468,6 +4507,7 @@ <translation id="6295158916970320988">Todos os sitios</translation> <translation id="6295855836753816081">Gardando...</translation> <translation id="6298962879096096191">Utiliza Google Play para instalar aplicacións Android</translation> +<translation id="6300177430812514606">Sitios que non poden rematar de enviar ou recibir datos</translation> <translation id="630065524203833229">Sa&ír</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> non se puido configurar automaticamente. Indica os detalles avanzados da impresora. <ph name="LINK_BEGIN" />Máis información<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Para separar a actividade de navegación persoal da de <ph name="EXISTING_USER" />, créalle un perfil novo a <ph name="NEW_USER" /></translation> @@ -4545,6 +4585,7 @@ <translation id="6390020764191254941">Mover pestana a ventá nova</translation> <translation id="6390799748543157332">As páxinas que ves nesta ventá non aparecerán no historial do navegador e non deixarán outros rastros no ordenador, como cookies, despois de pechar todas as ventás abertas da sesión de invitado. Non obstante, conservaranse todos os ficheiros que descargues.</translation> <translation id="6393156038355142111">Suxerir contrasinal seguro</translation> +<translation id="6393550101331051049">Sitios que poden mostrar contido inseguro</translation> <translation id="6395423953133416962">Enviar <ph name="BEGIN_LINK1" />información do sistema<ph name="END_LINK1" /> e <ph name="BEGIN_LINK2" />métricas<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">Impedir que os sitios utilicen sensores de movemento</translation> <translation id="6398715114293939307">Eliminar Google Play Store</translation> @@ -4577,6 +4618,7 @@ <translation id="6425556984042222041">Velocidade da síntese de voz</translation> <translation id="6426200009596957090">Abrir configuración de ChromeVox</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> require que fagas unha copia de seguranza dos teus datos e que devolvas este <ph name="DEVICE_TYPE" /> no prazo de 1 semana.<ph name="LINK_BEGIN" />Ver detalles<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Sitios que non poden reproducir son</translation> <translation id="6428982734197629783">Procesando imaxe</translation> <translation id="6429384232893414837">Produciuse un erro na actualización</translation> <translation id="6430814529589430811">ASCII con codificación Base64, certificado único</translation> @@ -4605,6 +4647,7 @@ <translation id="6458701200018867744">Produciuse un erro ao cargar o rexistro (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Utilizar selección para buscar</translation> <translation id="6459799433792303855">A ventá activa moveuse a outra pantalla.</translation> +<translation id="6460566145397380451">Sitios que poden conectarse a dispositivos MIDI</translation> <translation id="6460601847208524483">Buscar seguinte</translation> <translation id="6461170143930046705">Buscando redes…</translation> <translation id="6463795194797719782">&Editar</translation> @@ -4636,6 +4679,7 @@ <translation id="6499681088828539489">Non permitir proxys para redes compartidas</translation> <translation id="650266656685499220">Para crear álbums, vai a Google Fotos</translation> <translation id="6503077044568424649">Máis visitados</translation> +<translation id="650457560773015827">Botón esquerdo</translation> <translation id="6504611359718185067">Conéctate a Internet para engadir unha impresora</translation> <translation id="6506374932220792071">Sinatura X9.62 ECDSA con SHA-256</translation> <translation id="6508248480704296122">Relacionada con <ph name="NAME_PH" /></translation> @@ -4837,6 +4881,7 @@ <translation id="676560328519657314">Os teus métodos de pago en Google Pay</translation> <translation id="6767566652486411142">Escoller outro idioma…</translation> <translation id="6767639283522617719">O dispositivo non se puido vincular ao dominio. Asegúrate de que a configuración sexa correcta para a unidade organizativa.</translation> +<translation id="6768034047581882264">Sitios que non poden mostrar contido inseguro</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> recomenda que actualices este dispositivo.</translation> <translation id="6769712124046837540">Engadindo impresora...</translation> <translation id="6770602306803890733">Mellora a túa seguranza e a do resto dos usuarios da Web</translation> @@ -4928,6 +4973,7 @@ <translation id="6865313869410766144">Autocompletar datos do formulario</translation> <translation id="6865598234501509159">A páxina non está en <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">Rexistros de eventos WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Mínimo</translation> <translation id="686664946474413495">Temperatura da cor</translation> <translation id="6868934826811377550">Consultar detalles</translation> <translation id="6871644448911473373">Dispositivo de resposta OCSP: <ph name="LOCATION" /></translation> @@ -4977,6 +5023,7 @@ <translation id="6922745772873733498">Introduce un PIN para poder imprimir</translation> <translation id="6923132443355966645">Desprazar/facer clic</translation> <translation id="6923633482430812883">Produciuse un erro ao montar o sistema compartido. Comproba que o servidor de ficheiros ao que te conectas sexa compatible con SMB versión 2 ou posteriores.</translation> +<translation id="6929126689972602640">As contas de centro educativo non admiten controis parentais. Para engadir unha conta de centro educativo co fin de acceder a Google Classroom e outros sitios web para realizar tarefas escolares na casa, primeiro inicia sesión coa conta persoal do neno ou nena. Podes engadir a conta do centro educativo máis tarde na configuración.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">Chave de seguranza externa ou sensor integrado</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Rexeitouse 1 extensión}other{Rexeitáronse # extensións}}</translation> @@ -5017,6 +5064,7 @@ <translation id="6972629891077993081">Dispositivos de interface humana</translation> <translation id="6972754398087986839">Introdución</translation> <translation id="6972887130317925583">Cambiouse correctamente o contrasinal vulnerado. Comproba os teus contrasinais cando queiras en <ph name="SETTINGS" />.</translation> +<translation id="697312151395002334">Sitios que poden mostrar ventás emerxentes e usar redireccións</translation> <translation id="6973611239564315524">Está dispoñible unha actualización a Debian 10 (Buster)</translation> <translation id="6974609594866392343">Modo de demostración sen conexión</translation> <translation id="6977381486153291903">Revisión do firmware</translation> @@ -5039,6 +5087,7 @@ <translation id="6995899638241819463">Avisarte se os teus contrasinais están en risco debido a unha violación da seguranza dos datos</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> (rexistro de actividade)</translation> <translation id="6997707937646349884">Nos teus dispositivos:</translation> +<translation id="6998093258894828179">Ocultar tarxetas</translation> <translation id="6998793565256476099">Rexistra o dispositivo para realizar videoconferencias</translation> <translation id="6999956497249459195">Novo grupo</translation> <translation id="7000206553895739324">A impresora <ph name="PRINTER_NAME" /> está conectada, pero é necesario configurala</translation> @@ -5055,6 +5104,7 @@ <translation id="7005848115657603926">Intervalo de páxina non válido. Utiliza <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">Marxe inferior</translation> <translation id="7007648447224463482">Abrir todos os marcadores nunha nova ventá</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> está usando a cámara</translation> <translation id="701080569351381435">Ver fonte</translation> <translation id="7014174261166285193">Non se puido efectuar a instalación.</translation> <translation id="7017004637493394352">Di "Ok Google" de novo</translation> @@ -5074,6 +5124,7 @@ <translation id="7038632520572155338">Acceso con interruptores</translation> <translation id="7039326228527141150">Acceder a dispositivos USB de <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Inicio de sesión na tarxeta intelixente de Microsoft</translation> +<translation id="7039951224110875196">Crear Conta de Google infantil</translation> <translation id="7040230719604914234">Operador</translation> <translation id="7043108582968290193">Feito! Non se atoparon aplicacións incompatibles.</translation> <translation id="7044124535091449260">Máis información sobre o acceso aos sitios</translation> @@ -5145,6 +5196,7 @@ <translation id="7121362699166175603">Borra o historial e os completados automáticos na barra de enderezos. É posible que a túa conta de Google teña outras formas do historial de navegación en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Modo de programador</translation> <translation id="7121728544325372695">Trazos intelixentes</translation> +<translation id="7123030151043029868">Sitios que poden descargar automaticamente varios ficheiros</translation> <translation id="7123360114020465152">A impresora xa non é compatible</translation> <translation id="7125148293026877011">Eliminar Crostini</translation> <translation id="7127980134843952133">Historial de descargas</translation> @@ -5159,6 +5211,7 @@ <translation id="7136984461011502314">Dámosche a benvida a <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Produciuse un erro. Escolle outras imaxes e téntao de novo.</translation> <translation id="713888829801648570">Non se puido verificar o teu contrasinal debido a que estás sen conexión.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> está usando o micrófono</translation> <translation id="7140928199327930795">Non hai ningún outro dispositivo dispoñible.</translation> <translation id="7141105143012495934">Produciuse un erro no inicio de sesión porque non se puideron recuperar os datos da túa conta. Ponte en contacto co administrador ou téntao de novo.</translation> <translation id="7143207342074048698">Conectando</translation> @@ -5298,6 +5351,7 @@ <translation id="7324297612904500502">Foro de Chrome Beta</translation> <translation id="7325209047678309347">O papel está atascado</translation> <translation id="7325437708553334317">Extensión de alto contraste</translation> +<translation id="7326004502692201767">Configurar este dispositivo (<ph name="DEVICE_TYPE" />) para un neno ou unha nena</translation> <translation id="7328699668338161242">O teu Asistente xa pode recoñecer a túa voz</translation> <translation id="7328867076235380839">A combinación non é válida</translation> <translation id="7329154610228416156">Produciuse un erro no inicio de sesión porque se configurou para utilizar un URL non seguro (<ph name="BLOCKED_URL" />). Ponte en contacto co administrador.</translation> @@ -5422,6 +5476,7 @@ <translation id="7465635034594602553">Produciuse un erro. Agarda uns poucos minutos e executa <ph name="APP_NAME" /> de novo.</translation> <translation id="7465778193084373987">URL de revogación do certificado de Netscape</translation> <translation id="7469894403370665791">Conectarse automaticamente a esta rede</translation> +<translation id="7470424110735398630">Sitios que poden consultar o portapapeis</translation> <translation id="747114903913869239">Erro: non se puido descodificar a extensión</translation> <translation id="7473891865547856676">Non, grazas</translation> <translation id="747459581954555080">Restablecer todo</translation> @@ -5531,6 +5586,7 @@ <translation id="7607002721634913082">En pausa</translation> <translation id="7608810328871051088">Preferencias de Android</translation> <translation id="7609148976235050828">Conéctate a Internet e téntao de novo.</translation> +<translation id="7612655942094160088">Activar funcións do teléfono conectado.</translation> <translation id="7614260613810441905">Preguntar cando un sitio queira modificar ficheiros ou cartafoles do teu dispositivo (recomendado)</translation> <translation id="761530003705945209">Facer copia de seguranza en Drive. Restaura os teus datos facilmente ou cambia de dispositivo en calquera momento. A túa copia de seguranza inclúe os datos das aplicacións. As copias de seguranza cárganse en Google e encríptanse co contrasinal da túa Conta de Google.</translation> <translation id="7615365294369022248">Produciuse un erro ao engadir unha conta</translation> @@ -5649,6 +5705,7 @@ <translation id="7732111077498238432">A rede está controlada pola política</translation> <translation id="7737115349420013392">Vinculando co dispositivo (<ph name="DEVICE_NAME" />)...</translation> <translation id="7737238973539693982">Eliminar Linux (beta)</translation> +<translation id="7737948071472253612">Sitios que non poden usar a cámara</translation> <translation id="7740996059027112821">Estándar</translation> <translation id="7742706086992565332">Podes definir o nivel de zoom para determinados sitios web</translation> <translation id="774377079771918250">Escolle onde gardar o contido</translation> @@ -5657,6 +5714,7 @@ <translation id="7750228210027921155">Pantalla superposta</translation> <translation id="7751260505918304024">Mostrar todo</translation> <translation id="7753735457098489144">Produciuse un erro ao realizar a instalación por falta de espazo de almacenamento. Para liberar espazo, elimina ficheiros do almacenamento do dispositivo.</translation> +<translation id="7754347746598978109">Sitios que non poden usar JavaScript</translation> <translation id="7754704193130578113">Preguntar onde gardar cada ficheiro antes de descargalo</translation> <translation id="7755287808199759310">O teu pai ou nai non o pode desbloquear por ti</translation> <translation id="7757592200364144203">Cambiar nome do dispositivo</translation> @@ -5709,6 +5767,7 @@ <translation id="7798844538707273832">Bloqueouse automaticamente o permiso: <ph name="PERMISSION" /></translation> <translation id="7799299114731150374">O fondo de pantalla estableceuse correctamente</translation> <translation id="7800518121066352902">Xirar á &esquerda</translation> +<translation id="7802539296536804623">Non se mostran tarxetas nesta páxina</translation> <translation id="780301667611848630">Non, grazas</translation> <translation id="7804072833593604762">Pestana pechada</translation> <translation id="7805768142964895445">Estado</translation> @@ -6136,6 +6195,7 @@ <translation id="826905130698769948">O certificado de cliente non é válido</translation> <translation id="8270242299912238708">Documentos PDF</translation> <translation id="827097179112817503">Mostrar botón de inicio</translation> +<translation id="8271379370373330993">Se es pai ou nai, os seguintes pasos están pensados para ti. Podes devolverlle o dispositivo (<ph name="DEVICE_TYPE" />) ao neno ou nena despois de configurar a conta.</translation> <translation id="8272443605911821513">Fai clic en Extensións no menú Máis ferramentas para xestionar as túas extensións.</translation> <translation id="8274332263553132018">Emitir ficheiro</translation> <translation id="8274924778568117936">Non apagues nin peches o dispositivo <ph name="DEVICE_TYPE" /> ata que a actualización finalice. O <ph name="DEVICE_TYPE" /> reiniciarase tras finalizar a instalación.</translation> @@ -6159,6 +6219,7 @@ <translation id="8300011035382349091">Editar o marcador desta pestana</translation> <translation id="8300374739238450534">Azul noite</translation> <translation id="8300849813060516376">Erro de OTASP</translation> +<translation id="8304383784961451596">Non tes autorización para usar este dispositivo. Se queres obter permiso para iniciar sesión, ponte en contacto co administrador. Tamén podes iniciar sesión cunha conta de Google supervisada por Family Link.</translation> <translation id="8308179586020895837">Preguntar se <ph name="HOST" /> quere acceder á túa cámara</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">O certificado xa existe</translation> @@ -6172,6 +6233,7 @@ <translation id="8322814362483282060">Bloqueouse o acceso desta páxina ao teu micrófono.</translation> <translation id="8323167517179506834">Escribe o URL</translation> <translation id="8324784016256120271">Os sitios poden utilizar cookies para ver a túa actividade de navegación en distintos sitios (por exemplo, para personalizar os anuncios)</translation> +<translation id="8325413836429495820">Sitios que non poden consultar o portapapeis</translation> <translation id="8326478304147373412">PKCS n.º 7, cadea de certificados</translation> <translation id="8327039559959785305">Produciuse un erro ao montar ficheiros Linux. Téntao de novo.</translation> <translation id="8327676037044516220">Permisos e configuración de contido</translation> @@ -6221,6 +6283,7 @@ <translation id="8382913212082956454">Copiar &enderezo de correo electrónico</translation> <translation id="8386091599636877289">Non se atopou a política.</translation> <translation id="8386903983509584791">Finalizou a busca</translation> +<translation id="8387361103813440603">Sitios que non poden ver a túa localización</translation> <translation id="8389416080014625855">Crear código QR para esta páxina</translation> <translation id="8389492867173948260">Permitir que esta extensión lea e cambie todos os datos dos sitios web que visites:</translation> <translation id="8390449457866780408">Servidor non dispoñible.</translation> @@ -6405,6 +6468,7 @@ <translation id="8621866727807194849">O teu ordenador ten software daniño. Chrome está quitándoo, restaurando a configuración e desactivando as extensións. Despois, o navegador funcionará con normalidade de novo.</translation> <translation id="8621979332865976405">Compartir a pantalla completa</translation> <translation id="862542460444371744">&Extensións</translation> +<translation id="8625663000550647058">Sitios que non poden usar o micrófono</translation> <translation id="862727964348362408">Suspendido</translation> <translation id="862750493060684461">Caché de CSS</translation> <translation id="8627706565932943526">Erro de sincronización</translation> @@ -6485,6 +6549,7 @@ <translation id="8714838604780058252">Gráficos en segundo plano</translation> <translation id="8715480913140015283">Hai unha pestana en segundo plano que está utilizando a cámara</translation> <translation id="8716931980467311658">Queres eliminar todas as aplicacións e datos de Linux do cartafol de ficheiros de Linux deste dispositivo <ph name="DEVICE_TYPE" />?</translation> +<translation id="8717145295869185525">Sitios que non poden usar datos e dispositivos de realidade virtual</translation> <translation id="8717864919010420084">Copiar ligazón</translation> <translation id="8719472795285728850">Escoitando actividades das extensións…</translation> <translation id="8719653885894320876">Non se puido descargar <ph name="PLUGIN_NAME" /></translation> @@ -6906,6 +6971,7 @@ <translation id="9179734824669616955">Configura Linux (beta) no teu dispositivo <ph name="DEVICE_TYPE" /></translation> <translation id="9180281769944411366">Este proceso pode tardar uns minutos. Iniciando o contedor de Linux.</translation> <translation id="9180380851667544951">O sitio pode compartir a túa pantalla</translation> +<translation id="9186963452600581158">Iniciar sesión cunha Conta de Google infantil</translation> <translation id="9188732951356337132">Enviar datos de uso e de diagnóstico. Este dispositivo envía automaticamente datos de diagnóstico e de uso do dispositivo e das aplicacións a Google. Esta información non se utilizará para identificar o teu fillo, senón co obxectivo de aumentar a estabilidade do sistema e das aplicacións, e de realizar outras melloras. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android. Se está activada a opción de configuración Actividade web e das aplicacións adicional para o teu fillo, estes datos pódense gardar na súa Conta de Google <ph name="BEGIN_LINK2" />Máis información<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + clave precompartida</translation> <translation id="9198090666959937775">Utilizar o teléfono Android como chave de seguranza</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index bbdd2b7..3d188e6e 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">Domena <ph name="DOMAIN" /> onemogućila je ADB otklanjanje pogrešaka. Zbog toga će se <ph name="DEVICE_TYPE" /> vratiti na zadano za 24 sata. Sigurnosno kopirajte sve datoteke koje želite zadržati.</translation> <translation id="1977965994116744507">Približite telefon da biste otključali <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Buduća ažuriranja softvera i sigurnosna ažuriranja instalirat će se automatski.</translation> +<translation id="1978057560491495741">Ukloni adresu</translation> <translation id="1979095679518582070">Isključivanje te značajke ne utječe na mogućnost uređaja da šalje informacije koje su potrebne za ključne usluge kao što su ažuriranja sustava i sigurnost.</translation> <translation id="1979280758666859181">Prelazite na kanal sa starijom verzijom usluge <ph name="PRODUCT_NAME" />. Promjena kanala primijenit će se kada se verzija kanala bude podudarala s verzijom koja je trenutačno instalirana na vašem uređaju.</translation> <translation id="197989455406964291">KDC ne podržava vrstu enkripcije</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Ova postavka pripada korisniku <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Uredi naziv mape</translation> <translation id="2225864335125757863">Odmah promijenite te zaporke kako bi vaš račun ostao zaštićen:</translation> +<translation id="2226204716217107988">Prijeći na drugi profil?</translation> <translation id="2226449515541314767">Za tu je web-lokaciju blokiran potpuni nadzor nad MIDI uređajima.</translation> <translation id="2226907662744526012">Otključaj automatski nakon unosa PIN-a</translation> <translation id="222704500187107962">Ova će se iznimka automatski ukloniti nakon što napustite trenutačnu anonimnu sesiju</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Konfiguriraj mrežu</translation> <translation id="230927227160767054">Ova stranica želi instalirati rukovatelja usluge.</translation> <translation id="2309620859903500144">Web-lokaciji je zabranjen pristup vašim senzorima pokreta ili svjetla.</translation> +<translation id="2312219318583366810">URL stranice</translation> <translation id="2314165183524574721">Trenutačna postavka vidljivosti je skrivena</translation> <translation id="2314774579020744484">Jezik korišten pri prevođenju stranica</translation> <translation id="2315414688463285945">Pogreška tijekom konfiguracije Linux datoteka. Pokušajte ponovo.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Za taj sigurnosni ključ nema podataka za prijavu</translation> <translation id="3714195043138862580">Taj je uređaj stavljen u stanje oduzetog pristupa.</translation> <translation id="3714633008798122362">web-kalendar</translation> +<translation id="3715954932774762075">Aplikacije i web-lokacije koje su dostupne na više jezika koristit će prvi podržani jezik s ovog popisa. Te se postavke sinkroniziraju s postavkama vašeg preglednika. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Početna stranica</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Vi i Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Postojeći videozapis s kamere ili iz datoteke</translation> <translation id="3886446263141354045">Zahtjev za pristup toj web-lokaciji poslan je korisniku <ph name="NAME" /></translation> <translation id="3888550877729210209">Izrada bilježaka pomoću aplikacije <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Uključite Chrome sinkronizaciju kako biste upotrebljavali Wi-Fi sinkronizaciju</translation> <translation id="3892414795099177503">Dodaj OpenVPN/L2TP...</translation> <translation id="3893536212201235195">čitati i mijenjati vaše postavke pristupačnosti</translation> <translation id="3893630138897523026">ChromeVox (govorne povratne informacije)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Označi sve kartice</translation> <translation id="5449716055534515760">Close Win&dow (Zatvori prozor)</translation> <translation id="5452974209916053028">Trenutačna anonimna sesija: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Oblačić s naslovom premješten je <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% preko, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% prema dolje</translation> <translation id="5454166040603940656">uz <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Nije važeće</translation> <translation id="5457459357461771897">čitati i brisati fotografije, glazbu i druge medije s vašeg računala</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Izbriši oznake, povijest, zaporke i druge podatke s ovog uređaja</translation> <translation id="5605623530403479164">Ostale tražilice</translation> <translation id="5605758115928394442">Poslali smo obavijest na vaš telefon kako bismo potvrdili da ste to vi.</translation> +<translation id="560834977503641186">Wi-Fi sinkronizacija, saznajte više</translation> <translation id="5608580678041221894">Dodirnite sljedeće tipke da biste prilagodili ili pomaknuli područje za izrezivanje</translation> <translation id="5609231933459083978">Čini se da je ova aplikacija nevažeća.</translation> <translation id="5610038042047936818">Prijeđi na način fotoaparata</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Konfigurirajte ethernet</translation> <translation id="5842497610951477805">Omogućivanje Bluetootha</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Vidljivi automatski titlovi, pritisnite F6 kako biste prebacili fokus</translation> <translation id="5844574845205796324">Predložite novi sadržaj za istraživanje</translation> <translation id="5846200638699387931">Sintaktička pogreška odnosa: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instaliranje ažuriranja i aplikacija. Nastavljanjem prihvaćate da ovaj uređaj također može automatski preuzimati i instalirati ažuriranja i aplikacije s Googlea te od vašeg mobilnog operatera i proizvođača uređaja, možda i koristeći mobilne podatke. Neke od tih aplikacija mogu nuditi kupnje putem aplikacije.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413">Stranica <ph name="FULLSCREEN_ORIGIN" /> sada je na cijelom zaslonu.</translation> <translation id="7340650977506865820">Web-lokacija dijeli vaš zaslon</translation> <translation id="7341834142292923918">Želi pristup ovoj web-lokaciji</translation> +<translation id="7343372807593926528">Prije slanja povratnih informacija opišite problem.</translation> <translation id="7345706641791090287">Potvrdite zaporku</translation> <translation id="7346909386216857016">Dobro, shvaćam</translation> <translation id="7347452120014970266">Izbrisat će se svi podaci i kolačići koje je spremila web-lokacija <ph name="ORIGIN_NAME" /> i njezine instalirane aplikacije</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA ili RSN)</translation> <translation id="7819992334107904369">Chrome sinkronizacija</translation> <translation id="782057141565633384">K&opiraj adresu videozapisa</translation> +<translation id="7822187537422052256">Jeste li sigurni da želite ukloniti tu adresu?</translation> <translation id="7824864914877854148">Sigurnosno kopiranje ne može se dovršiti zbog pogreške</translation> <translation id="7825666486843191125">Svi kontakti u vašoj blizini kad je zaslon otključan</translation> <translation id="782590969421016895">Upotrijebi trenutačne stranice</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Rezultati pretraživanja za "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Dobro došli na svoj <ph name="DEVICE_TYPE" /> uređaj!</translation> <translation id="8420308167132684745">Uredi unose u rječniku</translation> +<translation id="8421361468937925547">Automatski titlovi (samo na engleskom jeziku)</translation> <translation id="8422787418163030046">Nedostaje ladica</translation> <translation id="8425213833346101688">Promijeni</translation> <translation id="8425492902634685834">Pričvrsti na alatnu traku</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Upravljanje pohranom</translation> <translation id="8452135315243592079">Nedostaje SIM kartica</translation> <translation id="8455026683977728932">Omogućavanje ADB ilustracije nije uspjelo.</translation> +<translation id="8456398879271637452">Vidljivi su automatski titlovi, pritisnite Ctrl + natrag ili Ctrl + naprijed da biste prebacili fokus</translation> <translation id="845702320058262034">Povezivanje nije uspjelo. Provjerite je li Bluetooth na telefonu uključen.</translation> <translation id="8457451314607652708">Uvezi oznake</translation> <translation id="8458627787104127436">Otvori sve (<ph name="URL_COUNT" />) u novom prozoru</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Otvori vezu u novoj &kartici</translation> <translation id="9030515284705930323">Vaša organizacija nije omogućila Trgovinu Google Play za vaš račun. Više informacija zatražite od administratora.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Dodatak <ph name="PLUGIN_NAME" /> više nije podržan</translation> <translation id="9031549947500880805">Sigurnosno kopiranje na Google disku. Jednostavno vratite svoje podatke ili promijenite uređaj u bilo kojem trenutku. Sigurnosna kopija uključuje podatke aplikacija.</translation> <translation id="9033765790910064284">Ipak nastavi</translation> <translation id="9033857511263905942">&Zalijepi</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Preostao vam je još jedan pokušaj.}one{Preostao vam je još # pokušaj.}few{Preostala su vam još # pokušaja.}other{Preostalo vam je još # pokušaja.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Želite li ažurirati zaporku za <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Vidljivi su automatski titlovi, pritisnite ⌘ + Option + strelica gore ili strelica dolje da biste prebacili fokus</translation> <translation id="9041692268811217999">Pristup lokalnim datotekama na vašem računalu onemogućio je administrator</translation> <translation id="904224458472510106">Ta se radnja ne može poništiti</translation> <translation id="9042893549633094279">Privatnost i sigurnost</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">Konfiguriranje Linuxa nije uspjelo. Povežite se s internetom i pokušajte ponovo.</translation> <translation id="9088917181875854783">Potvrdite da je ova zaporka prikazana na uređaju "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Načini unosa</translation> +<translation id="909108997331068008">Profil korisnika <ph name="EXISTING_USER" /> već je prijavljen na <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Preporučuje se sigurnosno kopiranje datoteka u slučaju nemogućnosti dovršetka nadogradnje. Pokretanje nadogradnje uzrokovat će isključivanje Linuxa (Beta). Prije nastavka spremite otvorene datoteke.</translation> <translation id="9094033019050270033">Ažuriraj zaporku</translation> <translation id="9094038138851891550">Korisničko ime nije važeće</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">&Petlja</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Uspostavljanje sigurne veze...</translation> +<translation id="99731366405731005">Uključite <ph name="LINK1_BEGIN" />Chrome sinkronizaciju<ph name="LINK1_END" /> da biste upotrebljavali Wi-Fi sinkronizaciju. <ph name="LINK2_BEGIN" />Saznajte više<ph name="LINK2_END" /></translation> <translation id="998747458861718449">P&rovjeri</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 49491837..87b617d 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">A(z) <ph name="DOMAIN" /> letiltotta az ADB-hibakeresést. Ezzel visszaállítja <ph name="DEVICE_TYPE" /> eszközét 24 órán belül. Készítsen biztonsági másolatot a megőrizni kívánt fájlokról.</translation> <translation id="1977965994116744507">Tegye közelebb a telefonját a(z) <ph name="DEVICE_TYPE" /> zárolásának feloldásához.</translation> <translation id="1978006917103730774">A továbbiakban a biztonsági és szoftverfrissítéseket automatikusan telepíti a rendszer.</translation> +<translation id="1978057560491495741">Cím eltávolítása</translation> <translation id="1979095679518582070">A funkció kikapcsolása nem korlátozza ezt az eszközt abban, hogy elküldje az alapvető fontosságú szolgáltatásokkal (pl. a rendszerfrissítésekkel és -biztonsággal) kapcsolatos információkat.</translation> <translation id="1979280758666859181">A(z) <ph name="PRODUCT_NAME" /> egy régebbi verziójával vált csatornát. A csatornamódosítás akkor lép érvénybe, amikor a csatorna verziószáma megegyezik az eszközön jelenleg telepített verziószámmal.</translation> <translation id="197989455406964291">A KDC nem támogatja a titkosítástípust</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Ez a beállítás a következő fiókhoz tartozik: <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Mappa nevének szerkesztése</translation> <translation id="2225864335125757863">A fiókbiztonság megőrzése érdekében azonnal módosítsa ezeket a jelszavakat:</translation> +<translation id="2226204716217107988">Biztosan másik profilra vált?</translation> <translation id="2226449515541314767">Ennél a webhelynél le van tiltva a MIDI-eszközökhöz való teljes hozzáférés.</translation> <translation id="2226907662744526012">Automatikus feloldás a PIN-kód megadása után</translation> <translation id="222704500187107962">Ezt a kivételt automatikusan eltávolítja a rendszer, miután Ön kilép a jelenlegi inkognitó módú munkamenetből</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Hálózat beállítása</translation> <translation id="230927227160767054">Ez az oldal szolgáltatáskezelőt akar telepíteni.</translation> <translation id="2309620859903500144">Ennél a webhelynél le van tiltva a hozzáférés a felhasználó mozgás- vagy fényérzékelőihez.</translation> +<translation id="2312219318583366810">Oldal URL-címe</translation> <translation id="2314165183524574721">Jelenlegi láthatósági beállítás: rejtett</translation> <translation id="2314774579020744484">Oldalak fordításánál használt nyelv</translation> <translation id="2315414688463285945">Hiba történt a Linux-fájlok konfigurálása során. Próbálja újra.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Ezen a biztonsági hardverkulcson nincsenek bejelentkezési adatok</translation> <translation id="3714195043138862580">Ez a demó módú eszköz leválasztott állapotba került.</translation> <translation id="3714633008798122362">internetes naptár</translation> +<translation id="3715954932774762075">A több nyelven is rendelkezésre álló alkalmazások és webhelyek az ezen a listán szereplő első támogatott nyelvet használják majd. Ezeket a preferenciákat a rendszer szinkronizálja a böngésző beállításaival. <ph name="BEGIN_LINK_LEARN_MORE" />További információ<ph name="END_LINK_LEARN_MORE" />.</translation> <translation id="3719826155360621982">Kezdőlap</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Ön és a Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Meglévő videó a fényképezőgépről vagy fájlból</translation> <translation id="3886446263141354045">Webhely-hozzáférési kérelme elküldve a következő személynek: <ph name="NAME" /></translation> <translation id="3888550877729210209">Jegyzetek készítése a(z) <ph name="LOCK_SCREEN_APP_NAME" /> alkalmazással</translation> +<translation id="3890064827463908288">A Wi-Fi-szinkronizálás használatához kapcsolja be a Chrome-szinkronizálás funkciót</translation> <translation id="3892414795099177503">OpenVPN/L2TP hozzáadása…</translation> <translation id="3893536212201235195">Hozzáférhetőségi beállításainak olvasása és módosítása</translation> <translation id="3893630138897523026">ChromeVox (beszélt visszajelzés)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Összes lap hozzáadása a könyvjelzőkhöz</translation> <translation id="5449716055534515760">A&blak bezárása</translation> <translation id="5452974209916053028">Jelenlegi munkamenet inkognitó módban: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" /> és <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">A feliratok buborékja a következő helyre került a képernyőn: <ph name="POSITION_ON_SCREEN_FROM_LEFT" />%-kal jobbra, <ph name="POSITION_ON_SCREEN_FROM_TOP" />%-kal lefelé</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> szolgáltatóval</translation> <translation id="5457113250005438886">Érvénytelen</translation> <translation id="5457459357461771897">Fotók, zeneszámok és más médiatartalmak olvasása és törlése a számítógépről</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Könyvjelzők, előzmények, jelszavak és egyebek törlése erről az eszközről</translation> <translation id="5605623530403479164">További keresők</translation> <translation id="5605758115928394442">A rendszer értesítést küldött az Ön telefonjára, hogy segítségével igazolhassa személyazonosságát.</translation> +<translation id="560834977503641186">Wi-Fi szinkronizálása, további információ</translation> <translation id="5608580678041221894">Az alábbi kulcsokra koppintva módosítható vagy mozgatható a körbevágás területe</translation> <translation id="5609231933459083978">Úgy tűnik, hogy az alkalmazás érvénytelen.</translation> <translation id="5610038042047936818">Váltás kamera módra</translation> @@ -4113,6 +4120,7 @@ <translation id="5841270259333717135">Ethernet konfigurálása</translation> <translation id="5842497610951477805">Bluetooth bekapcsolása</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Az Élő feliratozás megjelent, a fókuszváltáshoz nyomja meg az F6 billentyűt</translation> <translation id="5844574845205796324">Javasoljon új felfedeznivaló tartalmakat</translation> <translation id="5846200638699387931">Relációs szintaktikai hiba: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Alkalmazások és frissítések telepítése. Ha továbblép, azzal elfogadja, hogy az eszköz automatikusan letölthet és telepíthet frissítéseket és alkalmazásokat a Google-tól, az Ön szolgáltatójától és az eszköz gyártójától, akár mobiladat-kapcsolaton keresztül is. Egyes alkalmazások alkalmazáson belüli vásárlásokat kínálhatnak.</translation> @@ -5074,7 +5082,7 @@ <translation id="6979044105893951891">Felügyelt vendég-munkafolyamatok indítása és befejezése</translation> <translation id="6979440798594660689">Némítás (alapértelmezett)</translation> <translation id="6979737339423435258">Mindenkori</translation> -<translation id="6981982820502123353">Kisegítő opciók</translation> +<translation id="6981982820502123353">Kisegítő lehetőségek</translation> <translation id="6983507711977005608">Lecsatlakozás az Azonnali internetmegosztás hálózatáról</translation> <translation id="6983783921975806247">Regisztrált OID</translation> <translation id="6984299437918708277">Válassza ki a bejelentkezési képernyőn a fiókja mellett megjeleníteni kívánt képet</translation> @@ -5369,6 +5377,7 @@ <translation id="7340431621085453413">A <ph name="FULLSCREEN_ORIGIN" /> most teljes képernyős nézetben van.</translation> <translation id="7340650977506865820">A webhely megosztja a képernyőjét</translation> <translation id="7341834142292923918">Hozzáférést kér ehhez a webhelyhez</translation> +<translation id="7343372807593926528">Visszajelzés küldése előtt ismertesse a problémát.</translation> <translation id="7345706641791090287">Erősítse meg a jelszót</translation> <translation id="7346909386216857016">Rendben, értem</translation> <translation id="7347452120014970266">Ezzel törli a(z) <ph name="ORIGIN_NAME" /> és a telepített alkalmazásai által tárolt összes adatot és cookie-t</translation> @@ -5785,6 +5794,7 @@ <translation id="7819857487979277519">PSK (WPA vagy RSN)</translation> <translation id="7819992334107904369">Chrome-szinkronizálás</translation> <translation id="782057141565633384">Vide&ocím másolása</translation> +<translation id="7822187537422052256">Biztosan eltávolítja ezt a címet?</translation> <translation id="7824864914877854148">Hiba történt, ezért nem lehetett végrehajtani a biztonsági mentést.</translation> <translation id="7825666486843191125">Az Ön közelében lévő összes névjegy, ha a képernyőjének zárolása fel van oldva</translation> <translation id="782590969421016895">Jelenlegi oldalak használata</translation> @@ -6310,6 +6320,7 @@ <translation id="8419098111404128271">Keresési találatok a következőre: <ph name="SEARCH_TEXT" /></translation> <translation id="8419368276599091549">A(z) <ph name="DEVICE_TYPE" /> üdvözli!</translation> <translation id="8420308167132684745">Szótár címszavainak szerkesztése</translation> +<translation id="8421361468937925547">Élő feliratozás (csak angol nyelven)</translation> <translation id="8422787418163030046">Hiányzó tálca</translation> <translation id="8425213833346101688">Módosítás</translation> <translation id="8425492902634685834">A program rögzítése a tálcán</translation> @@ -6338,6 +6349,7 @@ <translation id="8449036207308062757">Tárhely kezelése</translation> <translation id="8452135315243592079">Hiányzó SIM-kártya</translation> <translation id="8455026683977728932">Illusztráció: Nem sikerült az ADB engedélyezése</translation> +<translation id="8456398879271637452">Az Élő feliratozás megjelent, a fókuszváltáshoz nyomja le Ctrl + Vissza vagy a Ctrl + Előre billentyűkombinációt</translation> <translation id="845702320058262034">Nem sikerült kapcsolódni. A telefon Bluetooth funkciójának bekapcsolt állapotban kell lennie.</translation> <translation id="8457451314607652708">Könyvjelzők importálása</translation> <translation id="8458627787104127436">Összes (<ph name="URL_COUNT" />) megnyitása új ablakban</translation> @@ -6848,6 +6860,7 @@ <translation id="9027459031423301635">Link megnyitása új &lapon</translation> <translation id="9030515284705930323">Szervezete még nem engedélyezte a Google Play Áruház szolgáltatást a fiókjánál. További tájékoztatásért forduljon rendszergazdájához.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">A(z) <ph name="PLUGIN_NAME" /> érték már nem támogatott</translation> <translation id="9031549947500880805">Biztonsági mentés a Google Drive-ra. Bármikor könnyedén visszaállíthatja adatait vagy lecserélheti eszközét. A biztonsági másolat tartalmazza az alkalmazásadatokat.</translation> <translation id="9033765790910064284">Ennek ellenére folytatom</translation> <translation id="9033857511263905942">&Beillesztés</translation> @@ -6856,6 +6869,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{1 kísérlete maradt.}other{# kísérlete maradt.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Szeretné frissíteni a(z) <ph name="ORIGIN" /> jelszavát?</translation> +<translation id="9041049756004505730">Az Élő feliratozás megjelent, a fókuszváltáshoz nyomja le a ⌘ + Option + felfelé mutató nyíl vagy lefelé mutató nyíl billentyűkombinációt</translation> <translation id="9041692268811217999">A rendszergazda letiltotta a számítógép helyi fájljaihoz való hozzáférést</translation> <translation id="904224458472510106">Ez a művelet nem vonható vissza</translation> <translation id="9042893549633094279">Adatvédelem és biztonság</translation> @@ -6894,6 +6908,7 @@ <translation id="9088446193279799727">Nem sikerült a Linux konfigurálása. Csatlakozzon az internethez, és próbálja újra.</translation> <translation id="9088917181875854783">Kérjük, erősítse meg, hogy ez az azonosítókulcs jelenik meg a(z) "<ph name="DEVICE_NAME" />" nevű eszközön:</translation> <translation id="9089416786594320554">Beviteli módszerek</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> profilja már be van jelentkezve ebbe a fiókba: <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Ajánlott a fájlokról biztonsági másolatot készíteni arra az esetre, ha nem lehet befejezni a frissítést. A frissítés elindításával a Linux (Beta) leáll. A folytatás előtt mentse a megnyitott fájlokat.</translation> <translation id="9094033019050270033">Jelszó frissítése</translation> <translation id="9094038138851891550">Érvénytelen felhasználónév</translation> @@ -7067,5 +7082,6 @@ <translation id="994289308992179865">&Ismétlés</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Biztonságos kapcsolat létesítése...</translation> +<translation id="99731366405731005">A Wi-Fi-szinkronizálás használatához kapcsolja be a <ph name="LINK1_BEGIN" />Chrome-szinkronizálás<ph name="LINK1_END" /> funkciót. <ph name="LINK2_BEGIN" />További információ<ph name="LINK2_END" />.</translation> <translation id="998747458861718449">&Vizsgálat</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 31f7986..b0b31d1 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">Bookmark, histori, dan setelan lainnya akan disinkronkan ke Akun Google.</translation> <translation id="1314565355471455267">VPN Android</translation> <translation id="131461803491198646">Jaringan asal, tidak dalam jelajah</translation> +<translation id="1315056510003830387">Tidak diizinkan menggunakan Flash</translation> <translation id="1315144594965013365">Pastikan kedua perangkat tidak terkunci, berdekatan, serta mengaktifkan Bluetooth. Jika Anda berbagi dengan Chromebook, pastikan Chromebook mengaktifkan fitur Berbagi Langsung (buka area status dengan memilih waktu, lalu pilih Berbagi Langsung).</translation> <translation id="1316136264406804862">Menelusuri...</translation> <translation id="1316495628809031177">Sinkronisasi dijeda</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">Aktifkan SIM fisik</translation> <translation id="1387519831959169718">Untuk memisahkan penjelajahan, Anda dapat membuat profil baru untuk <ph name="NEW_USER" /></translation> <translation id="138784436342154190">Pulihkan halaman awal default?</translation> +<translation id="1388253969141979417">Diizinkan menggunakan mikrofon Anda</translation> <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> akan dimulai ulang saat update selesai.</translation> <translation id="1389342855416376185">Blokir konten yang dilindungi</translation> <translation id="1390548061267426325">Buka sebagai Tab Biasa</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">Tanyakan sebelum mengakses</translation> <translation id="1434696352799406980">Fitur ini akan menyetel ulang halaman mulai, halaman tab baru, mesin telusur, dan tab terpasang. Fitur ini juga akan menonaktifkan semua ekstensi dan menghapus data sementara seperti cookie. Bookmark, histori, dan sandi yang tersimpan tidak akan dihapus.</translation> <translation id="1434886155212424586">Beranda adalah halaman Tab Baru</translation> +<translation id="1435515966666225466">Diizinkan menggunakan plugin untuk mengakses komputer Anda</translation> <translation id="1436390408194692385">Berlaku selama <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Lanjutkan penyiapan</translation> <translation id="1436784010935106834">Dihapus</translation> @@ -473,6 +476,7 @@ <translation id="1530838837447122178">Buka setelan perangkat touchpad dan mouse</translation> <translation id="1531004739673299060">Jendela Aplikasi</translation> <translation id="1531275250079031713">Tampilkan dialog 'Tambahkan Wi-Fi baru'</translation> +<translation id="1535228823998016251">Nyaring</translation> <translation id="1536754031901697553">Memutuskan sambungan...</translation> <translation id="1537254971476575106">Kaca pembesar layar penuh</translation> <translation id="15373452373711364">Kursor mouse besar</translation> @@ -556,6 +560,7 @@ <translation id="1627408615528139100">Sudah didownload</translation> <translation id="1628948239858170093">Pindai file sebelum membuka?</translation> <translation id="1629314197035607094">Sandi kedaluwarsa</translation> +<translation id="163072119192489970">Diizinkan menyelesaikan pengiriman atau penerimaan data</translation> <translation id="1630768113285622200">Mulai ulang dan lanjutkan</translation> <translation id="1632082166874334883">Sandi yang disimpan di Akun Google Anda</translation> <translation id="1632803087685957583">Memungkinkan Anda menyesuaikan tingkat pengulangan keyboard, prediksi kata, dan lainnya</translation> @@ -753,6 +758,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> nonaktif</translation> <translation id="184273675144259287">Ganti file dan aplikasi Linux Anda dengan cadangan sebelumnya</translation> <translation id="1842766183094193446">Yakin ingin mengaktifkan mode demo?</translation> +<translation id="1845727111305721124">Diizinkan memutar suara</translation> <translation id="1846308012215045257">Kontrol-klik untuk menjalankan <ph name="PLUGIN_NAME" /></translation> <translation id="1849186935225320012">Halaman ini memiliki kontrol penuh perangkat MIDI.</translation> <translation id="1850508293116537636">Putar &searah jarum jam</translation> @@ -777,6 +783,7 @@ <translation id="187145082678092583">Lebih sedikit aplikasi</translation> <translation id="1871534214638631766">Menampilkan info terkait saat Anda mengklik kanan atau menekan lama konten</translation> <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> Anda adalah versi terbaru</translation> +<translation id="1874248162548993294">Diizinkan menampilkan iklan apa pun</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Pindahkan tab ke jendela lain}other{Pindahkan beberapa tab ke jendela lain}}</translation> <translation id="1875386316419689002">Tab ini terhubung dengan perangkat HID.</translation> <translation id="1875387611427697908">Ini hanya dapat ditambahkan dari <ph name="CHROME_WEB_STORE" /></translation> @@ -832,6 +839,7 @@ <translation id="1931152874660185993">Tidak ada komponen yang dipasang.</translation> <translation id="1932098463447129402">Tidak Sebelum</translation> <translation id="1933809209549026293">Sambungkan mouse atau keyboard. Jika Anda menggunakan perangkat Bluetooth, pastikan perangkat siap disandingkan.</translation> +<translation id="1935303383381416800">Diizinkan melihat lokasi Anda</translation> <translation id="1936931585862840749">Gunakan angka untuk menunjukkan jumlah salinan yang akan dicetak (1 sampai <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Tidak dapat mengimpor jenis arsitektur container <ph name="ARCHITECTURE_CONTAINER" /> dengan perangkat ini yang menggunakan arsitektur <ph name="ARCHITECTURE_DEVICE" />. Anda dapat mencoba memulihkan container ini ke dalam perangkat berbeda, atau mengakses file di dalam gambar container ini dengan membukanya di aplikasi File.</translation> <translation id="1938351510777341717">External Command</translation> @@ -949,6 +957,7 @@ <translation id="2090165459409185032">Untuk memulihkan informasi akun Anda, buka: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Setelan keamanan sistem</translation> <translation id="2091887806945687916">Suara</translation> +<translation id="209539936453343974">Untuk menyiapkan kontrol orang tua, anak harus memiliki Akun Google yang dikelola oleh orang tua. <ph name="DEVICE_TYPE_PLURAL" /> mengizinkan orang tua menyetel batas waktu pemakaian, menyetujui atau memblokir situs, dan melakukan lebih banyak hal dengan aplikasi Family Link. Jika anak perlu mengerjakan tugas sekolah di situs seperti Google Classroom, akun sekolah dapat ditambahkan nanti.</translation> <translation id="2096715839409389970">Hapus cookie pihak ketiga</translation> <translation id="2097372108957554726">Anda perlu masuk ke Chrome untuk mendaftarkan perangkat baru</translation> <translation id="2098805196501063469">Periksa sandi yang tersisa</translation> @@ -1099,6 +1108,7 @@ <translation id="2261323523305321874">Administrator Anda telah melakukan perubahan di seluruh sistem yang menonaktifkan sebagian profil lama.</translation> <translation id="2262332168014443534">Mode Ringan kini menjadikan browsing lebih cepat di semua halaman, termasuk HTTPS.</translation> <translation id="2262477216570151239">Tunda sebelum mengulangi</translation> +<translation id="2262888617381992508">Tidak diizinkan memutar konten yang dilindungi</translation> <translation id="2263189956353037928">Logout & login kembali</translation> <translation id="2263371730707937087">Rasio refresh layar</translation> <translation id="22665427234727190">Tanyakan saat situs ingin mengakses perangkat Bluetooth (direkomendasikan)</translation> @@ -1367,6 +1377,7 @@ <translation id="2571655996835834626">Mengubah setelan yang mengontrol akses situs ke fitur seperti cookie, JavaScript, plugin, geolokasi, mikrofon, kamera, dll.</translation> <translation id="2572032849266859634">Akses hanya baca ke <ph name="VOLUME_NAME" /> telah diberikan.</translation> <translation id="2575247648642144396">Ikon ini akan terlihat saat ekstensi dapat berperan di halaman aktif. Gunakan ekstensi ini dengan mengeklik ikon atau dengan menekan <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="2575441894380764255">Tidak diizinkan menampilkan iklan yang mengganggu atau menyesatkan</translation> <translation id="257779572837908839">Siapkan sebagai Chromebox untuk meeting</translation> <translation id="2579232805407578790">Tidak dapat terhubung dengan server. Periksa koneksi jaringan Anda dan coba lagi. Jika masalah berlanjut, mulai ulang Chromebook. Kode error: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">Selalu izinkan <ph name="HOST" /> untuk mendownload beberapa file</translation> @@ -1633,6 +1644,7 @@ <translation id="2880660355386638022">Penempatan jendela</translation> <translation id="2881076733170862447">Saat Anda Mengklik Ekstensi</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> akan segera dimulai dan direset</translation> +<translation id="288387288628762616">Diizinkan menggunakan Flash</translation> <translation id="2885378588091291677">Pengelola Tugas</translation> <translation id="2885729872133513017">Terjadi masalah saat mendekode respons server.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1667,6 +1679,7 @@ <translation id="2923234477033317484">Hapus akun ini</translation> <translation id="2926085873880284723">Pulihkan pintasan default</translation> <translation id="2927017729816812676">Penyimpanan Cache</translation> +<translation id="2928795416630981206">Diizinkan melacak posisi kamera Anda</translation> <translation id="2931157624143513983">Paskan ke area yang dapat dicetak</translation> <translation id="2932085390869194046">Sarankan Sandi...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (Akun untuk anak)</translation> @@ -1674,6 +1687,7 @@ <translation id="2932883381142163287">Laporkan penyalahgunaan</translation> <translation id="2933632078076743449">Terakhir Diperbarui</translation> <translation id="2934999512438267372">Kontrol penuh perangkat MIDI diizinkan</translation> +<translation id="2935654492420446828">Tambahkan akun sekolah nanti</translation> <translation id="2936851848721175671">Pencadangan & pemulihan</translation> <translation id="2938225289965773019">Membuka link <ph name="PROTOCOL" /></translation> <translation id="2938845886082362843">Melihat dan menghapus data login yang disimpan di kunci keamanan Anda</translation> @@ -1777,6 +1791,7 @@ <translation id="3060379269883947824">Aktifkan fitur klik untuk diucapkan</translation> <translation id="3060952009917586498">Ubah bahasa perangkat. Bahasa saat ini adalah <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Masukan tab yang ditutup.</translation> +<translation id="306535478112428611">Tidak diizinkan mengedit file dan folder di perangkat Anda</translation> <translation id="3065522099314259755">Latensi pengulangan keyboard</translation> <translation id="3067198179881736288">Instal aplikasi?</translation> <translation id="3067198360141518313">Jalankan plugin ini</translation> @@ -1912,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - Jaringan error</translation> <translation id="3248902735035392926">Keamanan adalah hal utama. Sempatkan untuk <ph name="BEGIN_LINK" />memeriksa ekstensi Anda sekarang<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><Bukan Bagian Dari Sertifikat></translation> +<translation id="325238099842880997">Tetapkan aturan dasar penggunaan perangkat digital untuk membantu anak-anak bermain, menjelajah, dan mengerjakan tugas sekolah di rumah</translation> <translation id="3253225298092156258">Tidak tersedia</translation> <translation id="3253448572569133955">Akun tidak dikenal</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Tidak ditemukan masalah keamanan}=1{{COUNT} masalah keamanan ditemukan}other{{COUNT} masalah keamanan ditemukan}}</translation> @@ -2039,6 +2055,7 @@ <translation id="3404249063913988450">Aktifkan screen saver</translation> <translation id="3405664148539009465">Sesuaikan font</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">Diizinkan menggunakan perangkat dan data virtual reality</translation> <translation id="3406396172897554194">Telusuri menurut bahasa atau nama input</translation> <translation id="3406605057700382950">&Tampilkan bilah bookmark</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Ekstensi ini mungkin berbahaya}other{Ekstensi ini mungkin berbahaya}}</translation> @@ -2203,6 +2220,7 @@ <translation id="3586806079541226322">Tidak dapat membuka file ini</translation> <translation id="3586931643579894722">Sembunyikan detail</translation> <translation id="3587482841069643663">Semua</translation> +<translation id="3588790464166520201">Diizinkan menginstal pengendali pembayaran</translation> <translation id="3589766037099229847">Konten tidak aman diblokir</translation> <translation id="3590194807845837023">Buka Kunci Profil dan Luncurkan Lagi</translation> <translation id="3590295622232282437">Memasuki sesi terkelola.</translation> @@ -2428,6 +2446,7 @@ <translation id="3822559385185038546">Proxy ini diberlakukan oleh administrator Anda</translation> <translation id="3823310065043511710">Sebaiknya sediakan ruang minimal <ph name="INSTALL_SIZE" /> untuk Linux.</translation> <translation id="3824621460022590830">Token pendaftaran perangkat tidak valid. Hubungi pemilik atau administrator perangkat Anda. Kode error: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Diizinkan menggunakan sensor gerakan</translation> <translation id="3826440694796503677">Administrator Anda telah menonaktifkan penambahan lebih banyak Akun Google</translation> <translation id="3827306204503227641">Lanjutkan mengizinkan plugin yang tidak dimasukkan kotak pasir</translation> <translation id="3827774300009121996">Layar &Penuh</translation> @@ -2480,6 +2499,8 @@ <translation id="3873423927483480833">Tampilkan PIN</translation> <translation id="3873915545594852654">Terjadi masalah dengan ARC++.</translation> <translation id="3874164307099183178">Aktifkan Asisten Google</translation> +<translation id="3877075909000773256">Setelan Berbagi Langsung untuk perangkat <ph name="USER_NAME" />, berbagi menggunakan akun <ph name="USER_EMAIL" />.</translation> +<translation id="387771067039689031">Tidak diizinkan menggunakan plugin untuk mengakses komputer Anda</translation> <translation id="3879748587602334249">Pengelola download</translation> <translation id="3881478300875776315">Tampilkan lebih sedikit baris</translation> <translation id="3882165008614329320">Video yang sudah ada dari kamera atau file</translation> @@ -2516,6 +2537,7 @@ <translation id="3919145445993746351">Untuk dapat mengakses ekstensi Anda di semua komputer, aktifkan sinkronisasi</translation> <translation id="3920504717067627103">Kebijakan Sertifikat</translation> <translation id="392089482157167418">Aktifkan ChromeVox (masukan lisan)</translation> +<translation id="3920909973552939961">Tidak diizinkan menginstal pengendali pembayaran</translation> <translation id="3923184630988645767">Penggunaan data</translation> <translation id="3923676227229836009">Halaman ini diizinkan untuk melihat file</translation> <translation id="3924145049010392604">Meta</translation> @@ -2640,6 +2662,7 @@ <translation id="4058793769387728514">Periksa Dokumen Sekarang</translation> <translation id="406070391919917862">Aplikasi Latar Belakang</translation> <translation id="4061374428807229313">Untuk berbagi, klik kanan pada folder di aplikasi File, lalu pilih "Bagikan ke Parallels Desktop".</translation> +<translation id="406213378265872299">Perilaku khusus</translation> <translation id="4065876735068446555">Jaringan yang digunakan (<ph name="NETWORK_ID" />) mungkin mewajibkan Anda mengunjungi halaman masuk jaringan.</translation> <translation id="4066207411788646768">Periksa koneksi untuk melihat printer yang tersedia dalam jaringan Anda</translation> <translation id="4068776064906523561">Sidik jari yang disimpan</translation> @@ -2787,6 +2810,7 @@ <translation id="425573743389990240">Laju Penggunaan Daya Baterai dalam Watt (Nilai negatif menunjukkan bahwa daya baterai sedang diisi)</translation> <translation id="4256316378292851214">Sim&pan Video Sebagai...</translation> <translation id="4258348331913189841">Sistem file</translation> +<translation id="4259388776256904261">Proses ini mungkin memerlukan waktu beberapa saat</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> mungkin berbahaya. Kirim file ke Perlindungan Lanjutan Google untuk dipindai? Tekan Shift+F6 untuk masuk ke area kotak download.</translation> <translation id="4263223596040212967">Periksa tata letak keyboard Anda dan coba lagi.</translation> <translation id="4263757076580287579">Pendaftaran printer dibatalkan.</translation> @@ -2894,6 +2918,7 @@ <translation id="4400632832271803360">Tahan tombol Peluncur untuk mengubah perilaku tombol baris atas</translation> <translation id="4400963414856942668">Anda dapat mengklik bintang untuk mem-bookmark tab</translation> <translation id="4403775189117163360">Pilih folder yang berbeda</translation> +<translation id="440391631796167175">Tidak ditemukan sandi lemah</translation> <translation id="4404136731284211429">Pindai lagi</translation> <translation id="4404843640767531781"><ph name="APP_NAME" /> diblokir oleh orang tuamu. Minta izin orang tuamu untuk menggunakan aplikasi ini.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2938,6 +2963,7 @@ <translation id="4450974146388585462">Diagnosis</translation> <translation id="4451479197788154834">Sandi disimpan di perangkat ini dan Akun Google Anda</translation> <translation id="4451757071857432900">Diblokir di situs yang menampilkan iklan yang mengganggu atau menyesatkan (direkomendasikan)</translation> +<translation id="4453205916657964690">Subnet mask</translation> <translation id="4453946976636652378">Telusuri <ph name="SEARCH_ENGINE_NAME" /> atau ketik URL</translation> <translation id="4459169140545916303">Aktif <ph name="DEVICE_LAST_ACTIVATED_TIME" /> hari lalu</translation> <translation id="4460014764210899310">Pisahkan</translation> @@ -2965,6 +2991,7 @@ <translation id="4481530544597605423">Perangkat tidak tersambung</translation> <translation id="4483049906298469269">Gagal melakukan ping ke gateway jaringan non-default</translation> <translation id="4487489714832036847">Chromebook menggunakan aplikasi, bukan software tradisional. Dapatkan aplikasi untuk produktivitas, hiburan, dan masih banyak lagi.</translation> +<translation id="4488257340342212116">Diizinkan menggunakan kamera Anda</translation> <translation id="4488502501195719518">Hapus semua data?</translation> <translation id="449232563137139956">Situs biasanya menampilkan gambar untuk memberikan ilustrasi, seperti foto untuk toko online atau artikel berita</translation> <translation id="4493468155686877504">Direkomendasikan (<ph name="INSTALL_SIZE" />)</translation> @@ -2997,6 +3024,7 @@ <translation id="4524832533047962394">Mode pendaftaran yang disediakan tidak didukung oleh versi sistem operasi ini. Pastikan Anda menjalankan versi terbaru.</translation> <translation id="4527186207340858212">Buat profil baru untuk kerja?</translation> <translation id="452750746583162491">Tinjau data Anda yang disinkronkan</translation> +<translation id="4527929807707405172">Aktifkan scroll terbalik. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Saran terjemahan</translation> <translation id="4530494379350999373">Asal</translation> <translation id="4531924570968473143">Siapa yang ingin Anda tambahkan ke <ph name="DEVICE_TYPE" /> ini?</translation> @@ -3017,6 +3045,7 @@ <translation id="4545028762441890696">Untuk mengaktifkannya kembali, setujui izin baru:</translation> <translation id="4545759655004063573">Tidak dapat menyimpan karena izin tidak memadai. Simpan ke lokasi lain.</translation> <translation id="4546308221697447294">Akses dengan cepat menggunakan Google Chrome</translation> +<translation id="4546345569117159016">Tombol kanan</translation> <translation id="4546692474302123343">Masukan suara Asisten Google</translation> <translation id="4547659257713117923">Tidak Ada Tab dari Perangkat Lainnya</translation> <translation id="4547672827276975204">Setel otomatis</translation> @@ -3076,6 +3105,7 @@ <translation id="4608500690299898628">&Temukan...</translation> <translation id="4608520674724523647">Ilustrasi pendaftaran yang berhasil</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> berisi konten sensitif</translation> +<translation id="4609987916561367134">Diizinkan menggunakan JavaScript</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> telah mengalami error</translation> <translation id="4610637590575890427">Apakah maksud Anda ingin mengunjungi <ph name="SITE" />?</translation> <translation id="4611114513649582138">Koneksi data tersedia</translation> @@ -3187,6 +3217,7 @@ <translation id="473775607612524610">Perbarui</translation> <translation id="473936925429402449">Dipilih, konten tambahan <ph name="CURRENT_ELEMENT" /> dari <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Tiket</translation> +<translation id="4742334355511750246">Tidak diizinkan menampilkan gambar</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Pelajari cara mengupdate aplikasi<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Aktifkan notifikasi situs}other{Aktifkan notifikasi beberapa situs}}</translation> <translation id="4746351372139058112">Pesan</translation> @@ -3322,6 +3353,7 @@ <translation id="4908811072292128752">Buka tab baru untuk mengakses 2 situs sekaligus</translation> <translation id="4909038193460299775">Karena akun ini dikelola oleh <ph name="DOMAIN" />, bookmark, histori, sandi, dan setelan yang lain akan dihapus dari perangkat ini. Namun, data Anda akan tetap disimpan di Akun Google dan dapat dikelola di <ph name="BEGIN_LINK" />Google Dasbor<ph name="END_LINK" />.</translation> <translation id="4912643508233590958">Bangun saat Nganggur</translation> +<translation id="4915961947098019832">Diizinkan menampilkan gambar</translation> <translation id="4916542008280060967">Izinkan situs mengedit <ph name="FILE_NAME" />?</translation> <translation id="491691592645955587">Beralih ke browser yang aman</translation> <translation id="4917385247580444890">Kuat</translation> @@ -3409,6 +3441,7 @@ <translation id="5027550639139316293">Sertifikat Email</translation> <translation id="5027562294707732951">Tambahkan ekstensi</translation> <translation id="5029568752722684782">Hapus salinan</translation> +<translation id="5033137252639132982">Tidak diizinkan menggunakan sensor gerakan</translation> <translation id="5033266061063942743">Bentuk geometris</translation> <translation id="5036662165765606524">Jangan izinkan situs apa pun mendownload beberapa file secara otomatis</translation> <translation id="5037676449506322593">Pilih Semua</translation> @@ -3458,6 +3491,7 @@ <translation id="5088172560898466307">Hostname server</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 Dengan Enkripsi RSA</translation> <translation id="5089810972385038852">Negara Bagian</translation> +<translation id="5090637338841444533">Tidak diizinkan melacak posisi kamera Anda</translation> <translation id="5094721898978802975">Berkomunikasi dengan aplikasi asli yang kooperatif</translation> <translation id="5097002363526479830">Gagal menyambung ke jaringan '<ph name="NAME" />': <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Alat: <ph name="PRINT_NAME" /></translation> @@ -3766,6 +3800,7 @@ <translation id="5471768120198416576">Halo! Saya suara text to speech Anda.</translation> <translation id="5472627187093107397">Simpan sandi untuk situs ini</translation> <translation id="5473333559083690127">Masukkan lagi PIN baru</translation> +<translation id="5481273127572794904">Tidak diizinkan mendownload otomatis beberapa file</translation> <translation id="5481941284378890518">Tambahkan Printer di Sekitar</translation> <translation id="5483785310822538350">Cabut akses perangkat dan file</translation> <translation id="5485080380723335835"><ph name="DEVICE_TYPE" /> Anda dikunci untuk alasan keamanan. Masukkan sandi secara manual untuk melanjutkan.</translation> @@ -3787,6 +3822,7 @@ <translation id="5495466433285976480">Hal ini akan menghapus semua pengguna lokal, file, data, dan setelan lain setelah Anda memulai ulang lagi. Semua pengguna perlu masuk kembali.</translation> <translation id="5495597166260341369">Biarkan layar tetap menyala</translation> <translation id="5496587651328244253">Atur</translation> +<translation id="5496730470963166430">Tidak diizinkan mengirimkan pop-up atau menggunakan pengalihan</translation> <translation id="5497251278400702716">File ini</translation> <translation id="5498967291577176373">Tulis lebih cepat dengan saran yang ditampilkan pada baris yang sama untuk nama, alamat, atau nomor telepon Anda</translation> <translation id="5499313591153584299">File ini mungkin berbahaya untuk komputer Anda.</translation> @@ -3794,6 +3830,7 @@ <translation id="5500709606820808700">Pemeriksaan keselamatan berjalan hari ini</translation> <translation id="5501809658163361512">{COUNT,plural, =1{Gagal menerima <ph name="ATTACHMENTS" /> dari <ph name="DEVICE_NAME" />}other{Gagal menerima <ph name="ATTACHMENTS" /> dari <ph name="DEVICE_NAME" />}}</translation> <translation id="5502500733115278303">Diimpor dari Firefox</translation> +<translation id="5502915260472117187">Anak</translation> <translation id="5503982651688210506">Terus izinkan <ph name="HOST" /> untuk menggunakan dan menggerakkan kamera, serta menggunakan mikrofon Anda</translation> <translation id="5505264765875738116">Situs tidak dapat meminta izin mengirimkan notifikasi</translation> <translation id="5505307013568720083">Kehabisan tinta</translation> @@ -3881,6 +3918,7 @@ <translation id="5596627076506792578">Opsi lainnya</translation> <translation id="5600706100022181951">Update akan didownload menggunakan data seluler sebesar <ph name="UPDATE_SIZE_MB" /> MB. Ingin melanjutkan?</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5601823921345337195">Tidak diizinkan terhubung ke perangkat MIDI</translation> <translation id="5602765853043467355">Hapus bookmark, histori, sandi, dan lainnya dari perangkat ini.</translation> <translation id="5605623530403479164">Mesin telusur lainnya</translation> <translation id="5605758115928394442">Notifikasi telah dikirim ke ponsel Anda untuk mengonfirmasi bahwa ini memang Anda.</translation> @@ -4001,6 +4039,7 @@ <translation id="5747552184818312860">Kedaluwarsa</translation> <translation id="5747785204778348146">Pengembang - tidak stabil</translation> <translation id="5747809636523347288">Tempel dan buka <ph name="URL" /></translation> +<translation id="5754152670305761216">Diizinkan memutar konten yang dilindungi</translation> <translation id="5756163054456765343">Pusat bantuan</translation> <translation id="5759728514498647443">Dokumen yang Anda kirim untuk dicetak melalui <ph name="APP_NAME" /> dapat dibaca oleh <ph name="APP_NAME" />.</translation> <translation id="5763751966069581670">Tidak ada perangkat USB yang ditemukan</translation> @@ -4469,6 +4508,7 @@ <translation id="6295158916970320988">Semua situs</translation> <translation id="6295855836753816081">Menyimpan...</translation> <translation id="6298962879096096191">Menggunakan Google Play untuk memasang aplikasi Android</translation> +<translation id="6300177430812514606">Tidak diizinkan menyelesaikan pengiriman atau penerimaan data</translation> <translation id="630065524203833229">K&eluar</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> tidak dapat dikonfigurasi secara otomatis. Harap tentukan detail printer lanjutan. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Untuk memisahkan penjelajahan pribadi dan <ph name="EXISTING_USER" />, buat profil baru untuk <ph name="NEW_USER" /></translation> @@ -4546,6 +4586,7 @@ <translation id="6390020764191254941">Pindahkan Tab ke Jendela Baru</translation> <translation id="6390799748543157332">Halaman yang Anda lihat di jendela ini tidak akan muncul dalam histori browser dan tidak meninggalkan jejak lain, seperti cookie, di komputer setelah Anda menutup semua jendela Tamu yang terbuka. Namun, file apa pun yang Anda download akan tersimpan.</translation> <translation id="6393156038355142111">Sarankan sandi yang kuat</translation> +<translation id="6393550101331051049">Diizinkan menampilkan konten yang tidak aman</translation> <translation id="6395423953133416962">Kirim <ph name="BEGIN_LINK1" />informasi sistem<ph name="END_LINK1" /> dan <ph name="BEGIN_LINK2" />metrik<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">Blokir situs agar tidak menggunakan sensor gerakan</translation> <translation id="6398715114293939307">Hapus Google Play Store</translation> @@ -4578,6 +4619,7 @@ <translation id="6425556984042222041">Kecepatan text-to-speech</translation> <translation id="6426200009596957090">Buka setelan ChromeVox</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> mengharuskan Anda mencadangkan data dan mengembalikan <ph name="DEVICE_TYPE" /> ini dalam 1 minggu. <ph name="LINK_BEGIN" />Lihat detailnya<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Tidak diizinkan memutar suara</translation> <translation id="6428982734197629783">Memproses gambar</translation> <translation id="6429384232893414837">Error update</translation> <translation id="6430814529589430811">ASCII bersandiaksara Base64, satu sertifikat</translation> @@ -4606,6 +4648,7 @@ <translation id="6458701200018867744">Upload gagal (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Gunakan Pilihan untuk Temukan</translation> <translation id="6459799433792303855">Jendela aktif dipindahkan ke layar lain.</translation> +<translation id="6460566145397380451">Diizinkan terhubung ke perangkat MIDI</translation> <translation id="6460601847208524483">Temukan Berikutnya</translation> <translation id="6461170143930046705">Mencari jaringan...</translation> <translation id="6463795194797719782">&Edit</translation> @@ -4637,6 +4680,7 @@ <translation id="6499681088828539489">Jangan izinkan proxy untuk jaringan bersama</translation> <translation id="650266656685499220">Untuk membuat album, buka Google Foto</translation> <translation id="6503077044568424649">Sering dibuka</translation> +<translation id="650457560773015827">Tombol kiri</translation> <translation id="6504611359718185067">Sambungkan ke internet untuk menambahkan printer</translation> <translation id="6506374932220792071">Tanda tangan X9.62 ECDSA dengan SHA-256</translation> <translation id="6508248480704296122">Berkaitan dengan <ph name="NAME_PH" /></translation> @@ -4838,6 +4882,7 @@ <translation id="676560328519657314">Metode pembayaran Anda di Google Pay</translation> <translation id="6767566652486411142">Pilih Bahasa Lain...</translation> <translation id="6767639283522617719">Tidak dapat bergabung dengan domain. Pastikan setelan sudah benar untuk unit organisasi.</translation> +<translation id="6768034047581882264">Tidak diizinkan menampilkan konten yang tidak aman</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> merekomendasikan Anda mengupdate perangkat ini.</translation> <translation id="6769712124046837540">Menambahkan printer...</translation> <translation id="6770602306803890733">Meningkatkan keamanan untuk Anda dan semua orang di web</translation> @@ -4929,6 +4974,7 @@ <translation id="6865313869410766144">Data formulir isi-otomatis</translation> <translation id="6865598234501509159">Halaman Tidak dalam Bahasa <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">Log aktivitas WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Senyap</translation> <translation id="686664946474413495">Suhu warna</translation> <translation id="6868934826811377550">Lihat Detail</translation> <translation id="6871644448911473373">Penanggap OCSP: <ph name="LOCATION" /></translation> @@ -4978,6 +5024,7 @@ <translation id="6922745772873733498">Masukkan PIN untuk mencetak</translation> <translation id="6923132443355966645">Scroll / Klik</translation> <translation id="6923633482430812883">Terjadi error saat memasang URL berbagi. Harap periksa bahwa server file yang Anda sambungkan mendukung SMBv2 atau yang lebih baru.</translation> +<translation id="6929126689972602640">Kontrol orang tua tidak didukung untuk akun sekolah. Untuk menambahkan akun sekolah guna mengakses Google Classroom dan situs lain untuk tugas sekolah di rumah, login dengan akun pribadi anak terlebih dahulu. Anda dapat menambahkan akun sekolah nanti di setelan.</translation> <translation id="6929760895658557216">Oke Google</translation> <translation id="6930036377490597025">Kunci keamanan eksternal atau sensor dalam perangkat</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Ekstensi telah ditolak}other{# ekstensi telah ditolak}}</translation> @@ -5018,6 +5065,7 @@ <translation id="6972629891077993081">Perangkat HID</translation> <translation id="6972754398087986839">Mulai</translation> <translation id="6972887130317925583">Berhasil mengubah sandi yang telah dibobol. Periksa sandi Anda kapan saja di <ph name="SETTINGS" />.</translation> +<translation id="697312151395002334">Diizinkan mengirim pop-up dan menggunakan pengalihan</translation> <translation id="6973611239564315524">Upgrade ke versi Debian 10 (Buster) sudah tersedia</translation> <translation id="6974609594866392343">Mode demo offline</translation> <translation id="6977381486153291903">Revisi firmware</translation> @@ -5040,6 +5088,7 @@ <translation id="6995899638241819463">Berikan peringatan jika sandi Anda terekspos saat terjadi pelanggaran data</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - Log Aktivitas</translation> <translation id="6997707937646349884">Di perangkat Anda:</translation> +<translation id="6998093258894828179">Sembunyikan kartu</translation> <translation id="6998793565256476099">Daftarkan perangkat untuk konferensi video</translation> <translation id="6999956497249459195">Grup baru</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> terhubung namun membutuhkan konfigurasi</translation> @@ -5056,6 +5105,7 @@ <translation id="7005848115657603926">Rentang halaman tidak valid, gunakan <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">Batas bawah</translation> <translation id="7007648447224463482">Buka semua di jendela baru</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> sedang menggunakan kamera Anda</translation> <translation id="701080569351381435">Lihat Sumber</translation> <translation id="7014174261166285193">Pemasangan gagal.</translation> <translation id="7017004637493394352">Ucapkan "Ok Google" lagi</translation> @@ -5075,6 +5125,7 @@ <translation id="7038632520572155338">Tombol akses</translation> <translation id="7039326228527141150">Akses perangkat USB dari <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> +<translation id="7039951224110875196">Buat Akun Google untuk anak</translation> <translation id="7040230719604914234">Operator</translation> <translation id="7043108582968290193">Selesai! Tidak ditemukan aplikasi yang tidak kompatibel.</translation> <translation id="7044124535091449260">Pelajari akses situs lebih lanjut</translation> @@ -5146,6 +5197,7 @@ <translation id="7121362699166175603">Menghapus histori dan pelengkapan otomatis di kolom URL. Akun Google Anda mungkin memiliki bentuk histori penjelajahan lainnya di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Mode Developer</translation> <translation id="7121728544325372695">Smart Dashes</translation> +<translation id="7123030151043029868">Diizinkan mendownload otomatis beberapa file</translation> <translation id="7123360114020465152">Tidak didukung lagi</translation> <translation id="7125148293026877011">Hapus Crostini</translation> <translation id="7127980134843952133">Histori download</translation> @@ -5160,6 +5212,7 @@ <translation id="7136984461011502314">Selamat datang di <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Terjadi error. Coba lagi dengan memilih gambar lain.</translation> <translation id="713888829801648570">Maaf, sandi Anda tidak dapat diverifikasi karena Anda tidak tersambung ke internet.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> sedang menggunakan mikrofon Anda</translation> <translation id="7140928199327930795">Tidak ada perangkat lain.</translation> <translation id="7141105143012495934">Proses masuk gagal karena detail akun Anda tidak dapat diambil. Hubungi administrator Anda atau coba lagi.</translation> <translation id="7143207342074048698">Menghubungkan</translation> @@ -5299,6 +5352,7 @@ <translation id="7324297612904500502">Forum Beta</translation> <translation id="7325209047678309347">Kertas macet</translation> <translation id="7325437708553334317">Ekstensi Kontras Tinggi</translation> +<translation id="7326004502692201767">Menyiapkan <ph name="DEVICE_TYPE" /> ini untuk anak</translation> <translation id="7328699668338161242">Asisten sudah dapat mengenali suara Anda</translation> <translation id="7328867076235380839">Kombinasi tidak valid</translation> <translation id="7329154610228416156">Proses masuk gagal karena dikonfigurasi untuk menggunakan URL yang tidak aman (<ph name="BLOCKED_URL" />). Hubungi administrator Anda.</translation> @@ -5423,6 +5477,7 @@ <translation id="7465635034594602553">Terjadi error. Tunggu beberapa menit lalu jalankan <ph name="APP_NAME" /> lagi.</translation> <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation> <translation id="7469894403370665791">Sambungkan ke jaringan ini secara otomatis</translation> +<translation id="7470424110735398630">Diizinkan melihat papan klip Anda</translation> <translation id="747114903913869239">Kesalahan: Tidak dapat mendekodekan ekstensi</translation> <translation id="7473891865547856676">Lain Kali</translation> <translation id="747459581954555080">Pulihkan semua</translation> @@ -5532,6 +5587,7 @@ <translation id="7607002721634913082">Dijeda</translation> <translation id="7608810328871051088">Preferensi Android</translation> <translation id="7609148976235050828">Sambungkan ke internet dan coba lagi.</translation> +<translation id="7612655942094160088">Fitur telepon yang terhubung aktif.</translation> <translation id="7614260613810441905">Tanyakan saat situs ingin mengedit file atau folder di perangkat Anda (direkomendasikan)</translation> <translation id="761530003705945209">Cadangkan ke Google Drive. Pulihkan data Anda atau beralih perangkat kapan saja dengan mudah. Cadangan Anda mencakup data aplikasi. Cadangan Anda diupload ke Google dan dienkripsi menggunakan sandi Akun Google Anda.</translation> <translation id="7615365294369022248">Terjadi error saat menambahkan akun</translation> @@ -5650,6 +5706,7 @@ <translation id="7732111077498238432">Jaringan dikontrol oleh kebijakan</translation> <translation id="7737115349420013392">Menyambungkan dengan "<ph name="DEVICE_NAME" />" ...</translation> <translation id="7737238973539693982">Hapus Linux (Beta)</translation> +<translation id="7737948071472253612">Tidak diizinkan menggunakan kamera Anda</translation> <translation id="7740996059027112821">Standar</translation> <translation id="7742706086992565332">Fungsi perbesar atau perkecil pada situs tertentu dapat disetel</translation> <translation id="774377079771918250">Pilih lokasi untuk menyimpan</translation> @@ -5658,6 +5715,7 @@ <translation id="7750228210027921155">Picture-in-picture</translation> <translation id="7751260505918304024">Tampilkan semua</translation> <translation id="7753735457098489144">Gagal menginstal karena ruang penyimpanan tidak cukup. Untuk mengosongkan ruang, hapus file dari penyimpanan perangkat.</translation> +<translation id="7754347746598978109">Tidak diizinkan menggunakan JavaScript</translation> <translation id="7754704193130578113">Tanyakan lokasi penyimpanan setiap file sebelum mendownload</translation> <translation id="7755287808199759310">Orang tua dapat membuka blokirnya untukmu</translation> <translation id="7757592200364144203">Ubah nama perangkat</translation> @@ -5710,6 +5768,7 @@ <translation id="7798844538707273832"><ph name="PERMISSION" /> diblokir secara otomatis</translation> <translation id="7799299114731150374">Wallpaper berhasil disetel</translation> <translation id="7800518121066352902">Putar &Berlawanan Arah Jarum Jam</translation> +<translation id="7802539296536804623">Jangan tampilkan kartu di halaman ini</translation> <translation id="780301667611848630">Lain kali</translation> <translation id="7804072833593604762">Tab Ditutup</translation> <translation id="7805768142964895445">Status</translation> @@ -6138,6 +6197,7 @@ <translation id="826905130698769948">Sertifikat klien tidak valid</translation> <translation id="8270242299912238708">Dokumen PDF</translation> <translation id="827097179112817503">Tampilkan tombol beranda</translation> +<translation id="8271379370373330993">Bapak/Ibu, beberapa langkah selanjutnya adalah untuk Anda. Anda dapat menyerahkan <ph name="DEVICE_TYPE" /> kembali ke anak setelah penyiapan akun selesai.</translation> <translation id="8272443605911821513">Kelola ekstensi Anda dengan mengeklik Ekstensi pada menu "Fitur lainnya".</translation> <translation id="8274332263553132018">Transmisikan file</translation> <translation id="8274924778568117936">Jangan menonaktifkan atau menutup <ph name="DEVICE_TYPE" /> Anda sampai proses update selesai. <ph name="DEVICE_TYPE" /> Anda akan dimulai ulang setelah proses instal selesai.</translation> @@ -6161,6 +6221,7 @@ <translation id="8300011035382349091">Edit bookmark untuk tab ini</translation> <translation id="8300374739238450534">Biru kehitaman</translation> <translation id="8300849813060516376">OTASP gagal</translation> +<translation id="8304383784961451596">Anda tidak diizinkan menggunakan perangkat ini. Hubungi administrator untuk mendapatkan izin login atau login dengan Akun Google yang diawasi oleh Family Link.</translation> <translation id="8308179586020895837">Tanyakan jika <ph name="HOST" /> ingin mengakses kamera Anda</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">Sertifikat sudah ada</translation> @@ -6174,6 +6235,7 @@ <translation id="8322814362483282060">Halaman ini telah diblokir agar tidak dapat mengakses mikrofon Anda.</translation> <translation id="8323167517179506834">Ketik URL</translation> <translation id="8324784016256120271">Situs dapat menggunakan cookie untuk melihat aktivitas penjelajahan Anda di berbagai situs, misalnya untuk mempersonalisasi iklan</translation> +<translation id="8325413836429495820">Tidak diizinkan melihat papan klip Anda</translation> <translation id="8326478304147373412">PKCS #7, rantai sertifikat</translation> <translation id="8327039559959785305">Terjadi error saat memasang file Linux. Harap coba lagi.</translation> <translation id="8327676037044516220">Izin dan setelan konten</translation> @@ -6223,6 +6285,7 @@ <translation id="8382913212082956454">Salin alamat &email</translation> <translation id="8386091599636877289">Kebijakan tidak ditemukan.</translation> <translation id="8386903983509584791">Pemindaian selesai</translation> +<translation id="8387361103813440603">Tidak diizinkan melihat lokasi Anda</translation> <translation id="8389416080014625855">Buat kode QR untuk Halaman ini</translation> <translation id="8389492867173948260">Mengizinkan ekstensi ini membaca dan mengubah semua data Anda di situs yang dibuka:</translation> <translation id="8390449457866780408">Server tidak tersedia.</translation> @@ -6407,6 +6470,7 @@ <translation id="8621866727807194849">Ada software berbahaya di komputer Anda. Chrome sedang menghapusnya, memulihkan setelan Anda, dan menonaktifkan ekstensi. Tindakan ini akan membuat browser berfungsi kembali secara normal.</translation> <translation id="8621979332865976405">Bagikan seluruh layar Anda</translation> <translation id="862542460444371744">&Ekstensi</translation> +<translation id="8625663000550647058">Tidak diizinkan menggunakan mikrofon Anda</translation> <translation id="862727964348362408">Ditangguhkan</translation> <translation id="862750493060684461">Cache CSS</translation> <translation id="8627706565932943526">Kesalahan sinkronisasi</translation> @@ -6487,6 +6551,7 @@ <translation id="8714838604780058252">Grafis latar belakang</translation> <translation id="8715480913140015283">Tab background menggunakan kamera Anda</translation> <translation id="8716931980467311658">Hapus semua aplikasi dan data Linux di folder file Linux dari <ph name="DEVICE_TYPE" /> ini?</translation> +<translation id="8717145295869185525">Tidak diizinkan menggunakan perangkat dan data virtual reality</translation> <translation id="8717864919010420084">Salin Link</translation> <translation id="8719472795285728850">Mendengarkan aktivitas ekstensi...</translation> <translation id="8719653885894320876">Gagal mendownload <ph name="PLUGIN_NAME" /></translation> @@ -6908,6 +6973,7 @@ <translation id="9179734824669616955">Siapkan Linux (Beta) di <ph name="DEVICE_TYPE" /></translation> <translation id="9180281769944411366">Proses ini dapat memerlukan waktu beberapa menit. Memulai container Linux.</translation> <translation id="9180380851667544951">Situs dapat membagikan layar Anda</translation> +<translation id="9186963452600581158">Login dengan Akun Google anak</translation> <translation id="9188732951356337132">Kirim data penggunaan dan diagnostik. Perangkat ini saat ini otomatis mengirim data diagnostik, perangkat, dan penggunaan aplikasi ke Google. Data ini tidak akan digunakan untuk mengidentifikasi anak Anda serta akan membantu sistem dan stabilitas aplikasi serta peningkatan lainnya. Beberapa data gabungan juga akan membantu aplikasi dan partner Google, seperti developer Android. Jika setelan Aktivitas Web & Aplikasi tambahan diaktifkan untuk anak Anda, data ini mungkin akan disimpan ke Akun Google miliknya. <ph name="BEGIN_LINK2" />Pelajari Lebih Lanjut<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPSec + kunci yang dibagikan sebelumnya</translation> <translation id="9198090666959937775">Gunakan ponsel Anda sebagai kunci keamanan</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index e95c8b3..39298272 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> slökkti á ADB-villuleit. Þetta endurstillir <ph name="DEVICE_TYPE" /> eftir einn sólarhring. Afritaðu skrár sem þú vilt geyma.</translation> <translation id="1977965994116744507">Færðu símann nær til að taka <ph name="DEVICE_TYPE" /> úr lás.</translation> <translation id="1978006917103730774">Nýjar hugbúnaðar- og öryggisuppfærslur verða settar upp sjálfkrafa.</translation> +<translation id="1978057560491495741">Fjarlægja heimilisfang</translation> <translation id="1979095679518582070">Þótt slökkt sé á þessum eiginleika hefur það ekki áhrif á getu þessa tækis til að senda mikilvægar upplýsingar fyrir nauðsynlega þjónustu á borð við kerfisuppfærslur og öryggisþjónustu.</translation> <translation id="1979280758666859181">Þú ert að skipta yfir á rás með eldri útgáfu af <ph name="PRODUCT_NAME" />. Rásabreytingin öðlast gildi þegar rásarútgáfan samsvarar útgáfunni sem uppsett er í tækni þínu núna.</translation> <translation id="197989455406964291">KDC styður ekki dulkóðunargerðina</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Þessi stilling tilheyrir <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Breyta heiti möppu</translation> <translation id="2225864335125757863">Breyttu þessum aðgangsorðum strax til að halda reikningnum öruggum:</translation> +<translation id="2226204716217107988">Skipta um prófíl?</translation> <translation id="2226449515541314767">Lokað hefur verið á fulla stjórn þessa vefsvæðis á MIDI-tækjum.</translation> <translation id="2226907662744526012">Taka sjálfkrafa úr lás þegar PIN-númer er slegið inn</translation> <translation id="222704500187107962">Undanþágan fellur sjálfkrafa niður við lok þessarar huliðslotu</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Stilla net</translation> <translation id="230927227160767054">Þessi síða vill setja upp þjónustuhjálparforrit.</translation> <translation id="2309620859903500144">Lokað hefur verið á aðgang þessa vefsvæðis að hreyfi- eða birtuskynjara.</translation> +<translation id="2312219318583366810">Vefslóð síðu</translation> <translation id="2314165183524574721">Sýnileiki er stilltur á falin(n)</translation> <translation id="2314774579020744484">Tungumál sem notað er þegar síður eru þýddar</translation> <translation id="2315414688463285945">Villa við að stilla Linux-skrár. Reyndu aftur.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Engin innskráningargögn eru á þessum öryggislykli</translation> <translation id="3714195043138862580">Þetta sýniseintak hefur verið sett í óúthlutaða stöðu.</translation> <translation id="3714633008798122362">vefdagatal</translation> +<translation id="3715954932774762075">Forrit og vefsvæði sem eru í boði á mörgum tungumálum munu nota fyrsta studda tungumálið á listanum. Þessar kjörstillingar eru samstilltar vafrastillingunum. <ph name="BEGIN_LINK_LEARN_MORE" />Frekari upplýsingar<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Heimasíða</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Þú og Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Fyrirliggjandi myndskeið úr myndavél eða skrá</translation> <translation id="3886446263141354045">Beiðni þín um aðgang að þessu vefsvæði hefur verið send til <ph name="NAME" /></translation> <translation id="3888550877729210209">Glósur með <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Kveiktu á Chrome samstillingu til að nota Wi-Fi-samstillingu</translation> <translation id="3892414795099177503">Bæta við OpenVPN / L2TP...</translation> <translation id="3893536212201235195">Lesa og breyta aðgengisstillingum</translation> <translation id="3893630138897523026">ChromeVox (raddsvörun)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Bókamerkja alla flipa</translation> <translation id="5449716055534515760">Loka glugga</translation> <translation id="5452974209916053028">Yfirstandandi huliðslota: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Skjátextablaðra færð um <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% lárétt, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% niður</translation> <translation id="5454166040603940656">hjá <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ógilt</translation> <translation id="5457459357461771897">Lesa og eyða myndum, tónlist og öðru margmiðlunarefni í tölvunni þinni</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Hreinsa bókamerki, feril, aðgangsorð og fleira úr þessu tæki</translation> <translation id="5605623530403479164">Aðrar leitarvélar</translation> <translation id="5605758115928394442">Tilkynning var send í símann þinn til að staðfesta að þetta sért þú.</translation> +<translation id="560834977503641186">Wi-Fi-samstilling, Frekari upplýsingar</translation> <translation id="5608580678041221894">Ýttu á eftirfarandi lykla til að breyta eða færa skurðarsvæðið</translation> <translation id="5609231933459083978">Forritið virðist vera ógilt.</translation> <translation id="5610038042047936818">Skipta yfir í myndavélarstillingu</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Stilla Ethernet</translation> <translation id="5842497610951477805">Virkjun á Bluetooth</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Skjátextar í rauntíma sýnilegir, ýttu á F6 til að breyta fókusnum</translation> <translation id="5844574845205796324">Leggja til nýtt efni til að skoða</translation> <translation id="5846200638699387931">Málskipunarvilla tengsla: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Setja upp forrit og uppfærslur. Með því að halda áfram samþykkir þú að þetta tæki megi einnig hlaða sjálfkrafa niður og setja upp uppfærslur og forrit frá Google, símafyrirtækinu þínu og framleiðanda tækisins, hugsanlega með því að nota farsímagögn. Einhver þessara forrita gætu boðið upp á innkaup í forriti.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> er núna á öllum skjánum.</translation> <translation id="7340650977506865820">Vefsvæði er að deila skjánum þínum</translation> <translation id="7341834142292923918">Vill fá aðgang að þessu vefsvæði</translation> +<translation id="7343372807593926528">Lýstu vandamálinu áður en þú sendir ábendingu.</translation> <translation id="7345706641791090287">Staðfestu aðgangsorðið þitt</translation> <translation id="7346909386216857016">Ég skil</translation> <translation id="7347452120014970266">Þetta hreinsar öll gögn og fótspor sem <ph name="ORIGIN_NAME" /> og uppsett forrit þess hafa vistað</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA eða RSN)</translation> <translation id="7819992334107904369">Chrome samstilling</translation> <translation id="782057141565633384">A&frita slóð myndskeiðs</translation> +<translation id="7822187537422052256">Viltu örugglega fjarlægja þetta heimilisfang?</translation> <translation id="7824864914877854148">Villa kom í veg fyrir að hægt væri að ljúka afritun</translation> <translation id="7825666486843191125">Allir tengiliðir sem eru nálægt þér þegar skjárinn er ekki læstur</translation> <translation id="782590969421016895">Nota núverandi síður</translation> @@ -6308,6 +6318,7 @@ <translation id="8419098111404128271">Leitarniðurstöður fyrir „<ph name="SEARCH_TEXT" />“</translation> <translation id="8419368276599091549">Velkomin(n) í <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Breyta orðabókarfærslum</translation> +<translation id="8421361468937925547">Skjátextar í rauntíma (aðeins á ensku)</translation> <translation id="8422787418163030046">Bakki er ekki til staðar</translation> <translation id="8425213833346101688">Breyta</translation> <translation id="8425492902634685834">Festa á verkstiku</translation> @@ -6336,6 +6347,7 @@ <translation id="8449036207308062757">Hafa umsjón með geymslu</translation> <translation id="8452135315243592079">SIM-kort vantar</translation> <translation id="8455026683977728932">Mistókst að virkja ADB-skýringarmynd</translation> +<translation id="8456398879271637452">Skjátextar í rauntíma sýnilegir, ýttu á Ctrl + Til baka eða Ctrl + Áfram til að breyta fókusnum</translation> <translation id="845702320058262034">Ekki tókst að tengjast. Gakktu úr skugga um að kveikt sé á Bluetooth í símanum.</translation> <translation id="8457451314607652708">Flytja bókamerki inn</translation> <translation id="8458627787104127436">Opna allar (<ph name="URL_COUNT" />) í nýjum glugga</translation> @@ -6846,6 +6858,7 @@ <translation id="9027459031423301635">Opna &tengil í nýjum flipa</translation> <translation id="9030515284705930323">Fyrirtækið þitt hefur ekki virkjað Google Play Store fyrir reikninginn þinn. Hafðu samband við stjórnanda til að fá frekari upplýsingar.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> er ekki studdur lengur</translation> <translation id="9031549947500880805">Taka afrit á Google Drive. Endurheimtu gögnin þín eða skiptu um tæki hvenær sem er. Öryggisafritið inniheldur forritsgögn.</translation> <translation id="9033765790910064284">Halda samt áfram</translation> <translation id="9033857511263905942">Líma</translation> @@ -6854,6 +6867,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Þú átt eina tilraun eftir.}one{Þú átt # tilraun eftir.}other{Þú átt # tilraunir eftir.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Uppfæra aðgangsorð fyrir <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Skjátextar í rauntíma sýnilegir, ýttu á ⌘ + Option + ör upp eða niður til að breyta fókusnum</translation> <translation id="9041692268811217999">Stjórnandi hefur lokað fyrir aðgang að staðbundnum skrám tölvunnar</translation> <translation id="904224458472510106">Ekki er hægt að afturkalla þessa aðgerð</translation> <translation id="9042893549633094279">Persónuvernd og öryggi</translation> @@ -6892,6 +6906,7 @@ <translation id="9088446193279799727">Ekki tókst að stilla Linux. Tengstu internetinu og reyndu aftur.</translation> <translation id="9088917181875854783">Staðfestu að þessi aðgangslykill birtist í „<ph name="DEVICE_NAME" />“:</translation> <translation id="9089416786594320554">Innsláttaraðferðir</translation> +<translation id="909108997331068008">Prófíllinn sem <ph name="EXISTING_USER" /> á er þegar innskráður á <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Mælt er með því að taka öryggisafrit af skrám ef ekki tekst að klára uppfærsluna. Þegar uppfærslan er ræst slekkur Linux (tilraunaútgáfa) á sér. Vistaðu opnar skrár áður en þú heldur áfram.</translation> <translation id="9094033019050270033">Uppfæra aðgangsorð</translation> <translation id="9094038138851891550">Ógilt notandanafn</translation> @@ -7065,5 +7080,6 @@ <translation id="994289308992179865">&Lykkja</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Kemur á öruggri tengingu...</translation> +<translation id="99731366405731005">Kveiktu á <ph name="LINK1_BEGIN" />Chrome samstillingu<ph name="LINK1_END" /> til að nota Wi-Fi-samstillingu. <ph name="LINK2_BEGIN" />Frekari upplýsingar<ph name="LINK2_END" /></translation> <translation id="998747458861718449">S&koða</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 3a8c8d2..3d27446 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -322,7 +322,7 @@ <translation id="1363585519747660921">יש להגדיר מדפסת USB</translation> <translation id="1364664799726141130">לחשבון המאומת אין הרשאת גישה למכשיר. עליך לוודא שהחשבון המאומת הוא <ph name="ACCOUNT" /> כדי לבטל את נעילת הפעילות.</translation> <translation id="1365180424462182382"><ph name="BEGIN_LINK" />הדפדפן שלך מנוהל<ph name="END_LINK" /> על ידי <ph name="ENROLLMENT_DOMAIN" /></translation> -<translation id="1367951781824006909">בחר קובץ</translation> +<translation id="1367951781824006909">בחירת קובץ</translation> <translation id="1369149969991017342">גישה באמצעות מתג (שליטה במחשב בעזרת מתג אחד או שניים בלבד)</translation> <translation id="1372841398847029212">סנכרון עם החשבון שלך</translation> <translation id="1374844444528092021">האישור הנדרש על ידי הרשת "<ph name="NETWORK_NAME" />" אינו מותקן או שכבר אינו חוקי. קבל אישור חדש ונסה להתחבר שוב.</translation> @@ -611,7 +611,7 @@ <translation id="1682548588986054654">חלון נסתר חדש</translation> <translation id="1682867089915960590">להפעיל את הגלישה באמצעות סמן הטקסט?</translation> <translation id="1686550358074589746">הפעלה של הקלדה בהחלקה</translation> -<translation id="168715261339224929">כדי שהסימניות שלך יופיעו בכל המכשירים, יש להפעיל סינכרון.</translation> +<translation id="168715261339224929">כדי שהסימניות שלך יופיעו בכל המכשירים, יש להפעיל סנכרון.</translation> <translation id="1688867105868176567">למחוק את נתוני האתר?</translation> <translation id="1688935057616748272">צריך להזין אות</translation> <translation id="168991973552362966">הוספת מדפסת קרובה</translation> @@ -1743,7 +1743,7 @@ <translation id="3007771295016901659">שכפל את הכרטיסייה</translation> <translation id="3008232374986381779">הפעלת כלים, עורכים וסביבות פיתוח משולבות (IDE) של Linux ב-<ph name="DEVICE_TYPE" />. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation> <translation id="3008272652534848354">איפוס הרשאות</translation> -<translation id="3009300415590184725">האם אתה בטוח שברצונך לבטל את תהליך ההתקנה של שירות הנתונים לנייד?</translation> +<translation id="3009300415590184725">בטוח שברצונך לבטל את תהליך ההתקנה של שירות הנתונים לנייד?</translation> <translation id="3009779501245596802">מסדי נתונים שנוספו לאינדקס</translation> <translation id="3010279545267083280">הסיסמה נמחקה</translation> <translation id="3011384993885886186">אפור חם</translation> @@ -2090,7 +2090,7 @@ <translation id="3438633801274389918">נינג'ה</translation> <translation id="3439153939049640737">אפשר תמיד ל-<ph name="HOST" /> לגשת למיקרופון שלך</translation> <translation id="3439970425423980614">פתיחת PDF בתצוגה מקדימה</translation> -<translation id="3440663250074896476">עוד פעולות לסימניה <ph name="BOOKMARK_NAME" /></translation> +<translation id="3440663250074896476">עוד פעולות לסימנייה <ph name="BOOKMARK_NAME" /></translation> <translation id="3440761377721825626">שאל כשאתר רוצה להשתמש בפלאגין כדי לגשת אל המחשב שלך</translation> <translation id="3441653493275994384">מסך</translation> <translation id="3441663102605358937">יש להיכנס שוב לחשבון <ph name="ACCOUNT" /> כדי לאמת אותו.</translation> @@ -2480,7 +2480,7 @@ <translation id="3856096718352044181">יש לאמת שהספק הזה חוקי או לנסות שוב מאוחר יותר</translation> <translation id="3856800405688283469">בחירת אזור זמן</translation> <translation id="3857807444929313943">להרים ולגעת בחיישן שוב</translation> -<translation id="3860104611854310167"><ph name="PROFILE_NAME" />: הסינכרון הושהה</translation> +<translation id="3860104611854310167"><ph name="PROFILE_NAME" />: הסנכרון הושהה</translation> <translation id="3861386850461794863">שפות לאפליקציות ולאתרים</translation> <translation id="3861638017150647085">שם המשתמש "<ph name="USERNAME" />" לא זמין</translation> <translation id="3862693525629180217">אימות באמצעות חיישן מובנה</translation> @@ -3530,7 +3530,7 @@ <translation id="5141421572306659464">חשבון ראשי</translation> <translation id="5142793792982256885">מהירות גלילה בלוח מגע</translation> <translation id="5142961317498132443">אימות</translation> -<translation id="5143374789336132547">התוסף "<ph name="EXTENSION_NAME" />" שינה את הדף שמוצג כשאתה לוחץ על הלחצן 'דף הבית'.</translation> +<translation id="5143374789336132547">התוסף "<ph name="EXTENSION_NAME" />" שינה את הדף שמוצג בלחיצה על הלחצן 'דף הבית'.</translation> <translation id="5143612243342258355">הקובץ הזה מסוכן</translation> <translation id="5143712164865402236">עבור למסך מלא</translation> <translation id="514575469079499857">קביעת המיקום באמצעות כתובת ה-IP (ברירת מחדל)</translation> @@ -5430,7 +5430,7 @@ <translation id="7414464185801331860">18x</translation> <translation id="7415454883318062233">ההגדרה הושלמה</translation> <translation id="7416362041876611053">שגיאת רשת לא ידועה.</translation> -<translation id="741906494724992817">אין צורך בהרשאות מיוחדות עבור היישום הזה.</translation> +<translation id="741906494724992817">אין צורך בהרשאות מיוחדות עבור האפליקציה הזו.</translation> <translation id="742130257665691897">סימניות הוסרו</translation> <translation id="7421925624202799674">&הצג את מקור הדף</translation> <translation id="7422192691352527311">העדפות...</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 18f4d24..abb48574 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">ಹೋಮ್ ನೆಟ್ವರ್ಕ್, ರೋಮಿಂಗ್ ಇಲ್ಲ</translation> +<translation id="1315056510003830387">Flash ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="1315144594965013365">ಎರಡೂ ಸಾಧನಗಳು ಅನ್ಲಾಕ್ ಆಗಿವೆ ಮತ್ತು ಪರಸ್ಪರ ಹತ್ತಿರದಲ್ಲಿವೆ, ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ. ನೀವು Chromebook ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳುತ್ತಿದ್ದರೆ, ಅದರಲ್ಲಿ Nearby ಶೇರಿಂಗ್ ಆನ್ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ (ಸಮಯವನ್ನು ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ ಸ್ಥಿತಿ ಪ್ರದೇಶವನ್ನು ತೆರೆಯಿರಿ, ನಂತರ Nearby ಶೇರ್ ಆಯ್ಕೆಮಾಡಿ).</translation> <translation id="1316136264406804862">ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="1316495628809031177">ಸಿಂಕ್ ಅನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">ಭೌತಿಕ ಸಿಮ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="1387519831959169718">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿರಿಸಲು, ನೀವು <ph name="NEW_USER" /> ಅವರಿಗಾಗಿ ಹೊಸ ಪ್ರೊಫೈಲ್ ಅನ್ನು ರಚಿಸಬಹುದು</translation> <translation id="138784436342154190">ಡಿಫಾಲ್ಟ್ ಆರಂಭಿಕ ಪುಟವನ್ನು ಮರುಸ್ಥಾಪಿಸುವುದೇ?</translation> +<translation id="1388253969141979417">ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="1388728792929436380">ಅಪ್ಡೇಟ್ಗಳು ಪೂರ್ಣವಾದಾಗ <ph name="DEVICE_TYPE" /> ಸಾಧನವು ಮರುಪ್ರಾರಂಭವಾಗುತ್ತದೆ.</translation> <translation id="1389342855416376185">ಸುರಕ್ಷಿತ ವಿಷಯವನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="1390548061267426325">ದಿನನಿತ್ಯದ ಟ್ಯಾಬ್ ಅಂತೆ ತೆರೆಯಿರಿ</translation> @@ -387,9 +389,11 @@ <translation id="1433811987160647649">ಪ್ರವೇಶಿಸುವ ಮೊದಲು ಕೇಳಿ</translation> <translation id="1434696352799406980">ಇದು ನಿಮ್ಮ ಪ್ರಾರಂಭ ಪುಟ, ಹೊಸ ಟ್ಯಾಬ್ ಪುಟ, ಹುಡುಕಾಟ ಇಂಜಿನ್ ಮತ್ತು ಪಿನ್ ಮಾಡಲಾದ ಟ್ಯಾಬ್ಗಳನ್ನು ಮರುಹೊಂದಿಸುತ್ತದೆ. ಇದು ಎಲ್ಲ ವಿಸ್ತರಣೆಗಳು ಮತ್ತು ಕುಕೀಸ್ನಂತಹ ತಾತ್ಕಾಲಿಕ ಡೇಟಾವನ್ನು ಸಹ ತೆರವುಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಉಳಿಸಿದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="1434886155212424586">ಮುಖಪುಟವು ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವಾಗಿದೆ</translation> +<translation id="1435515966666225466">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಪ್ಲಗ್ಇನ್ ಒಂದನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="1436390408194692385"><ph name="TICKET_TIME_LEFT" /> ವರೆಗೆ ಮಾನ್ಯವಾಗಿರುತ್ತದೆ</translation> <translation id="1436671784520050284">ಸೆಟಪ್ ಮುಂದುವರಿಸಿ</translation> <translation id="1436784010935106834">ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation> +<translation id="1437986450143295708">ಸಮಸ್ಯೆಯನ್ನು ವಿವರವಾಗಿ ವಿವರಿಸಿ</translation> <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation> <translation id="1442851588227551435">ಸಕ್ರಿಯ Kerberos ಟಿಕೆಟ್ ಅನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="1444628761356461360">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಸಾಧನದ ಮಾಲೀಕರಿಂದ ನಿರ್ವಹಿಸಿಲಾಗುತ್ತದೆ, <ph name="OWNER_EMAIL" />.</translation> @@ -473,6 +477,7 @@ <translation id="1530838837447122178">ಮೌಸ್ ಮತ್ತು ಟಚ್ಪ್ಯಾಡ್ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="1531004739673299060">ಅಪ್ಲಿಕೇಶನ್ ವಿಂಡೋ</translation> <translation id="1531275250079031713">'ಹೊಸ ವೈ-ಫೈ ಸೇರಿಸಿ' ಡೈಲಾಗ್ ತೋರಿಸಿ</translation> +<translation id="1535228823998016251">ದೊಡ್ಡ ಧ್ವನಿ</translation> <translation id="1536754031901697553">ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="1537254971476575106">ಪೂರ್ಣಪರದೆ ವರ್ಧಕ</translation> <translation id="15373452373711364">ದೊಡ್ಡ ಮೌಸ್ ಕರ್ಸರ್</translation> @@ -556,6 +561,7 @@ <translation id="1627408615528139100">ಈಗಾಗಲೇ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="1628948239858170093">ಫೈಲ್ ತೆರೆಯುವ ಮೊದಲು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ?</translation> <translation id="1629314197035607094">ಪಾಸ್ವರ್ಡ್ ಅವಧಿ ಮೀರಿದೆ</translation> +<translation id="163072119192489970">ಡೇಟಾವನ್ನು ಕಳುಹಿಸುವುದು ಮತ್ತು ಸ್ವೀಕರಿಸುವುದನ್ನು ಮುಗಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="1630768113285622200">ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಮುಂದುವರಿಸಿ</translation> <translation id="1632082166874334883">ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗಿರುತ್ತದೆ</translation> <translation id="1632803087685957583">ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಪುನರಾವರ್ತನೆ ದರ, ಪದ ಮುನ್ಸೂಚನೆ ಹಾಗೂ ಇನ್ನಷ್ಟನ್ನು ಸರಿಹೊಂದಿಸಲು ನಿಮಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ</translation> @@ -753,6 +759,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> ಅವರನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="184273675144259287">ನಿಮ್ಮ Linux ಆ್ಯಪ್ಗಳು ಮತ್ತು ಫೈಲ್ಗಳನ್ನು ಹಿಂದಿನ ಬ್ಯಾಕಪ್ನೊಂದಿಗೆ ಬದಲಾಯಿಸಿ</translation> <translation id="1842766183094193446">ನೀವು ಖಚಿತವಾಗಿಯೂ ಡೆಮೊ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಲು ಬಯಸುತ್ತೀರಾ?</translation> +<translation id="1845727111305721124">ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> ಅನ್ನು ರನ್ ಮಾಡಲು ಕಂಟ್ರೋಲ್-ಕ್ಲಿಕ್ ಮಾಡಿ</translation> <translation id="1849186935225320012">ಈ ಪುಟಕ್ಕೆ MIDI ಸಾಧನಗಳ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವಿದೆ.</translation> <translation id="1850508293116537636">&ಪ್ರದಕ್ಷಿಣೆಯಂತೆ ತಿರುಗಿಸಿ</translation> @@ -777,6 +784,7 @@ <translation id="187145082678092583">ಕಡಿಮೆ ಆ್ಯಪ್ಗಳು</translation> <translation id="1871534214638631766">ಕಂಟೆಂಟ್ ಮೇಲೆ ಬಲ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಅಥವಾ ದೀರ್ಘಕಾಲ ಒತ್ತಿಹಿಡಿದಾಗ, ಕಂಟೆಂಟ್ಗೆ ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿಯನ್ನು ತೋರಿಸಿ</translation> <translation id="1871615898038944731">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅಪ್ ಟು ಡೇಟ್ ಆಗಿದೆ</translation> +<translation id="1874248162548993294">ಯಾವುದೇ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{ಟ್ಯಾಬ್ ಅನ್ನು ಬೇರೊಂದು ವಿಂಡೋಗೆ ಸರಿಸಿ}one{ಟ್ಯಾಬ್ಗಳನ್ನು ಬೇರೊಂದು ವಿಂಡೋಗೆ ಸರಿಸಿ}other{ಟ್ಯಾಬ್ಗಳನ್ನು ಬೇರೊಂದು ವಿಂಡೋಗೆ ಸರಿಸಿ}}</translation> <translation id="1875386316419689002">ಈ ಟ್ಯಾಬ್, HID ಸಾಧನಕ್ಕೆ ಕನೆಕ್ಟ್ ಆಗಿದೆ.</translation> <translation id="1875387611427697908"><ph name="CHROME_WEB_STORE" /> ಮೂಲಕ ಮಾತ್ರ ಇದನ್ನು ಸೇರಿಸಬಹುದಾಗಿದೆ</translation> @@ -832,6 +840,7 @@ <translation id="1931152874660185993">ಯಾವುದೇ ಕಾಂಪೊನೆಂಟ್ಗಳನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ.</translation> <translation id="1932098463447129402">ಅದಕ್ಕಿಂತ ಮೊದಲಲ್ಲ</translation> <translation id="1933809209549026293">ದಯವಿಟ್ಟು ಮೌಸ್ ಅಥವಾ ಕೀಬೋರ್ಡ್ ಸಂಪರ್ಕಿಸಿ. ನೀವು ಬ್ಲೂಟೂತ್ ಸಾಧನವನ್ನು ಬಳಸುತ್ತಿದ್ದರೆ, ಜೋಡಿಸಲು ಅದು ಸಿದ್ಧವಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation> +<translation id="1935303383381416800">ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ನೋಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="1936931585862840749">ಎಷ್ಟು ಪ್ರತಿಗಳನ್ನು ಪ್ರಿಂಟ್ ಮಾಡಬೇಕೆಂದು (1 ರಿಂದ <ph name="MAX_COPIES" />) ಸೂಚಿಸಲು ಸಂಖ್ಯೆಯನ್ನು ಬಳಸಿ.</translation> <translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> ಪ್ರಕಾರದ ಈ ಸಾಧನದ ಜೊತೆಗೆ ಕಂಟೇನರ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಪ್ರಕಾರವನ್ನು <ph name="ARCHITECTURE_CONTAINER" /> ಆಮದು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ನೀವು ಈ ಕಂಟೇನರ್ ಅನ್ನು ಬೇರೊಂದು ಸಾಧನದಲ್ಲಿ ಮರುಸ್ಥಾಪಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು ಅಥವಾ ಫೈಲ್ಗಳು ಆ್ಯಪ್ ಅನ್ನು ತೆರೆಯುವುದರ ಮೂಲಕ ಈ ಕಂಟೇನರ್ ಚಿತ್ರದಲ್ಲಿರುವ ಫೈಲ್ಗಳನ್ನು ನೀವು ಪ್ರವೇಶಿಸಬಹುದು.</translation> <translation id="1938351510777341717">ಬಾಹ್ಯ ಕಮಾಂಡ್ ಕೀ</translation> @@ -949,6 +958,7 @@ <translation id="2090165459409185032">ನಿಮ್ಮ ಖಾತೆಯ ಮಾಹಿತಿಯನ್ನು ಮರುಪಡೆಯಲು, ಇಲ್ಲಿಗೆ ಹೋಗಿ: google.com/accounts/recovery</translation> <translation id="2090876986345970080">ಸಿಸ್ಟಂ ಸುರಕ್ಷತಾ ಸೆಟ್ಟಿಂಗ್</translation> <translation id="2091887806945687916">ಶಬ್ಧ</translation> +<translation id="209539936453343974">ಪೋಷಕ ನಿಯಂತ್ರಣಗಳನ್ನು ಸೆಟಪ್ ಮಾಡಲು, ಮಗುವು ಪೋಷಕರು ನಿರ್ವಹಿಸುವ Google ಖಾತೆಯೊಂದನ್ನು ಹೊಂದಿರಬೇಕು. <ph name="DEVICE_TYPE_PLURAL" /> ಸಾಧನವು ಸ್ಕ್ರೀನ್ ಮಿತಿಗಳನ್ನು ಸೆಟಪ್ ಮಾಡಲು, ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಅನುಮೋದಿಸಲು ಅಥವಾ ನಿರ್ಬಂಧಿಸಲು ಮತ್ತು Family Link ಆ್ಯಪ್ ಮೂಲಕ ಹೆಚ್ಚಿನದನ್ನು ಮಾಡಲು ಪೋಷಕರಿಗೆ ಅನುಮತಿಸುತ್ತದೆ. Google Classroom ನಂತಹ ಸೈಟ್ಗಳಲ್ಲಿ ಮಗು ಶಾಲಾ ಕೆಲಸಗಳನ್ನು ಮಾಡಬೇಕಾದರೆ, ಶಾಲೆಯ ಖಾತೆಯೊಂದನ್ನು ನಂತರ ಸೇರಿಸಬಹುದು.</translation> <translation id="2096715839409389970">ಮೂರನೇ ವ್ಯಕ್ತಿ ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ</translation> <translation id="2097372108957554726">ಹೊಸ ಸಾಧನಗಳನ್ನು ನೋಂದಾಯಿಸಲು ನೀವು Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ</translation> <translation id="2098805196501063469">ಬಾಕಿ ಉಳಿದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation> @@ -1099,6 +1109,7 @@ <translation id="2261323523305321874">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸಿಸ್ಟಂನಾದ್ಯಂತ ಒಂದು ಬದಲಾವಣೆಯನ್ನು ಮಾಡಿದ್ದಾರೆ. ಇದರಿಂದಾಗಿ ಕೆಲವು ಹಳೆಯ ಪ್ರೊಫೈಲ್ಗಳು ನಿಷ್ಕ್ರಿಯವಾಗುತ್ತವೆ.</translation> <translation id="2262332168014443534">HTTPS ಪುಟಗಳನ್ನು ಒಳಗೊಂಡಂತೆ, ಎಲ್ಲಾ ಪುಟಗಳಲ್ಲಿಯೂ ವೇಗವಾಗಿ ಬ್ರೌಸಿಂಗ್ ಮಾಡುವುದನ್ನು ಲೈಟ್ ಮೋಡ್ ಈಗ ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ.</translation> <translation id="2262477216570151239">ಪುನರಾವರ್ತನೆಗೆ ಮೊದಲು ವಿಳಂಬ</translation> +<translation id="2262888617381992508">ಸಂರಕ್ಷಿತ ವಿಷಯವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="2263189956353037928">ಸೈನ್ ಔಟ್ ಮಾಡಿ ಮತ್ತು ಮರಳಿ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="2263371730707937087">ಸ್ಕ್ರೀನ್ ರಿಫ್ರೆಶ್ ರೇಟ್</translation> <translation id="22665427234727190">ಸೈಟ್, ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಬಯಸಿದಾಗ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು)</translation> @@ -1366,6 +1377,7 @@ <translation id="2571655996835834626">ಕುಕೀಗಳು, JavaScript, ಪ್ಲಗ್ಇನ್ಗಳು, ಜಿಯೊಲೊಕೇಶನ್, ಮೈಕ್ರೊಫೋನ್, ಕ್ಯಾಮರಾ, ಮುಂತಾದ ವೈಶಿಷ್ಟ್ಯಗಳಿಗೆ ವೆಬ್ಸೈಟ್ಗಳ ಪ್ರವೇಶವನ್ನು ನಿಯಂತ್ರಿಸುವ ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬದಲಾಯಿಸಿ.</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> ಗೆ ಓದಲು-ಮಾತ್ರ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ.</translation> <translation id="2575247648642144396">ಪ್ರಸ್ತುತ ಪುಟದಲ್ಲಿ ವಿಸ್ತರಣೆಯು ಕಾರ್ಯನಿರ್ವಹಿಸಿದಾಗ ಈ ಐಕಾನ್ ಗೋಚರಿಸುತ್ತದೆ. ಐಕಾನ್ನ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡುವುದರ ಮೂಲಕ ಅಥವಾ <ph name="EXTENSION_SHORTCUT" /> ಒತ್ತುವುದರ ಮೂಲಕ ಈ ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸಿ.</translation> +<translation id="2575441894380764255">ಅನಪೇಕ್ಷಿತ ಅಥವಾ ದಾರಿತಪ್ಪಿಸುವ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="257779572837908839">ಸಭೆಗಳಿಗಾಗಿ Chromebox ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ</translation> <translation id="2579232805407578790">ಸರ್ವರ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಕನೆಕ್ಷನ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ಸಮಸ್ಯೆ ಮುಂದುವರಿದರೆ, ನಿಮ್ಮ Chromebook ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ. ದೋಷ ಕೋಡ್: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">ಬಹು ಫೈಲ್ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲು <ph name="HOST" /> ಗೆ ಎಲ್ಲಾ ಸಮಯದಲ್ಲೂ ಅನುಮತಿ ನೀಡಿ</translation> @@ -1632,6 +1644,7 @@ <translation id="2880660355386638022">ವಿಂಡೋ ಪ್ಲೇಸ್ಮೆಂಟ್</translation> <translation id="2881076733170862447">ನೀವು ವಿಸ್ತರಣೆಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಮರು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಮರು ಹೊಂದಿಸಲಾಗುತ್ತದೆ</translation> +<translation id="288387288628762616">Flash ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="2885378588091291677">ಕಾರ್ಯ ನಿರ್ವಾಹಕ</translation> <translation id="2885729872133513017">ಸರ್ವರ್ನ ಉತ್ತರವನ್ನು ಡೀಕೋಡ್ ಮಾಡುವಾಗ ಸಮಸ್ಯೆ ಸಂಭವಿಸಿದೆ.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1666,6 +1679,7 @@ <translation id="2923234477033317484">ಈ ಖಾತೆಯನ್ನು ತೆಗೆದುಹಾಕಿ</translation> <translation id="2926085873880284723">ಡಿಫಾಲ್ಟ್ ಶಾರ್ಟ್ಕಟ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಿ</translation> <translation id="2927017729816812676">ಕ್ಯಾಷ್ ಸಂಗ್ರಹಣೆ</translation> +<translation id="2928795416630981206">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಸ್ಥಾನವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="2931157624143513983">ಮುದ್ರಿಸಬಹುದಾದ ಪ್ರದೇಶಕ್ಕೆ ಹೊಂದಿಸಿ</translation> <translation id="2932085390869194046">ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಸೂಚಿಸಿ...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (ಮಕ್ಕಳಿಗೆ ಖಾತೆ)</translation> @@ -1673,6 +1687,7 @@ <translation id="2932883381142163287">ನಿಂದನೆ ವರದಿ ಮಾಡಿ</translation> <translation id="2933632078076743449">ಕೊನೆಯ ಅಪ್ಡೇಟ್</translation> <translation id="2934999512438267372">MIDI ಸಾಧನಗಳ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ</translation> +<translation id="2935654492420446828">ನಂತರ ಶಾಲೆಯ ಖಾತೆಯೊಂದನ್ನು ಸೇರಿಸಿ</translation> <translation id="2936851848721175671">ಬ್ಯಾಕಪ್ ಮಾಡಿ & ಮರುಸ್ಥಾಪಿಸಿ</translation> <translation id="2938225289965773019"><ph name="PROTOCOL" /> ಲಿಂಕ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="2938845886082362843">ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅಳಿಸಿ</translation> @@ -1776,6 +1791,7 @@ <translation id="3060379269883947824">ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಆಲಿಸಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="3060952009917586498">ಸಾಧನದ ಭಾಷೆಯನ್ನು ಬದಲಾಯಿಸಿ. ಪ್ರಸ್ತುತ ಭಾಷೆ <ph name="LANGUAGE" /> ಆಗಿದೆ.</translation> <translation id="3065041951436100775">ಟ್ಯಾಬ್ ನಾಶಪಡಿಸಿದ ಪ್ರತಿಕ್ರಿಯೆ.</translation> +<translation id="306535478112428611">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಫೈಲ್ಗಳು ಮತ್ತು ಫೋಲ್ಡರ್ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="3065522099314259755">ಕೀಬೋರ್ಡ್ ಪುನರಾವರ್ತನೆಯ ವಿಳಂಬ</translation> <translation id="3067198179881736288">ಅಪ್ಲಿಕೇಶನ್ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಬೇಕೇ?</translation> <translation id="3067198360141518313">ಈ ಪ್ಲಗಿನ್ ಚಾಲನೆ ಮಾಡು</translation> @@ -1911,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - ನೆಟ್ವರ್ಕ್ ದೋಷ</translation> <translation id="3248902735035392926">ಎಲ್ಲಕ್ಕಿಂತ ಸುರಕ್ಷತೆಯೇ ಮುಖ್ಯ. <ph name="BEGIN_LINK" />ಈಗ ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ಪರಿಶೀಲಿಸಲು<ph name="END_LINK" /> ಸ್ವಲ್ಪ ಸಮಯವನ್ನು ತೆಗೆದುಕೊಳ್ಳಿ.</translation> <translation id="3251759466064201842"><ಪ್ರಮಾಣಪತ್ರದ ಭಾಗವಲ್ಲ></translation> +<translation id="325238099842880997">ಮಕ್ಕಳಿಗೆ ಮನೆಯಲ್ಲಿ ಆಟವಾಡಲು, ಅನ್ವೇಷಿಸಲು ಮತ್ತು ಶಾಲೆಯ ಕೆಲಸ ಮಾಡಲು ಸಹಾಯ ಮಾಡುವುದಕ್ಕಾಗಿ ತಳಮಟ್ಟದ ಡಿಜಿಟಲ್ ನಿಯಮಗಳನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="3253225298092156258">ಲಭ್ಯವಿಲ್ಲ</translation> <translation id="3253448572569133955">ಅಪರಿಚಿತ ಖಾತೆ</translation> <translation id="3254084468305910013">{COUNT,plural, =0{ಯಾವುದೇ ಭದ್ರತಾ ಸಮಸ್ಯೆಗಳು ಕಂಡುಬಂದಿಲ್ಲ}=1{{COUNT} ಭದ್ರತಾ ಸಮಸ್ಯೆ ಕಂಡುಬಂದಿದೆ}one{{COUNT} ಭದ್ರತಾ ಸಮಸ್ಯೆಗಳು ಕಂಡುಬಂದಿವೆ}other{{COUNT} ಭದ್ರತಾ ಸಮಸ್ಯೆಗಳು ಕಂಡುಬಂದಿವೆ}}</translation> @@ -2038,6 +2055,7 @@ <translation id="3404249063913988450">ಸ್ಕ್ರೀನ್ ಸೇವರ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="3405664148539009465">ಫಾಂಟ್ಗಳನ್ನು ಗ್ರಾಹಕೀಯಗೊಳಿಸಿ</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">ವರ್ಚುವಲ್ ರಿಯಾಲಿಟಿ ಸಾಧನಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="3406396172897554194">ಭಾಷೆ ಅಥವಾ ಇನ್ಪುಟ್ ಹೆಸರಿನ ಮೂಲಕ ಹುಡುಕಿ</translation> <translation id="3406605057700382950">ಬುಕ್ಮಾರ್ಕ್ಗಳ ಪಟ್ಟಿಯನ್ನು &ತೋರಿಸಿ</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{ಈ ವಿಸ್ತರಣೆ ಅಪಾಯ ಉಂಟುಮಾಡಬಹುದು}one{ಈ ವಿಸ್ತರಣೆಗಳು ಅಪಾಯ ಉಂಟುಮಾಡಬಹುದು}other{ಈ ವಿಸ್ತರಣೆಗಳು ಅಪಾಯ ಉಂಟುಮಾಡಬಹುದು}}</translation> @@ -2202,6 +2220,7 @@ <translation id="3586806079541226322">ಈ ಫೈಲ್ ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="3586931643579894722">ವಿವರಗಳನ್ನು ಮರೆಮಾಡಿ</translation> <translation id="3587482841069643663">ಎಲ್ಲ</translation> +<translation id="3588790464166520201">ಪಾವತಿ ಹ್ಯಾಂಡ್ಲರ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="3589766037099229847">ಅಸುರಕ್ಷಿತ ವಿಷಯವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="3590194807845837023">ಪ್ರೊಫೈಲ್ ಅನ್ಲಾಕ್ ಮಾಡು ಹಾಗೂ ಮರುಪ್ರಾರಂಭಿಸು</translation> <translation id="3590295622232282437">ನಿರ್ವಹಿಸಲಾದ ಸೆಷನ್ಗೆ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ.</translation> @@ -2427,6 +2446,7 @@ <translation id="3822559385185038546">ಈ ಪ್ರಾಕ್ಸಿಯನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಜಾರಿಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="3823310065043511710">Linux ಗಾಗಿ ಕನಿಷ್ಠ <ph name="INSTALL_SIZE" /> ಸ್ಥಳಾವಕಾಶವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ.</translation> <translation id="3824621460022590830">ಸಾಧನ ನೋಂದಣಿ ಟೋಕನ್ ಅಮಾನ್ಯವಾಗಿದೆ. ನಿಮ್ಮ ಸಾಧನದ ಮಾಲೀಕರು ಅಥವಾ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ. ದೋಷ ಕೋಡ್: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">ಮೋಷನ್ ಸೆನ್ಸರ್ಗಳನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="3826440694796503677">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಹೆಚ್ಚಿನ Google ಖಾತೆಗಳ ಸೇರಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="3827306204503227641">ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ ರದ್ದುಗೊಳಿಸಿರುವ ಪ್ಲಗ್-ಇನ್ಗಳ ಅನುಮತಿಯನ್ನು ಮುಂದುವರಿಸಿ</translation> <translation id="3827774300009121996">&ಪೂರ್ಣ ಪರದೆ</translation> @@ -2479,6 +2499,8 @@ <translation id="3873423927483480833">ಪಿನ್ಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="3873915545594852654">ARC++ ನಲ್ಲಿ ಸಮಸ್ಯೆ ಸಂಭವಿಸಿದೆ.</translation> <translation id="3874164307099183178">Google Assistant ಆನ್ ಮಾಡಿ</translation> +<translation id="3877075909000773256"><ph name="USER_EMAIL" /> ಖಾತೆಯ ಅಡಿಯಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿರುವ <ph name="USER_NAME" /> ಅವರ ಸಾಧನಕ್ಕಾಗಿ Nearby ಶೇರ್ ಸೆಟ್ಟಿಂಗ್ಗಳು.</translation> +<translation id="387771067039689031">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಪ್ಲಗ್ಇನ್ ಒಂದನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="3879748587602334249">ಡೌನ್ಲೋಡ್ ನಿರ್ವಾಹಕ</translation> <translation id="3881478300875776315">ಕೆಲವೇ ಸಾಲುಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="3882165008614329320">ಕ್ಯಾಮರಾ ಅಥವಾ ಫೈಲ್ನಲ್ಲಿರುವ ಪ್ರಸ್ತುತ ವೀಡಿಯೊ</translation> @@ -2515,6 +2537,7 @@ <translation id="3919145445993746351">ನಿಮ್ಮ ಎಲ್ಲಾ ಕಂಪ್ಯೂಟರ್ಗಳಲ್ಲೂ ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ಪಡೆಯಲು, ಸಿಂಕ್ ಅನ್ನು ಆನ್ ಮಾಡಿ</translation> <translation id="3920504717067627103">ಪ್ರಮಾಣಪತ್ರ ನೀತಿಗಳು</translation> <translation id="392089482157167418">ChromeVox ಸಕ್ರಿಯಗೊಳಿಸಿ (ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ)</translation> +<translation id="3920909973552939961">ಪಾವತಿ ಹ್ಯಾಂಡ್ಲರ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="3923184630988645767">ಡೇಟಾ ಬಳಕೆ</translation> <translation id="3923676227229836009">ಫೈಲ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಈ ಪುಟಕ್ಕೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="3924145049010392604">Meta</translation> @@ -2639,6 +2662,7 @@ <translation id="4058793769387728514">ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ಇದೀಗ ಪರಿಶೀಲಿಸಿ</translation> <translation id="406070391919917862">ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್</translation> <translation id="4061374428807229313">ಹಂಚಿಕೊಳ್ಳಲು, Files ಆ್ಯಪ್ನಲ್ಲಿರುವ ಫೋಲ್ಡರ್ ಮೇಲೆ ಬಲ ಕ್ಲಿಕ್ ಮಾಡಿ, ತದನಂತರ "Parallels Desktop ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ" ಆಯ್ಕೆ ಮಾಡಿ.</translation> +<translation id="406213378265872299">ಕಸ್ಟಮೈಸ್ ಮಾಡಿದ ನಡವಳಿಕೆಗಳು</translation> <translation id="4065876735068446555">ನೀವು ಬಳಸುತ್ತಿರುವ ನೆಟ್ವರ್ಕ್ (<ph name="NETWORK_ID" />) ನ ಲಾಗಿನ್ ಪುಟಕ್ಕೆ ಭೇಟಿ ನೀಡಬೇಕಾದ ಅಗತ್ಯವಿದೆ.</translation> <translation id="4066207411788646768">ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಲಭ್ಯವಿರುವ ಪ್ರಿಂಟರ್ಗಳನ್ನು ನೋಡಲು, ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="4068776064906523561">ಉಳಿಸಿದ ಬೆರಳಚ್ಚುಗಳು</translation> @@ -2786,6 +2810,7 @@ <translation id="425573743389990240">ವ್ಯಾಟ್ಗಳಲ್ಲಿ ಬ್ಯಾಟರಿ ಡಿಸ್ಚಾರ್ಜ್ ದರ (ನಕಾರಾತ್ಮಕ ಮೌಲ್ಯ ಎಂದರೆ ಬ್ಯಾಟರಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ ಎಂದರ್ಥ)</translation> <translation id="4256316378292851214">ಇದರಂತೆ ವೀಡಿಯೊ ಉ&ಳಿಸಿ...</translation> <translation id="4258348331913189841">ಫೈಲ್ ಸಿಸ್ಟಂಗಳು</translation> +<translation id="4259388776256904261">ಇದು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" />, ಅಪಾಯಕಾರಿ ಫೈಲ್ ಆಗಿರಬಹುದು. ಸ್ಕ್ಯಾನಿಂಗ್ಗಾಗಿ, Google ಸುಧಾರಿತ ರಕ್ಷಣೆಗೆ ಕಳುಹಿಸಬೇಕೆ? ಡೌನ್ಲೋಡ್ ಪಟ್ಟಿಯ ಪ್ರದೇಶಕ್ಕೆ ಹೋಗಲು Shift+F6 ಒತ್ತಿ.</translation> <translation id="4263223596040212967">ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ವಿನ್ಯಾಸವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="4263757076580287579">ಮುದ್ರಕದ ನೋಂದಣಿಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ.</translation> @@ -2893,6 +2918,7 @@ <translation id="4400632832271803360">ಮೇಲಿನ-ಸಾಲುಗಳ ಕೀಗಳ ನಡವಳಿಕೆಯನ್ನು ಬದಲಿಸಲು ಲಾಂಚರ್ ಕೀ ಅನ್ನು ಒತ್ತಿ ಹಿಡಿಯಿರಿ</translation> <translation id="4400963414856942668">ಟ್ಯಾಬ್ ಅನ್ನು ಬುಕ್ಮಾರ್ಕ್ ಮಾಡಲು ನೀವು ಸ್ಟಾರ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಬಹುದು</translation> <translation id="4403775189117163360">ಬೇರೊಂದು ಫೋಲ್ಡರ್ ಆಯ್ಕೆಮಾಡಿ</translation> +<translation id="440391631796167175">ಯಾವುದೇ ದುರ್ಬಲ ಪಾಸ್ವರ್ಡ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> <translation id="4404136731284211429">ಮತ್ತೆ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</translation> <translation id="4404843640767531781"><ph name="APP_NAME" /> ಅನ್ನು ನಿಮ್ಮ ಪೋಷಕರು ನಿರ್ಬಂಧಿಸಿದ್ದಾರೆ ಈ ಆ್ಯಪ್ ಬಳಸುವುದಕ್ಕೆ, ನಿಮ್ಮ ಪೋಷಕರ ಅನುಮತಿಯನ್ನು ಕೇಳಿ.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2937,6 +2963,7 @@ <translation id="4450974146388585462">ಪತ್ತೆಹಚ್ಚುವಿಕೆ</translation> <translation id="4451479197788154834">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಈ ಸಾಧನದಲ್ಲಿ ಮತ್ತು ನಿಮ್ಮ ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ</translation> <translation id="4451757071857432900">ಅತಿಕ್ರಮಣಕಾರಿಯಾಗಿರುವ ಅಥವಾ ತಪ್ಪುದಾರಿಗೆಳೆಯುವ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸುವ ಸೈಟ್ಗಳಲ್ಲಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> +<translation id="4453205916657964690">ಸಬ್ನೆಟ್ ಮಾಸ್ಕ್</translation> <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" /> ಹುಡುಕಿ ಅಥವಾ URL ಟೈಪ್ ಮಾಡಿ</translation> <translation id="4459169140545916303"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> ದಿನಗಳ ಹಿಂದೆ ಸಕ್ರಿಯ</translation> <translation id="4460014764210899310">ಗುಂಪು ವಿಂಗಡಿಸಿ</translation> @@ -2964,6 +2991,7 @@ <translation id="4481530544597605423">ಜೋಡಿಯಾಗಿರದ ಸಾಧನಗಳು</translation> <translation id="4483049906298469269">ಡೀಫಾಲ್ಟ್ ಅಲ್ಲದ ನೆಟ್ವರ್ಕ್ ಗೇಟ್ವೇಗೆ ಪಿಂಗ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</translation> <translation id="4487489714832036847">ಸಾಂಪ್ರದಾಯಿಕ ಸಾಫ್ಟ್ವೇರ್ ಬದಲಾಗಿ Chromebook ಗಳು ಆ್ಯಪ್ಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಉತ್ಪಾದಕತೆ, ಮನರಂಜನೆ ಮತ್ತು ಇನ್ನಷ್ಟವುಗಳಿಗಾಗಿ ಆ್ಯಪ್ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ.</translation> +<translation id="4488257340342212116">ನಿಮ್ಮ ಕ್ಯಾಮೆರಾ ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="4488502501195719518">ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ?</translation> <translation id="449232563137139956">ಸೈಟ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ, ಆನ್ಲೈನ್ ಸ್ಟೋರ್ಗಳ ಫೋಟೋಗಳು ಅಥವಾ ಸುದ್ದಿ ಲೇಖನಗಳಂತಹ ಉದಾಹರಣೆಯನ್ನು ಒದಗಿಸಲು ಚಿತ್ರಗಳನ್ನು ತೋರಿಸುತ್ತವೆ</translation> <translation id="4493468155686877504">ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು (<ph name="INSTALL_SIZE" />)</translation> @@ -2996,6 +3024,7 @@ <translation id="4524832533047962394">ಒದಗಿಸಿದ ನೋಂದಣಿ ಮೋಡ್ ಅನ್ನು ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ನ ಈ ಆವೃತ್ತಿಯು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ನೀವು ಹೊಚ್ಚ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ರನ್ ಮಾಡುತ್ತಿದ್ದೀರಿ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation> <translation id="4527186207340858212">ಕೆಲಸಕ್ಕಾಗಿ ಹೊಸ ಪ್ರೊಫೈಲ್ ಅನ್ನು ರಚಿಸಬೇಕೆ?</translation> <translation id="452750746583162491">ಸಿಂಕ್ ಮಾಡಲಾಗಿರುವ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಪರಿಶೀಲಿಸಿ</translation> +<translation id="4527929807707405172">ಹಿಮ್ಮುಖ ಸ್ಕ್ರಾಲ್ ಮಾಡುವಿಕೆ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation> <translation id="4528494169189661126">ಅನುವಾದ ಸಲಹೆ</translation> <translation id="4530494379350999373">ಮೂಲ</translation> <translation id="4531924570968473143">ಈ <ph name="DEVICE_TYPE" /> ಗೆ ನೀವು ಯಾರನ್ನು ಸೇರಿಸಲು ಬಯಸುತ್ತೀರಿ?</translation> @@ -3016,6 +3045,7 @@ <translation id="4545028762441890696">ಇದನ್ನು ಮರು-ಸಕ್ರಿಯಗೊಳಿಸಲು, ಹೊಸ ಅನುಮತಿಗಳನ್ನು ಸ್ವೀಕರಿಸಿ:</translation> <translation id="4545759655004063573">ಸಾಕಷ್ಟು ಅನುಮತಿಗಳು ಇಲ್ಲದ ಕಾರಣ ಉಳಿಸಲಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೊಂದು ಸ್ಥಾನದಲ್ಲಿ ಉಳಿಸಿ.</translation> <translation id="4546308221697447294">Google Chrome ಮೂಲಕ ವೇಗವಾಗಿ ಬ್ರೌಸ್ ಮಾಡಿ</translation> +<translation id="4546345569117159016">ಬಲ ಬಟನ್</translation> <translation id="4546692474302123343">Google Assistant ಧ್ವನಿ ಇನ್ಪುಟ್</translation> <translation id="4547659257713117923">ಇತರ ಸಾಧನಗಳಿಂದ ಯಾವುದೇ ಟ್ಯಾಬ್ಗಳಿಲ್ಲ</translation> <translation id="4547672827276975204">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಸಿ</translation> @@ -3075,6 +3105,7 @@ <translation id="4608500690299898628">&ಹುಡುಕು...</translation> <translation id="4608520674724523647">ಯಶಸ್ವಿ ನೋಂದಣಿಯ ನಿದರ್ಶನ</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> ಸೂಕ್ಷ್ಮ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ</translation> +<translation id="4609987916561367134">JavaScript ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ಗೆ ದೋಷ ಎದುರಾಗಿದೆ</translation> <translation id="4610637590575890427"><ph name="SITE" /> ವೆಬ್ಸೈಟ್ಗೆ ಹೋಗುವುದೇ?</translation> <translation id="4611114513649582138">ಡೇಟಾ ಸಂಪರ್ಕ ಲಭ್ಯವಿದೆ</translation> @@ -3186,6 +3217,7 @@ <translation id="473775607612524610">ಅಪ್ಡೇಟ್</translation> <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" /> ರಲ್ಲಿ <ph name="CURRENT_ELEMENT" /> ಹೆಚ್ಚುವರಿ ವಿಷಯವನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation> <translation id="4739639199548674512">ಟಿಕೆಟ್ಗಳು</translation> +<translation id="4742334355511750246">ಚಿತ್ರಗಳನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{ಸೈಟ್ ಅನ್ನು ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ}one{ಸೈಟ್ಗಳನ್ನು ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ}other{ಸೈಟ್ಗಳನ್ನು ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ}}</translation> <translation id="4746351372139058112">Messages</translation> @@ -3322,6 +3354,7 @@ <translation id="4908811072292128752">ಒಮ್ಮೆಲೆ ಎರಡೂ ಸೈಟ್ಗಳನ್ನು ಬ್ರೌಸ್ ಮಾಡಲು ಟ್ಯಾಬ್ ತೆರೆಯಿರಿ</translation> <translation id="4909038193460299775">ಈ ಖಾತೆಯನ್ನು <ph name="DOMAIN" /> ನಿರ್ವಹಿಸುತ್ತಿರುವ ಕಾರಣದಿಂದ, ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಈ ಸಾಧನದಿಂದ ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಆದರೆ, ನಿಮ್ಮ ಡೇಟಾವು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿಯೇ ಸಂಗ್ರಹಿತವಾಗಿರುತ್ತದೆ ಮತ್ತು ಅದನ್ನು <ph name="BEGIN_LINK" />Google ಡ್ಯಾಶ್ಬೋರ್ಡ್ನಲ್ಲಿ<ph name="END_LINK" /> ನಿರ್ವಹಿಸಬಹುದಾಗಿದೆ.</translation> <translation id="4912643508233590958">ತಟಸ್ಥದ ಎಚ್ಚರಿಸುವಿಕೆಗಳು</translation> +<translation id="4915961947098019832">ಚಿತ್ರಗಳನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="4916542008280060967"><ph name="FILE_NAME" /> ಅನ್ನು ಸೈಟ್ ಎಡಿಟ್ ಮಾಡಲು ಅನುಮತಿಸುವುದೇ?</translation> <translation id="491691592645955587">ಸುರಕ್ಷಿತ ಬ್ರೌಸರ್ಗೆ ಬದಲಾಯಿಸಿ</translation> <translation id="4917385247580444890">ಪ್ರಬಲ</translation> @@ -3409,6 +3442,7 @@ <translation id="5027550639139316293">ಇಮೇಲ್ ಪ್ರಮಾಣಪತ್ರ</translation> <translation id="5027562294707732951">ವಿಸ್ತರಣೆ ಸೇರಿಸು</translation> <translation id="5029568752722684782">ನಕಲು ತೆರವುಗೊಳಿಸು</translation> +<translation id="5033137252639132982">ಮೋಷನ್ ಸೆನ್ಸರ್ಗಳನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5033266061063942743">ಜ್ಯಾಮಿತೀಯ ಆಕೃತಿಗಳು</translation> <translation id="5036662165765606524">ಬಹು ಫೈಲ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಯಾವುದೇ ಸೈಟ್ಗೆ ಅನುಮತಿಸುವುದು ಬೇಡ</translation> <translation id="5037676449506322593">ಎಲ್ಲವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> @@ -3458,6 +3492,7 @@ <translation id="5088172560898466307">ಸರ್ವರ್ ಹೋಸ್ಟ್ ಹೆಸರು</translation> <translation id="5088534251099454936">RSA ಎನ್ಕ್ರಿಪ್ಶನ್ನೊಂದಿಗೆ PKCS #1 SHA-512</translation> <translation id="5089810972385038852">ರಾಜ್ಯ</translation> +<translation id="5090637338841444533">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಸ್ಥಾನವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5094721898978802975">ಸಹಕರಿಸುವ ಸ್ಥಳೀಯ ಅಪ್ಲಿಕೇಶನ್ಗಳೊಂದಿಗೆ ಸಂವಹಿಸಿ</translation> <translation id="5097002363526479830">'<ph name="NAME" />' ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಲು ವಿಫಲವಾಗಿದೆ: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">ಪರಿಕರ: <ph name="PRINT_NAME" /></translation> @@ -3766,6 +3801,7 @@ <translation id="5471768120198416576">ನಮಸ್ಕಾರ! ನಾನು ನಿಮ್ಮ ಪಠ್ಯದಿಂದ ಧ್ವನಿಯ ಧ್ವನಿ.</translation> <translation id="5472627187093107397">ಈ ಸೈಟ್ಗಾಗಿ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಉಳಿಸಿ</translation> <translation id="5473333559083690127">ಹೊಸ ಪಿನ್ ಮರು-ನಮೂದಿಸಿ</translation> +<translation id="5481273127572794904">ಬಹು ಫೈಲ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5481941284378890518">ಸಮೀಪದ ಪ್ರಿಂಟರ್ಗಳನ್ನು ಸೇರಿಸು</translation> <translation id="5483785310822538350">ಫೈಲ್ ಮತ್ತು ಸಾಧನ ಪ್ರವೇಶವನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation> <translation id="5485080380723335835">ಸುರಕ್ಷತೆಗಾಗಿ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ.</translation> @@ -3787,6 +3823,7 @@ <translation id="5495466433285976480">ಇದು ನಿಮ್ಮ ಮುಂದಿನ ಮರುಪ್ರಾರಂಭದ ನಂತರ ಎಲ್ಲಾ ಸ್ಥಳೀಯ ಬಳಕೆದಾರರು, ಫೈಲ್ಗಳು, ಡೇಟಾ ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ಎಲ್ಲಾ ಬಳಕೆದಾರರು ಮತ್ತೆ ಸೈನ್ ಇನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation> <translation id="5495597166260341369">ಡಿಸ್ಪ್ಲೇ ಅನ್ನು ಆನ್ನಲ್ಲೇ ಇರಿಸಿ</translation> <translation id="5496587651328244253">ವ್ಯವಸ್ಥಿತಗೊಳಿಸಿ</translation> +<translation id="5496730470963166430">ಪಾಪ್-ಅಪ್ಗಳನ್ನು ಕಳುಹಿಸಲು ಅಥವಾ ಮರುನಿರ್ದೇಶನಗಳನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5497251278400702716">ಈ ಫೈಲ್</translation> <translation id="5498967291577176373">ನಿಮ್ಮ ಹೆಸರು, ವಿಳಾಸ ಅಥವಾ ಫೋನ್ ಸಂಖ್ಯೆಯಂತಹ ಇನ್ಲೈನ್ ಸಲಹೆಗಳ ಮೂಲಕ ವೇಗವಾಗಿ ಬರೆಯಿರಿ</translation> <translation id="5499313591153584299">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ಗೆ ಈ ಫೈಲ್ ಅಪಾಯಕಾರಿ ಆಗಿರಬಹುದು.</translation> @@ -3794,6 +3831,7 @@ <translation id="5500709606820808700">ಸುರಕ್ಷತಾ ಪರಿಶೀಲನೆಯನ್ನು ಈ ದಿನ ನಡೆಸಲಾಗಿದೆ</translation> <translation id="5501809658163361512">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> ಗಳನ್ನು <ph name="DEVICE_NAME" /> ನಿಂದ ಸ್ವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ}one{<ph name="ATTACHMENTS" /> ಗಳನ್ನು <ph name="DEVICE_NAME" /> ನಿಂದ ಸ್ವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ}other{<ph name="ATTACHMENTS" /> ಗಳನ್ನು <ph name="DEVICE_NAME" /> ನಿಂದ ಸ್ವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ}}</translation> <translation id="5502500733115278303">Firefox ಇಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಲಾಗಿದೆ</translation> +<translation id="5502915260472117187">ಮಗು</translation> <translation id="5503982651688210506">ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ಬಳಸಲು ಮತ್ತು ಸರಿಸಲು ಹಾಗೂ ನಿಮ್ಮ ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಬಳಸಲು <ph name="HOST" /> ಗೆ ಅನುಮತಿಸುವುದನ್ನು ಮುಂದುವರಿಸಿ</translation> <translation id="5505264765875738116">ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಬಹುದೇ ಎಂದು ಸೈಟ್ಗಳು ಕೇಳಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="5505307013568720083">ಶಾಯಿ ಖಾಲಿಯಾಗಿದೆ</translation> @@ -3881,6 +3919,7 @@ <translation id="5596627076506792578">ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು</translation> <translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> MB ಮೊಬೈಲ್ ಡೇಟಾ ಬಳಸಿಕೊಂಡು ಅಪ್ಡೇಟ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ. ಮುಂದುವರಿಸಲು ನೀವು ಬಯಸುವಿರಾ?</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5601823921345337195">MIDI ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5602765853043467355">ಈ ಸಾಧನದಿಂದ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇನ್ನಷ್ಟನ್ನು ತೆರವುಗೊಳಿಸಿ</translation> <translation id="5605623530403479164">ಇತರ ಹುಡುಕಾಟದ ಇಂಜಿನ್ಗಳು</translation> <translation id="5605758115928394442">ಇದು ನೀವೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಿಮ್ಮ ಫೋನ್ಗೆ ಒಂದು ಅಧಿಸೂಚನೆಯನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ.</translation> @@ -4002,6 +4041,7 @@ <translation id="5747552184818312860">ಅವಧಿ ಮೀರುವುದು</translation> <translation id="5747785204778348146">ಡೆವಲಪರ್ - ಅಸ್ಥಿರ</translation> <translation id="5747809636523347288">ಅಂ&ಟಿಸಿ ಮತ್ತು <ph name="URL" /> ಗೆ ಹೋಗಿ</translation> +<translation id="5754152670305761216">ಸಂರಕ್ಷಿತ ವಿಷಯವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="5756163054456765343">ಸ&ಹಾಯ ಕೇಂದ್ರ</translation> <translation id="5759728514498647443">ನೀವು <ph name="APP_NAME" /> ಮೂಲಕ ಪ್ರಿಂಟ್ ಮಾಡಲು ಕಳುಹಿಸುವ ಡಾಕ್ಯುಮೆಂಟ್ಗಳನ್ನು <ph name="APP_NAME" /> ಮೂಲಕ ಓದಬಹುದಾಗಿದೆ.</translation> <translation id="5763751966069581670">ಯಾವುದೇ USB ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ</translation> @@ -4470,6 +4510,7 @@ <translation id="6295158916970320988">ಎಲ್ಲಾ ಸೈಟ್ಗಳು</translation> <translation id="6295855836753816081">ಉಳಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="6298962879096096191">Android ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು Google Play ಬಳಸಿ</translation> +<translation id="6300177430812514606">ಡೇಟಾವನ್ನು ಕಳುಹಿಸುವುದು ಅಥವಾ ಸ್ವೀಕರಿಸುವುದನ್ನು ಮುಗಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="630065524203833229">ನಿರ್ಗ&ಮನ</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಸುಧಾರಿತ ಪ್ರಿಂಟರ್ ವಿವರಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation> <translation id="6301076166764763868">ವೈಯಕ್ತಿಕ ಮತ್ತು <ph name="EXISTING_USER" /> ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು, <ph name="NEW_USER" /> ಅವರಿಗಾಗಿ ಹೊಸ ಪ್ರೊಫೈಲ್ ಅನ್ನು ರಚಿಸಿ</translation> @@ -4547,6 +4588,7 @@ <translation id="6390020764191254941">ಟ್ಯಾಬ್ ಅನ್ನು ಹೊಸ ವಿಂಡೋಗೆ ಸರಿಸಿ</translation> <translation id="6390799748543157332">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತೆರೆದಿರುವ ಎಲ್ಲ ಅತಿಥಿ ವಿಂಡೊಗಳನ್ನು ಮುಚ್ಚಿದ ನಂತರ ಈ ವಿಂಡೊದಲ್ಲಿ ನೀವು ವೀಕ್ಷಿಸುವ ಪುಟಗಳು ಬ್ರೌಸರ್ ಇತಿಹಾಸದಲ್ಲಿ ಗೋಚರಿಸುವುದಿಲ್ಲ ಮತ್ತು ಅವುಗಳು ಕುಕೀಗಳಂತಹ ಇತರ ಗುರುತುಗಳನ್ನು ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಬಿಡುವುದಿಲ್ಲ. ಆದಾಗ್ಯೂ, ನೀವು ಡೌನ್ಲೋಡ್ ಮಾಡಿದ ಯಾವುದೇ ಫೈಲ್ಗಳನ್ನು ರಕ್ಷಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="6393156038355142111">ಸದೃಢವಾದ ಪಾಸ್ವರ್ಡ್ ಸೂಚಿಸಿ</translation> +<translation id="6393550101331051049">ಅಸುರಕ್ಷಿತ ವಿಷಯವನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />ಸಿಸ್ಟಂ ಮಾಹಿತಿ<ph name="END_LINK1" /> ಮತ್ತು <ph name="BEGIN_LINK2" />ಮೆಟ್ರಿಕ್ಗಳನ್ನು<ph name="END_LINK2" /> ಕಳುಹಿಸಿ</translation> <translation id="6396988158856674517">ಚಲನಾ ಸೆನ್ಸರ್ಗಳನ್ನು ಬಳಸದಂತೆ ಸೈಟ್ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="6398715114293939307">Google Play ಸ್ಟೋರ್ ತೆಗೆದುಹಾಕಿ</translation> @@ -4579,6 +4621,7 @@ <translation id="6425556984042222041">ಪಠ್ಯದಿಂದ ಧ್ವನಿ ದರ</translation> <translation id="6426200009596957090">ChromeVox ಸೆಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="642654727595919401"><ph name="DOMAIN" />, ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನೀವು ಬ್ಯಾಕಪ್ ಮಾಡಬೇಕೆಂದು ಮತ್ತು 1 ವಾರದ ಒಳಗಾಗಿ ಈ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು ಹಿಂತಿರುಗಿಸಬೇಕೆಂದು ಬಯಸುತ್ತದೆ.<ph name="LINK_BEGIN" />ವಿವರಗಳನ್ನು ನೋಡಿ<ph name="LINK_END" /></translation> +<translation id="642729974267661262">ಧ್ವನಿ ಪ್ಲೇ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="6428982734197629783">ಚಿತ್ರವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="6429384232893414837">ಅಪ್ಡೇಟ್ ದೋಷ</translation> <translation id="6430814529589430811">Base64-ಎನ್ಕೋಡ್ ಮಾಡಿದ ASCII, ಏಕ ಪ್ರಮಾಣಪತ್ರ</translation> @@ -4607,6 +4650,7 @@ <translation id="6458701200018867744">ಅಪ್ಲೋಡ್ ವಿಫಲವಾಗಿದೆ (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">ಹುಡುಕಲು ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ</translation> <translation id="6459799433792303855">ಮತ್ತೊಂದು ಡಿಸ್ಪ್ಲೇಗೆ ಸಕ್ರಿಯ ವಿಂಡೋವನ್ನು ಸರಿಸಲಾಗಿದೆ.</translation> +<translation id="6460566145397380451">MIDI ಸಾಧನಗಳಿಗೆ ಸಂಪರ್ಕಿಸಲು ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="6460601847208524483">ಮುಂದಿನದು ಕಂಡುಹಿಡಿಯಿರಿ</translation> <translation id="6461170143930046705">ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="6463795194797719782">&ಎಡಿಟ್</translation> @@ -4638,6 +4682,7 @@ <translation id="6499681088828539489">ಹಂಚಿರುವ ನೆಟ್ವರ್ಕ್ಗಳಿಗಾಗಿ ಪ್ರಾಕ್ಸಿಗಳನ್ನು ಅನುಮತಿಸಬೇಡಿ</translation> <translation id="650266656685499220">ಆಲ್ಬಮ್ಗಳನ್ನು ರಚಿಸಲು, Google Photos ಗೆ ಹೋಗಿ</translation> <translation id="6503077044568424649">ಅತಿಹೆಚ್ಚು ಬಾರಿ ಸಂದರ್ಶಿಸಿರುವುದು</translation> +<translation id="650457560773015827">ಎಡ ಬಟನ್</translation> <translation id="6504611359718185067">ಪ್ರಿಂಟರ್ ಸೇರಿಸಲು ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕಿಸಿ</translation> <translation id="6506374932220792071">SHA-256 ಜೊತೆಗೆ X9.62 ECDSA ಸಹಿ</translation> <translation id="6508248480704296122"><ph name="NAME_PH" /> ಗೆ ಸಂಬಂಧಿಸಿದೆ</translation> @@ -4839,6 +4884,7 @@ <translation id="676560328519657314">Google Pay ನಲ್ಲಿರುವ ನಿಮ್ಮ ಪಾವತಿ ವಿಧಾನಗಳು</translation> <translation id="6767566652486411142">ಬೇರೊಂದು ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ...</translation> <translation id="6767639283522617719">ಡೊಮೇನ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸಾಂಸ್ಥಿಕ ಘಟಕಕ್ಕಾಗಿ ಸೆಟ್ಟಿಂಗ್ಗಳು ಸರಿಯಾಗಿವೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation> +<translation id="6768034047581882264">ಅಸುರಕ್ಷಿತ ವಿಷಯವನ್ನು ತೋರಿಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" />, ಈ ಸಾಧನವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation> <translation id="6769712124046837540">ಮುದ್ರಕ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="6770602306803890733">ನಿಮಗಾಗಿ ಹಾಗೂ ವೆಬ್ನಲ್ಲಿರುವ ಎಲ್ಲರಿಗಾಗಿ ಸುರಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ</translation> @@ -4930,6 +4976,7 @@ <translation id="6865313869410766144">ಸ್ವಯಂತುಂಬುವಿಕೆ ಫಾರ್ಮ್ ಡೇಟಾ</translation> <translation id="6865598234501509159">ಪುಟವು <ph name="LANGUAGE" /> ಭಾಷೆಯಲ್ಲಿಲ್ಲ</translation> <translation id="6865708901122695652">WebRTC ಈವೆಂಟ್ ಲಾಗ್ಗಳು (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">ನಿಶ್ಶಬ್ದ</translation> <translation id="686664946474413495">ಬಣ್ಣ ತಾಪಮಾನ</translation> <translation id="6868934826811377550">ವಿವರಗಳನ್ನು ನೋಡಿ</translation> <translation id="6871644448911473373">OCSP ಪ್ರತಿಕ್ರಿಯೆ ನೀಡುಗ: <ph name="LOCATION" /></translation> @@ -4979,6 +5026,7 @@ <translation id="6922745772873733498">ಮುದ್ರಿಸಲು ಪಿನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</translation> <translation id="6923132443355966645">ಸ್ಕ್ರಾಲ್ / ಕ್ಲಿಕ್</translation> <translation id="6923633482430812883">ಹಂಚಿಕೆಯನ್ನು ಮೌಂಟ್ ಮಾಡುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ. ನೀವು ಸಂಪರ್ಕಿಸುತ್ತಿರುವ ಫೈಲ್ ಸರ್ವರ್, SMBv2 ಅಥವಾ ನಂತರದ ಆವೃತ್ತಿಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಪರಿಶೀಲಿಸಿ.</translation> +<translation id="6929126689972602640">ಶಾಲಾ ಖಾತೆಗಳಿಗೆ ಪೋಷಕರ ನಿಯಂತ್ರಣಗಳನ್ನು ಬೆಂಬಲಿಸಲಾಗುವುದಿಲ್ಲ. ಮನೆಯಲ್ಲಿ ಶಾಲಾ ಕೆಲಸ ಮಾಡುವುದಕ್ಕಾಗಿ Google Classroom ಮತ್ತು ಇತರ ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಶಾಲಾ ಖಾತೆಯೊಂದನ್ನು ಸೇರಿಸಲು, ಮೊದಲು ಮಗುವಿನ ವೈಯಕ್ತಿಕ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ. ನೀವು ನಂತರ ಸೆಟಪ್ನಲ್ಲಿ ಶಾಲಾ ಖಾತೆಯನ್ನು ಸೇರಿಸಬಹುದು.</translation> <translation id="6929760895658557216">Okay Google</translation> <translation id="6930036377490597025">ಬಾಹ್ಯ ಸುರಕ್ಷತೆ ಕೀ ಅಥವಾ ಅಂತರ್ನಿರ್ಮಿತ ಸೆನ್ಸರ್</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{ಒಂದು ವಿಸ್ತರಣೆಯನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ}one{# ವಿಸ್ತರಣೆಗಳನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ}other{# ವಿಸ್ತರಣೆಗಳನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ}}</translation> @@ -5019,6 +5067,7 @@ <translation id="6972629891077993081">HID ಸಾಧನಗಳು</translation> <translation id="6972754398087986839">ಪ್ರಾರಂಭಗೊಂಡಿದೆ</translation> <translation id="6972887130317925583">ಅಪಾಯಕ್ಕೀಡಾದ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಬದಲಾಯಿಸಲಾಗಿದೆ. ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಯಾವಾಗ ಬೇಕಾದರೂ <ph name="SETTINGS" /> ನಲ್ಲಿ ಪರಿಶೀಲಿಸಿ.</translation> +<translation id="697312151395002334">ಪಾಪ್-ಅಪ್ಗಳನ್ನು ಕಳುಹಿಸಲು ಮತ್ತು ಮರುನಿರ್ದೇಶನಗಳನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="6973611239564315524">Debian 10 (Buster) ಗೆ ಅಪ್ಗ್ರೇಡ್ ಲಭ್ಯವಿದೆ</translation> <translation id="6974609594866392343">ಆಫ್ಲೈನ್ ಡೆಮೊ ಮೋಡ್</translation> <translation id="6977381486153291903">ಫರ್ಮ್ವೇರ್ ಮರುಪರಿಶೀಲನೆ</translation> @@ -5041,6 +5090,7 @@ <translation id="6995899638241819463">ಡೇಟಾ ಉಲ್ಲಂಘನೆಯಿಂದಾಗಿ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಬಹಿರಂಗಪಡಿಸಿದರೆ ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡಲಾಗುತ್ತದೆ</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - ಚಟುವಟಿಕೆ ಲಾಗ್</translation> <translation id="6997707937646349884">ನಿಮ್ಮ ಸಾಧನಗಳಲ್ಲಿ:</translation> +<translation id="6998093258894828179">ಕಾರ್ಡ್ಗಳನ್ನು ಮರೆಮಾಡಿ</translation> <translation id="6998793565256476099">ವೀಡಿಯೊ ಸಂವಾದ ನಡೆಸಲು ಸಾಧನವನ್ನು ನೋಂದಾಯಿಸಿ</translation> <translation id="6999956497249459195">ಹೊಸ ಗುಂಪು</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> ಸಂಪರ್ಕ ಹೊಂದಿದೆ ಆದರೆ ಕಾನ್ಫಿಗರೇಶನ್ ಮಾಡಬೇಕಿದೆ</translation> @@ -5057,6 +5107,7 @@ <translation id="7005848115657603926">ಅಮಾನ್ಯ ಪುಟ ಶ್ರೇಣಿ, <ph name="EXAMPLE_PAGE_RANGE" /> ಬಳಸಿ</translation> <translation id="7006634003215061422">ಕೆಳಗಿನ ಅಂಚು</translation> <translation id="7007648447224463482">ಎಲ್ಲವನ್ನೂ ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="701080569351381435">ಮೂಲ ವೀಕ್ಷಿಸಿ</translation> <translation id="7014174261166285193">ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ.</translation> <translation id="7017004637493394352">"Ok Google" ಎಂದು ಮತ್ತೊಮ್ಮೆ ಹೇಳಿ</translation> @@ -5077,6 +5128,7 @@ <translation id="7038632520572155338">ಪ್ರವೇಶ ಬದಲಾಯಿಸಿ</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> ರಿಂದ USB ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸಿ</translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> +<translation id="7039951224110875196">ಮಗುವೊಂದಕ್ಕೆ Google ಖಾತೆಯನ್ನು ರಚಿಸಿ</translation> <translation id="7040230719604914234">ಆಪರೇಟರ್</translation> <translation id="7043108582968290193">ಮುಗಿದಿದೆ! ಹೊಂದಾಣಿಕೆಯಾಗದ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ.</translation> <translation id="7044124535091449260">ಸೈಟ್ ಪ್ರವೇಶದ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation> @@ -5148,6 +5200,7 @@ <translation id="7121362699166175603">ವಿಳಾಸ ಪಟ್ಟಿಯ ಇತಿಹಾಸ ಮತ್ತು ಸ್ವಯಂಪೂರ್ಣಗೊಳಿಸುವಿಕೆಯನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಇತರ ವಿಧಗಳ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಹೊಂದಿರಬಹುದು.</translation> <translation id="7121438501124788993">ಡೆವೆಲಪರ್ ಮೋಡ್</translation> <translation id="7121728544325372695">ಸ್ಮಾರ್ಟ್ ಡ್ಯಾಶ್ಗಳು</translation> +<translation id="7123030151043029868">ಬಹು ಫೈಲ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="7123360114020465152">ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation> <translation id="7125148293026877011">Crostini ಅನ್ನು ಅಳಿಸಿ</translation> <translation id="7127980134843952133">ಡೌನ್ಲೋಡ್ ಇತಿಹಾಸ</translation> @@ -5162,6 +5215,7 @@ <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> ಗೆ ಸ್ವಾಗತ</translation> <translation id="7136993520339022828">ದೋಷವಿದೆ. ಇತರ ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="713888829801648570">ಕ್ಷಮಿಸಿ, ನೀವು ಆಫ್ಲೈನ್ನಲ್ಲಿರುವ ಕಾರಣ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುವುದಿಲ್ಲ.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="7140928199327930795">ಇತರ ಯಾವುದೇ ಲಭ್ಯ ಸಾಧನಗಳಿಲ್ಲ.</translation> <translation id="7141105143012495934">ನಿಮ್ಮ ಖಾತೆ ವಿವರಗಳನ್ನು ಹಿಂಪಡೆಯಲು ಸಾಧ್ಯವಾಗದಿರುವುದರಿಂದ ಸೈನ್ ಇನ್ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ ಅಥವಾ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="7143207342074048698">ಕನೆಕ್ಟ್...</translation> @@ -5301,6 +5355,7 @@ <translation id="7324297612904500502">ಬೀಟಾ ಫೋರಮ್</translation> <translation id="7325209047678309347">ಪೇಪರ್ ಜಾಮ್ ಆಗಿದೆ</translation> <translation id="7325437708553334317">ಉನ್ನತ ಕಾಂಟ್ರಾಸ್ಟ್ ವಿಸ್ತರಣೆ</translation> +<translation id="7326004502692201767">ಮಗುವೊಂದಕ್ಕಾಗಿ ಈ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು ಸೆಟಪ್ ಮಾಡಿ</translation> <translation id="7328699668338161242">ನಿಮ್ಮ ಅಸಿಸ್ಟೆಂಟ್ ಈಗಾಗಲೇ ನಿಮ್ಮ ಧ್ವನಿಯನ್ನು ಗುರುತಿಸಬಹುದು</translation> <translation id="7328867076235380839">ಅಮಾನ್ಯ ಸಂಯೋಜನೆ</translation> <translation id="7329154610228416156">ಸೈನ್ ಇನ್ ವಿಫಲಗೊಂಡಿದೆ ಏಕೆಂದರೆ ಅದು ಸುರಕ್ಷಿತವಲ್ಲದ URL (<ph name="BLOCKED_URL" />) ಬಳಸುವಂತೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> @@ -5425,6 +5480,7 @@ <translation id="7465635034594602553">ಏನೋ ತಪ್ಪಾಗಿದೆ. ಕೆಲವು ನಿಮಿಷಗಳವರೆಗೆ ನಿರೀಕ್ಷಿಸಿ ಮತ್ತು <ph name="APP_NAME" /> ಅನ್ನು ಪುನಃ ರನ್ ಮಾಡಿ.</translation> <translation id="7465778193084373987">Netscape ಪ್ರಮಾಣಪತ್ರ ಹಿಂತೆಗೆದುಕೊಳ್ಳುವಿಕೆ URL</translation> <translation id="7469894403370665791">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಈ ನೆಟ್ವರ್ಕ್ಗೆ ಸಂಪರ್ಕಿಸಿ</translation> +<translation id="7470424110735398630">ನಿಮ್ಮ ಕ್ಲಿಪ್ಬೋರ್ಡ್ ನೋಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="747114903913869239">ದೋಷ: ವಿಸ್ತರಣೆಯನ್ನು ಡಿಕೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation> <translation id="7473891865547856676">ಇಲ್ಲ, ಧನ್ಯವಾದಗಳು</translation> <translation id="747459581954555080">ಎಲ್ಲವನ್ನು ಮರುಸಂಗ್ರಹಿಸಿ</translation> @@ -5534,6 +5590,7 @@ <translation id="7607002721634913082">ವಿರಾಮದಲ್ಲಿದೆ</translation> <translation id="7608810328871051088">Android ಆದ್ಯತೆಗಳು</translation> <translation id="7609148976235050828">ದಯವಿಟ್ಟು ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="7612655942094160088">ಸಂಪರ್ಕಿತ ಫೋನ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation> <translation id="7614260613810441905">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿನ ಫೈಲ್ಗಳು ಅಥವಾ ಫೋಲ್ಡರ್ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಲು ಸೈಟ್ ಬಯಸಿದಾಗ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> <translation id="761530003705945209">Google ಡ್ರೈವ್ನಲ್ಲಿ ಬ್ಯಾಕಪ್ ಮಾಡಿ. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸುಲಭವಾಗಿ ಮರುಸ್ಥಾಪಿಸಿ ಅಥವಾ ಯಾವಾಗ ಬೇಕಾದರೂ ಸಾಧನವನ್ನು ಬದಲಾಯಿಸಿ. ನಿಮ್ಮ ಬ್ಯಾಕಪ್, ಆ್ಯಪ್ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ನಿಮ್ಮ ಬ್ಯಾಕಪ್ಗಳನ್ನು Google ನಲ್ಲಿ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ Google ಖಾತೆಯ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation> <translation id="7615365294369022248">ಖಾತೆಯನ್ನು ಸೇರಿಸುವಾಗ ದೋಷ ಕಂಡುಬಂದಿದೆ</translation> @@ -5652,6 +5709,7 @@ <translation id="7732111077498238432">ನೆಟ್ವರ್ಕ್ ನೀತಿಯ ನಿಯಂತ್ರಣದಲ್ಲಿದೆ</translation> <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ಜೊತೆ ಜೋಡಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="7737238973539693982">Linux (ಬೀಟಾ) ಅಳಿಸಿ</translation> +<translation id="7737948071472253612">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="7740996059027112821">ಪ್ರಮಾಣಿತ</translation> <translation id="7742706086992565332">ಕೆಲವು ವೆಬ್ಸೈಟ್ಗಳಲ್ಲಿ ನೀವು ಎಷ್ಟು ಝೂಮ್ ಇನ್ ಅಥವಾ ಝೂಮ್ ಔಟ್ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ಹೊಂದಿಸಬಹುದು</translation> <translation id="774377079771918250">ಎಲ್ಲಿ ಉಳಿಸಬೇಕೆಂದು ಆಯ್ಕೆಮಾಡಿ</translation> @@ -5660,6 +5718,7 @@ <translation id="7750228210027921155">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ</translation> <translation id="7751260505918304024">ಎಲ್ಲ ತೋರಿಸು</translation> <translation id="7753735457098489144">ಕಡಿಮೆ ಸಂಗ್ರಹಣೆ ಸ್ಥಳ ಇರುವ ಕಾರಣ ಇನ್ಸ್ಟಾಲ್ ವಿಫಲವಾಗಿದೆ. ಸ್ಥಳಾವಕಾಶವನ್ನು ಮುಕ್ತಗೊಳಿಸಲು, ಸಾಧನ ಸಂಗ್ರಹಣೆಯಲ್ಲಿರುವ ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಿ.</translation> +<translation id="7754347746598978109">JavaScript ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="7754704193130578113">ಡೌನ್ಲೋಡ್ ಮಾಡುವ ಮೊದಲು ಪ್ರತಿ ಫೈಲ್ ಅನ್ನು ಎಲ್ಲಿ ಉಳಿಸಬೇಕೆಂದು ಕೇಳು</translation> <translation id="7755287808199759310">ನಿಮ್ಮ ಪೋಷಕರು ನಿಮಗಾಗಿ ಅದನ್ನು ಅನಿರ್ಬಂಧಿಸಬಹುದಾಗಿದೆ</translation> <translation id="7757592200364144203">ಸಾಧನದ ಹೆಸರನ್ನು ಬದಲಾಯಿಸಿ</translation> @@ -5711,6 +5770,7 @@ <translation id="7798844538707273832"><ph name="PERMISSION" /> ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="7799299114731150374">ವಾಲ್ಪೇಪರ್ ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಹೊಂದಿಸಲಾಗಿದೆ</translation> <translation id="7800518121066352902">ಅಪ್ರ&ದಕ್ಷಿಣೆಯಂತೆ ತಿರುಗಿಸಿ</translation> +<translation id="7802539296536804623">ಈ ಪುಟದಲ್ಲಿ ಕಾರ್ಡ್ಗಳನ್ನು ತೋರಿಸಬೇಡಿ</translation> <translation id="780301667611848630">ಬೇಡ, ಧನ್ಯವಾದಗಳು</translation> <translation id="7804072833593604762">ಟ್ಯಾಬ್ ಮುಚ್ಚಲಾಗಿದೆ</translation> <translation id="7805768142964895445">ಸ್ಥಿತಿ</translation> @@ -6136,6 +6196,7 @@ <translation id="826905130698769948">ಅಮಾನ್ಯ ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರ</translation> <translation id="8270242299912238708">PDF ಡಾಕ್ಯುಮೆಂಟ್ಗಳು</translation> <translation id="827097179112817503">ಹೋಮ್ ಬಟನ್ ತೋರಿಸು</translation> +<translation id="8271379370373330993">ಪೋಷಕರೇ, ನಿಮಗಾಗಿ ಮುಂದಿನ ಕೆಲವು ಹಂತಗಳು ಇಲ್ಲಿವೆ. ಖಾತೆ ಸೆಟಪ್ ಮಾಡಿದ ನಂತರ ನೀವು ಮಗುವಿಗೆ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು.</translation> <translation id="8272443605911821513">"ಹೆಚ್ಚಿನ ಪರಿಕರಗಳು" ಮೆನುನಲ್ಲಿರುವ ‘ವಿಸ್ತರಣೆಗಳು’ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ.</translation> <translation id="8274332263553132018">ಫೈಲ್ ಅನ್ನು ಬಿತ್ತರಿಸಿ</translation> <translation id="8274924778568117936">ಅಪ್ಡೇಟ್ ಮುಕ್ತಾಯಗೊಳ್ಳುವವರೆಗೆ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಆಫ್ ಮಾಡಬೇಡಿ. ಇನ್ಸ್ಟಾಲೇಶನ್ ಪ್ರಕ್ರಿಯೆ ಪೂರ್ಣಗೊಂಡ ನಂತರ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಮರುಪ್ರಾರಂಭವಾಗುತ್ತದೆ.</translation> @@ -6159,6 +6220,7 @@ <translation id="8300011035382349091">ಈ ಟ್ಯಾಬ್ಗಾಗಿ ಬುಕ್ಮಾರ್ಕ್ ಅನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="8300374739238450534">ಮಿಡ್ನೈಟ್ ಬ್ಲೂ</translation> <translation id="8300849813060516376">OTASP ವಿಫಲವಾಗಿದೆ</translation> +<translation id="8304383784961451596">ಈ ಸಾಧನವನ್ನು ಬಳಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ. ಸೈನ್-ಇನ್ ಅನುಮತಿಗಾಗಿ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ ಅಥವಾ Family Link ಮೇಲ್ವಿಚಾರಣೆಯಲ್ಲಿರುವ Google ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> <translation id="8308179586020895837">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಬಯಸುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ಕೇಳಿ</translation> <translation id="830868413617744215">ಬೀಟಾ</translation> <translation id="8309458809024885768">ಪ್ರಮಾಣಪತ್ರ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ</translation> @@ -6172,6 +6234,7 @@ <translation id="8322814362483282060">ಈ ಪುಟವನ್ನು ನಿಮ್ಮ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶದಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> <translation id="8323167517179506834">URL ಟೈಪ್ ಮಾಡಿ</translation> <translation id="8324784016256120271">ವಿವಿಧ ಸೈಟ್ಗಳಾದ್ಯಂತ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ಉದಾಹರಣೆಗೆ, ಜಾಹೀರಾತುಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸಲು ಸೈಟ್ಗಳು ಕುಕೀಗಳನ್ನು ಬಳಸಬಹುದು</translation> +<translation id="8325413836429495820">ನಿಮ್ಮ ಕ್ಲಿಪ್ಬೋರ್ಡ್ ನೋಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="8326478304147373412">PKCS #7, ಪ್ರಮಾಣಪತ್ರ ಸರಣಿ</translation> <translation id="8327039559959785305">Linux ಫೈಲ್ಗಳನ್ನು ಮೌಂಟ್ ಮಾಡುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="8327676037044516220">ಅನುಮತಿಗಳು ಮತ್ತು ವಿಷಯ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> @@ -6221,6 +6284,7 @@ <translation id="8382913212082956454">ಇಮೇಲ್ &ವಿಳಾಸವನ್ನು ನಕಲು ಮಾಡಿ</translation> <translation id="8386091599636877289">ಕಾರ್ಯನೀತಿ ಕಂಡುಬಂದಿಲ್ಲ.</translation> <translation id="8386903983509584791">ಸ್ಕ್ಯಾನ್ ಪೂರ್ಣಗೊಂಡಿದೆ</translation> +<translation id="8387361103813440603">ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ನೋಡಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="8389416080014625855">ಈ ಪುಟಕ್ಕಾಗಿ QR ಕೋಡ್ ರಚಿಸಿ</translation> <translation id="8389492867173948260">ನೀವು ಭೇಟಿ ನೀಡುವ ವೆಬ್ಸೈಟ್ಗಳಲ್ಲಿ ನಿಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಬದಲಾಯಿಸಲು ಈ ವಿಸ್ತರಣೆಯನ್ನು ಅನುಮತಿಸಿ:</translation> <translation id="8390449457866780408">ಸರ್ವರ್ ಲಭ್ಯವಿಲ್ಲ.</translation> @@ -6405,6 +6469,7 @@ <translation id="8621866727807194849">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಕಂಡುಬಂದಿದೆ. Chrome ಅದನ್ನು ತೆಗೆದುಹಾಕಿ, ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸುತ್ತಿದೆ ಹಾಗೆಯೇ ಅದರ ವಿಸ್ತರಣೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತಿದೆ. ಇದರಿಂದಾಗಿ ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ಪುನಃ ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವಂತೆ ಮಾಡುತ್ತದೆ.</translation> <translation id="8621979332865976405">ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಪರದೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation> <translation id="862542460444371744">&ವಿಸ್ತರಣೆಗಳು</translation> +<translation id="8625663000550647058">ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="862727964348362408">ತಡೆಹಿಡಿಯಲಾಗಿದೆ</translation> <translation id="862750493060684461">CSS ಕ್ಯಾಷ್</translation> <translation id="8627706565932943526">ಸಿಂಕ್ ದೋಷ</translation> @@ -6485,6 +6550,7 @@ <translation id="8714838604780058252">ಹಿನ್ನೆಲೆ ಗ್ರಾಫಿಕ್ಸ್</translation> <translation id="8715480913140015283">ಹಿನ್ನೆಲೆ ಟ್ಯಾಬ್ ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ಬಳಸುತ್ತಿದೆ</translation> <translation id="8716931980467311658">ಈ <ph name="DEVICE_TYPE" /> ನಿಂದ ಎಲ್ಲಾ Linux ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಾಗೂ ನಿಮ್ಮ Linux ಫೈಲ್ಗಳ ಫೋಲ್ಡರ್ನಲ್ಲಿರುವ ಡೇಟಾವನ್ನು ಅಳಿಸುವುದೇ?</translation> +<translation id="8717145295869185525">ವರ್ಚುವಲ್ ರಿಯಾಲಿಟಿ ಸಾಧನಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಬಳಸಲು ಈ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ</translation> <translation id="8717864919010420084">ಲಿಂಕ್ ನಕಲಿಸಿ</translation> <translation id="8719472795285728850">ವಿಸ್ತರಣೆ ಚಟುವಟಿಕೆಗಳನ್ನು ಆಲಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> ಡೌನ್ಲೋಡ್ ವಿಫಲಗೊಂಡಿದೆ</translation> @@ -6906,6 +6972,7 @@ <translation id="9179734824669616955">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ Linux (ಬೀಟಾ) ಹೊಂದಿಸಿ</translation> <translation id="9180281769944411366">ಈ ಪ್ರಕ್ರಿಯೆಯು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. Linux ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ.</translation> <translation id="9180380851667544951">ನಿಮ್ಮ ಪರದೆಯನ್ನು ಸೈಟ್ ಹಂಚಿಕೊಳ್ಳಬಹುದು</translation> +<translation id="9186963452600581158">ಮಗುವಿನ Google ಖಾತೆಯ ಮೂಲಕ ಸೈನ್-ಇನ್ ಮಾಡಿ</translation> <translation id="9188732951356337132">ಬಳಕೆ ಮತ್ತು ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಿ. ಪ್ರಸ್ತುತ ಈ ಸಾಧನವು ಡಯಾಗ್ನಾಸ್ಟಿಕ್, ಸಾಧನ, ಮತ್ತು ಆ್ಯಪ್ ಬಳಕೆಯ ಡೇಟಾವನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸುತ್ತಿದೆ. ಈ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಮಗುವನ್ನು ಗುರುತಿಸುವುದಕ್ಕೆ ಬಳಸುವುದಿಲ್ಲ, ಹಾಗೂ ಇದು ಸಿಸ್ಟಮ್ ಮತ್ತು ಆ್ಯಪ್ ಸ್ಥಿರತೆ, ಹಾಗೂ ಇತರ ಸುಧಾರಣೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಕೆಲವು ಒಟ್ಟುಗೂಡಿಸಿದ ಡೇಟಾವು, Google ಆ್ಯಪ್ಗಳಿಗೆ ಮತ್ತು ಪಾಲುದಾರರಿಗೂ ಸಹ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, Android ಡೆವಲಪರ್ಗಳು. ನಿಮ್ಮ ಮಗುವಿಗಾಗಿ ಹೆಚ್ಚುವರಿ ವೆಬ್ ಮತ್ತು ಆ್ಯಪ್ ಚಟುವಟಿಕೆ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆನ್ ಮಾಡಿದ್ದಲ್ಲಿ, ಈ ಡೇಟಾವು ಅವರ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲ್ಪಡಬಹುದು. <ph name="BEGIN_LINK2" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPSec + ಪೂರ್ವ ಹಂಚಿತ ಕೀಲಿ</translation> <translation id="9198090666959937775">ನಿಮ್ಮ Android ಫೋನ್ ಅನ್ನು ಭದ್ರತಾ ಕೀ ಆಗಿ ಬಳಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index e476ca27..542a3f92 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -327,7 +327,7 @@ <translation id="1372841398847029212">Аккаунтуңуз менен шайкештирүү</translation> <translation id="1374844444528092021">"<ph name="NETWORK_NAME" />" тармагы талап кылган тастыктама же орнотулган эмес, же жарактан чыккан. Жаңы тастыктама алып, кайра туташып көрүңүз.</translation> <translation id="1375321115329958930">Сакталган сырсөздөр</translation> -<translation id="137651782282853227">Сакталган даректер бул жерден көрүнөт</translation> +<translation id="137651782282853227">Сакталган даректер бул жерде көрүнөт</translation> <translation id="1377600615067678409">Азырынча өткөрүп жиберүү</translation> <translation id="1378613616312864539">Бул жөндөөнү <ph name="NAME" /> көзөмөлдөп жатат</translation> <translation id="1380028686461971526">Тармакка автоматтык түрдө туташуу</translation> @@ -2876,7 +2876,7 @@ <translation id="4350782034419308508">Окей Google</translation> <translation id="4351060348582610152"><ph name="ORIGIN" /> сайты жакын жердеги Bluetooth түзмөктөрүн скандаганы жатат. Төмөнкү түзмөктөр табылды:</translation> <translation id="4354073718307267720">Сайт айланаңыздын 3D картасын түзгөнү же камераңыздын абалын көргөнү жатканда уруксат суралсын</translation> -<translation id="4354344420232759511">Баш баккан сайттарыңыз бул жерден көрүнөт</translation> +<translation id="4354344420232759511">Баш баккан сайттарыңыз бул жерде көрүнөт</translation> <translation id="435527878592612277">Сүрөтүңүздү тандаңыз</translation> <translation id="4358313196493694334">Курсордун абалын турукташтыруу</translation> <translation id="4359408040881008151">Көз каранды кеңейтүү(лөр)дөн улам орноту Installed because of dependent extension(s).</translation> @@ -2914,7 +2914,7 @@ <translation id="4394049700291259645">Ө</translation> <translation id="4396956294839002702">{COUNT,plural, =0{&Баарын ачуу}=1{&Кыстарманы ачуу}other{&Баарын ачуу ({COUNT})}}</translation> <translation id="439817266247065935">Түзмөк туура өчүрүлгөн жок. Linux колдонмолорун иштетүү үчүн Linux'ту өчүрүп күйгүзүңүз.</translation> -<translation id="4400367121200150367">Сырсөздөрдү эч качан сактабаган сайттар бул жерден көрүнөт</translation> +<translation id="4400367121200150367">Сырсөздөрдү эч качан сактабаган сайттар бул жерде көрүнөт</translation> <translation id="4400632832271803360">Жогорку катардагы баскычтардын аракеттерин которуштуруу үчүн, Жүргүзгүч баскычын басып туруңуз</translation> <translation id="4400963414856942668">Өтмөктү кыстармаларга кошуу үчүн жылдызчаны чыкылдатып коюңуз</translation> <translation id="4403775189117163360">Башка папканы тандоо</translation> @@ -4889,7 +4889,7 @@ <translation id="6770664076092644100">NFC аркылуу ырастоо</translation> <translation id="6771503742377376720">Тастыктама борбору</translation> <translation id="6772339735733515807">Кеңейтүүлөрүңүздү башкарыңыз</translation> -<translation id="6775163072363532304">Жеткиликтүү түзмөктөр бул жерден көрүнөт.</translation> +<translation id="6775163072363532304">Жеткиликтүү түзмөктөр бул жерде көрүнөт.</translation> <translation id="6777817260680419853">Багыттоо бөгөттөлгөн</translation> <translation id="6778737459546443941">Ата-энеңиз буга уруксат бере элек</translation> <translation id="677965093459947883">Өтө кичине</translation> @@ -5177,7 +5177,7 @@ <translation id="7093434536568905704">GTK+</translation> <translation id="7093866338626856921">Төмөнкүчө аталган түзмөктөр менен дайындарды алмашуу: <ph name="HOSTNAMES" /></translation> <translation id="7098389117866926363">USB-C түзмөгү (аркасындагы сол жактагы оюкча)</translation> -<translation id="7098447629416471489">Башка сакталган издөө каражаттары бул жерден көрүнөт</translation> +<translation id="7098447629416471489">Башка сакталган издөө каражаттары бул жерде көрүнөт</translation> <translation id="7099337801055912064">Көлөмдүү PPD жүктөлбөйт. Көлөмү 250 Кб ашпашы керек.</translation> <translation id="7102687220333134671">Автоматтык жаңыртуулар күйгүзүлгөн</translation> <translation id="7102832101143475489">Сурамдын күтүү мөөнөтү аяктады</translation> @@ -5814,7 +5814,7 @@ <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation> <translation id="7832084384634357321">Качан аяктайт</translation> <translation id="783214144752121388">Сайттардын Flash'ти аткаруусун бөгөттөө (сунушталган)</translation> -<translation id="7833720883933317473">Сакталган ыңгайлуу сөздөр бул жерден көрүнөт</translation> +<translation id="7833720883933317473">Сакталган ыңгайлуу сөздөр бул жерде көрүнөт</translation> <translation id="7835178595033117206">Кыстарма өчүрүлдү</translation> <translation id="7836850009646241041">Коопсуздук ачкычына кайра тийип көрүңүз</translation> <translation id="7837776265184002579">Башкы бетиңиз <ph name="URL" /> дарегине өзгөртүлдү.</translation> @@ -5891,7 +5891,7 @@ <translation id="7926975587469166629">Картанын ылакап аты</translation> <translation id="7928175190925744466">Бул сырсөздү өзгөрттүңүз беле?</translation> <translation id="7928836894214140642"><ph name="ENROLLMENT_DOMAIN" /> тарабынан башкарылат</translation> -<translation id="7930294771522048157">Сакталган төлөм ыкмалары бул жерден көрүнөт</translation> +<translation id="7930294771522048157">Сакталган төлөм ыкмалары бул жерде көрүнөт</translation> <translation id="79312157130859720"><ph name="APP_NAME" /> колдонмосу экраныңызды жана аудио файлын бөлүшүп жатат.</translation> <translation id="7931318309563332511">Белгисиз</translation> <translation id="793293630927785390">Жаңы Wi‑Fi тармагы диалогу</translation> @@ -6919,7 +6919,7 @@ <translation id="9117030152748022724">Колдонмолоруңузду башкарыңыз</translation> <translation id="9121814364785106365">Кадалган өтмөк катары ачуу</translation> <translation id="9122176249172999202"><ph name="IDS_SHORT_PRODUCT_NAME" /> тындырылды</translation> -<translation id="9124003689441359348">Сакталган сырсөздөр бул жерден көрүнөт</translation> +<translation id="9124003689441359348">Сакталган сырсөздөр бул жерде көрүнөт</translation> <translation id="9126149354162942022">Курсордун түсү</translation> <translation id="9128317794749765148">Жөндөө аягына чыккан жок</translation> <translation id="9128335130883257666"><ph name="INPUT_METHOD_NAME" /> жөндөөлөрүнүн барагын ачуу</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 904b0ba70..bfc092a 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> išjungė ADB derinimą. „<ph name="DEVICE_TYPE" />“ bus iš naujo nustatytas po 24 val. Sukurkite visų norimų išsaugoti failų atsarginę kopiją.</translation> <translation id="1977965994116744507">Kad atrakintumėte „<ph name="DEVICE_TYPE" />“, arčiau padėkite telefoną.</translation> <translation id="1978006917103730774">Būsimi programinės įrangos ir saugos naujiniai bus įdiegti automatiškai.</translation> +<translation id="1978057560491495741">Pašalinti adresą</translation> <translation id="1979095679518582070">Išjungus šią funkciją vis tiek galima siųsti šio įrenginio informaciją, reikalingą pagrindinėms paslaugoms, pvz., sistemos naujiniams ir saugai.</translation> <translation id="1979280758666859181">Keičiate į kanalą, kuriame naudojama senesnė „<ph name="PRODUCT_NAME" />“ versija. Kanalo pakeitimas bus pritaikytas, kai kanalo versija atitiks šiuo metu įrenginyje įdiegtą versiją.</translation> <translation id="197989455406964291">KDC nepalaiko šifruotės tipo</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Šis nustatymas priklauso <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Redaguoti aplanko pavadinimą</translation> <translation id="2225864335125757863">Nedelsdami pakeiskite slaptažodžius, kad užtikrintumėte paskyros saugą.</translation> +<translation id="2226204716217107988">Perjungti į kitą profilį?</translation> <translation id="2226449515541314767">Ši svetainė užblokuota, kad negalėtų visiškai valdyti MIDI įrenginių.</translation> <translation id="2226907662744526012">Atrakinti automatiškai įvedus PIN kodą</translation> <translation id="222704500187107962">Ši išimtis bus automatiškai pašalinta, kai išeisite iš dabartinės inkognito režimu veikiančios sesijos</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Konfigūruoti tinklą</translation> <translation id="230927227160767054">Puslapis prašo leidimo įdiegti paslaugos doroklę.</translation> <translation id="2309620859903500144">Ši svetainė užblokuota, kad nebūtų naudojami judesio ar šviesos jutikliai.</translation> +<translation id="2312219318583366810">Puslapio URL</translation> <translation id="2314165183524574721">Dabartinis matomumo nustatymas yra „Paslėpta“</translation> <translation id="2314774579020744484">Verčiant puslapius vartojama kalba</translation> <translation id="2315414688463285945">Konfigūruojant „Linux“ failus įvyko klaida. Bandykite dar kartą.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Šiame saugos rakte nėra prisijungimo duomenų</translation> <translation id="3714195043138862580">Šio demonstracinės versijos įrenginio būsena buvo nustatyta į „pašalinamas“.</translation> <translation id="3714633008798122362">žiniatinklio kalendorius</translation> +<translation id="3715954932774762075">Programose ir svetainėse, kurios pasiekiamos keliomis kalbomis, bus naudojama pirma palaikoma kalba iš šio sąrašo. Šios nuostatos sinchronizuojamos su naršyklės nustatymais. <ph name="BEGIN_LINK_LEARN_MORE" />Sužinokite daugiau<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Pagrindinis puslapis</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Jūs ir „Google“</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Esamas vaizdo įrašas iš kameros ar failo</translation> <translation id="3886446263141354045">Jūsų užklausa pasiekti šią svetainę išsiųsta <ph name="NAME" />.</translation> <translation id="3888550877729210209">Užrašų kūrimas naudojant „<ph name="LOCK_SCREEN_APP_NAME" />“</translation> +<translation id="3890064827463908288">Norėdami naudoti „Wi-Fi“ sinchronizavimą, įjunkite „Chrome“ sinchronizavimo funkciją</translation> <translation id="3892414795099177503">Atidaryti „OpenVPN“ / L2TP...</translation> <translation id="3893536212201235195">Skaityti ir keisti pritaikymo neįgaliesiems nustatymus</translation> <translation id="3893630138897523026">„ChromeVox“ (ekrano skaitymas balsu)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Žymėti visus skirtukus</translation> <translation id="5449716055534515760">Uždaryti lan&gą</translation> <translation id="5452974209916053028">Dabartinis inkognito režimo seansas: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Subtitrų debesėlis perkeltas <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> proc. į kitą pusę, <ph name="POSITION_ON_SCREEN_FROM_TOP" /> proc. žemyn</translation> <translation id="5454166040603940656">naudojant <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Netinkama</translation> <translation id="5457459357461771897">Skaityti ir ištrinti nuotraukas, muziką ir kitą mediją iš kompiuterio</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Išvalyti žymes, istoriją, slaptažodžius ir kt. iš šio įrenginio</translation> <translation id="5605623530403479164">Kiti paieškos varikliai</translation> <translation id="5605758115928394442">Pranešimas išsiųstas į jūsų telefoną norint patvirtinti, kad tai jūs.</translation> +<translation id="560834977503641186">„Wi-Fi“ sinchronizavimas, sužinokite daugiau</translation> <translation id="5608580678041221894">Palieskite toliau nurodytus klavišus, kad koreguotumėte ar perkeltumėte apkarpomą sritį</translation> <translation id="5609231933459083978">Panašu, kad ši programa yra netinkama.</translation> <translation id="5610038042047936818">Perjungti į fotoaparato režimą</translation> @@ -4113,6 +4120,7 @@ <translation id="5841270259333717135">Eterneto konfigūravimas</translation> <translation id="5842497610951477805">„Bluetooth“ įgalinimas</translation> <translation id="5843706793424741864">Farenheito laipsniai</translation> +<translation id="584451707753263735">Subtitrai realiuoju laiku matomi, norėdami suaktyvinti debesėlį paspauskite F6</translation> <translation id="5844574845205796324">Siūlyti naują naršytiną turinį</translation> <translation id="5846200638699387931">Ryšio sintaksės klaida: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Įdiekite naujinių ir programų. Tęsdami sutinkate, kad šis įrenginys taip pat gali automatiškai atsisiųsti ir įdiegti naujinius bei programas iš „Google“, jūsų operatoriaus ir įrenginio gamintojo, naudodamas mobiliojo ryšio duomenis. Kai kuriose iš šių programų gali būti teikiama pirkimo programoje paslauga.</translation> @@ -5369,6 +5377,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> dabar veikia viso ekrano režimu.</translation> <translation id="7340650977506865820">Svetainė bendrina jūsų ekrano vaizdą</translation> <translation id="7341834142292923918">Nori gauti prieigą prie šios svetainės</translation> +<translation id="7343372807593926528">Prieš išsiųsdami atsiliepimą, kuo išsamiau apibūdinkite problemą.</translation> <translation id="7345706641791090287">Patvirtinkite slaptažodį</translation> <translation id="7346909386216857016">Gerai, supratau</translation> <translation id="7347452120014970266">Bus išvalyti visi <ph name="ORIGIN_NAME" /> ir įdiegtų programų saugomi duomenys ir slapukai</translation> @@ -5785,6 +5794,7 @@ <translation id="7819857487979277519">PSK (WPA ar RSN)</translation> <translation id="7819992334107904369">„Chrome“ sinchronizavimo funkcija</translation> <translation id="782057141565633384">K&opijuoti vaizdo įrašo adresą</translation> +<translation id="7822187537422052256">Ar tikrai norite pašalinti šį adresą?</translation> <translation id="7824864914877854148">Nepavyko sukurti atsarginės kopijos dėl klaidos</translation> <translation id="7825666486843191125">Visi netoliese esantys kontaktai, kai jūsų ekranas atrakintas</translation> <translation id="782590969421016895">Naudoti esamus puslapius</translation> @@ -6310,6 +6320,7 @@ <translation id="8419098111404128271">Paieškos rezultatai pagal užklausą „<ph name="SEARCH_TEXT" />“</translation> <translation id="8419368276599091549">Sveiki, tai – „<ph name="DEVICE_TYPE" />“!</translation> <translation id="8420308167132684745">Redaguoti žodyno įrašus</translation> +<translation id="8421361468937925547">Subtitrai realiuoju laiku (tik anglų k.)</translation> <translation id="8422787418163030046">Nėra dėklo</translation> <translation id="8425213833346101688">Keisti</translation> <translation id="8425492902634685834">Prisegti prie užduočių juostos</translation> @@ -6338,6 +6349,7 @@ <translation id="8449036207308062757">Tvarkyti saugyklą</translation> <translation id="8452135315243592079">Nėra SIM kortelės</translation> <translation id="8455026683977728932">Nepavyko įgalinti ADB iliustracijos</translation> +<translation id="8456398879271637452">Subtitrai realiuoju laiku matomi, norėdami suaktyvinti debesėlį paspauskite „Ctrl“ + „Back“ arba „Ctrl“ + „Forward“</translation> <translation id="845702320058262034">Nepavyko prisijungti. Patikrinkite, ar įjungtas telefono „Bluetooth“ ryšys.</translation> <translation id="8457451314607652708">Importuoti žymes</translation> <translation id="8458627787104127436">Atidaryti viską (<ph name="URL_COUNT" />) naujame lange</translation> @@ -6848,6 +6860,7 @@ <translation id="9027459031423301635">Atidaryti nuorodą naujame &skirtuke</translation> <translation id="9030515284705930323">Organizacija jūsų paskyroje neįgalino „Google Play“ parduotuvės. Jei reikia daugiau informacijos, susisiekite su administratoriumi.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">„<ph name="PLUGIN_NAME" />“ nebepalaikomas</translation> <translation id="9031549947500880805">Sukurkite atsarginę kopiją „Google“ diske. Lengvai atkurkite duomenis arba perjunkite įrenginį bet kuriuo metu. Į atsarginę kopiją įtraukiami programų duomenys.</translation> <translation id="9033765790910064284">Vis tiek tęsti</translation> <translation id="9033857511263905942">&Įklijuoti</translation> @@ -6856,6 +6869,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Jums liko vienas bandymas.}one{Jums liko # bandymas.}few{Jums liko # bandymai.}many{Jums liko # bandymo.}other{Jums liko # bandymų.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Atnaujinti <ph name="ORIGIN" /> slaptažodį?</translation> +<translation id="9041049756004505730">Subtitrai realiuoju laiku matomi, norėdami suaktyvinti debesėlį paspauskite ⌘ + „Option“ + rodyklę aukštyn arba žemyn</translation> <translation id="9041692268811217999">Administratorius neleidžia prieigos prie vietinių failų įrenginyje</translation> <translation id="904224458472510106">Šios operacijos anuliuoti negalima</translation> <translation id="9042893549633094279">Privatumas ir sauga</translation> @@ -6894,6 +6908,7 @@ <translation id="9088446193279799727">Nepavyko sukonfigūruoti „Linux“. Prisijunkite prie interneto ir bandykite dar kartą.</translation> <translation id="9088917181875854783">Patvirtinkite, kad šis prieigos raktas rodomas „<ph name="DEVICE_NAME" />“.</translation> <translation id="9089416786594320554">Įvesties metodai</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> profilis jau prijungtas prie <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Rekomenduojama sukurti atsarginę failų kopiją, jei naujovinimo nepavyktų užbaigti. Pradėjus naujovinti, „Linux“ (beta versija) bus išjungta. Prieš tęsdami išsaugokite atidarytus failus.</translation> <translation id="9094033019050270033">Atnaujinti slaptažodį</translation> <translation id="9094038138851891550">Netinkamas naudotojo vardas</translation> @@ -7067,5 +7082,6 @@ <translation id="994289308992179865">&Ciklas</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Kuriamas saugus ryšys...</translation> +<translation id="99731366405731005">Norėdami naudoti „Wi-Fi“ sinchronizavimą, įjunkite <ph name="LINK1_BEGIN" />„Chrome“ sinchronizavimo funkciją<ph name="LINK1_END" />. <ph name="LINK2_BEGIN" />Sužinokite daugiau<ph name="LINK2_END" /></translation> <translation id="998747458861718449">A&pžiūrėti</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 260ffc5c..c447d9e 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">Domēnā <ph name="DOMAIN" /> ir atspējota ADB atkļūdošana. Tādēļ 24 stundu laikā tiks atiestatīts jūsu <ph name="DEVICE_TYPE" /> dators. Dublējiet visus failus, ko vēlaties paturēt.</translation> <translation id="1977965994116744507">Pietuviniet tālruni, lai atbloķētu ierīci (<ph name="DEVICE_TYPE" />).</translation> <translation id="1978006917103730774">Turpmāki programmatūras un drošības atjauninājumi tiks instalēti automātiski.</translation> +<translation id="1978057560491495741">Adreses noņemšana</translation> <translation id="1979095679518582070">Izslēdzot šo funkciju, netiek ietekmēta ierīces spēja nosūtīt informāciju, kas nepieciešama būtiskiem pakalpojumiem, piemēram, sistēmas atjauninājumiem un drošībai.</translation> <translation id="1979280758666859181">Jūs gatavojaties pāriet uz kanālu ar vecāku <ph name="PRODUCT_NAME" /> versiju. Kanāla maiņa tiks piemērota, kad kanāla versija atbildīs versijai, kas pašreiz instalēta jūsu ierīcē.</translation> <translation id="197989455406964291">KDC neatbalsta šifrējuma veidu</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Šo iestatījumu veica <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Rediģēt mapes nosaukumu</translation> <translation id="2225864335125757863">Lai aizsargātu savu kontu, nekavējoties nomainiet tālāk norādītās paroles.</translation> +<translation id="2226204716217107988">Vai pārslēgties uz citu profilu?</translation> <translation id="2226449515541314767">Šajā vietnē ir bloķēta MIDI ierīču pilnīga pārvaldība.</translation> <translation id="2226907662744526012">Automātiski atbloķēt, tiklīdz PIN ir ievadīts</translation> <translation id="222704500187107962">Šis izņēmums tiks automātiski noņemts pēc pašreizējās inkognito režīma sesijas aizvēršanas.</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Konfigurēt tīklu</translation> <translation id="230927227160767054">Šī lapa vēlas instalēt pakalpojumu apdarinātāju.</translation> <translation id="2309620859903500144">Šīs vietnes piekļuve kustību vai gaismas sensoriem ir bloķēta.</translation> +<translation id="2312219318583366810">Lapas URL</translation> <translation id="2314165183524574721">Pašreizējais redzamības iestatījums ir “Paslēpta”.</translation> <translation id="2314774579020744484">Lapu tulkošanai izmantotā valoda</translation> <translation id="2315414688463285945">Konfigurējot Linux failus, radās kļūda. Lūdzu, mēģiniet vēlreiz.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Šai drošības atslēgai nav saglabātu pierakstīšanās datu</translation> <translation id="3714195043138862580">Šai demonstrācijas ierīcei ir atsaukts nodrošinājums.</translation> <translation id="3714633008798122362">tīmekļa kalendārs</translation> +<translation id="3715954932774762075">Lietotnēs un tīmekļa vietnēs, kas ir pieejamas vairākās valodās, tiks izmantota pirmā atbalstītā valoda šī saraksta secībā. Šīs preferences tiek sinhronizētas ar jūsu pārlūkprogrammas iestatījumiem. <ph name="BEGIN_LINK_LEARN_MORE" />Uzzināt vairāk<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Sākumlapa</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Jūs un Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Esošs videoklips no kameras vai faila</translation> <translation id="3886446263141354045">Pieprasījums piekļūt šai vietnei ir nosūtīts lietotājam <ph name="NAME" /></translation> <translation id="3888550877729210209">Piezīmju rakstīšana, izmantojot <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Lai izmantotu Wi-Fi sinhronizāciju, ieslēdziet Chrome sinhronizāciju</translation> <translation id="3892414795099177503">Pievienot OpenVPN/otrā slāņa tunelēšanas protokolu...</translation> <translation id="3893536212201235195">Skatīt un mainīt jūsu pieejamības iestatījumus</translation> <translation id="3893630138897523026">ChromeVox (balss komentāri)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Saglabāt visas cilnes kā grāmatzīmes</translation> <translation id="5449716055534515760">Aizvērt Win&dow</translation> <translation id="5452974209916053028">Pašreizējā inkognito sesija: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Subtitru burbulis pārvietots. Jaunā atrašanās vieta: <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% no kreisās malas, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% no augšas.</translation> <translation id="5454166040603940656">izmantojot <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Nav derīgi</translation> <translation id="5457459357461771897">Lasīt un dzēst fotoattēlus, mūziku un citu datorā esošu multivides saturu</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Notīrīt grāmatzīmes, vēsturi, paroles un citu saturu šajā ierīcē</translation> <translation id="5605623530403479164">Citas meklētājprogrammas</translation> <translation id="5605758115928394442">Uz jūsu tālruni tika nosūtīts paziņojums, lai apstiprinātu, ka tas esat jūs.</translation> +<translation id="560834977503641186">Wi-Fi sinhronizācija, uzzināt vairāk</translation> <translation id="5608580678041221894">Pieskarieties tālāk norādītajiem taustiņiem, lai pielāgotu vai pārvietotu apgriešanas apgabalu.</translation> <translation id="5609231933459083978">Šķiet, ka lietojumprogramma nav derīga.</translation> <translation id="5610038042047936818">Pārslēgt uz kameras režīmu</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Konfigurēt tīklu Ethernet</translation> <translation id="5842497610951477805">Bluetooth iespējošana</translation> <translation id="5843706793424741864">Fārenheita skala</translation> +<translation id="584451707753263735">Subtitri reāllaikā ir redzami. Lai pārslēgtu fokusu, nospiediet F6.</translation> <translation id="5844574845205796324">Ieteikt jaunu saturu atklāšanai</translation> <translation id="5846200638699387931">Saistību sintakses kļūda: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Atjauninājumu un lietotņu instalēšana. Turpinot jūs piekrītat, ka šī ierīce drīkst arī automātiski lejupielādēt un instalēt atjauninājumus un lietotnes, ko nodrošina Google, jūsu mobilo sakaru operators un ierīces ražotājs. Iespējams, tiks izmantoti mobilie dati. Dažās lietotnēs var tikt piedāvāti pirkumi.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> tagad ir redzams pilnekrāna režīmā.</translation> <translation id="7340650977506865820">Vietne kopīgo jūsu ekrānu.</translation> <translation id="7341834142292923918">Vēlas piekļūt šai vietnei</translation> +<translation id="7343372807593926528">Pirms atsauksmes nosūtīšanas aprakstiet problēmu.</translation> <translation id="7345706641791090287">Apstipriniet savu paroli</translation> <translation id="7346909386216857016">Labi, sapratu</translation> <translation id="7347452120014970266">Tādējādi tiks notīrīti visi vietnes <ph name="ORIGIN_NAME" /> un tās instalēto lietotņu saglabātie dati un sīkfaili.</translation> @@ -5783,6 +5792,7 @@ <translation id="7819857487979277519">PSK (WPA vai RSN)</translation> <translation id="7819992334107904369">Chrome sinhronizācija</translation> <translation id="782057141565633384">Kopēt videoklipa adresi</translation> +<translation id="7822187537422052256">Vai tiešām vēlaties noņemt šo adresi?</translation> <translation id="7824864914877854148">Kļūdas dēļ neizdevās pabeigt dublēšanu</translation> <translation id="7825666486843191125">Visas tuvumā esošās kontaktpersonas, ja jūsu ierīces ekrāns ir atbloķēts</translation> <translation id="782590969421016895">Izmantot esošās lapas</translation> @@ -6308,6 +6318,7 @@ <translation id="8419098111404128271">Vaicājuma “<ph name="SEARCH_TEXT" />” meklēšanas rezultāti</translation> <translation id="8419368276599091549">Laipni lūdzam jūsu <ph name="DEVICE_TYPE" /> ierīcē!</translation> <translation id="8420308167132684745">Rediģēt vārdnīcas šķirkļus</translation> +<translation id="8421361468937925547">Subtitri reāllaikā (tikai angļu valodā)</translation> <translation id="8422787418163030046">Nav paplātes.</translation> <translation id="8425213833346101688">Mainīt</translation> <translation id="8425492902634685834">Piespraust pie uzdevumjoslas</translation> @@ -6336,6 +6347,7 @@ <translation id="8449036207308062757">Pārvaldīt krātuvi</translation> <translation id="8452135315243592079">Nav SIM kartes.</translation> <translation id="8455026683977728932">Neizdevās iespējot ADB ilustrāciju</translation> +<translation id="8456398879271637452">Subtitri reāllaikā ir redzami. Lai pārslēgtu fokusu, nospiediet taustiņu Ctrl un vai nu taustiņu Atpakaļ, vai pārejas uz priekšu taustiņu.</translation> <translation id="845702320058262034">Nevar izveidot savienojumu. Tālruņa Bluetooth savienojumam ir jābūt ieslēgtam.</translation> <translation id="8457451314607652708">Importēt grāmatzīmes</translation> <translation id="8458627787104127436">Atvērt visus vietrāžus (<ph name="URL_COUNT" />) jaunā logā</translation> @@ -6846,6 +6858,7 @@ <translation id="9027459031423301635">Atvēr&t saiti jaunā cilnē</translation> <translation id="9030515284705930323">Jūsu organizācija nav iespējojusi Google Play veikalu jūsu kontam. Sazinieties ar administratoru, lai saņemtu plašāku informāciju.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Spraudnis <ph name="PLUGIN_NAME" /> vairs netiek atbalstīts</translation> <translation id="9031549947500880805">Datu dublēšana Google diskā. Varēsiet jebkurā laikā ērti atjaunot savus datus vai mainīt ierīci. Dublējumā ir ietverti arī lietotņu dati.</translation> <translation id="9033765790910064284">Tik un tā turpināt</translation> <translation id="9033857511263905942">&Ielīmēt</translation> @@ -6854,6 +6867,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Ir atlicis viens mēģinājums.}zero{Ir atlikuši # mēģinājumi.}one{Ir atlicis # mēģinājums.}other{Ir atlikuši # mēģinājumi.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Vai atjaunināt paroli vietnei <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Subtitri reāllaikā ir redzami. Lai pārslēgtu fokusu, nospiediet taustiņu ⌘, taustiņu Option un vai nu augšupvērsto, vai lejupvērsto bultiņu.</translation> <translation id="9041692268811217999">Administrators ir atspējojis piekļuvi lokālajiem failiem jūsu datorā.</translation> <translation id="904224458472510106">Šo darbību nevar atsaukt.</translation> <translation id="9042893549633094279">Konfidencialitāte un drošība</translation> @@ -6892,6 +6906,7 @@ <translation id="9088446193279799727">Nevarēja konfigurēt operētājsistēmu Linux. Izveidojiet savienojumu ar internetu un mēģiniet vēlreiz.</translation> <translation id="9088917181875854783">Pārbaudiet, vai ieejas atslēga ir redzama ierīcē <ph name="DEVICE_NAME" />:</translation> <translation id="9089416786594320554">Ievades metodes</translation> +<translation id="909108997331068008">Ar profilu “<ph name="EXISTING_USER" />” jau ir veikta pierakstīšanās kontā <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Ieteicams dublēt datus, lai tos nezaudētu, ja jaunināšanu nevar pabeigt. Sākot jaunināšanu, operētājsistēma Linux (beta versija) tiks izslēgta. Pirms turpināt, saglabājiet atvērtos failus.</translation> <translation id="9094033019050270033">Atjaunināt paroli</translation> <translation id="9094038138851891550">Lietotājvārds nav derīgs</translation> @@ -7065,5 +7080,6 @@ <translation id="994289308992179865">A&utomātiski atkārtot</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Notiek droša savienojuma izveidošana...</translation> +<translation id="99731366405731005">Lai izmantotu Wi-Fi sinhronizāciju, ieslēdziet <ph name="LINK1_BEGIN" />Chrome sinhronizāciju<ph name="LINK1_END" />. <ph name="LINK2_BEGIN" />Uzzināt vairāk<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Pārbaudīt</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 0804e17..678e33b 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> го оневозможи отстранувањето грешки на ADB Ова ќе го ресетира вашиот <ph name="DEVICE_TYPE" /> по 24 часа. Направете бекап на датотеките што сакате да ги задржите.</translation> <translation id="1977965994116744507">Приближете го вашиот телефон за да го отклучите вашиот <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Идните верзии и безбедносните ажурирања ќе се инсталираат автоматски.</translation> +<translation id="1978057560491495741">Отстранување на адресата</translation> <translation id="1979095679518582070">Исклучувањето на функцијава нема да влијае врз способноста на уредов да ги испраќа информациите што се потребни за основните услуги, како што се ажурирањата на системот и безбедноста.</translation> <translation id="1979280758666859181">Се префрлате на канал со постара верзија на <ph name="PRODUCT_NAME" />. Промената на каналот ќе се примени кога неговата верзија ќе се совпадне со верзијата што тековно е инсталирана на уредот.</translation> <translation id="197989455406964291">KDC не го поддржува типот шифрирање</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Оваа поставка припаѓа на <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Измени име на папка</translation> <translation id="2225864335125757863">Веднаш променете ги лозинкиве заради безбедност на сметката:</translation> +<translation id="2226204716217107988">Сакате да се префрлите на друг профил?</translation> <translation id="2226449515541314767">Локацијата е блокирана за целосна контрола на уреди со MIDI.</translation> <translation id="2226907662744526012">Отклучувај автоматски со венсување PIN</translation> <translation id="222704500187107962">Исклучоков автоматски ќе се отстрани откако ќе излезете од тековната инкогнито сесија</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Конфигурирај мрежа</translation> <translation id="230927227160767054">Страницава сака да инсталира управувач на услуга.</translation> <translation id="2309620859903500144">Пристапот на сајтов до сензорите за движење или светлина е блокиран.</translation> +<translation id="2312219318583366810">URL на страницата</translation> <translation id="2314165183524574721">Тековната поставка за видливост е „Сокриен“</translation> <translation id="2314774579020744484">Јазик што се користи за превод на страниците</translation> <translation id="2315414688463285945">Грешка при конфигурирањето на датотеките на Linux. Обидете се повторно.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Овој безбедносен клуч нема податоци за најавување</translation> <translation id="3714195043138862580">Овој демо-режим е ставен во состојба на оневозможен пристап.</translation> <translation id="3714633008798122362">веб-календар</translation> +<translation id="3715954932774762075">Апликациите и веб-сајтовите што се достапни на повеќе јазици ќе го користат првиот поддржан јазик од списоков. Поставкиве се синхронизирани со поставките за прелистувачот. <ph name="BEGIN_LINK_LEARN_MORE" />Дознајте повеќе<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Почетна страница</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Вие и Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Постојно видео од камера или датотека</translation> <translation id="3886446263141354045">Вашето барање за пристап на сајтов е испратено на <ph name="NAME" />.</translation> <translation id="3888550877729210209">Прибележување со <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Вклучете „Синхронизација на Chrome“ за да користите „Синхронизирање на Wi-Fi“</translation> <translation id="3892414795099177503">Додајте OpenVPN / L2TP…</translation> <translation id="3893536212201235195">Прочитајте ги и променете ги поставките за пристапност</translation> <translation id="3893630138897523026">ChromeVox (говорни повратни информации)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Обележи ги сите картички...</translation> <translation id="5449716055534515760">Затвори го про&зорецот</translation> <translation id="5452974209916053028">Тековна инкогнито сесија: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Балончето со титловите е преместено <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % попречно, <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % надолу</translation> <translation id="5454166040603940656">со <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Неважечки</translation> <translation id="5457459357461771897">Читајте и бришете фотографии, музика и други медиуми од компјутерот</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Исчисти обележувачи, историја, лозинки и друго од уредов</translation> <translation id="5605623530403479164">Други пребарувачи</translation> <translation id="5605758115928394442">Испратено ви е известување на телефонот за потврда на вашиот идентитет.</translation> +<translation id="560834977503641186">Синхронизирање на Wi-Fi, дознајте повеќе</translation> <translation id="5608580678041221894">Допрете ги следниве копчиња за да го приспособите или преместите подрачјето за сечење</translation> <translation id="5609231933459083978">Апликацијата изгледа дека е неважечка.</translation> <translation id="5610038042047936818">Префрли на режим на фотоапарат</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Конфигурирајте етернет</translation> <translation id="5842497610951477805">Овозможете Bluetooth</translation> <translation id="5843706793424741864">Фаренхајтови</translation> +<translation id="584451707753263735">„Автоматски титлови“ е видлива, притиснете F6 за да го смените фокусот</translation> <translation id="5844574845205796324">Предложете нови содржини за истражување</translation> <translation id="5846200638699387931">Синтаксичка грешка во односот: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Инсталирање ажурирања и апликации. Ако продолжите, се согласувате дека уредов може и автоматски да презема и инсталира ажурирања и апликации од Google, од вашиот оператор и производителот на уредот, веројатно преку мобилен интернет. Некои од овие апликации може да нудат купувања во апликации.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> е на цел екран сега.</translation> <translation id="7340650977506865820">Сајтот го споделува вашиот екран</translation> <translation id="7341834142292923918">Сака пристап до сајтов</translation> +<translation id="7343372807593926528">Опишете го проблемот пред да испратите повратни информации.</translation> <translation id="7345706641791090287">Потврдете ја лозинката</translation> <translation id="7346909386216857016">Добро, сфатив</translation> <translation id="7347452120014970266">Ова ќе ги избрише сите податоци и колачиња складирани од сајтот <ph name="ORIGIN_NAME" /> и од неговите инсталирани апликации</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA или RSN)</translation> <translation id="7819992334107904369">Синхронизација на Chrome</translation> <translation id="782057141565633384">К&опирај ја адресата на видеото</translation> +<translation id="7822187537422052256">Дали сигурно сакате да ја отстраните адресава?</translation> <translation id="7824864914877854148">Бекапот не може да се заврши поради грешка</translation> <translation id="7825666486843191125">Сите контакти во ваша близина кога екранот е отклучен</translation> <translation id="782590969421016895">Користи тековни страници</translation> @@ -6311,6 +6321,7 @@ <translation id="8419098111404128271">Резултати од пребарувањето за „<ph name="SEARCH_TEXT" />“</translation> <translation id="8419368276599091549">Добре дојдовте во вашиот <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Измена на ставки во речникот</translation> +<translation id="8421361468937925547">Автоматски титлови (само на англиски)</translation> <translation id="8422787418163030046">Недостасува фиока</translation> <translation id="8425213833346101688">Промени</translation> <translation id="8425492902634685834">Прикачи на лентата со задачи</translation> @@ -6339,6 +6350,7 @@ <translation id="8449036207308062757">Управувајте со капацитетот</translation> <translation id="8452135315243592079">Недостасува SIM-картичка</translation> <translation id="8455026683977728932">Не успеа да се овозможи илустрација со ADB</translation> +<translation id="8456398879271637452">„Автоматски титлови“ е видлива, притиснете Ctrl + Назад или Ctrl + Напред за да го смените фокусот</translation> <translation id="845702320058262034">Не може да се поврзе. Проверете дали ви е вклучен Bluetooth на телефонот.</translation> <translation id="8457451314607652708">Увези обележувачи</translation> <translation id="8458627787104127436">Отвори ги (<ph name="URL_COUNT" />) сите во нов прозорец</translation> @@ -6849,6 +6861,7 @@ <translation id="9027459031423301635">Отвори ја врската во нова &картичка</translation> <translation id="9030515284705930323">Организацијата не ја овозможила Google Play Store за вашата сметка. Контактирајте со администраторот за повеќе информации.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> веќе не се поддржува</translation> <translation id="9031549947500880805">Направете бекап на Google Drive. Лесно враќајте ги податоците или менувајте ги уредите во секое време. Бекапот опфаќа податоци од апликациите.</translation> <translation id="9033765790910064284">Сепак продолжи</translation> <translation id="9033857511263905942">&Залепи</translation> @@ -6857,6 +6870,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Имате уште еден обид.}one{Имате уште # обид.}other{Имате уште # обиди.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Дали да се ажурира лозинката за <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">„Автоматски титлови“ е видлива, притиснете ⌘ + Опција + Стрелка нагоре или Стрелка надолу за да го смените фокусот</translation> <translation id="9041692268811217999">Администраторот го оневозможил пристапот до локалните датотеки на вашата машина</translation> <translation id="904224458472510106">Операцијава не може да се врати</translation> <translation id="9042893549633094279">Приватност и безбедност</translation> @@ -6895,6 +6909,7 @@ <translation id="9088446193279799727">Не можеше да се конфигурира Linux. Поврзете се на интернет и обидете се повторно.</translation> <translation id="9088917181875854783">Потврдете дали оваа лозинка е прикажана на „<ph name="DEVICE_NAME" />“:</translation> <translation id="9089416786594320554">Влезни методи</translation> +<translation id="909108997331068008">Профилот на <ph name="EXISTING_USER" /> е веќе најавен на <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Се препорачува да направите бекап на датотеките во случај надградбата да не може да се доврши. Стартувањето на надградбата ќе предизвика исклучување на Linux (бета). Пред да продолжите зачувајте ги отворените датотеки.</translation> <translation id="9094033019050270033">Ажурирај ја лозинката</translation> <translation id="9094038138851891550">Погрешно корисничко име</translation> @@ -7068,5 +7083,6 @@ <translation id="994289308992179865">&Повторувај</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Се воспоставува безбедна врска...</translation> +<translation id="99731366405731005">Вклучете <ph name="LINK1_BEGIN" />Синхронизација на Chrome<ph name="LINK1_END" /> за да користите „Синхронизирање на Wi-Fi“. <ph name="LINK2_BEGIN" />Дознајте повеќе<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Провери&</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index b172b47..3943879 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -869,6 +869,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" />, ADB ഡീബഗ് ചെയ്യൽ പ്രവർത്തനരഹിതമാക്കി. ഇത് നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> 24 മണിക്കൂറിനുള്ളിൽ റീസെറ്റ് ചെയ്യും. നിലനിർത്തണമെന്നുള്ള എല്ലാ ഫയലുകളും ബാക്കപ്പ് ചെയ്യുക.</translation> <translation id="1977965994116744507">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> അൺലോക്ക് ചെയ്യാൻ ഫോൺ അടുത്ത് കൊണ്ടുവെയ്ക്കുക.</translation> <translation id="1978006917103730774">ഭാവിയിൽ സോഫ്റ്റ്വെയറും സുരക്ഷാ അപ്ഡേറ്റുകളും സ്വയമേവ ഇൻസ്റ്റാൾ ചെയ്യും.</translation> +<translation id="1978057560491495741">വിലാസം നീക്കം ചെയ്യുക</translation> <translation id="1979095679518582070">ഈ ഫീച്ചർ ഓഫാക്കുന്നത്, സിസ്റ്റം അപ്ഡേറ്റുകളും സുരക്ഷയും പോലുള്ള അത്യാവശ്യ സേവനങ്ങൾക്ക് ആവശ്യമായ വിവരങ്ങൾ അയയ്ക്കുന്നതിനുള്ള ഈ ഉപകരണത്തിന്റെ കഴിവിനെ ബാധിക്കുകയില്ല.</translation> <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />-ന്റെ പഴയ പതിപ്പിലുള്ള ചാനലിലേക്ക് നിങ്ങൾ മാറുന്നു. ഉപകരണത്തിൽ നിലവിൽ ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്ന പതിപ്പുമായി ചാനൽ പതിപ്പ് പൊരുത്തപ്പെടുമ്പോൾ മാറ്റം ബാധകമാക്കും.</translation> <translation id="197989455406964291">എൻക്രിപ്ഷൻ രീതി KDC പിന്തുണയ്ക്കുന്നില്ല</translation> @@ -1071,6 +1072,7 @@ <translation id="2224444042887712269">ഈ ക്രമീകരണം <ph name="OWNER_EMAIL" />-ന്റേതാണ്.</translation> <translation id="2224551243087462610">ഫോള്ഡര് നാമം എഡിറ്റ് ചെയ്യുക</translation> <translation id="2225864335125757863">നിങ്ങളുടെ അക്കൗണ്ട് സുരക്ഷിതമായി നിലനിർത്തുന്നതിന് ഈ പാസ്വേഡുകൾ ഉടൻ മാറ്റുക:</translation> +<translation id="2226204716217107988">മറ്റൊരു പ്രൊഫൈലിലേക്ക് മാറണോ?</translation> <translation id="2226449515541314767">MIDI ഉപകരണങ്ങളിൽ പൂർണ്ണനിയന്ത്രണം നേടുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ തടഞ്ഞു.</translation> <translation id="2226907662744526012">പിൻ നൽകി കഴിഞ്ഞാൽ സ്വയമേവ അൺലോക്ക് ചെയ്യുക</translation> <translation id="222704500187107962">നിലവിലെ അദൃശ്യ മോഡ് സെഷനിൽ നിന്ന് നിങ്ങൾ പുറത്തുകടന്ന് കഴിഞ്ഞാൽ ഈ ഒഴിവാക്കൽ സ്വയമേവ നീക്കം ചെയ്യപ്പെടും</translation> @@ -1140,6 +1142,7 @@ <translation id="2307462900900812319">നെറ്റ്വർക്ക് കോൺഫിഗർ ചെയ്യുക</translation> <translation id="230927227160767054">ഈ പേജ് ഒരു സേവന ഹാൻഡ്ലർ ഇൻസ്റ്റാൾ ചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നു.</translation> <translation id="2309620859903500144">നിങ്ങളുടെ ചലന സെൻസർ അല്ലെങ്കിൽ പ്രകാശ സെൻസർ ആക്സസ് ചെയ്യുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു.</translation> +<translation id="2312219318583366810">പേജ് URL</translation> <translation id="2314165183524574721">നിലവിലെ ദൃശ്യപരതാ ക്രമീകരണം മറച്ചിരിക്കുന്നു</translation> <translation id="2314774579020744484">പേജുകൾ വിവർത്തനം ചെയ്യുമ്പോൾ ഉപയോഗിച്ച ഭാഷ</translation> <translation id="2315414688463285945">Linux ഫയലുകൾ കോൺഫിഗർ ചെയ്യുന്നതിൽ പിശക്. വീണ്ടും ശ്രമിക്കുക.</translation> @@ -2343,6 +2346,7 @@ <translation id="3713047097299026954">ഈ സുരക്ഷാ കീയിൽ സൈൻ ഇൻ ഡാറ്റയൊന്നുമില്ല</translation> <translation id="3714195043138862580">ഈ ഡെമോ ഉപകരണം ഡീപ്രൊവിഷൻ ചെയ്ത നിലയിലാക്കിയിരിക്കുന്നു.</translation> <translation id="3714633008798122362">വെബ് കലണ്ടർ</translation> +<translation id="3715954932774762075">ഒന്നിലധികം ഭാഷകൾ ലഭ്യമായ ആപ്പുകളും വെബ്സൈറ്റുകളും ഈ ലിസ്റ്റിലുള്ള, പിന്തുണയ്ക്കുന്ന ആദ്യത്തെ ഭാഷ ഉപയോഗിക്കും. ഈ മുൻഗണനകൾ നിങ്ങളുടെ ബ്രൗസർ ക്രമീകരണവുമായി സമന്വയിപ്പിക്കുന്നു. <ph name="BEGIN_LINK_LEARN_MORE" />കൂടുതലറിയുക<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">ഹോംപേജ്</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">നിങ്ങളും Google-ഉം</translation> @@ -2503,6 +2507,7 @@ <translation id="3882165008614329320">ക്യാമറയിൽ നിന്നോ ഫയലിൽ നിന്നോ ഉള്ള നിലവിലെ വീഡിയോ</translation> <translation id="3886446263141354045"><ph name="NAME" /> എന്നയാൾക്ക് ഈ സൈറ്റ് ആക്സസ് ചെയ്യാനുള്ള നിങ്ങളുടെ അഭ്യർത്ഥന അയച്ചു</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ഉപയോഗിച്ച് കുറിപ്പുകൾ എടുക്കുന്നു</translation> +<translation id="3890064827463908288">വൈഫൈ സമന്വയം ഉപയോഗിക്കാൻ Chrome സമന്വയം ഓണാക്കുക</translation> <translation id="3892414795099177503">OpenVPN / L2TP ചേർക്കുക...</translation> <translation id="3893536212201235195">നിങ്ങളുടെ ഉപയോഗസഹായിയുടെ ക്രമീകരണങ്ങൾ വായിച്ചശേഷം മാറ്റുക</translation> <translation id="3893630138897523026">ChromeVox (സ്പോക്കൺ ഫീഡ്ബാക്ക്)</translation> @@ -3775,6 +3780,7 @@ <translation id="5449588825071916739">എല്ലാ ടാബുകളും ബുക്ക്മാര്ക്ക് ചെയ്യുക</translation> <translation id="5449716055534515760">വി&ന്ഡോ അടയ്ക്കുക</translation> <translation id="5452974209916053028">നിലവിലെ അദൃശ്യ മോഡ് സെഷൻ: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /> എന്നിവ</translation> +<translation id="5454005855577728171"><ph name="POSITION_ON_SCREEN_FROM_LEFT" />% എതിർവശത്ത്, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% താഴെയായി ക്യാപ്ഷൻ ബബ്ൾ നീങ്ങി</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> എന്നതിനൊപ്പം</translation> <translation id="5457113250005438886">അസാധുവാണ്</translation> <translation id="5457459357461771897">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ നിന്ന് ഫോട്ടോകളും സംഗീതവും മറ്റ് മീഡിയയും വായിക്കുക, ഇല്ലാതാക്കുക</translation> @@ -3918,6 +3924,7 @@ <translation id="5602765853043467355">ഈ ഉപകരണത്തിൽ നിന്ന് ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ എന്നിവയും മറ്റും മായ്ക്കുക</translation> <translation id="5605623530403479164">മറ്റ് തിരയൽ യന്ത്രങ്ങൾ</translation> <translation id="5605758115928394442">ഇത് നിങ്ങൾ തന്നെയാണെന്ന് സ്ഥിരീകരിക്കാൻ ഫോണിലേക്ക് ഒരു അറിയിപ്പ് അയച്ചിട്ടുണ്ട്.</translation> +<translation id="560834977503641186">വൈഫൈ സമന്വയം, കൂടുതലറിയുക</translation> <translation id="5608580678041221894">വലുപ്പം മാറ്റുന്നയിടം ക്രമീകരിക്കാനും നീക്കാനും ചുവടെയുള്ള കീകൾ ടാപ്പുചെയ്യുക</translation> <translation id="5609231933459083978">ആപ്പ് അസാധുവായി തോന്നുന്നു.</translation> <translation id="5610038042047936818">ക്യാമറ മോഡിലേക്ക് മാറുക</translation> @@ -4109,6 +4116,7 @@ <translation id="5841270259333717135">എതെർനെറ്റ് കോൺഫിഗർ ചെയ്യുക</translation> <translation id="5842497610951477805">Bluetooth പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="5843706793424741864">ഫാരൻഹീറ്റ്</translation> +<translation id="584451707753263735">തത്സമയ ക്യാപ്ഷൻ ദൃശ്യമാണ്, ഫോക്കസ് മാറ്റാൻ F6 അമർത്തുക</translation> <translation id="5844574845205796324">അടുത്തറിയാൻ പുതിയ ഉള്ളടക്കം നിർദ്ദേശിക്കുക</translation> <translation id="5846200638699387931">റിലേഷൻ വാക്യഘടനാ പിശക്: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">അപ്ഡേറ്റുകളും ആപ്പുകളും ഇൻസ്റ്റാൾ ചെയ്യുക. തുടരുന്നതിലൂടെ, ഈ ഉപകരണം Google-ൽ നിന്നും നിങ്ങളുടെ കാരിയറിൽ നിന്നും ഉപകരണ നിർമ്മാതാവിൽ നിന്നും, ഒരുപക്ഷേ സെല്ലുലാർ ഡാറ്റ ഉപയോഗിച്ച്, അപ്ഡേറ്റുകളും ആപ്പുകളും സ്വയമേവ ഡൗൺലോഡ് ചെയ്ത് ഇൻസ്റ്റാൾ ചെയ്യുന്നത് നിങ്ങൾ അംഗീകരിക്കുന്നു. ഈ ആപ്പുകളിൽ ചിലത് ആപ്പ് വഴി വാങ്ങാനുള്ള സൗകര്യം നൽകിയേക്കാം.</translation> @@ -5366,6 +5374,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> ഇപ്പോൾ പൂർണ്ണ സ്ക്രീനിലാണ്.</translation> <translation id="7340650977506865820">സൈറ്റ് നിങ്ങളുടെ സ്ക്രീൻ പങ്കിടുന്നു</translation> <translation id="7341834142292923918">ഈ സൈറ്റിലേക്ക് ആക്സസ് ആവശ്യമുണ്ട്</translation> +<translation id="7343372807593926528">ഫീഡ്ബാക്ക് അയയ്ക്കുന്നതിന് മുമ്പ് പ്രശ്നത്തെക്കുറിച്ച് വിവരിക്കുക.</translation> <translation id="7345706641791090287">പാസ്വേഡ് സ്ഥിരീകരിക്കുക</translation> <translation id="7346909386216857016">മനസ്സിലായി</translation> <translation id="7347452120014970266">ഇത് <ph name="ORIGIN_NAME" /> എന്നതും അതിന്റെ ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്ന ആപ്പുകളും സംഭരിച്ചിട്ടുള്ള എല്ലാ ഡാറ്റയും കുക്കികളും മായ്ക്കും</translation> @@ -5782,6 +5791,7 @@ <translation id="7819857487979277519">PSK (WPA അല്ലെങ്കിൽ RSN)</translation> <translation id="7819992334107904369">Chrome സമന്വയം</translation> <translation id="782057141565633384">വീഡിയോ വിലാസം പകർത്തുക</translation> +<translation id="7822187537422052256">ഈ വിലാസം നീക്കം ചെയ്യണമെന്ന് തീർച്ചയാണോ?</translation> <translation id="7824864914877854148">പിശക് കാരണം ബാക്കപ്പെടുക്കൽ പൂർത്തിയാക്കാനായില്ല</translation> <translation id="7825666486843191125">നിങ്ങളുടെ സ്ക്രീൻ അൺലോക്ക് ചെയ്തിരിക്കുമ്പോൾ നിങ്ങൾക്ക് സമീപമുള്ള എല്ലാ കോൺടാക്റ്റുകൾക്കും</translation> <translation id="782590969421016895">നിലവിലെ പേജുകള് ഉപയോഗിക്കുക</translation> @@ -6307,6 +6317,7 @@ <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' എന്നതിനുള്ള തിരയൽ ഫലം</translation> <translation id="8419368276599091549">നിങ്ങളുടെ <ph name="DEVICE_TYPE" />-ലേക്ക് സ്വാഗതം!</translation> <translation id="8420308167132684745">നിഘണ്ടു എൻട്രികൾ എഡിറ്റ് ചെയ്യൽ</translation> +<translation id="8421361468937925547">തത്സമയ ക്യാപ്ഷൻ (ഇംഗ്ലീഷ് മാത്രം)</translation> <translation id="8422787418163030046">ട്രേ കാണുന്നില്ല</translation> <translation id="8425213833346101688">മാറ്റുക</translation> <translation id="8425492902634685834">ടാസ്ക്ബാറില് പിന് ചെയ്യുക</translation> @@ -6335,6 +6346,7 @@ <translation id="8449036207308062757">സ്റ്റോറേജ് മാനേജ് ചെയ്യുക</translation> <translation id="8452135315243592079">സിം കാർഡ് കാണുന്നില്ല</translation> <translation id="8455026683977728932">ADB ചിത്രീകരണം പ്രവർത്തനക്ഷമമാക്കാനായില്ല</translation> +<translation id="8456398879271637452">തത്സമയ ക്യാപ്ഷൻ ദൃശ്യമാണ്, ഫോക്കസ് മാറ്റാൻ Ctrl + Back അല്ലെങ്കിൽ Ctrl + Forward അമർത്തുക</translation> <translation id="845702320058262034">കണക്റ്റ് ചെയ്യാനാവുന്നില്ല. ഫോണിൻ്റെ Bluetooth ഓണാണന്ന് ഉറപ്പുവരുത്തുക.</translation> <translation id="8457451314607652708">ബുക്ക്മാർക്കുകൾ ഇമ്പോർട്ടുചെയ്യുക</translation> <translation id="8458627787104127436">എല്ലാം (<ph name="URL_COUNT" />) ഒരു പുതിയ വിൻഡോയിൽ തുറക്കുക</translation> @@ -6844,6 +6856,7 @@ <translation id="9027459031423301635">പുതിയ &ടാബിൽ ലിങ്ക് തുറക്കുക</translation> <translation id="9030515284705930323">നിങ്ങളുടെ അക്കൗണ്ടിന് വേണ്ടി ഓർഗനൈസേഷൻ, Google Play സ്റ്റോർ പ്രവർത്തനക്ഷമമാക്കിയിട്ടില്ല. കൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്മിനിസ്ട്രേറ്ററെ ബന്ധപ്പെടുക.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> എന്നതിന് ഇപ്പോൾ പിന്തുണയില്ല</translation> <translation id="9031549947500880805">Google ഡ്രൈവിലേക്ക് ബാക്കപ്പെടുക്കുക. ഏത് സമയത്തും ഡാറ്റ എളുപ്പത്തിൽ പുനഃസ്ഥാപിക്കുകയോ ഉപകരണം മാറുകയോ ചെയ്യുക. നിങ്ങളുടെ ബാക്കപ്പിൽ ആപ്പ് ഡാറ്റയും ഉൾപ്പെടുന്നു.</translation> <translation id="9033765790910064284">എന്തായാലും തുടരുക</translation> <translation id="9033857511263905942">&ഒട്ടിക്കുക</translation> @@ -6852,6 +6865,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{ഒരു ശ്രമം ശേഷിക്കുന്നു.}other{# ശ്രമങ്ങൾ ശേഷിക്കുന്നു.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" /> എന്നതിനായി പാസ്വേഡുകൾ അപ്ഡേറ്റ് ചെയ്യണോ?</translation> +<translation id="9041049756004505730">തത്സമയ ക്യാപ്ഷൻ ദൃശ്യമാണ്, ഫോക്കസ് മാറ്റാൻ ⌘ + Option + മുകളിലേക്കോ താഴേക്കോ ഉള്ള അമ്പടയാളം അമർത്തുക</translation> <translation id="9041692268811217999">അഡ്മിനിസ്ട്രേറ്റർ, നിങ്ങളുടെ മെഷീനിലുള്ള ലോക്കൽ ഫയലുകളിലേക്കുള്ള ആക്സസ് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു</translation> <translation id="904224458472510106">ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാവില്ല</translation> <translation id="9042893549633094279">സ്വകാര്യതയും സുരക്ഷയും</translation> @@ -6890,6 +6904,7 @@ <translation id="9088446193279799727">Linux കോൺഫിഗർ ചെയ്യാനായില്ല. ഇന്റർനെറ്റിലേക്ക് കണക്റ്റ് ചെയ്ത ശേഷം വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="9088917181875854783">ഈ പാസ്കീ "<ph name="DEVICE_NAME" />" എന്നതിൽ കാണിച്ചിരിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുക:</translation> <translation id="9089416786594320554">ഇൻപുട്ട് രീതികൾ</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> എന്നയാളുടെ പ്രൊഫൈൽ ഇതിനകം തന്നെ <ph name="NEW_USER" /> എന്നതിൽ സൈൻ ഇൻ ചെയ്തിട്ടുണ്ട്</translation> <translation id="9093429538970210897">ഏതെങ്കിലും കാരണവശാൽ അപ്ഗ്രേഡ് പൂർത്തിയാക്കാനാകുന്നില്ലെങ്കിൽ, ഫയലുകളുടെ ബാക്കപ്പെടുക്കാൻ ശുപാർശ ചെയ്യുന്നു. അപ്ഗ്രേഡ് ആരംഭിക്കുമ്പോൾ Linux (ബീറ്റ) ഷട്ട് ഡൗൺ ആകും. തുടരുന്നതിന് മുമ്പ് തുറന്ന ഫയലുകൾ സംരക്ഷിക്കുക.</translation> <translation id="9094033019050270033">പാസ്വേഡ് അപ്ഡേറ്റ് ചെയ്യുക</translation> <translation id="9094038138851891550">ഉപയോക്തൃനാമം അസാധുവാണ്</translation> @@ -7063,5 +7078,6 @@ <translation id="994289308992179865">&ലൂപ്പുചെയ്യുക</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">സുരക്ഷിത കണക്ഷന് സ്ഥാപിക്കുന്നു...</translation> +<translation id="99731366405731005">വൈഫൈ സമന്വയം ഉപയോഗിക്കാൻ <ph name="LINK1_BEGIN" />Chrome സമന്വയം<ph name="LINK1_END" /> ഓണാക്കുക. <ph name="LINK2_BEGIN" />കൂടുതലറിയുക<ph name="LINK2_END" /></translation> <translation id="998747458861718449">പരിശോധിക്കുക</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index becf53e..5e44d64c 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -1107,7 +1107,7 @@ <translation id="2261323523305321874">तुमच्या ॲडमिनिस्ट्रेटरने संपूर्ण सिस्टममध्ये बदल केले आहेत, ज्यामुळे काही जुन्या प्रोफाइल बंद झाल्या आहेत.</translation> <translation id="2262332168014443534">लाइट मोड आता HTTPS सह सर्व पेजवर ब्राउझिंग अधिक जलद करतो.</translation> <translation id="2262477216570151239">पुनरावृत्तीपूर्वी विलंब</translation> -<translation id="2262888617381992508">Play संरक्षण आशय करण्याची अनुमती नाही</translation> +<translation id="2262888617381992508">Play संरक्षण आशयाला अनुमती नाही</translation> <translation id="2263189956353037928">साइन आउट करून परत साइन इन करा</translation> <translation id="2263371730707937087">स्क्रीन रिफ्रेश रेट</translation> <translation id="22665427234727190">साइटला ब्लूटूथ डिव्हाइस अॅक्सेस करायची असतील तेव्हा विचारा (शिफारस केलेले)</translation> @@ -6217,7 +6217,7 @@ <translation id="8300011035382349091">या टॅबचे बुकमार्क संपादित करा</translation> <translation id="8300374739238450534">भडक निळा</translation> <translation id="8300849813060516376">OTASP बिघडले</translation> -<translation id="8304383784961451596">तुम्ही हे डिव्हाइस वापरण्याची परवानगी नाही. कृपया साइन इन करण्याच्या परवानगीसाठी अॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा Family Link ने पर्यवेक्षण असलेल्या Google खाते वापरून साइन इन करा.</translation> +<translation id="8304383784961451596">तुम्ही हे डिव्हाइस वापरण्याची परवानगी नाही. कृपया साइन इन करण्याच्या परवानगीसाठी अॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा Family Link चे पर्यवेक्षण असलेले Google खाते वापरून साइन इन करा.</translation> <translation id="8308179586020895837"><ph name="HOST" /> तुमचा कॅमेरा ॲक्सेस करू इच्छित असल्यास विचारा</translation> <translation id="830868413617744215">बीटा</translation> <translation id="8309458809024885768">सर्टिफिकेट आधीपासूनच अस्तित्वात आहे</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index a314a8b..36a0c457 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -276,6 +276,7 @@ <translation id="1313705515580255288">तपाइँका पृष्ठमञ्जूषाहरू, इतिहास, र अन्य सेटिङहरू तपाइँको Google खातामा समक्रमण गरिनेछन्।</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">गृह सञ्जाल, रोम गरिरहेको छैन</translation> +<translation id="1315056510003830387">Flash प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="1315144594965013365">दुवै यन्त्र अनलक गरिएका छन्, एकअर्काको नजिकै छन् र दुवैको ब्लुटुथ अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्। तपाईं कुनै Chromebook सँग सेयर गर्दै हुनुहुन्छ भने त्यसको नजिकैका यन्त्रसँग सेयर गर्ने सुविधा अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस् (समय देखिने ठाउँ चयन गरेर वस्तुस्थिति क्षेत्र खोल्नुहोस् र त्यसपछि नजिकैका यन्त्रसँग सेयर गर्ने सुविधा चयन गर्नुहोस्)।</translation> <translation id="1316136264406804862">खोज्दै...</translation> <translation id="1316495628809031177">सिंक पज गरिएको छ</translation> @@ -335,6 +336,7 @@ <translation id="1386791642444521222">SIM कार्ड सक्रिय पार्नुहोस्</translation> <translation id="1387519831959169718">आफूले व्यक्तिगत रूपमा गर्ने ब्राउजिङ अलग गर्न तपाईं <ph name="NEW_USER" /> का लागि एउटा नयाँ प्रोफाइल बनाउन सक्नुहुन्छ</translation> <translation id="138784436342154190">पूर्वनिर्धारित सुरुवात पृष्ठलाई पुनर्स्थापना गर्ने हो?</translation> +<translation id="1388253969141979417">तपाईंको माइक्रोफोन प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="1388728792929436380">अपडेट पूरा भएपछि <ph name="DEVICE_TYPE" /> रिस्टार्ट हुने छ।</translation> <translation id="1389342855416376185">संरक्षित सामग्री ब्लक गर्नुहोस्</translation> <translation id="1390548061267426325">नियमित ट्याबको रूपमा खोल्नुहोस्</translation> @@ -385,9 +387,11 @@ <translation id="1433811987160647649">पहुँच राख्नु अघि सोध्नुहोस्</translation> <translation id="1434696352799406980">यसले तपाईँको सुरूवात पृष्ठ, नयाँ ट्याब पृष्ठ, सर्च इन्जिन र पिन गरिएको ट्याबहरू रिसेट गर्ने छ। यसले सबै विस्तारहरू असक्षम गर्ने छ र कुकीहरू जस्ता अस्थायी डेटा खाली गर्ने छ। तपाईँको पुस्तक चिन्ह, इतिहास र सुरक्षित गरिएका पासवर्डहरू खाली हुने छैनन्।</translation> <translation id="1434886155212424586">नयाँ ट्याब पृष्ठ गृहपृष्ठ हो</translation> +<translation id="1435515966666225466">तपाईंको कम्प्युटर चलाउनका निम्ति कुनै प्लगइन प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="1436390408194692385"><ph name="TICKET_TIME_LEFT" /> का लागि मान्य छ</translation> <translation id="1436671784520050284">सेटअप जारी राख्नुहोस्</translation> <translation id="1436784010935106834">हटाइयो</translation> +<translation id="1437986450143295708">यो समस्या विस्तृत रूपमा वर्णन गर्नुहोस्</translation> <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> चयन गरियो</translation> <translation id="1442851588227551435">Kerberos को सक्रिय टिकट सेट गर्नुहोस्</translation> <translation id="1444628761356461360">यो सेटिङ यन्त्रको मालिक, <ph name="OWNER_EMAIL" /> द्वारा व्यवस्थत छ।</translation> @@ -470,6 +474,7 @@ <translation id="1530838837447122178">माउस र टचप्याड यन्त्र सम्बन्धी सेटिङहरू खोल्नुहोस्</translation> <translation id="1531004739673299060">एपको विन्डो</translation> <translation id="1531275250079031713">'नयाँ Wi-Fi थप्नुहोस्' नामक संवाद देखाउनुहोस्</translation> +<translation id="1535228823998016251">चर्को</translation> <translation id="1536754031901697553">विच्छेद गर्दै...</translation> <translation id="1537254971476575106">फुल स्क्रिन म्याग्निफायर</translation> <translation id="15373452373711364">ठुलो माउस कर्सर</translation> @@ -551,6 +556,7 @@ <translation id="1627408615528139100">पहिल्यै डाउनलोड गरिएको छ</translation> <translation id="1628948239858170093">फाइल खोल्नुअघि उक्त फाइल स्क्यान गर्ने हो?</translation> <translation id="1629314197035607094">पासवर्डको म्याद सकिएको छ</translation> +<translation id="163072119192489970">डेटा पठाउने तथा प्राप्त गर्ने कार्य पूरा गर्न अनुमति दिइएका साइटहरू</translation> <translation id="1630768113285622200">पुनः सुरु गरेर जारी राख्नुहोस्</translation> <translation id="1632082166874334883">तपाईंको Google खातामा भण्डारण गरिएको पासवर्ड</translation> <translation id="1632803087685957583">तपाईँलाई आफ्नो किबोर्डको दोहोरिने दर, शब्दको पूर्वानुमान र थप कुराहरू समायोजन गर्न दिन्छ</translation> @@ -748,6 +754,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> लाई असक्षम पारियो</translation> <translation id="184273675144259287">अघिल्लो ब्याकअपबाट आफ्ना Linux सम्बन्धी एप र फाइलहरू प्रतिस्थापन गर्नुहोस्</translation> <translation id="1842766183094193446">तपाईंले डेमो मोड सक्षम पार्न चाहनुभएकै हो?</translation> +<translation id="1845727111305721124">ध्वनि प्ले गर्न अनुमति दिइएका साइटहरू</translation> <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> चालु गर्न कन्ट्रोल-क्लिक गर्नुहोस्</translation> <translation id="1849186935225320012">यस पृष्ठसँग MIDI यन्त्रहरूको पूर्ण नियन्त्रण छ।</translation> <translation id="1850508293116537636">&घडीको दिशामा घुमाउनुहोस्</translation> @@ -772,6 +779,7 @@ <translation id="187145082678092583">अझ थोरै एपहरू</translation> <translation id="1871534214638631766">प्रयोगकर्ताले राइट क्लिक गर्दा वा सामग्रीमा केही बेरसम्म थिचिरहँदा त्यससँग सम्बन्धित जानकारी देखाइयोस्</translation> <translation id="1871615898038944731">तपाईंको <ph name="DEVICE_TYPE" /> अद्यावधिक छ</translation> +<translation id="1874248162548993294">जुनसुकै विज्ञापनहरू देखाउन अनुमति दिइएका साइटहरू</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{ट्याब सारेर अर्को विन्डोमा लैजानुहोस्}other{ट्याबहरू सारेर अर्को विन्डोमा लैजानुहोस्}}</translation> <translation id="1875386316419689002">यो ट्याब कुनै HID यन्त्रमा जोडिएको छ।</translation> <translation id="1875387611427697908">यसलाई <ph name="CHROME_WEB_STORE" /> बाट मात्रै थप्न सकिन्छ</translation> @@ -827,6 +835,7 @@ <translation id="1931152874660185993">अवयवहरू स्थापित छैनन्।</translation> <translation id="1932098463447129402">यसभन्दा अघि होइन</translation> <translation id="1933809209549026293">कृपया माउस वा कीबोर्ड जडान गर्नुहोस्। यदि तपाईं ब्लुटूथ यन्त्र प्रयोग गरिरहनु भएको छ भने, यो जोडिनका लागि तयार छ भनि सुनिश्चित गर्नुहोस्।</translation> +<translation id="1935303383381416800">तपाईंको स्थान हेर्न अनुमति दिइएका साइटहरू</translation> <translation id="1936931585862840749">प्रिन्ट गर्नु पर्ने प्रतिको सङ्ख्या तोक्न (१ देखि <ph name="MAX_COPIES" /> सम्मको) कुनै सङ्ख्या प्रयोग गर्नुहोस्।</translation> <translation id="1937774647013465102">यस यन्त्रमार्फत <ph name="ARCHITECTURE_DEVICE" />प्रकारको कन्टेनरसम्बन्धी वास्तुकला <ph name="ARCHITECTURE_CONTAINER" /> आयात गर्न सकिएन। तपाईं यो कन्टेनरलाई फरक यन्त्रमा पुनर्स्थापना गरी हेर्न सक्नुहुन्छ अथवा तपाईं Files अनुप्रयोगमार्फत खोलेर यस कन्टेनरसम्बन्धी छविभित्रका फाइलहरूमाथि पहुँच राख्न सक्नुहुन्छ।</translation> <translation id="1938351510777341717">बाह्य आदेश</translation> @@ -944,6 +953,7 @@ <translation id="2090165459409185032">तपाईँको खाता जानकारी पुनःप्राप्ति गर्न google.com/accounts/recovery मा जानुहोस्</translation> <translation id="2090876986345970080">प्रणाली सुरक्षा सेटिङ</translation> <translation id="2091887806945687916">आवाज</translation> +<translation id="209539936453343974">अभिभावकीय नियन्त्रणहरू सेटअप गर्न बच्चासँग अनिवार्य रूपमा कुनै अभिभावकले व्यवस्थापन गरेको Google खाता हुनु पर्छ। अभिभावकहरू <ph name="DEVICE_TYPE_PLURAL" /> को सहयोगले स्क्रिनका सीमा सेटअप गर्न, वेबसाइटहरूलाई अनुमति दिन वा ब्लक गर्न र Family Link एपमा थप कुराहरू गर्न सक्छन्। बच्चाले Google कक्षा जस्ता साइटहरूमा विद्यालयको कार्य गर्नु पर्ने भएमा विद्यालयको खाता पछि हाल्न सकिन्छ।</translation> <translation id="2096715839409389970">तेस्रो पक्षीय कुकीहरू खाली गर्नुहोस्</translation> <translation id="2097372108957554726">नयाँ यन्त्रहरू दर्ता गराउन तपाईंले Chrome मा साइन इन गर्न आवश्यक छ।</translation> <translation id="2098805196501063469">बाँकी पासवर्डहरू जाँच्नुहोस्</translation> @@ -1094,6 +1104,7 @@ <translation id="2261323523305321874">तपाईंको प्रशासकले गर्नुभएको प्रणालीव्यापी परिवर्तनले केही पुराना प्रोफाइलहरूलाई असक्षम पार्छ।</translation> <translation id="2262332168014443534">लाइट मोडले अब HTTPS लगायत सबै पृष्ठहरू ब्राउज गर्ने कार्यलाई अझ छिटो बनाउँछ।</translation> <translation id="2262477216570151239">दोहोर्याउनु अघिको ढिलाइ</translation> +<translation id="2262888617381992508">संरक्षित सामग्री प्ले गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="2263189956353037928">साइन आउट गरेर फेरि साइन इन गर्नुहोस्</translation> <translation id="2263371730707937087">स्क्रिन रिफ्रेस हुने दर</translation> <translation id="22665427234727190">कुनै साइटले ब्लुटुथ यन्त्रहरूमाथि पहुँच राख्न खोज्दा चलाउन दिने कि नदिने भनी मलाई सोधियोस् (सिफारिस गरिएको)</translation> @@ -1362,6 +1373,7 @@ <translation id="2571655996835834626">कुकी, JavaScript, प्लग-इन, भूस्थान, माइक्रोफोन र क्यामेरा जस्ता सुविधाहरूमाथि वेबसाइटको पहुँच नियन्त्रण गर्ने आफ्ना सेटिङहरू परिवर्तन गर्नुहोस्।</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> मा पढ्ने-मात्र अनुमति प्रदान गरिएको छ।</translation> <translation id="2575247648642144396">जब एक्स्टेन्सनले हालको पृष्ठमा कार्य गर्न सक्छ तब यो प्रतिमालाई देख्न सकिनेछ। प्रतिमामा क्लिक गरेर वा <ph name="EXTENSION_SHORTCUT" /> लाई थिचेर यो एक्स्टेन्सन प्रयोग गर्नुहोस्।</translation> +<translation id="2575441894380764255">हस्तक्षेपकारी वा भ्रामक विज्ञापनहरू देखाउन अनुमति नदिइएका साइटहरू</translation> <translation id="257779572837908839">बैठकहरूका लागि क्रोमबक्सको रूपमा सेटअप गर्नुहोस्</translation> <translation id="2579232805407578790">सर्भरमा कनेक्ट गर्न सकिएन। कृपया आफ्नो इन्टरनेट कनेक्सन जाँच गरी फेरि प्रयास गर्नुहोस्। यो समस्या कायम रहेमा आफ्नो Chromebook रिस्टार्ट गर्नुहोस्। त्रुटिको कोड: <ph name="ERROR_CODE" />।</translation> <translation id="2580889980133367162"><ph name="HOST" /> लाई धेरै फाइलहरू डाउनलोड गर्ने अनुमति सँधै दिनुहोस्</translation> @@ -1628,6 +1640,7 @@ <translation id="2880660355386638022">विन्डो रहने स्थान</translation> <translation id="2881076733170862447">तपाईंले विस्तारमा क्लिक गर्दा</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> रिस्टार्ट हुनेछ र क्षण भरमा रिसेट गर्दछ</translation> +<translation id="288387288628762616">Flash प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="2885378588091291677">कार्य व्यवस्थापक</translation> <translation id="2885729872133513017">सर्भरको जवाफ डिकोडिङ गर्ने क्रममा कुनै समस्या भयो।</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1663,6 +1676,7 @@ <translation id="2923234477033317484">यो खाता हटाउनुहोस्</translation> <translation id="2926085873880284723">पूर्वनिर्धारित सर्टकटहरू पुनर्स्थापना गर्नुहोस्</translation> <translation id="2927017729816812676">केस भण्डारण</translation> +<translation id="2928795416630981206">तपाईंको क्यामेराको स्थिति ट्र्याक गर्न अनुमति दिइएका साइटहरू</translation> <translation id="2931157624143513983">छाप्न मिल्ने क्षेत्रमा ठ्याक्कै अट्ने बनाउनुहोस्</translation> <translation id="2932085390869194046">पासवर्ड सिफारिस गर्नुहोस्...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (बालबालिकाका लागि खाता)</translation> @@ -1670,6 +1684,7 @@ <translation id="2932883381142163287">दुरूपयोग रिपोर्ट गर्नुहोस्</translation> <translation id="2933632078076743449">पछिल्लो पटक अपडेट गरिएको समय</translation> <translation id="2934999512438267372">यो साइटलाई MIDI यन्त्रहरू पूर्ण रूपमा नियन्त्रण गर्ने अनुमति दिइयो</translation> +<translation id="2935654492420446828">पछि विद्यालयको खाता हाल्नुहोस्</translation> <translation id="2936851848721175671">ब्याकअप तथा पुनर्स्थापना</translation> <translation id="2938225289965773019"><ph name="PROTOCOL" /> लिंकहरू खोल्नुहोस्</translation> <translation id="2938845886082362843">आफ्नो सुरक्षा साँचोमा भण्डार गरिएका साइन इन गर्न चाहिने डेटा हेर्नुहोस् र मेट्नुहोस्</translation> @@ -1773,6 +1788,7 @@ <translation id="3060379269883947824">चयन गरेर बोल्ने नामक सेवालाई सक्षम पार्नुहोस्</translation> <translation id="3060952009917586498">यन्त्रको भाषा परिवर्तन गर्नुहोस्। यन्त्रमा हाल भाषा <ph name="LANGUAGE" /> प्रयोग भइरहेको छ।</translation> <translation id="3065041951436100775">ट्याबले प्रतिक्रिया बन्द गर्यो</translation> +<translation id="306535478112428611">तपाईंको यन्त्रमा फाइल तथा फोल्डरहरू सम्पादन गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="3065522099314259755">किबोर्ड रिपिट हुने विलम्बता</translation> <translation id="3067198179881736288">एप स्थापना गर्ने हो?</translation> <translation id="3067198360141518313">यो प्लगइन चलाउनुहोस्</translation> @@ -1908,6 +1924,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - नेटवर्क सम्बन्धी त्रुटि</translation> <translation id="3248902735035392926">सुरक्षासम्बन्धी विषयहरू केही क्षण निकालेर <ph name="BEGIN_LINK" />अहिले नै आफ्ना एक्स्टेन्सनहरू जाँच्नुहोस्<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><प्रमाणपत्रको भाग होइन></translation> +<translation id="325238099842880997">बालबालिकालाई घरमा खेल्न, नयाँ कुरा सिक्न र विद्यालयको कार्य गर्न सघाउन आधारभूत डिजिटल नियमहरू सेट गर्नुहोस्</translation> <translation id="3253225298092156258">उपलब्ध छैन</translation> <translation id="3253448572569133955">अज्ञात खाता</translation> <translation id="3254084468305910013">{COUNT,plural, =0{सुरक्षासम्बन्धी कुनै पनि समस्या फेला परेन}=1{सुरक्षासम्बन्धी {COUNT} समस्या फेला पर्यो}other{सुरक्षासम्बन्धी {COUNT} वटा समस्या फेला परे}}</translation> @@ -2035,6 +2052,7 @@ <translation id="3404249063913988450">स्क्रिन सेभर सक्षम पार्नुहोस्</translation> <translation id="3405664148539009465">फन्टहरूलाई आफू अनुकूल गर्नुहोस्</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">भर्चुअल रियालिटी चल्ने यन्त्र र तिनमा भएका डेटा प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="3406396172897554194">भाषा वा इनपुट विधिको नामअनुसार खोज्नुहोस्</translation> <translation id="3406605057700382950">बुकमार्क पट्टी देखाउनुहोस्</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{यो एक्स्टेन्सन खतरनाक हुन सक्छ}other{यी एक्स्टेन्सनहरू खतरनाक हुन सक्छन्}}</translation> @@ -2199,6 +2217,7 @@ <translation id="3586806079541226322">यो फाइल खोल्न सकिँदैन</translation> <translation id="3586931643579894722">विवरणहरू लुकाउनुहोस्</translation> <translation id="3587482841069643663">सबै</translation> +<translation id="3588790464166520201">भुक्तानी ह्यान्ड्लरहरू इन्स्टल गर्न अनुमति दिइएका साइटहरू</translation> <translation id="3589766037099229847">असुरक्षित सामग्रीमाथि रोक लगाइएको छ</translation> <translation id="3590194807845837023">प्रोफाइल खोल्नुहोस् र सुचारू गर्नुहोस्</translation> <translation id="3590295622232282437">व्यवस्थित सत्रमा प्रवेश गर्दै।</translation> @@ -2424,6 +2443,7 @@ <translation id="3822559385185038546">यो प्रोक्सी तपाईंका प्रशासकद्वारा लागू गरिएको हो</translation> <translation id="3823310065043511710">Linux प्रयोग गर्न कम्तीमा पनि <ph name="INSTALL_SIZE" /> ठाउँ खाली राख्न सिफारिस गरिन्छ।</translation> <translation id="3824621460022590830">यन्त्र दर्ता गर्न प्रयोग गरिने टोकन अवैध छ। कृपया आफ्नो यन्त्रका मालिक वा एड्मिनसँग सम्पर्क गर्नुहोस्। त्रुटिको कोड: <ph name="ERROR_CODE" />।</translation> +<translation id="3826071569074535339">मोसन सेन्सरहरू प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="3826440694796503677">तपाईंका व्यवस्थापकले योभन्दा बढी Google खाताहरू थप्ने सुविधा असक्षम पार्नुभएको छ</translation> <translation id="3827306204503227641">स्यान्डबक्स हटाइएका प्लगइनहरूलाई अनुमति जारी राख्नुहोस्</translation> <translation id="3827774300009121996">&पूर्ण स्क्रिन</translation> @@ -2476,6 +2496,8 @@ <translation id="3873423927483480833">PIN हरू देखाउनुहोस्</translation> <translation id="3873915545594852654">ARC++ सम्बन्धी कुनै समस्या भयो।</translation> <translation id="3874164307099183178">Google सहायक सक्रिय गर्नुहोस्</translation> +<translation id="3877075909000773256"><ph name="USER_NAME" /> को यन्त्रमा <ph name="USER_EMAIL" /> खाता प्रयोग गरी नजिकैका यन्त्रसँग सेयर गर्ने सुविधाका सेटिङ।</translation> +<translation id="387771067039689031">तपाईंको कम्प्युटर चलाउनका निम्ति कुनै प्लगइन प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="3879748587602334249">डाउनलोड म्यानेजर</translation> <translation id="3881478300875776315">कम हरफ देखाउनुहोस्</translation> <translation id="3882165008614329320">क्यामेरा वा फाइलको विद्यमान भिडियो</translation> @@ -2512,6 +2534,7 @@ <translation id="3919145445993746351">आफ्ना सबै कम्प्युटरमा विस्तारहरू प्राप्त गर्न सिंक गर्ने सुविधा सक्रिय गर्नुहोस्</translation> <translation id="3920504717067627103">प्रमाणपत्र नीतिहरू</translation> <translation id="392089482157167418">ChromeVox सक्षम गर्नुहोस् (बोलिएको पृष्ठपोषण)</translation> +<translation id="3920909973552939961">भुक्तानी ह्यान्ड्लरहरू इन्स्टल गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="3923184630988645767">डेटा प्रयोग</translation> <translation id="3923676227229836009">यो पृष्ठलाई फाइलहरू हेर्ने अनुमति छ</translation> <translation id="3924145049010392604">मेटा</translation> @@ -2635,6 +2658,7 @@ <translation id="4058793769387728514">अहिले णे कागजात जाँच्नुहोस्</translation> <translation id="406070391919917862">पृष्ठभूमि एपहरू</translation> <translation id="4061374428807229313">फोल्डरहरू सेयर गर्न Files एपमा रहेको कुनै फोल्डरमा दायाँ क्लिक गर्नुहोस्, त्यसपछि "Parallels Desktop सँग सेयर गर्नुहोस्" नामक विकल्प चयन गर्नुहोस्।</translation> +<translation id="406213378265872299">आफू अनुकूल पारिएका व्यवहारहरू</translation> <translation id="4065876735068446555">तपाईँले प्रयोग गरिरहनु भएको सञ्जाल (<ph name="NETWORK_ID" />) लाई तपाईँले यसको लगइन पृष्ठ भ्रमण गर्न आवश्यकता हुन सक्छ।</translation> <translation id="4066207411788646768">आफ्नो नेटवर्कमा उपलब्ध प्रिन्टरहरू हेर्न आफ्नो इन्टरनेटको जाँच गर्नुहोस्</translation> <translation id="4068776064906523561">सुरक्षित गरिएका फिंगरप्रिन्टहरू</translation> @@ -2782,6 +2806,7 @@ <translation id="425573743389990240">वाटमा ब्याट्री डिस्चार्ज दर (नकारात्मक मानको मतलब ब्याट्री चारज्भइरहेको छ भन्ने हो)</translation> <translation id="4256316378292851214">भिडियोलाई यसको रूपमा ब&चत गर्नुहोस्..</translation> <translation id="4258348331913189841">फाइल सिस्टमहरू</translation> +<translation id="4259388776256904261">यो कार्य गर्न केही बेर लाग्न सक्छ</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> हानिकारक हुन सक्छ। यो फाइल सुरक्षित छ कि छैन भनी स्क्यान गर्न यसलाई Google को सुरक्षासम्बन्धी उन्नत सुविधामा पठाउने हो? डाउनलोड बारमा जान Shift+F6 थिच्नुहोस्।</translation> <translation id="4263223596040212967">आफ्नो किबोर्डको लेआउटको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation> <translation id="4263757076580287579">मुद्रक दर्ता रद्द गरिएको छ।</translation> @@ -2889,6 +2914,7 @@ <translation id="4400632832271803360">शीर्ष-पङ्क्तिका कुञ्जीहरूको व्यवहार बदल्न लन्चर कुञ्जीलाई थिचिराख्नुहोस्</translation> <translation id="4400963414856942668">तपाईं कुनै ट्याबमा पुस्तक चिन्ह लगाउनका लागि तारा चिन्हमा क्लिक गर्न सक्नुहुन्छ</translation> <translation id="4403775189117163360">कुनै अर्को फोल्डर छनौट गर्नुहोस्</translation> +<translation id="440391631796167175">कुनै कमजोर पासवर्ड भेट्टिएन</translation> <translation id="4404136731284211429">फेरि स्क्यान गर्नुहोस्</translation> <translation id="4404843640767531781">तपाईंका अभिभावकले <ph name="APP_NAME" /> माथि रोक लगाउनुभएको छ। यो एप प्रयोग गर्न आफ्ना अभिभावकको अनुमति लिनुहोस्।</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2933,6 +2959,7 @@ <translation id="4450974146388585462">पत्ता लगाउनुहोस्</translation> <translation id="4451479197788154834">तपाईंको पासवर्ड यो यन्त्र र तपाईंको Google खातामा सुरक्षित गरिएको छ</translation> <translation id="4451757071857432900">हस्तक्षेपकारी वा भ्रामक विज्ञापन देखाउने साइटहरूमा रोक लगाइएको (सिफारिस गरिएको)</translation> +<translation id="4453205916657964690">सबनेट मास्क</translation> <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" /> खोज्नुहोस् वा URL टाइप गर्नुहोस्</translation> <translation id="4459169140545916303"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> दिन पहिले सक्रिय</translation> <translation id="4460014764210899310">समूह विघटन गर्नुहोस्</translation> @@ -2960,6 +2987,7 @@ <translation id="4481530544597605423">जोडा हटाइएका यन्त्रहरू</translation> <translation id="4483049906298469269">नेटवर्कको पूर्वनिर्धारित गेटवेका रूपमा सेट नगरिएको यस गेटवेलाई पिङ गर्न सकिएन</translation> <translation id="4487489714832036847">Chromebook मा परम्परागत सफ्टवेयरको साटो एपहरू प्रयोग गरिन्छ। उत्पादकत्व, मनोरञ्जन तथा थप कुराहरूका लागि एपहरू प्राप्त गर्नुहोस्।</translation> +<translation id="4488257340342212116">तपाईंको क्यामेरा प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="4488502501195719518">सबै डेटा खाली गर्ने हो?</translation> <translation id="449232563137139956">साइटहरूले अनलाइन स्टोर वा समाचारमूलक लेखमा फोटो देखाउने जस्ता प्रयोजनका लागि चित्रण उपलब्ध गराउन सामान्यतया फोटोहरू देखाउँछन्</translation> <translation id="4493468155686877504">सिफारिस गरिएको (<ph name="INSTALL_SIZE" />)</translation> @@ -2992,6 +3020,7 @@ <translation id="4524832533047962394">अपरेटिङ सिस्टमको यो संस्करणले उपलब्ध गराइएको दर्ता मोड समर्थन गर्दैन। कृपया आफूले सबैभन्दा नवीनतम संस्करण चलाइरहेको कुरा सुनिश्चित गर्नुहोस्।</translation> <translation id="4527186207340858212">नयाँ कार्य प्रोफाइल बनाउने हो?</translation> <translation id="452750746583162491">आफ्नो सिंक गरिएको डेटाको समीक्षा गर्नुहोस्</translation> +<translation id="4527929807707405172">रिभर्स स्क्रोलिङ सक्षम पार्नुहोस्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> <translation id="4528494169189661126">अनुवादसम्बन्धी सुझाव</translation> <translation id="4530494379350999373">उत्पति</translation> <translation id="4531924570968473143">तपाईं यो <ph name="DEVICE_TYPE" /> मा कसलाई थप्न चाहनुहुन्छ?</translation> @@ -3012,6 +3041,7 @@ <translation id="4545028762441890696">यसलाई पुनः सक्षम पार्न नयाँ अनुमतिहरू स्वीकार गर्नुहोस्:</translation> <translation id="4545759655004063573">अपुग्दो अनुमतिहरूको कारणले गर्दा बचत गर्न सक्दैन। कृपया अर्को स्थानमा बचत गर्नुहोस्।</translation> <translation id="4546308221697447294">Google Chrome मार्फत छिटो ब्राउज गर्नुहोस्</translation> +<translation id="4546345569117159016">दायाँतिरको बटन</translation> <translation id="4546692474302123343">Google सहायकमा बोलेर टाइप गर्ने सुविधा</translation> <translation id="4547659257713117923">अन्य यन्त्रहरूबाट कुनै ट्याबहरू छैनन्</translation> <translation id="4547672827276975204">स्वतः सेट गर्नुहोस्</translation> @@ -3071,6 +3101,7 @@ <translation id="4608500690299898628">&फेला पार्नुहोस्...</translation> <translation id="4608520674724523647">दर्ताको सफल चित्रण</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> मा संवेदनशील सामग्री छ</translation> +<translation id="4609987916561367134">JavaScript प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> मा त्रुटि भएको छ</translation> <translation id="4610637590575890427">के तपाईं <ph name="SITE" /> मा जान चाहनुहुन्छ?</translation> <translation id="4611114513649582138">डेटा जडान उपलब्ध छ</translation> @@ -3182,6 +3213,7 @@ <translation id="473775607612524610">अपडेट गर्नुहोस्</translation> <translation id="473936925429402449">चयन गरियो, <ph name="TOTAL_ELEMENTS" /> वटा थप सामग्रीमध्ये <ph name="CURRENT_ELEMENT" /> औँ सामग्री</translation> <translation id="4739639199548674512">टिकटहरू</translation> +<translation id="4742334355511750246">फोटोहरू देखाउन अनुमति नदिइएका साइटहरू</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />एपहरू अद्यावधिक गर्ने तरिका सिक्नुहोस्<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{साइट अनम्युट गर्नुहोस्}other{साइटहरू अनम्युट गर्नुहोस्}}</translation> <translation id="4746351372139058112">सन्देशहरू</translation> @@ -3317,6 +3349,7 @@ <translation id="4908811072292128752">दुई साइटहरूलाई एकैपटक ब्राउज गर्न एउटा नयाँ ट्याब खोल्नुहोस्</translation> <translation id="4909038193460299775">यो खाता <ph name="DOMAIN" /> द्वारा व्यवस्थापन गरिने हुनाले तपाईंका पुस्तक चिन्ह, इतिहास, पासवर्ड र अन्य सेटिङहरूलाई यस यन्त्रबाट खाली गरिनेछ। तैपनि तपाईंको विद्यमान डेटा तपाईंको Google खातामा संग्रहीत रहनेछ र <ph name="BEGIN_LINK" />Google ड्यासबोर्ड<ph name="END_LINK" /> मा गई व्यवस्थापन गर्न सकिन्छ।</translation> <translation id="4912643508233590958">आइडल उठ्नेहरू</translation> +<translation id="4915961947098019832">फोटोहरू देखाउन अनुमति दिइएका साइटहरू</translation> <translation id="4916542008280060967">साइटलाई <ph name="FILE_NAME" /> सम्पादन गर्न दिने हो?</translation> <translation id="491691592645955587">कुनै सुरक्षित ब्राउजरमा स्विच गर्नुहोस्</translation> <translation id="4917385247580444890">बलियो</translation> @@ -3404,6 +3437,7 @@ <translation id="5027550639139316293">इमेल प्रमाणपत्र</translation> <translation id="5027562294707732951">विस्तार थप्नुहोस्</translation> <translation id="5029568752722684782">प्रतिलिपि हटाउनुहोस्</translation> +<translation id="5033137252639132982">मोसन सेन्सरहरू प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="5033266061063942743">ज्यामितीय आकृतिहरू</translation> <translation id="5036662165765606524">कुनैपनि साइटलाई स्वचालित रूपमा धेरै फाइलहरू डाउनलोड गर्ने अनुमति नदिनुहोस्</translation> <translation id="5037676449506322593">सबै चयन गर्नुहोस्</translation> @@ -3453,6 +3487,7 @@ <translation id="5088172560898466307">सर्भरको होस्टनाम</translation> <translation id="5088534251099454936">RSA को साथमा PKCS #1 SHA-512 गुप्तलेखन</translation> <translation id="5089810972385038852">राज्य</translation> +<translation id="5090637338841444533">तपाईंको क्यामेराको स्थिति ट्र्याक गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="5094721898978802975">सहयोगी मुल अनुप्रयोगहरूसँग सञ्चार गर्नुहोस्</translation> <translation id="5097002363526479830">नेटवर्क '<ph name="NAME" />' मा जडान हुन असफल भयो: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">टुल: <ph name="PRINT_NAME" /></translation> @@ -3761,6 +3796,7 @@ <translation id="5471768120198416576">नमस्ते! म तपाईंको पाठवाचकको आवाज हुँ।</translation> <translation id="5472627187093107397">यो साइटका पासवर्डहरू सुरक्षित गर्नुहोस्</translation> <translation id="5473333559083690127">नयाँ PIN पुनः प्रविष्टि गर्नुहोस्</translation> +<translation id="5481273127572794904">धेरै फाइलहरू स्वतः डाउनलोड गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="5481941284378890518">नजिकैका प्रिन्टरहरू थप्नुहोस्</translation> <translation id="5483785310822538350">फाइल र यन्त्र पहुँच बदर गर्नुहोस्</translation> <translation id="5485080380723335835">सुरक्षाका खातिर तपाईंको <ph name="DEVICE_TYPE" /> लक गरिएको छ। जारी राख्न म्यानुअल तरिकाले आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्।</translation> @@ -3782,6 +3818,7 @@ <translation id="5495466433285976480">यसले तपाईंको अर्को पुन: सुरुवात पछि सबै स्थानीय प्रयोगकर्ताहरू, फाइलहरू, डाटा, र अन्य सेटिङहरू हटाउनेछ। सबै प्रयोगकर्ताहरूलाई पुन: साइन इन गर्न आवश्यक हुनेछ।</translation> <translation id="5495597166260341369">प्रदर्शन सक्रिय राख्नुहोस्</translation> <translation id="5496587651328244253">सुव्यवस्थित गर्नुहोस्</translation> +<translation id="5496730470963166430">पप-अपहरू पठाउन वा रिडिरेक्टहरू प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="5497251278400702716">यो फाइल</translation> <translation id="5498967291577176373">तपाईंको नाम, ठेगाना वा फोन नम्बर स्वतः टाइप गरिदिने सुविधाको सहयोगले गरेर अझ छिटो लेख्नुहोस्</translation> <translation id="5499313591153584299">यो फाइल तपाईंको कम्प्युटरका लागि हानिकारक हुन सक्छ।</translation> @@ -3789,6 +3826,7 @@ <translation id="5500709606820808700">आज सुरक्षा जाँच गरिएको थियो</translation> <translation id="5501809658163361512">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> बाट <ph name="ATTACHMENTS" /> प्राप्त गर्न सकिएन}other{<ph name="DEVICE_NAME" /> बाट <ph name="ATTACHMENTS" /> प्राप्त गर्न सकिएन}}</translation> <translation id="5502500733115278303">Firefox बाट आयात गरिएको</translation> +<translation id="5502915260472117187">बच्चा</translation> <translation id="5503982651688210506"><ph name="HOST" /> लाई तपाईंको यन्त्रको क्यामेरा प्रयोग गर्ने तथा क्यामेरा यताउता घुमाउने र माइक्रोफोन प्रयोग गर्ने अनुमति दिइराख्नुहोस्</translation> <translation id="5505264765875738116">साइटहरूले सूचनाहरू पठाउनका निम्ति अनुमति माग्न सक्दैनन्।</translation> <translation id="5505307013568720083">मसी सकियो</translation> @@ -3876,6 +3914,7 @@ <translation id="5596627076506792578">अन्य विकल्पहरू</translation> <translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> एम. बि. मोबाइल डेटा प्रयोग गरेर अद्यावधिक डाउनलोड गरिनेछ। तपाईं जारी राख्न चाहनुहुन्छ?</translation> <translation id="5601503069213153581">पिन</translation> +<translation id="5601823921345337195">MIDI यन्त्रहरूमा कनेक्ट गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="5602765853043467355">यो यन्त्रबाट पुस्तक चिन्ह, इतिहास, पासवर्ड र थप कुराहरू खाली गर्नुहोस्</translation> <translation id="5605623530403479164">अन्य खोज इन्धनहरू</translation> <translation id="5605758115928394442">यो व्यक्ति तपाईं नै हो भन्ने सुनिश्चित गर्न तपाईंको फोनमा एउटा सूचना पठाइयो।</translation> @@ -3996,6 +4035,7 @@ <translation id="5747552184818312860">म्याद सकिन्छ</translation> <translation id="5747785204778348146">विकासकर्ता - अस्थिर</translation> <translation id="5747809636523347288">टाँस्नुहोस् र <ph name="URL" /> मा जानुहोस्</translation> +<translation id="5754152670305761216">संरक्षित सामग्री प्ले गर्न अनुमति दिइएका साइटहरू</translation> <translation id="5756163054456765343">मद्द&त केन्द्र</translation> <translation id="5759728514498647443">तपाईँले प्रिन्टमा <ph name="APP_NAME" /> मार्फत पठाउने कागजातहरू <ph name="APP_NAME" /> द्वारा पढ्न सकिन्छ।</translation> <translation id="5763751966069581670">कुनै USB यन्त्र भेटिएन</translation> @@ -4463,6 +4503,7 @@ <translation id="6295158916970320988">सबै साइटहरू</translation> <translation id="6295855836753816081">सुरक्षित गर्दै...</translation> <translation id="6298962879096096191">Android का अनुप्रयोगहरूको स्थापना गर्न Google Play को प्रयोग गर्नुहोस्</translation> +<translation id="6300177430812514606">डेटा पठाउने वा प्राप्त गर्ने कार्य पूरा गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="630065524203833229">बा&हिर निस्कनुहोस्</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> स्वतः कन्फिगर गर्न सकिएन। कृपया प्रिन्टरका उन्नत विवरणहरू तोक्नुहोस्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> <translation id="6301076166764763868">व्यक्तिगत रूपमा गरिने ब्राउजिङ र <ph name="EXISTING_USER" /> बाट गरिने ब्राउजिङ अलग गर्न <ph name="NEW_USER" /> का लागि एउटा नयाँ प्रोफाइल बनाउनुहोस्</translation> @@ -4490,7 +4531,7 @@ <translation id="6318407754858604988">डाउनलोड सुरु भयो</translation> <translation id="6318944945640833942">प्रिन्टर पत्ता लगाउन सकिएन। कृपया प्रिन्टरको ठेगाना फेरि प्रविष्टि गर्नुहोस्।</translation> <translation id="6321407676395378991">स्क्रिन सेभर अन गर्नुहोस्</translation> -<translation id="6322653941595359182">आफ्नो Chromebook बाट पाठ सन्देशहरू पठाउनुहोस् र रिसिभ गर्नुहोस्</translation> +<translation id="6322653941595359182">आफ्नो Chromebook बाट टेक्स्ट म्यासेजहरू पठाउनुहोस् र रिसिभ गर्नुहोस्</translation> <translation id="6324916366299863871">सर्टकट सम्पादन गर्नुहोस्</translation> <translation id="6325191661371220117">स्वत: सुरुवात असक्षम गर्नुहोस्</translation> <translation id="6325525973963619867">चलाउन सकिएन</translation> @@ -4540,6 +4581,7 @@ <translation id="6390020764191254941">ट्याब नयाँ विन्डोमा सार्नुहोस्</translation> <translation id="6390799748543157332">तपाइँले यस सन्झ्यालमा हेर्नुभएका पृष्ठहरू ब्राउजर इतिहासमा देखा पर्ने छैनन् तर कुकीहरू जस्ता, अन्य ट्रेसहरू, तपाइँले सबै खुल्ला पाहुना सन्झ्यालहरू बन्द गरेपछि कम्प्युटरमा तिनीहरूले छा्डने छैनन्। तर पनि, तपाइँले सुरक्षा गर्नुभएको कुनै पनि</translation> <translation id="6393156038355142111">भरपर्दो पासवर्ड सिफारिस गर्नुहोस्</translation> +<translation id="6393550101331051049">असुरक्षित सामग्री देखाउन अनुमति दिइएका साइटहरू</translation> <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />प्रणाली जानकारी<ph name="END_LINK1" /> र <ph name="BEGIN_LINK2" />मेट्रिक्स<ph name="END_LINK2" /> पठाउनुहोस्</translation> <translation id="6396988158856674517">साइटहरूलाई चालसम्बन्धी सेन्सरहरू प्रयोग गर्न नदिनुहोस्</translation> <translation id="6398715114293939307">Google Play स्टोरलाई हटाउनुहोस्</translation> @@ -4572,6 +4614,7 @@ <translation id="6425556984042222041">टेक्स्ट-टू-स्पिचको दर</translation> <translation id="6426200009596957090">ChromeVox सेटिङहरू खोल्नुहोस्</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> का अनुसार तपाईंले एक हप्ताभित्र आफ्ना डेटा ब्याकअप गरी यो <ph name="DEVICE_TYPE" /> फिर्ता गर्नु पर्ने हुन्छ। <ph name="LINK_BEGIN" />विवरण हेर्नुहोस्<ph name="LINK_END" /></translation> +<translation id="642729974267661262">ध्वनि प्ले गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="6428982734197629783">छवि प्रशोधन गर्दै</translation> <translation id="6429384232893414837">अद्यावधिकसम्बन्धी त्रुटि</translation> <translation id="6430814529589430811">आधार 64-सङ्केतन ASCII, एकल प्रमाणपत्र</translation> @@ -4600,6 +4643,7 @@ <translation id="6458701200018867744">अपलोड गर्न सकिएन (<ph name="WEBRTC_LOG_UPLOAD_TIME" />)।</translation> <translation id="6459488832681039634">पत्ता लगाउन छनोट प्रयोग गर्नुहोस्</translation> <translation id="6459799433792303855">सक्रिय विन्डोलाई अर्को प्रदर्शनमा सारियो।</translation> +<translation id="6460566145397380451">MIDI यन्त्रहरूमा कनेक्ट गर्न अनुमति दिइएका साइटहरू</translation> <translation id="6460601847208524483">अर्को फेला पार्नुहोस्</translation> <translation id="6461170143930046705">नेटवर्कहरू खोज्दै...</translation> <translation id="6463795194797719782">&सम्पादन</translation> @@ -4631,6 +4675,7 @@ <translation id="6499681088828539489">साझा नेटवर्कहरूमा प्रोक्सीलाई अनुमति नदिनुहोस्</translation> <translation id="650266656685499220">एल्बम सिर्जना गर्न Google Photos मा जानुहोस्</translation> <translation id="6503077044568424649">सबैभन्दा धेरै भ्रमण गरिएको</translation> +<translation id="650457560773015827">बायाँतिरको बटन</translation> <translation id="6504611359718185067">प्रिन्टर थप्नका लागि इन्टरनेटमा जडान गर्नुहोस्</translation> <translation id="6506374932220792071">SHA-256 सहितको X9.62 ECDSA हस्ताक्षर</translation> <translation id="6508248480704296122"><ph name="NAME_PH" /> सँग सम्बन्धित</translation> @@ -4832,6 +4877,7 @@ <translation id="676560328519657314">Google Pay मा रहेका तपाईंका भुक्तानी विधिहरू</translation> <translation id="6767566652486411142">अर्को भाषा छनौट गर्नुहोस्...</translation> <translation id="6767639283522617719">डोमेन जोड्न सकिँदैन। संगठनात्मक एकाइका लागि सेटिङहरू सही छन् भन्ने सुनिश्चित गर्नुहोस्।</translation> +<translation id="6768034047581882264">असुरक्षित सामग्री देखाउन अनुमति नदिइएका साइटहरू</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> ले तपाईंलाई यो यन्त्र अद्यावधिक गर्न सिफारिस गरेको छ।</translation> <translation id="6769712124046837540">मुद्रक थप्दै...</translation> <translation id="6770602306803890733">तपाईं र वेब प्रयोग गर्ने सम्पूर्ण प्रयोगकर्ताहरूलाई झन् सुरक्षित राख्छ</translation> @@ -4923,6 +4969,7 @@ <translation id="6865313869410766144">स्वत: भर्ने फारम लगत</translation> <translation id="6865598234501509159">पृष्ठ <ph name="LANGUAGE" /> भाषामा उपलब्ध छैन</translation> <translation id="6865708901122695652">WebRTC कार्यक्रमका लगहरू (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">मौन</translation> <translation id="686664946474413495">रङको तापमान</translation> <translation id="6868934826811377550">विवरणहरू हेर्नुहोस्</translation> <translation id="6871644448911473373">OCSP रेस्पोन्डर: <ph name="LOCATION" /></translation> @@ -4972,6 +5019,7 @@ <translation id="6922745772873733498">प्रिन्ट गर्नका लागि पिन प्रविष्ट गर्नुहोस्</translation> <translation id="6923132443355966645">स्क्रोल गर्नुहोस् / क्लिक गर्नुहोस्</translation> <translation id="6923633482430812883">आदान प्रदान माउन्ट गर्ने क्रममा त्रुटि भयो। आफूले जडान गर्न खोजिरहेको फाइल सर्भरले SMBv2 वा सोभन्दा नवीनतम संस्करण समर्थन गर्छ भन्ने कुरा जाँच गर्नुहोस्।</translation> +<translation id="6929126689972602640">अभिभावकीय नियन्त्रणहरू विद्यालयका खाताहरूमा प्रयोग गर्न मिल्दैनन्। घरमा विद्यालयको कार्य गर्न सघाउने Google कक्षा र अन्य वेबसाइटहरू प्रयोग गर्नका निम्ति विद्यालयको खाता हाल्नु पर्छ। विद्यालयको खाता हाल्न सर्वप्रथम यी बच्चाको व्यक्तिगत खाता प्रयोग गरी साइन इन गर्नुहोस्। तपाईं पछि सेटअप गर्ने क्रममा विद्यालयको खाता हाल्न सक्नुहुन्छ।</translation> <translation id="6929760895658557216">Okay Google</translation> <translation id="6930036377490597025">बाह्य सुरक्षा साँचो वा अन्तर्निर्मित सेन्सर</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{एउटा एक्स्टेन्सन अस्वीकार गरिएको छ}other{# वटा एक्स्टेन्सन अस्वीकार गरिएको छ}}</translation> @@ -5012,6 +5060,7 @@ <translation id="6972629891077993081">HID यन्त्रहरू</translation> <translation id="6972754398087986839">सुरु गर्नुहोस्</translation> <translation id="6972887130317925583">अरूले देखेको पासवर्ड सफलतापूर्वक परिवर्तन गरियो। जुनसुकै बेला <ph name="SETTINGS" /> मा गई आफ्ना पासवर्डहरू जाँच्नुहोस्।</translation> +<translation id="697312151395002334">पप-अपहरू पठाउन र रिडिरेक्टहरू प्रयोग गर्न अनुमति दिइएका साइटहरू</translation> <translation id="6973611239564315524">Debian 10 (Buster) मा स्तरोन्नति गर्ने सुविधा उपलब्ध छ</translation> <translation id="6974609594866392343">अफलाइन डेमो मोड</translation> <translation id="6977381486153291903">फर्मवेयरको पुनरावृत्ति</translation> @@ -5034,6 +5083,7 @@ <translation id="6995899638241819463">डेटा चोरीको घटनामा पासवर्डको खुलासा हुँदा तपाईंलाई चेतावनी दिइन्छ</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - क्रियाकलापको लग</translation> <translation id="6997707937646349884">तपाईंका यन्त्रहरूमा:</translation> +<translation id="6998093258894828179">कार्डहरू लुकाइयोस्</translation> <translation id="6998793565256476099">भिडियो सम्मेलनका लागि यन्त्र दर्ता गर्नुहोस्</translation> <translation id="6999956497249459195">नयाँ समूह</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> जोडिएको छ तर यसलाई कन्फिगर गर्नु पर्छ</translation> @@ -5050,6 +5100,7 @@ <translation id="7005848115657603926">अवैध पृष्ठ दायरा, <ph name="EXAMPLE_PAGE_RANGE" /> प्रयोग गर्नुहोस्</translation> <translation id="7006634003215061422">तलको मार्जिन</translation> <translation id="7007648447224463482">सबै url हरूलाई नयाँ विन्डोमा खोल्नुहोस्</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> ले तपाईंको क्यामेरा प्रयोग गरिरहेको छ</translation> <translation id="701080569351381435">स्रोत हेर्नुहोस्</translation> <translation id="7014174261166285193">स्थापना असफल भयो।</translation> <translation id="7017004637493394352">फेरि "Ok Google" भन्नुहोस्</translation> @@ -5069,6 +5120,7 @@ <translation id="7038632520572155338">स्विचमार्फत पहुँच राख्ने सुविधा</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> बाट USB उपकरणहरूको पहुँच गर्नुहोस्</translation> <translation id="7039912931802252762">Microsoft स्मार्ट कार्ड लगअन</translation> +<translation id="7039951224110875196">आफ्ना बच्चाको Google खाता सिर्जना गर्नुहोस्</translation> <translation id="7040230719604914234">सेवा प्रदायक</translation> <translation id="7043108582968290193">सम्पन्न भयो! कुनै पनि नमिल्दा एपहरू फेला परेनन्।</translation> <translation id="7044124535091449260">साइटको पाहुँचबारे थप जान्नुहोस्</translation> @@ -5140,6 +5192,7 @@ <translation id="7121362699166175603">ठेगाना पट्टीका इतिहास र स्वतः पूर्णताहरूलाई खाली गर्छ। तपाईंको Google खाताको <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> मा अन्य किसिमका ब्राउजिङ इतिहास रहेका हुन सक्छन्।</translation> <translation id="7121438501124788993">विकासकर्ताको मोड</translation> <translation id="7121728544325372695">स्मार्ट योजक चिन्ह</translation> +<translation id="7123030151043029868">धेरै फाइलहरू स्वतः डाउनलोड गर्न अनुमति दिइएका साइटहरू</translation> <translation id="7123360114020465152">अब उप्रान्त समर्थित छैन</translation> <translation id="7125148293026877011">Crostini मेटाउनुहोस्</translation> <translation id="7127980134843952133">इतिहास डाउनलोड गर्नुहोस्</translation> @@ -5154,6 +5207,7 @@ <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> मा स्वागत छ</translation> <translation id="7136993520339022828">त्यहाँ कुनै त्रुटि छ। अन्य छविहरू छनौट गरी कृपया फेरि प्रयास गर्नुहोस्।</translation> <translation id="713888829801648570">माफ गर्नुहोस्, तपाइँको पासवर्ड रुजू गर्न सकिएन किनभने तपाइँ अफलाइन हुनुहुन्छ।</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> ले तपाईंको यन्त्रको माइक्रोफोन प्रयोग गरिरहेको छ</translation> <translation id="7140928199327930795">अरू कुनै यन्त्रहरू उपलब्ध छैनन्।</translation> <translation id="7141105143012495934">साइन इन असफल भयो किनभने तपाईँका खाता विवरणहरू पुनःप्राप्त गर्न सकेन। कृपया तपाईँको प्रशासकसँग सम्पर्क गर्नुहोस् वा फेरि प्रयास गर्नुहोस्।</translation> <translation id="7143207342074048698">जडान गर्दै...</translation> @@ -5293,6 +5347,7 @@ <translation id="7324297612904500502">बिटा फोरम</translation> <translation id="7325209047678309347">पाना अड्किएको छ</translation> <translation id="7325437708553334317">उच्च व्यतिरेक विस्तार</translation> +<translation id="7326004502692201767">आफ्ना बच्चाका लागि यो <ph name="DEVICE_TYPE" /> सेटअप गर्नुहोस्</translation> <translation id="7328699668338161242">तपाईंको सहायकले पहिलेदेखि नै तपाईंको आवाज पहिचान गर्न सक्छ</translation> <translation id="7328867076235380839">अमान्य संयोजन</translation> <translation id="7329154610228416156">साइन इन विफल भयो किनभने यसलाई एउटा गैर-सुरक्षित URL (<ph name="BLOCKED_URL" />) सँग कन्फिगर गरिएको थियो। कृपया तपाईँको प्रशासकसँग सम्पर्क गर्नुहोस्।</translation> @@ -5417,6 +5472,7 @@ <translation id="7465635034594602553">केही चिज गडबड भयो। कृपया केही बेर प्रतीक्षा गरी <ph name="APP_NAME" /> फेरि चलाउनुहोस्।</translation> <translation id="7465778193084373987">नेटस्केप प्रमाणपत्र रिभोकेसन युआरएल</translation> <translation id="7469894403370665791">यो नेटवर्कमा स्वचालित रूपमा जडान गर्नुहोस्</translation> +<translation id="7470424110735398630">तपाईंको क्लिपबोर्ड हेर्न अनुमति दिइएका साइटहरू</translation> <translation id="747114903913869239">त्रुटि: विस्तार डिकोड गर्न असक्षम भयो</translation> <translation id="7473891865547856676">पर्दैन, धन्यवाद</translation> <translation id="747459581954555080">सबैलाई पुनर्स्थापना गर्नुहोस्</translation> @@ -5526,6 +5582,7 @@ <translation id="7607002721634913082">रोकिएको छ</translation> <translation id="7608810328871051088">Android सम्बन्धी प्राथमिकताहरू</translation> <translation id="7609148976235050828">कृपया इन्टरनेटमा जडान गरी फेरि प्रयास गर्नुहोस्।</translation> +<translation id="7612655942094160088">कनेक्ट गरिएको फोनका सुविधाहरू सक्षम पार्नुहोस्।</translation> <translation id="7614260613810441905">कुनै साइटले तपाईंको यन्त्रका फाइल वा फोल्डरहरू सम्पादन गर्न खोज्दा सोध्नुहोस् (सिफारिस गरिएको)</translation> <translation id="761530003705945209">Google ड्राइभमा ब्याकअप गर्नुहोस् जुनसुकै बेला सजिलैसँग आफ्नो डेटा पुनर्स्थापना गर्नुहोस् वा यन्त्र बदल्नुहोस्। तपाईंको ब्याकअपमा एपको डेटा समावेश हुन्छ। तपाईंका ब्याकअपहरू Google मा अपलोड गरी तपाईंको Google खाताको पासवर्ड प्रयोग गरेर इन्क्रिप्ट गरिन्छन्।</translation> <translation id="7615365294369022248">खाता थप्ने क्रममा कुनै त्रुटि भयो</translation> @@ -5644,6 +5701,7 @@ <translation id="7732111077498238432">नेटवर्क नीतिद्वारा नियन्त्रित छ</translation> <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" सँग जोडा बनाउँदै ...</translation> <translation id="7737238973539693982">Linux (बिटा) मेटनुहोस्</translation> +<translation id="7737948071472253612">तपाईंको क्यामेरा प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="7740996059027112821">मानक</translation> <translation id="7742706086992565332">तपाईं निश्चित वेबसाइटहरूमा कति मात्रामा जुम इन वा जुम आउट गर्ने भन्ने कुरा सेट गर्न सक्नुहुन्छ</translation> <translation id="774377079771918250">सुरक्षित गर्ने स्थान छनौट गर्नुहोस्</translation> @@ -5652,6 +5710,7 @@ <translation id="7750228210027921155">Picture in picture</translation> <translation id="7751260505918304024">सबै देखाउनुहोस्</translation> <translation id="7753735457098489144">पर्याप्त भण्डारण स्थान नभएका कारण स्थापना गर्न सकिएन। ठाउँ खाली गर्न यन्त्रको भण्डारणबाट फाइलहरू मेटाउनुहोस्।</translation> +<translation id="7754347746598978109">JavaScript प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="7754704193130578113">डाउनलोड गर्नुभन्दा पहिले प्रत्येक फाइललाई कहाँ बचत गर्ने भनेर सोध्नुहोस्</translation> <translation id="7755287808199759310">तपाईंको अभिभावकले तपाईंको रोक हटाउन सक्नुहुन्छ</translation> <translation id="7757592200364144203">यन्त्रको नाम बदल्नुहोस्</translation> @@ -5704,6 +5763,7 @@ <translation id="7798844538707273832"><ph name="PERMISSION" /> माथि स्वतः रोक लगाइएको छ</translation> <translation id="7799299114731150374">वालपेपर सफलतापूर्वक सेट गरियो</translation> <translation id="7800518121066352902">वा&मावर्त घुमाउनुहोस्</translation> +<translation id="7802539296536804623">यो पृष्ठमा कार्डहरू नदेखाइयोस्</translation> <translation id="780301667611848630">भयो, धन्यवाद</translation> <translation id="7804072833593604762">ट्याब बन्द गरियो</translation> <translation id="7805768142964895445">स्थिति</translation> @@ -6131,6 +6191,7 @@ <translation id="826905130698769948">क्लाइन्टको अमान्य प्रमाणपत्र</translation> <translation id="8270242299912238708">PDF कागजातहरू</translation> <translation id="827097179112817503">गृह बटन देखाउनुहोस्</translation> +<translation id="8271379370373330993">अभिभावकहरूले पूरा गर्नु पर्ने आगामी केही चरणहरू यस प्रकार छन्। तपाईं खाता सेटअप गरेपछि बच्चालाई <ph name="DEVICE_TYPE" /> फिर्ता दिन सक्नुहुन्छ।</translation> <translation id="8272443605911821513">"थप उपकरण" मेनुमा एक्सटेन्सन क्लिक गरेर तपाईंको एक्सटेन्सनहरूको प्रबन्ध मिलाउनुहोस्।</translation> <translation id="8274332263553132018">फाइललाई Cast गर्नुहोस्</translation> <translation id="8274924778568117936">अद्यावधिक पूरा नहुन्जेल आफ्नो <ph name="DEVICE_TYPE" /> लाई निष्क्रिय नपार्नुहोस् वा बन्द नगर्नुहोस्। स्थापना सम्पन्न भएपछि तपाईंको <ph name="DEVICE_TYPE" /> पुनः सुरु हुनेछ।</translation> @@ -6154,6 +6215,7 @@ <translation id="8300011035382349091">यस ट्याबको पुस्तक चिन्ह सम्पादन गर्नुहोस्</translation> <translation id="8300374739238450534">Midnight Blue</translation> <translation id="8300849813060516376">OTASP असफल</translation> +<translation id="8304383784961451596">तपाईंलाई यो यन्त्र प्रयोग गर्ने अधिकार दिइएको छैन। कृपया साइन इन गर्ने अनुमति प्राप्त गर्न एड्मिनसँग सम्पर्क गर्नुहोस् वा Family Link मार्फत सुपरिवेक्षण गरिएको Google खातामा साइन इन गर्नुहोस्।</translation> <translation id="8308179586020895837">Ask if <ph name="HOST" /> wants to access your camera</translation> <translation id="830868413617744215">बेटा</translation> <translation id="8309458809024885768">सर्टिफिकेट पहिले नै विद्यमान छ</translation> @@ -6167,6 +6229,7 @@ <translation id="8322814362483282060">यो पृष्ठलाई तपाईंको माइक्रोफोनको पहुँच गर्नबाट ब्लक गरिएको छ।</translation> <translation id="8323167517179506834">युआरएल टाइप गर्नुहोस्</translation> <translation id="8324784016256120271">साइटहरूले तपाईंका गतिविधिअनुसार विज्ञापन देखाउने जस्ता प्रयोजनहरूका लागि विभिन्न साइटहरूमा तपाईंको ब्राउजिङसम्बन्धी गतिविधि हेर्न कुकीहरूको प्रयोग गर्न सक्छन्</translation> +<translation id="8325413836429495820">तपाईंको क्लिपबोर्ड हेर्न अनुमति नदिइएका साइटहरू</translation> <translation id="8326478304147373412">PKCS # 7, प्रमाणपत्र चेन</translation> <translation id="8327039559959785305">Linux का फाइलहरू माउन्ट गर्ने क्रममा त्रुटि भयो। कृपया फेरि प्रयास गर्नुहोस्।</translation> <translation id="8327676037044516220">अनुमति र सामग्रीसम्बन्धी सेटिङहरू</translation> @@ -6216,6 +6279,7 @@ <translation id="8382913212082956454">&इमेल ठेगानाको प्रतिलिपी बनाउनुहोस्</translation> <translation id="8386091599636877289">नीति फेला परेन।</translation> <translation id="8386903983509584791">स्क्यान कार्य पूरा भयो</translation> +<translation id="8387361103813440603">तपाईंको स्थान हेर्न अनुमति नदिइएका साइटहरू</translation> <translation id="8389416080014625855">यो पृष्ठको लागि QR कोड सिर्जना गर्नुहोस्</translation> <translation id="8389492867173948260">यो विस्तारलाई तपाईं जाने वेबसाइटहरूको तपाईंका सबै डेटा पढ्न र परिवर्तन गर्न दिनुहोस्।</translation> <translation id="8390449457866780408">सर्भर उपलब्ध छैन।</translation> @@ -6400,6 +6464,7 @@ <translation id="8621866727807194849">तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छ। Chrome ले उक्त हानिकारक सफ्टवेयरलाई हटाउँदै छ, तपाईंका सेटिङहरूलाई पुनर्स्थापना गर्दै छ र विस्तारहरू असक्षम पार्दै छ। यसो गरेपछि तपाईंको ब्राउजरले फेरि सामान्य रूपमा काम गर्न सक्ने छ।</translation> <translation id="8621979332865976405">आफ्नो पूरै स्क्रिन सेयर गर्नुहोस्</translation> <translation id="862542460444371744">&विस्तारहरू</translation> +<translation id="8625663000550647058">तपाईंको माइक्रोफोन प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="862727964348362408">निलम्बित</translation> <translation id="862750493060684461">CSS क्यास</translation> <translation id="8627706565932943526">समक्रमण त्रुटि</translation> @@ -6480,6 +6545,7 @@ <translation id="8714838604780058252">पृष्ठभूमि ग्राफिकहरू</translation> <translation id="8715480913140015283">पृष्ठभूमि ट्याबले तपाईंको क्यामेरा प्रयोग गर्दै छ</translation> <translation id="8716931980467311658"><ph name="DEVICE_TYPE" /> बाट आफ्नो Linux फाइलका फोल्डरहरूमा रहेका सबै Linux एप र डेटा मेट्ने हो?</translation> +<translation id="8717145295869185525">भर्चुअल रियालिटी चल्ने यन्त्र र तिनमा भएका डेटा प्रयोग गर्न अनुमति नदिइएका साइटहरू</translation> <translation id="8717864919010420084">लिंक प्रतिलिपि गर्नुहोस्</translation> <translation id="8719472795285728850">विस्तारसम्बन्धी क्रियाकलापका लागि स्ट्रिम सुन्दै...</translation> <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> डाउनलोड असफल भयो</translation> @@ -6901,6 +6967,7 @@ <translation id="9179734824669616955">आफ्नो <ph name="DEVICE_TYPE" /> मा Linux (बिटा) सेटअप गर्नुहोस्</translation> <translation id="9180281769944411366">यो प्रक्रियामा केही मिनेट लाग्न सक्छ। Linux कन्टेनर सुरु गर्दै।</translation> <translation id="9180380851667544951">साइटले तपाईंको स्क्रिन आदान प्रदान गर्न सक्छ</translation> +<translation id="9186963452600581158">आफ्ना बच्चाको Google खाता प्रयोग गरी साइन इन गर्नुहोस्</translation> <translation id="9188732951356337132">प्रयोग तथा निदानसम्बन्धी डेटा पठाउनुहोस्। यो यन्त्रले हाल निदान, यन्त्र र एपको उपयोगसम्बन्धी डेटा स्वतः Google मा पठाइरहेको छ। यस्तो डेटा तपाईंका बालकको पहिचान गर्ने प्रयोजनका लागि प्रयोग गरिने छैन र यसले प्रणाली तथा एपको स्थिरता र थप कुराहरू सुधार गर्न मद्दत गर्ने छ। केही एकीकृत डेटाले Google का एप तथा Android का विकासकर्ता जस्ता साझेदारहरूलाई पनि मद्दत गर्ने छ। तपाईंका बालकको खातामा वेब तथा एपसम्बन्धी अतिरिक्त क्रियाकलापको सेटिङ सक्रिय गरिएको छ भने यो डेटा उनको Google खातामा सुरक्षित गरिन सक्छ। <ph name="BEGIN_LINK2" />थप जान्नुहोस्<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + पहिले नै साझा गरिएको कुञ्जी</translation> <translation id="9198090666959937775">आफ्नो Android फोन सुरक्षा साँचोका रूपमा प्रयोग गर्नुहोस्</translation> @@ -6962,7 +7029,7 @@ <translation id="964286338916298286">तपाईंको IT एडमिनले तपाईंको यन्त्रमा Chrome Goodies लाई असक्षम पार्नुभएको छ।</translation> <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{अनुप्रयोग}other{अनुप्रयोगहरू}}</translation> <translation id="964790508619473209">स्क्रिनका सेटिङ</translation> -<translation id="965211523698323809">आफ्नो <ph name="DEVICE_TYPE" /> बाट पाठ सन्देशहरू सेयर गर्नुहोस्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> +<translation id="965211523698323809">आफ्नो <ph name="DEVICE_TYPE" /> बाट टेक्स्ट म्यासेजहरू सेयर गर्नुहोस्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> <translation id="967398046773905967">कुनै पनि साइटलाई HID यन्त्रहरूमाथि पहुँच राख्ने अनुमति नदिनुहोस्</translation> <translation id="967624055006145463">डेटा भण्डारण गरियो</translation> <translation id="968000525894980488">Google Play services सक्रिय गर्नुहोस्।</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index b45fbde3..a9b89ee 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -869,6 +869,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> har slått av ADB-feilsøking. <ph name="DEVICE_TYPE" /> blir tilbakestilt om 24 timer. Sikkerhetskopiér eventuelle filer du vil ta vare på.</translation> <translation id="1977965994116744507">Hold telefonen nærmere for å låse opp <ph name="DEVICE_TYPE" />-enheten.</translation> <translation id="1978006917103730774">Fremtidige programvare- og sikkerhetsoppdateringer blir installert automatisk.</translation> +<translation id="1978057560491495741">Fjern adresse</translation> <translation id="1979095679518582070">Enhetens evne til å sende informasjonen som kreves for nødvendige tjenester, for eksempel systemoppdateringer og sikkerhet, påvirkes ikke hvis du slår av denne funksjonen.</translation> <translation id="1979280758666859181">Du endrer til en kanal med en eldre versjon av <ph name="PRODUCT_NAME" />. Kanalendringen trer i kraft når kanalversjonen samsvarer med versjonen som allerede er installert på enheten din.</translation> <translation id="197989455406964291">KDC støtter ikke krypteringstypen</translation> @@ -1071,6 +1072,7 @@ <translation id="2224444042887712269">Denne innstillingen tilhører <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Rediger mappenavn</translation> <translation id="2225864335125757863">Endre disse passordene med det samme for å holde kontoen din trygg:</translation> +<translation id="2226204716217107988">Vil du bytte til en annen profil?</translation> <translation id="2226449515541314767">Full kontroll over MIDI-enheter er blokkert for dette nettstedet.</translation> <translation id="2226907662744526012">Lås opp automatisk når PIN-koden oppgis</translation> <translation id="222704500187107962">Dette unntaket blir automatisk fjernet når du avslutter den gjeldende inkognitoøkten</translation> @@ -1140,6 +1142,7 @@ <translation id="2307462900900812319">Konfigurer nettverket</translation> <translation id="230927227160767054">Denne nettsiden ber om å få installere en behandlingssnarvei for en tjeneste.</translation> <translation id="2309620859903500144">Bevegelses- og lyssensorene er blokkert fra dette nettstedet.</translation> +<translation id="2312219318583366810">Sidens nettadresse</translation> <translation id="2314165183524574721">Den gjeldende synlighetsinnstillingen er skjult</translation> <translation id="2314774579020744484">Språket som brukes ved oversetting av sider</translation> <translation id="2315414688463285945">Feil ved konfigurering av Linux-filer. Prøv på nytt.</translation> @@ -2343,6 +2346,7 @@ <translation id="3713047097299026954">Det er ingen påloggingsinformasjon på denne sikkerhetsnøkkelen</translation> <translation id="3714195043138862580">Denne demoenheten er satt i en tilstand uten tilgang og ressurser.</translation> <translation id="3714633008798122362">nettkalender</translation> +<translation id="3715954932774762075">Apper og nettsteder som er tilgjengelige på flere språk, bruker det første støttede språket på denne listen. Disse preferansene synkroniseres med nettleserinnstillingene dine. <ph name="BEGIN_LINK_LEARN_MORE" />Finn ut mer<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Startside</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Deg og Google</translation> @@ -2503,6 +2507,7 @@ <translation id="3882165008614329320">Eksisterende video fra kamera eller fil</translation> <translation id="3886446263141354045">Forespørselen din om å få tilgang til dette nettstedet er sendt til <ph name="NAME" /></translation> <translation id="3888550877729210209">Tar notater med <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Slå på Chrome-synkronisering for å bruke Wi-Fi-synkronisering</translation> <translation id="3892414795099177503">Legg til OpenVPN/L2TP</translation> <translation id="3893536212201235195">lese og endre innstillingene for tilgjengelighet</translation> <translation id="3893630138897523026">ChromeVox (muntlig tilbakemelding)</translation> @@ -3774,6 +3779,7 @@ <translation id="5449588825071916739">Angi bokmerker for alle faner</translation> <translation id="5449716055534515760">Lukk vin&du</translation> <translation id="5452974209916053028">Gjeldende inkognitoøkt: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Flyttet tekstboblen til <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % fra venstre og <ph name="POSITION_ON_SCREEN_FROM_TOP" />% fra toppen</translation> <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ugyldig</translation> <translation id="5457459357461771897">lese og slette bilder, musikk og andre medier fra datamaskinen din</translation> @@ -3917,6 +3923,7 @@ <translation id="5602765853043467355">Slett bokmerker, logger, passord og annet fra denne enheten</translation> <translation id="5605623530403479164">Andre søkemotorer</translation> <translation id="5605758115928394442">Vi har sendt et varsel til telefonen din for å bekrefte at det er deg.</translation> +<translation id="560834977503641186">Wi-Fi-synkronisering – finn ut mer</translation> <translation id="5608580678041221894">Trykk på de følgende tastene for å justere eller flytte beskjæringsområdet</translation> <translation id="5609231933459083978">Appen ser ut til å være ugyldig.</translation> <translation id="5610038042047936818">Bytt til kameramodus</translation> @@ -4107,6 +4114,7 @@ <translation id="5841270259333717135">Konfigurer Ethernet</translation> <translation id="5842497610951477805">Slå Bluetooth av og på</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Direkteteksting er synlig – trykk på F6 for å skifte fokus</translation> <translation id="5844574845205796324">Foreslå nytt innhold du kan utforske</translation> <translation id="5846200638699387931">Feil i relasjonssyntaks: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Installer oppdateringer og apper. Ved å fortsette godtar du at denne enheten også kan laste ned og installere oppdateringer automatisk fra Google, operatøren din og enhetens produsent. Dette bruker muligens mobildata. Noen av disse appene kan tilby kjøp i appen.</translation> @@ -5363,6 +5371,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> kjører nå i full skjerm.</translation> <translation id="7340650977506865820">Nettstedet deler skjermen din</translation> <translation id="7341834142292923918">Vil ha tilgang til dette nettstedet</translation> +<translation id="7343372807593926528">Beskriv problemet før du sender tilbakemeldingen.</translation> <translation id="7345706641791090287">Bekreft passordet</translation> <translation id="7346909386216857016">Greit</translation> <translation id="7347452120014970266">Dette sletter alle dataene og informasjonskapslene som er lagret av <ph name="ORIGIN_NAME" /> og de tilhørende appene som er installert</translation> @@ -5779,6 +5788,7 @@ <translation id="7819857487979277519">PSK (WPA eller RSN)</translation> <translation id="7819992334107904369">Chrome-synkronisering</translation> <translation id="782057141565633384">K&opiér videoadressen</translation> +<translation id="7822187537422052256">Er du sikker på at du vil fjerne denne adressen?</translation> <translation id="7824864914877854148">Kunne ikke fullføre sikkerhetskopieringen på grunn av en feil</translation> <translation id="7825666486843191125">Alle kontakter i nærheten av deg når skjermen er opplåst</translation> <translation id="782590969421016895">Bruk nåværende sider</translation> @@ -6304,6 +6314,7 @@ <translation id="8419098111404128271">Søkeresultater for «<ph name="SEARCH_TEXT" />»</translation> <translation id="8419368276599091549">Velkommen til <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Endre ordlisteoppføringer</translation> +<translation id="8421361468937925547">Direkteteksting (kun på engelsk)</translation> <translation id="8422787418163030046">En skuff mangler</translation> <translation id="8425213833346101688">Endre</translation> <translation id="8425492902634685834">Festet til oppgavelinjen</translation> @@ -6332,6 +6343,7 @@ <translation id="8449036207308062757">Administrer lagringsplassen</translation> <translation id="8452135315243592079">SIM-kort mangler</translation> <translation id="8455026683977728932">Kunne ikke slå på ADB-illustrasjonen</translation> +<translation id="8456398879271637452">Direkteteksting er synlig – trykk på Ctrl + Tilbake eller Ctrl + Frem for å skifte fokus</translation> <translation id="845702320058262034">Kan ikke koble til. Kontrollér at telefonens Bluetooth er på.</translation> <translation id="8457451314607652708">Importér bokmerker</translation> <translation id="8458627787104127436">Åpne alle (<ph name="URL_COUNT" />) i et nytt vindu</translation> @@ -6842,6 +6854,7 @@ <translation id="9027459031423301635">Åpne link i ny &fane</translation> <translation id="9030515284705930323">Organisasjonen din har ikke slått på Google Play-butikken for kontoen din. Kontakt administratoren din for å få mer informasjon.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> støttes ikke lenger</translation> <translation id="9031549947500880805">Sikkerhetskopiér til Google Disk. Gjenopprett dataene dine enkelt eller bytt enhet når som helst. Sikkerhetskopien din inkluderer appdata.</translation> <translation id="9033765790910064284">Fortsett likevel</translation> <translation id="9033857511263905942">&Lim inn</translation> @@ -6850,6 +6863,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Du har ett forsøk igjen.}other{Du har # forsøk igjen.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Vil du oppdatere passordet for <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Direkteteksting er synlig – trykk på ⌘ + Tilvalg + pil opp eller pil ned for å skifte fokus</translation> <translation id="9041692268811217999">Administratoren din har deaktivert tilgang til lokale filer på maskinen din</translation> <translation id="904224458472510106">Denne handlingen kan ikke angres</translation> <translation id="9042893549633094279">Personvern og sikkerhet</translation> @@ -6888,6 +6902,7 @@ <translation id="9088446193279799727">Kunne ikke konfigurere Linux. Koble til internett, og prøv på nytt.</translation> <translation id="9088917181875854783">Bekreft at dette passordet vises på «<ph name="DEVICE_NAME" />»:</translation> <translation id="9089416786594320554">Inndatametoder</translation> +<translation id="909108997331068008">Profilen til <ph name="EXISTING_USER" /> er allerede logget på <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Det anbefales å sikkerhetskopiere filer, i tilfelle oppgraderingen ikke kan fullføres. Når oppgraderingen påbegynnes, blir Linux (beta) avsluttet. Lagre åpne filer før du fortsetter.</translation> <translation id="9094033019050270033">Oppdater passordet</translation> <translation id="9094038138851891550">Ugyldig brukernavn</translation> @@ -7061,5 +7076,6 @@ <translation id="994289308992179865">&Gjenta</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Etablerer sikker tilkobling ...</translation> +<translation id="99731366405731005">Slå på <ph name="LINK1_BEGIN" />Chrome-synkronisering<ph name="LINK1_END" /> for å bruke Wi-Fi-synkronisering. <ph name="LINK2_BEGIN" />Finn ut mer<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspiser</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 96bf2e3..81dfaa6 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -868,6 +868,7 @@ <translation id="1976307821760494606">Domena <ph name="DOMAIN" /> wyłączyła debugowanie ADB. W związku z tym za 24 godziny Twoje urządzenie <ph name="DEVICE_TYPE" /> zostanie zresetowane. Utwórz kopie zapasowe plików, które chcesz zachować.</translation> <translation id="1977965994116744507">Aby odblokować system, <ph name="DEVICE_TYPE" /> i telefon muszą być bliżej siebie.</translation> <translation id="1978006917103730774">Przyszłe aktualizacje oprogramowania i zabezpieczeń będą instalowane automatycznie.</translation> +<translation id="1978057560491495741">Usuń adres</translation> <translation id="1979095679518582070">Wyłączenie tej funkcji nie ogranicza wysyłania przez to urządzenie informacji potrzebnych do działania kluczowych usług, takich jak aktualizacje systemu czy zabezpieczenia.</translation> <translation id="1979280758666859181">Przechodzisz na kanał, w którym <ph name="PRODUCT_NAME" /> jest w starszej wersji. Zmiana nastąpi wtedy, gdy wersja na wybranym kanale będzie zgodna z tą zainstalowaną na Twoim urządzeniu.</translation> <translation id="197989455406964291">KDC nie obsługuje tego typu szyfrowania</translation> @@ -1070,6 +1071,7 @@ <translation id="2224444042887712269">To ustawienie należy do <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Edytuj nazwę folderu</translation> <translation id="2225864335125757863">Aby zadbać o bezpieczeństwo konta, natychmiast zmień te hasła:</translation> +<translation id="2226204716217107988">Przełączyć na inny profil?</translation> <translation id="2226449515541314767">Pełny dostęp do sterowania urządzeniami MIDI został dla tej witryny zablokowany.</translation> <translation id="2226907662744526012">Odblokuj automatycznie po wpisaniu kodu PIN</translation> <translation id="222704500187107962">Ten wyjątek zostanie automatycznie usunięty, gdy zakończysz bieżącą sesję incognito</translation> @@ -1139,6 +1141,7 @@ <translation id="2307462900900812319">Skonfiguruj sieć</translation> <translation id="230927227160767054">Ta strona chce zainstalować moduł do obsługiwania usługi.</translation> <translation id="2309620859903500144">Ta witryna ma zablokowany dostęp do czujników ruchu i oświetlenia.</translation> +<translation id="2312219318583366810">URL strony</translation> <translation id="2314165183524574721">Bieżące ustawienie widoczności: ukryte</translation> <translation id="2314774579020744484">Język używany podczas tłumaczenia stron</translation> <translation id="2315414688463285945">Błąd podczas konfigurowania plików Linuksa. Spróbuj ponownie.</translation> @@ -2342,6 +2345,7 @@ <translation id="3713047097299026954">Na tym kluczu bezpieczeństwa nie ma żadnych danych logowania</translation> <translation id="3714195043138862580">To urządzenie demonstracyjne zostało wyrejestrowane.</translation> <translation id="3714633008798122362">kalendarz sieciowy</translation> +<translation id="3715954932774762075">Aplikacje i strony dostępne w wielu językach będą używać pierwszego obsługiwanego języka z tej listy. Te ustawienia są zsynchronizowane z ustawieniami przeglądarki. <ph name="BEGIN_LINK_LEARN_MORE" />Więcej informacji<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Strona główna</translation> <translation id="372062398998492895">Drukarki CUPS</translation> <translation id="3721119614952978349">Ty i Google</translation> @@ -2502,6 +2506,7 @@ <translation id="3882165008614329320">Istniejący film z aparatu lub pliku</translation> <translation id="3886446263141354045">Twoja prośba o dostęp to tej strony została wysłana do: <ph name="NAME" /></translation> <translation id="3888550877729210209">Robienie notatek w aplikacji <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Aby korzystać z synchronizacji Wi-Fi, włącz Synchronizację Chrome</translation> <translation id="3892414795099177503">Dodaj OpenVPN/L2TP…</translation> <translation id="3893536212201235195">Odczytywanie i zmiana ustawień ułatwień dostępu</translation> <translation id="3893630138897523026">ChromeVox (komunikaty głosowe)</translation> @@ -3775,6 +3780,7 @@ <translation id="5449588825071916739">Dodaj wszystkie karty do zakładek</translation> <translation id="5449716055534515760">Zamknij o&kno</translation> <translation id="5452974209916053028">Bieżąca sesja incognito: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Dymek z napisami został przesunięty <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% w poprzek, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% w dół</translation> <translation id="5454166040603940656">za pomocą <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Nieprawidłowe</translation> <translation id="5457459357461771897">Odczyt i usuwanie zdjęć, muzyki oraz innych multimediów na komputerze</translation> @@ -3918,6 +3924,7 @@ <translation id="5602765853043467355">Usuń z tego urządzenia zakładki, historię, hasła i inne informacje</translation> <translation id="5605623530403479164">Inne wyszukiwarki</translation> <translation id="5605758115928394442">Wysłaliśmy powiadomienie na Twój telefon, by potwierdzić, że to Ty.</translation> +<translation id="560834977503641186">Synchronizacja Wi-Fi, więcej informacji</translation> <translation id="5608580678041221894">Kliknij te przyciski, by zmienić lub przesunąć obszar przycinania</translation> <translation id="5609231933459083978">Wygląda na to, że aplikacja jest nieprawidłowa.</translation> <translation id="5610038042047936818">Przełącz na tryb aparatu</translation> @@ -4108,6 +4115,7 @@ <translation id="5841270259333717135">Konfiguracja sieci Ethernet</translation> <translation id="5842497610951477805">Włącz Bluetooth</translation> <translation id="5843706793424741864">Stopnie Fahrenheita</translation> +<translation id="584451707753263735">Napisy na żywo są widoczne; naciśnij F6, by przejść do obszaru wyświetlania</translation> <translation id="5844574845205796324">Sugeruj nowe treści, z którymi warto się zapoznać</translation> <translation id="5846200638699387931">Błąd składni relacji: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instaluj aktualizacje i aplikacje. Kontynuując, zgadzasz się, by to urządzenie mogło automatycznie pobierać oraz instalować aktualizacje i aplikacje od Google, operatora sieci komórkowej i producenta urządzenia, oraz by mogło używać w tym celu komórkowej transmisji danych. Niektóre z tych aplikacji mogą pozwalać na robienie w nich zakupów.</translation> @@ -5364,6 +5372,7 @@ <translation id="7340431621085453413">Strona <ph name="FULLSCREEN_ORIGIN" /> jest teraz wyświetlana w trybie pełnoekranowym.</translation> <translation id="7340650977506865820">Strona udostępnia ekran</translation> <translation id="7341834142292923918">Chce mieć dostęp do tej strony</translation> +<translation id="7343372807593926528">Zanim wyślesz opinię, opisz problem.</translation> <translation id="7345706641791090287">Potwierdź hasło</translation> <translation id="7346909386216857016">Rozumiem</translation> <translation id="7347452120014970266">Spowoduje to usunięcie wszystkich danych i plików cookie zapisanych przez stronę <ph name="ORIGIN_NAME" /> oraz jej zainstalowane aplikacje</translation> @@ -5780,6 +5789,7 @@ <translation id="7819857487979277519">Klucz wstępny (WPA lub RSN)</translation> <translation id="7819992334107904369">Synchronizacja Chrome</translation> <translation id="782057141565633384">K&opiuj adres wideo</translation> +<translation id="7822187537422052256">Czy na pewno chcesz usunąć ten adres?</translation> <translation id="7824864914877854148">Tworzenie kopii zapasowej nie powiodło się z powodu błędu</translation> <translation id="7825666486843191125">Wszystkie kontakty w pobliżu, gdy masz odblokowany ekran.</translation> <translation id="782590969421016895">Użyj bieżących stron</translation> @@ -6305,6 +6315,7 @@ <translation id="8419098111404128271">Wyniki wyszukiwania dla „<ph name="SEARCH_TEXT" />”</translation> <translation id="8419368276599091549">Oto Twój <ph name="DEVICE_TYPE" /></translation> <translation id="8420308167132684745">Edytuj wpisy w słowniku</translation> +<translation id="8421361468937925547">Napisy na żywo (tylko w języku angielskim)</translation> <translation id="8422787418163030046">Brak tacy</translation> <translation id="8425213833346101688">Zmień</translation> <translation id="8425492902634685834">Przypnij na pasku zadań</translation> @@ -6333,6 +6344,7 @@ <translation id="8449036207308062757">Zarządzaj pamięcią</translation> <translation id="8452135315243592079">Brak karty SIM</translation> <translation id="8455026683977728932">Ilustracja: nie udało się włączyć ADB</translation> +<translation id="8456398879271637452">Napisy na żywo są widoczne; naciśnij Ctrl + Wstecz lub Ctrl + Dalej, by przejść do obszaru wyświetlania</translation> <translation id="845702320058262034">Nie można nawiązać połączenia. Sprawdź, czy Bluetooth w telefonie jest włączony.</translation> <translation id="8457451314607652708">Importuj zakładki</translation> <translation id="8458627787104127436">Otwórz wszystkie (<ph name="URL_COUNT" />) w nowym oknie</translation> @@ -6843,6 +6855,7 @@ <translation id="9027459031423301635">Otwórz link w nowej &karcie</translation> <translation id="9030515284705930323">Twoja organizacja nie włączyła Sklepu Google Play dla Twojego konta. Aby uzyskać więcej informacji, skontaktuj się z administratorem.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Wtyczka <ph name="PLUGIN_NAME" /> nie jest już obsługiwana.</translation> <translation id="9031549947500880805">Twórz kopie zapasowe na Dysku Google. W dowolnej chwili możesz w prosty sposób przywrócić dane lub używać ich na innym urządzeniu. Kopia zapasowa zawiera dane aplikacji.</translation> <translation id="9033765790910064284">Kontynuuj mimo to</translation> <translation id="9033857511263905942">&Wklej</translation> @@ -6851,6 +6864,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Pozostała jedna próba.}few{Pozostały # próby.}many{Pozostało # prób.}other{Pozostało # próby.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Zaktualizować hasło do: <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Napisy na żywo są widoczne; naciśnij ⌘ + Option + strzałka w górę lub w dół, by przejść do obszaru wyświetlania</translation> <translation id="9041692268811217999">Dostęp do plików lokalnych na tym komputerze został wyłączony przez administratora</translation> <translation id="904224458472510106">Tej operacji nie można cofnąć</translation> <translation id="9042893549633094279">Prywatność i bezpieczeństwo</translation> @@ -6889,6 +6903,7 @@ <translation id="9088446193279799727">Nie udało się skonfigurować Linuksa. Połącz się z internetem i spróbuj ponownie.</translation> <translation id="9088917181875854783">Potwierdź klucz widoczny na urządzeniu „<ph name="DEVICE_NAME" />”:</translation> <translation id="9089416786594320554">Wprowadzanie tekstu</translation> +<translation id="909108997331068008">Profil użytkownika <ph name="EXISTING_USER" /> jest już zalogowany na koncie <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Warto utworzyć kopię zapasową plików, by nie utracić danych, jeśli nie uda się przeprowadzić uaktualnienia. Rozpoczęcie uaktualnienia spowoduje wyłączenie Linuksa (w wersji Beta). Zanim przejdziesz dalej, zapisz otwarte pliki.</translation> <translation id="9094033019050270033">Aktualizuj hasło</translation> <translation id="9094038138851891550">Nazwa użytkownika jest nieprawidłowa.</translation> @@ -7062,5 +7077,6 @@ <translation id="994289308992179865">&Powtarzaj</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Nawiązuję bezpieczne połączenie...</translation> +<translation id="99731366405731005">Aby korzystać z synchronizacji Wi-Fi, włącz <ph name="LINK1_BEGIN" />Synchronizację Chrome<ph name="LINK1_END" />. <ph name="LINK2_BEGIN" />Więcej informacji<ph name="LINK2_END" /></translation> <translation id="998747458861718449">&Zbadaj</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 036b393a..39da4333 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> desativou a depuração do adb. O <ph name="DEVICE_TYPE" /> será redefinido em 24 horas. Faça backup dos arquivos importantes para você.</translation> <translation id="1977965994116744507">Aproxime o smartphone para desbloquear o <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">As atualizações de software e de segurança futuras serão instaladas automaticamente.</translation> +<translation id="1978057560491495741">Remover endereço</translation> <translation id="1979095679518582070">A desativação desse recurso não afeta a capacidade do dispositivo de enviar as informações necessárias para serviços básicos, como atualizações do sistema e segurança.</translation> <translation id="1979280758666859181">Você está mudando para um canal com uma versão mais antiga do <ph name="PRODUCT_NAME" />. A mudança de canal será aplicada quando a versão do canal corresponder à versão instalada atualmente no dispositivo.</translation> <translation id="197989455406964291">O KDC não é compatível com esse tipo de criptografia</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Esta configuração pertence a <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Editar nome da pasta</translation> <translation id="2225864335125757863">Mude estas senhas imediatamente para manter a conta protegida:</translation> +<translation id="2226204716217107988">Usar outro perfil?</translation> <translation id="2226449515541314767">O controle total de dispositivos MIDI foi bloqueado neste site.</translation> <translation id="2226907662744526012">Desbloquear automaticamente quando o PIN for inserido</translation> <translation id="222704500187107962">Essa exceção será removida automaticamente quando você sair da sessão de navegação anônima atual</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Configurar rede</translation> <translation id="230927227160767054">Esta página quer instalar um manipulador de serviço.</translation> <translation id="2309620859903500144">Este site foi impedido de acessar os sensores de luz ou movimento.</translation> +<translation id="2312219318583366810">URL da página</translation> <translation id="2314165183524574721">A configuração de visibilidade atual é: oculto</translation> <translation id="2314774579020744484">Idioma usado ao traduzir páginas</translation> <translation id="2315414688463285945">Erro ao configurar arquivos do Linux. Tente novamente.</translation> @@ -2347,6 +2350,7 @@ <translation id="3713047097299026954">Essa chave de segurança não tem nenhum dado de login</translation> <translation id="3714195043138862580">Este dispositivo de demonstração foi colocado em um estado de desprovisionamento.</translation> <translation id="3714633008798122362">agenda na web</translation> +<translation id="3715954932774762075">Apps e sites que estiverem disponíveis em vários idiomas usarão o primeiro idioma compatível desta lista. Estas preferências são sincronizadas com as configurações do navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Saiba mais<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Página inicial</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Você e o Google</translation> @@ -2507,6 +2511,7 @@ <translation id="3882165008614329320">Vídeo existente de uma câmera ou de um arquivo</translation> <translation id="3886446263141354045">Sua solicitação para acessar este site foi enviada para <ph name="NAME" /></translation> <translation id="3888550877729210209">Tomando notas com <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Ativar a Sincronização do Chrome para usar o recurso Sincronizar Wi-Fi</translation> <translation id="3892414795099177503">Adicionar OpenVPN / L2TP…</translation> <translation id="3893536212201235195">Ler e alterar as configurações de acessibilidade</translation> <translation id="3893630138897523026">ChromeVox (feedback falado)</translation> @@ -3780,6 +3785,7 @@ <translation id="5449588825071916739">Adicionar todas as guias aos favoritos</translation> <translation id="5449716055534515760">Fechar jan&ela</translation> <translation id="5452974209916053028">Sessão anônima atual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Mover balão de legenda para <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% na horizontal, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% na vertical</translation> <translation id="5454166040603940656">com <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Inválidos</translation> <translation id="5457459357461771897">Ler e excluir fotos, músicas e outras mídias do seu computador</translation> @@ -3923,6 +3929,7 @@ <translation id="5602765853043467355">Limpar favoritos, histórico, senhas e mais deste dispositivo.</translation> <translation id="5605623530403479164">Outros mecanismos de pesquisa</translation> <translation id="5605758115928394442">Uma notificação foi enviada ao seu smartphone para confirmar sua identidade.</translation> +<translation id="560834977503641186">Saiba mais sobre o Sincronizar Wi-Fi</translation> <translation id="5608580678041221894">Toque nas teclas a seguir para ajustar ou mover a área de corte</translation> <translation id="5609231933459083978">Este aplicativo parece ser inválido.</translation> <translation id="5610038042047936818">Alternar para o modo de câmera</translation> @@ -4114,6 +4121,7 @@ <translation id="5841270259333717135">Configurar ethernet</translation> <translation id="5842497610951477805">Ativar Bluetooth</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Legenda instantânea visível. Pressione F6 para mudar o foco</translation> <translation id="5844574845205796324">Sugerir novos conteúdos para explorar</translation> <translation id="5846200638699387931">Erro de sintaxe na relação: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instalar atualizações e apps. Ao continuar, você aceita que este dispositivo também pode fazer o download e a instalação de atualizações e apps do Google, da operadora e do fabricante do dispositivo de forma automática, possivelmente usando dados da rede celular. Alguns desses apps podem oferecer compras no aplicativo.</translation> @@ -5371,6 +5379,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> está agora no modo de tela inteira.</translation> <translation id="7340650977506865820">O site está compartilhando sua tela</translation> <translation id="7341834142292923918">Quer ter acesso a este site</translation> +<translation id="7343372807593926528">Descreva o problema antes de enviar feedback.</translation> <translation id="7345706641791090287">Confirmar sua senha</translation> <translation id="7346909386216857016">Ok, entendi.</translation> <translation id="7347452120014970266">Isso limpará todos os dados e cookies armazenados por <ph name="ORIGIN_NAME" />, incluindo os dos apps instalados</translation> @@ -5787,6 +5796,7 @@ <translation id="7819857487979277519">Pre-shared key (PSK): WPA ou RSN</translation> <translation id="7819992334107904369">Sincronização do Chrome</translation> <translation id="782057141565633384">C&opiar endereço do vídeo</translation> +<translation id="7822187537422052256">Tem certeza de que quer remover esse endereço?</translation> <translation id="7824864914877854148">Ocorreu um erro e não foi possível concluir o backup</translation> <translation id="7825666486843191125">Todos os contatos perto de você quando a tela estiver desbloqueada</translation> <translation id="782590969421016895">Usar as páginas atuais</translation> @@ -6312,6 +6322,7 @@ <translation id="8419098111404128271">Resultados de pesquisa para "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Bem-vindo ao <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Editar entradas do dicionário</translation> +<translation id="8421361468937925547">Legenda instantânea (somente em inglês)</translation> <translation id="8422787418163030046">Bandeja ausente</translation> <translation id="8425213833346101688">Alterar</translation> <translation id="8425492902634685834">Fixar na barra de tarefas</translation> @@ -6340,6 +6351,7 @@ <translation id="8449036207308062757">Gerenciar armazenamento</translation> <translation id="8452135315243592079">Chip ausente</translation> <translation id="8455026683977728932">Não foi possível ativar a ilustração do adb</translation> +<translation id="8456398879271637452">Legenda instantânea visível. Pressione Ctrl + Voltar ou Ctrl + Avançar para mudar o foco.</translation> <translation id="845702320058262034">Não foi possível conectar. Verifique se o Bluetooth do smartphone está ativado.</translation> <translation id="8457451314607652708">Importar favoritos</translation> <translation id="8458627787104127436">Abrir todos (<ph name="URL_COUNT" />) em uma nova janela</translation> @@ -6850,6 +6862,7 @@ <translation id="9027459031423301635">Abrir link em uma nova &guia</translation> <translation id="9030515284705930323">Sua organização não ativou a Google Play Store para sua conta. Entre em contato com seu administrador para receber mais informações.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">O plug-in <ph name="PLUGIN_NAME" /> não é mais compatível</translation> <translation id="9031549947500880805">Fazer backup no Google Drive Restaure seus dados ou troque de dispositivo a qualquer momento com facilidade. Seu backup inclui dados do app.</translation> <translation id="9033765790910064284">Continuar mesmo assim</translation> <translation id="9033857511263905942">&Colar</translation> @@ -6858,6 +6871,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Você só tem mais 1 tentativa.}one{Você só tem mais # tentativa.}other{Você só tem mais # tentativas.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Atualizar senha para <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Legenda instantânea visível. Pressione ⌘ + Option + seta para cima ou para baixo para mudar o foco.</translation> <translation id="9041692268811217999">O acesso a arquivos locais no seu computador foi desativado pelo administrador</translation> <translation id="904224458472510106">Não é possível desfazer essa operação</translation> <translation id="9042893549633094279">Privacidade e segurança</translation> @@ -6896,6 +6910,7 @@ <translation id="9088446193279799727">Não foi possível configurar o Linux. Conecte-se à Internet e tente novamente.</translation> <translation id="9088917181875854783">Confirme se esta senha está sendo mostrada em "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Métodos de entrada</translation> +<translation id="909108997331068008">O perfil de <ph name="EXISTING_USER" /> já está conectado a <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">O backup de arquivos é recomendado quando não é possível concluir o upgrade. O início do upgrade faz com que o Linux (Beta) seja desligado. Salve os arquivos abertos antes de continuar.</translation> <translation id="9094033019050270033">Atualizar senha</translation> <translation id="9094038138851891550">Nome de usuário inválido</translation> @@ -7069,5 +7084,6 @@ <translation id="994289308992179865">&Repetir</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Estabelecendo conexão segura...</translation> +<translation id="99731366405731005">Ative a <ph name="LINK1_BEGIN" />Sincronização do Chrome<ph name="LINK1_END" /> para usar o recurso Sincronizar Wi-Fi. <ph name="LINK2_BEGIN" />Saiba mais<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspecionar</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index f84ae80..180a1e8 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">O domínio <ph name="DOMAIN" /> desativou a depuração do ADB. Esta ação vai repor o seu dispositivo <ph name="DEVICE_TYPE" /> dentro de 24 horas. Faça uma cópia de segurança dos ficheiros que pretende manter.</translation> <translation id="1977965994116744507">Aproxime o telemóvel para desbloquear o <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">As atualizações de software e segurança futuras serão instaladas automaticamente.</translation> +<translation id="1978057560491495741">Remover endereço</translation> <translation id="1979095679518582070">A desativação desta funcionalidade não afeta a capacidade de o dispositivo enviar as informações necessárias para serviços essenciais, como atualizações do sistema e segurança.</translation> <translation id="1979280758666859181">Está a mudar para um canal com uma versão mais antiga do <ph name="PRODUCT_NAME" />. A alteração de canal será aplicada quando a versão do canal corresponder à versão atualmente instalada no seu dispositivo.</translation> <translation id="197989455406964291">O KDC não suporta o tipo de encriptação.</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Esta definição pertence a <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Editar nome da pasta</translation> <translation id="2225864335125757863">Altere estas palavras-passe imediatamente para manter a sua conta segura:</translation> +<translation id="2226204716217107988">Pretende mudar para outro perfil?</translation> <translation id="2226449515541314767">Este site foi impedido de ter controlo total sobre dispositivos MIDI.</translation> <translation id="2226907662744526012">Desbloquear automaticamente assim que o PIN for introduzido</translation> <translation id="222704500187107962">Esta exceção será automaticamente removida após sair da sessão de Navegação anónima atual.</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Configurar rede</translation> <translation id="230927227160767054">Esta página pretende instalar um controlador de serviço.</translation> <translation id="2309620859903500144">Este site foi impedido de aceder aos seus sensores de movimento ou de luz.</translation> +<translation id="2312219318583366810">URL da página</translation> <translation id="2314165183524574721">A definição de visibilidade atual é Oculto.</translation> <translation id="2314774579020744484">Idioma utilizado na tradução de páginas</translation> <translation id="2315414688463285945">Ocorreu um erro ao configurar os ficheiros Linux. Tente novamente.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Esta chave de segurança não tem dados de início de sessão.</translation> <translation id="3714195043138862580">Este dispositivo de demonstração foi colocado num estado sem aprovisionamento.</translation> <translation id="3714633008798122362">calendário Web</translation> +<translation id="3715954932774762075">As apps e os Websites que estão disponíveis em vários idiomas irão utilizar o primeiro idioma suportado desta lista. Estas preferências serão sincronizadas com as definições do seu navegador. <ph name="BEGIN_LINK_LEARN_MORE" />Saiba mais<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Página inicial</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">O utilizador e a Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Vídeo existente da câmara ou do ficheiro</translation> <translation id="3886446263141354045">O seu pedido para aceder a este site foi enviado para <ph name="NAME" />.</translation> <translation id="3888550877729210209">Tirar notas com a aplicação <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Ative a Sincronização do Chrome para utilizar o Sync Wi-Fi</translation> <translation id="3892414795099177503">Adicionar OpenVPN/L2TP...</translation> <translation id="3893536212201235195">Ler e alterar as suas definições de acessibilidade</translation> <translation id="3893630138897523026">ChromeVox (respostas faladas)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Adicionar Todos os Separadores aos Marcadores</translation> <translation id="5449716055534515760">Fechar &Janela</translation> <translation id="5452974209916053028">Sessão de Navegação anónima atual: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" /> e <ph name="RECENT_PERMISSIONS_CHANGE_2" />.</translation> +<translation id="5454005855577728171">Balão da legenda movido <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% para o outro lado, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% para baixo.</translation> <translation id="5454166040603940656">com <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Inválido</translation> <translation id="5457459357461771897">Ler e eliminar fotos, música e outros elementos multimédia a partir do computador</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Limpar os marcadores, o histórico, as palavras-passe e mais dados deste dispositivo</translation> <translation id="5605623530403479164">Outros motores de pesquisa</translation> <translation id="5605758115928394442">Foi enviada uma notificação para o seu telemóvel para confirmar a sua identidade.</translation> +<translation id="560834977503641186">Sync Wi-Fi, saiba mais</translation> <translation id="5608580678041221894">Toque nas teclas seguintes para ajustar ou mover a área de recorte</translation> <translation id="5609231933459083978">A aplicação parece ser inválida.</translation> <translation id="5610038042047936818">Mudar para modo de câmara</translation> @@ -4113,6 +4120,7 @@ <translation id="5841270259333717135">Configurar Ethernet</translation> <translation id="5842497610951477805">Ativar o Bluetooth</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Legendas instantâneas visíveis, prima F6 para mover o foco.</translation> <translation id="5844574845205796324">Sugerir novos conteúdos a explorar</translation> <translation id="5846200638699387931">Erro de sintaxe de relação: <ph name="ERROR_LINE" />.</translation> <translation id="5846807460505171493">Instale atualizações e apps. Ao continuar, aceita que este dispositivo também pode transferir e instalar automaticamente atualizações e apps a partir da Google, do seu operador e do fabricante do dispositivo, possivelmente através de dados móveis. Algumas destas apps podem disponibilizar compras na app.</translation> @@ -5369,6 +5377,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> está agora em ecrã inteiro.</translation> <translation id="7340650977506865820">O site está a partilhar o ecrã.</translation> <translation id="7341834142292923918">Pretende o acesso a este site</translation> +<translation id="7343372807593926528">Descreva o problema antes de enviar feedback.</translation> <translation id="7345706641791090287">Confirmar a palavra-passe</translation> <translation id="7346909386216857016">OK, compreendi</translation> <translation id="7347452120014970266">Esta ação limpa todos os dados e cookies armazenados por <ph name="ORIGIN_NAME" /> e respetivas apps instaladas.</translation> @@ -5785,6 +5794,7 @@ <translation id="7819857487979277519">PSK (WPA ou RSN)</translation> <translation id="7819992334107904369">Sincronização do Chrome</translation> <translation id="782057141565633384">C&opiar endereço do vídeo</translation> +<translation id="7822187537422052256">Tem a certeza de que pretende remover este endereço?</translation> <translation id="7824864914877854148">Não foi possível concluir a cópia de segurança devido a um erro.</translation> <translation id="7825666486843191125">Todos os contactos perto de si quando o seu ecrã está desbloqueado.</translation> <translation id="782590969421016895">Utilizar páginas atuais</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Resultados da pesquisa para "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Bem-vindo a <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Editar entradas do dicionário</translation> +<translation id="8421361468937925547">Legendas instantâneas (apenas em inglês)</translation> <translation id="8422787418163030046">Tabuleiro de papel em falta.</translation> <translation id="8425213833346101688">Alterar</translation> <translation id="8425492902634685834">Afixar na Barra de tarefas</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Gerir armazenamento</translation> <translation id="8452135315243592079">Cartão SIM em falta</translation> <translation id="8455026683977728932">Falha ao ativar a ilustração do adb</translation> +<translation id="8456398879271637452">Legendas instantâneas visíveis, prima Ctrl + Anterior ou Ctrl + Avançar para mover o foco.</translation> <translation id="845702320058262034">Não é possível estabelecer a ligação. Certifique-se de que o Bluetooth do telemóvel está ativado.</translation> <translation id="8457451314607652708">Importar marcadores</translation> <translation id="8458627787104127436">Abra todos (<ph name="URL_COUNT" />) numa nova janela</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Abrir Link num Novo &Separador</translation> <translation id="9030515284705930323">A sua entidade não ativou a Google Play Store para a sua conta. Contacte o gestor para obter mais informações.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">O <ph name="PLUGIN_NAME" /> já não é suportado</translation> <translation id="9031549947500880805">Faça uma cópia de segurança para o Google Drive. Restaure facilmente os seus dados ou troque de dispositivo em qualquer altura. A cópia de segurança inclui os dados de apps.</translation> <translation id="9033765790910064284">Continuar mesmo assim</translation> <translation id="9033857511263905942">C&olar</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Tem mais uma tentativa.}other{Tem mais # tentativas.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Pretende atualizar a palavra-passe para <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Legendas instantâneas visíveis, prima ⌘ + Opção + seta para cima ou para baixo para mover o foco.</translation> <translation id="9041692268811217999">O acesso a ficheiros locais no seu computador foi desativado pelo seu administrador.</translation> <translation id="904224458472510106">Não é possível anular esta operação.</translation> <translation id="9042893549633094279">Privacidade e segurança</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">Não foi possível configurar o Linux. Estabeleça ligação à Internet e tente novamente.</translation> <translation id="9088917181875854783">Confirme se esta chave de acesso aparece no "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Métodos de introd.</translation> +<translation id="909108997331068008">O perfil de <ph name="EXISTING_USER" /> já tem sessão iniciada em <ph name="NEW_USER" />.</translation> <translation id="9093429538970210897">Recomenda-se fazer uma cópia de segurança dos ficheiros caso não seja possível concluir a atualização. Iniciar a atualização vai fazer com que o Linux (Beta) seja encerrado. Guarde os ficheiros abertos antes de prosseguir.</translation> <translation id="9094033019050270033">Atualizar a palavra-passe</translation> <translation id="9094038138851891550">Nome de utilizador inválido</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">&Ciclo</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">A estabelecer ligação segura...</translation> +<translation id="99731366405731005">Ative a <ph name="LINK1_BEGIN" />Sincronização do Chrome<ph name="LINK1_END" /> para utilizar o Sync Wi-Fi. <ph name="LINK2_BEGIN" />Saiba mais<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspecionar</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index e9bc018..3d864af5 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -538,7 +538,7 @@ <translation id="1604432177629086300">Nu s-a putut printa. Verifică imprimanta și încearcă din nou.</translation> <translation id="1605544918554600534"><ph name="PROFILE_NAME" />: sincronizarea parolelor nu funcționează</translation> <translation id="1607139524282324606">Șterge intrarea</translation> -<translation id="1608626060424371292">Eliminați acest utilizator</translation> +<translation id="1608626060424371292">Ștergeți acest utilizator</translation> <translation id="1608668830839595724">Mai multe acțiuni pentru elementele selectate</translation> <translation id="161042844686301425">Cyan</translation> <translation id="1611432201750675208">Dispozitivul este blocat</translation> @@ -2120,7 +2120,7 @@ <translation id="346431825526753">Acesta este un cont pentru copii gestionat de <ph name="CUSTODIAN_EMAIL" />.</translation> <translation id="3468298837301810372">Etichetă</translation> <translation id="3468999815377931311">Telefon Android</translation> -<translation id="3470442499439619530">Eliminați acest utilizator</translation> +<translation id="3470442499439619530">Ștergeți acest utilizator</translation> <translation id="3471876058939596279">Porturile HDMI și USB Type-C nu pot fi folosite simultan pentru conținut video. Folosește alt port video.</translation> <translation id="3473241910002674503">Navighează la ecranul de pornire, înapoi și comută între aplicații folosind butoanele în modul tabletă.</translation> <translation id="3473479545200714844">Lupă de ecran</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 876fe74..e5da0da 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">Ваши закладки, история просмотров и настройки синхронизируются с аккаунтом Google.</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">Домашняя сеть, без роуминга</translation> +<translation id="1315056510003830387">Запретить сайтам использовать Flash</translation> <translation id="1315144594965013365">Оба устройства должны быть разблокированы и находиться рядом, также на них должна быть включена технология Bluetooth. Если вы делитесь файлами и ссылками с устройством Chromebook, убедитесь, что на нем включена функция "Обмен с окружением" (откройте панель состояния, нажав на часы, и выберите "Обмен с окружением").</translation> <translation id="1316136264406804862">Поиск...</translation> <translation id="1316495628809031177">Синхронизация приостановлена.</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">Активировать обычную SIM-карту</translation> <translation id="1387519831959169718">Чтобы использовать браузер как <ph name="NEW_USER" />, создайте отдельный профиль.</translation> <translation id="138784436342154190">Восстановить настройки стартовой страницы по умолчанию?</translation> +<translation id="1388253969141979417">Разрешить сайтам использовать микрофон</translation> <translation id="1388728792929436380">После установки обновлений <ph name="DEVICE_TYPE" /> перезагрузится.</translation> <translation id="1389342855416376185">Блокировать защищенный контент</translation> <translation id="1390548061267426325">Открыть в обычной вкладке</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">Запрашивать разрешение на доступ</translation> <translation id="1434696352799406980">Будут сброшены настройки главной страницы, страницы быстрого доступа и поисковой системы, а также откреплены все вкладки. Кроме того, система отключит все расширения и удалит все временные данные, такие как файлы cookie. Ваши закладки, история просмотров и пароли будут сохранены.</translation> <translation id="1434886155212424586">В качестве главной страницы установлена страница быстрого доступа.</translation> +<translation id="1435515966666225466">Разрешить сайтам использовать плагин для доступа к компьютеру</translation> <translation id="1436390408194692385">До окончания срока действия: <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Продолжить настройку</translation> <translation id="1436784010935106834">Удалено</translation> @@ -472,6 +475,7 @@ <translation id="1530838837447122178">Открыть настройки мыши и сенсорной панели</translation> <translation id="1531004739673299060">Окно программы</translation> <translation id="1531275250079031713">Открыть окно добавления сети Wi-Fi</translation> +<translation id="1535228823998016251">Громко</translation> <translation id="1536754031901697553">Отключение...</translation> <translation id="1537254971476575106">Полноэкранная лупа</translation> <translation id="15373452373711364">Большой курсор мыши</translation> @@ -555,6 +559,7 @@ <translation id="1627408615528139100">Файл уже скачан</translation> <translation id="1628948239858170093">Проверить файл перед открытием?</translation> <translation id="1629314197035607094">Срок действия пароля истек.</translation> +<translation id="163072119192489970">Разрешить сайтам отправлять и получать данные в фоновом режиме</translation> <translation id="1630768113285622200">Перезапустить и продолжить</translation> <translation id="1632082166874334883">Пароль, сохраненный в вашем аккаунте Google</translation> <translation id="1632803087685957583">Позволяет настроить подсказки, скорость повтора клавиш и т д.</translation> @@ -752,6 +757,7 @@ <translation id="1841705068325380214">Расширение "<ph name="EXTENSION_NAME" />" отключено</translation> <translation id="184273675144259287">Заменить приложения и файлы Linux предыдущей резервной копией</translation> <translation id="1842766183094193446">Включить демонстрационный режим?</translation> +<translation id="1845727111305721124">Разрешить сайтам воспроизводить звук</translation> <translation id="1846308012215045257">Чтобы запустить плагин "<ph name="PLUGIN_NAME" />", нажмите кнопку мыши, удерживая Ctrl.</translation> <translation id="1849186935225320012">Эта страница имеет полный контроль над устройствами MIDI.</translation> <translation id="1850508293116537636">Повернуть &по часовой стрелке</translation> @@ -776,6 +782,7 @@ <translation id="187145082678092583">Меньше приложений</translation> <translation id="1871534214638631766">Показывать информацию о контенте, когда вы выбираете его с помощью правого клика или долгого нажатия</translation> <translation id="1871615898038944731">На вашем устройстве <ph name="DEVICE_TYPE" /> установлены все необходимые обновления</translation> +<translation id="1874248162548993294">Разрешить сайтам показывать все объявления</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Открыть вкладку в другом окне}one{Открыть вкладки в другом окне}few{Открыть вкладки в другом окне}many{Открыть вкладки в другом окне}other{Открыть вкладки в другом окне}}</translation> <translation id="1875386316419689002">Эта вкладка подключена к HID-устройству</translation> <translation id="1875387611427697908">Это приложение или расширение можно установить только из сервиса "<ph name="CHROME_WEB_STORE" />".</translation> @@ -831,6 +838,7 @@ <translation id="1931152874660185993">Компоненты не установлены.</translation> <translation id="1932098463447129402">Не ранее</translation> <translation id="1933809209549026293">Подключите мышь или клавиатуру. Если вы используете Bluetooth-устройство, убедитесь, что оно готово к установке соединения.</translation> +<translation id="1935303383381416800">Разрешить сайтам определять ваше местоположение</translation> <translation id="1936931585862840749">Укажите количество копий для печати, используя цифры (от 1 до <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Не удалось импортировать тип архитектуры контейнера <ph name="ARCHITECTURE_CONTAINER" /> на это устройство (<ph name="ARCHITECTURE_DEVICE" />). Вы можете попробовать восстановить этот контейнер на другом устройстве или получить доступ к файлам, открыв образ контейнера в приложении "Файлы".</translation> <translation id="1938351510777341717">Внешняя клавиша Command</translation> @@ -948,6 +956,7 @@ <translation id="2090165459409185032">Чтобы восстановить данные аккаунта, перейдите на страницу google.com/accounts/recovery</translation> <translation id="2090876986345970080">Настройка безопасности системы</translation> <translation id="2091887806945687916">Звук</translation> +<translation id="209539936453343974">Чтобы установить родительский контроль, у ребенка должен быть аккаунт Google, управляемый родителем. <ph name="DEVICE_TYPE_PLURAL" /> с помощью приложения Family Link позволяют родителям ограничивать время использования, разрешать или блокировать сайты и не только. Если ребенок пользуется такими продуктами, как Google Класс, позднее вы сможете добавить учебный аккаунт.</translation> <translation id="2096715839409389970">Удалить сторонние файлы cookie</translation> <translation id="2097372108957554726">Войдите в Chrome, чтобы зарегистрировать новое устройство</translation> <translation id="2098805196501063469">Проверить</translation> @@ -1098,6 +1107,7 @@ <translation id="2261323523305321874">Администратор отключил некоторые старые профили.</translation> <translation id="2262332168014443534">В упрощенном режиме все сайты будут загружаться быстрее (в том числе по протоколу HTTPS).</translation> <translation id="2262477216570151239">Задержка перед повторным вводом</translation> +<translation id="2262888617381992508">Запретить сайтам воспроизводить защищенный контент</translation> <translation id="2263189956353037928">Выйти и снова войти</translation> <translation id="2263371730707937087">Частота обновления экрана</translation> <translation id="22665427234727190">Запрашивать разрешение на доступ сайтов к Bluetooth-устройствам (рекомендуется)</translation> @@ -1365,6 +1375,7 @@ <translation id="2571655996835834626">Изменение настроек доступа сайтов к файлам cookie, JavaScript, плагинам, геоданным, микрофону, камере и другим функциям</translation> <translation id="2572032849266859634">Предоставлен доступ к тому <ph name="VOLUME_NAME" /> (только чтение).</translation> <translation id="2575247648642144396">Значок будет отображаться, если расширение может работать на загруженной странице. Активируйте его, нажав на значок или с помощью комбинации клавиш <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="2575441894380764255">Запретить сайтам показывать навязчивую или вводящую в заблуждение рекламу</translation> <translation id="257779572837908839">Использовать в качестве Chromebox для видеоконференций</translation> <translation id="2579232805407578790">Не удалось установить связь с сервером. Проверьте подключение к сети и повторите попытку. Если проблема не исчезнет, перезапустите Chromebook. Код ошибки: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">Всегда разрешать <ph name="HOST" /> скачивать несколько файлов</translation> @@ -1631,6 +1642,7 @@ <translation id="2880660355386638022">Размещение окон</translation> <translation id="2881076733170862447">При нажатии на расширение</translation> <translation id="2882943222317434580">Сейчас будет выполнен перезапуск и сброс настроек <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> +<translation id="288387288628762616">Разрешить сайтам использовать Flash</translation> <translation id="2885378588091291677">Диспетчер задач</translation> <translation id="2885729872133513017">Не удалось расшифровать ответ сервера.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1665,6 +1677,7 @@ <translation id="2923234477033317484">Удалить этот аккаунт</translation> <translation id="2926085873880284723">Восстановить ярлыки по умолчанию</translation> <translation id="2927017729816812676">CacheStorage</translation> +<translation id="2928795416630981206">Разрешить сайтам отслеживать положение камеры</translation> <translation id="2931157624143513983">По области печати</translation> <translation id="2932085390869194046">Сгенерировать пароль…</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (детский аккаунт)</translation> @@ -1672,6 +1685,7 @@ <translation id="2932883381142163287">Сообщить о нарушении</translation> <translation id="2933632078076743449">Последнее обновление</translation> <translation id="2934999512438267372">Предоставлен полный контроль над устройствами MIDI</translation> +<translation id="2935654492420446828">Добавьте учебный аккаунт позже</translation> <translation id="2936851848721175671">Резервное копирование и восстановление</translation> <translation id="2938225289965773019">переход по ссылкам <ph name="PROTOCOL" /></translation> <translation id="2938845886082362843">Посмотреть или удалить учетные данные, сохраненные на электронном ключе</translation> @@ -1775,6 +1789,7 @@ <translation id="3060379269883947824">Включить озвучивание при нажатии</translation> <translation id="3060952009917586498">Изменить язык устройства. Сейчас используется <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Сообщение о вкладке, закрытой из-за отсутствия ответа.</translation> +<translation id="306535478112428611">Запретить сайтам изменять файлы и папки на устройстве</translation> <translation id="3065522099314259755">Задержка при повторе ввода на клавиатуре</translation> <translation id="3067198179881736288">Установить приложение?</translation> <translation id="3067198360141518313">Запустить подключаемый модуль</translation> @@ -1910,6 +1925,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" />: ошибка сети</translation> <translation id="3248902735035392926">Безопасность – это важно. <ph name="BEGIN_LINK" />Проверьте расширения<ph name="END_LINK" />, которые у вас установлены.</translation> <translation id="3251759466064201842"><Не является частью сертификата></translation> +<translation id="325238099842880997">Задайте базовые правила, чтобы сбалансировать учебу, игры и отдых ребенка</translation> <translation id="3253225298092156258">Недоступно</translation> <translation id="3253448572569133955">Неизвестный аккаунт</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Проблемы с безопасностью не обнаружены.}=1{Обнаружена {COUNT} проблема с безопасностью.}one{Обнаружена {COUNT} проблема с безопасностью.}few{Обнаружено {COUNT} проблемы с безопасностью.}many{Обнаружено {COUNT} проблем с безопасностью.}other{Обнаружено {COUNT} проблемы с безопасностью.}}</translation> @@ -2037,6 +2053,7 @@ <translation id="3404249063913988450">Включить заставку</translation> <translation id="3405664148539009465">Настроить шрифты</translation> <translation id="3405763860805964263">…</translation> +<translation id="3406290648907941085">Разрешить сайтам использовать устройства и данные виртуальной реальности</translation> <translation id="3406396172897554194">Укажите язык или способ ввода</translation> <translation id="3406605057700382950">Показывать панель &закладок</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Это расширение может быть опасным}one{Эти расширения могут быть опасными}few{Эти расширения могут быть опасными}many{Эти расширения могут быть опасными}other{Эти расширения могут быть опасными}}</translation> @@ -2201,6 +2218,7 @@ <translation id="3586806079541226322">Не удалось открыть файл</translation> <translation id="3586931643579894722">Скрыть подробности</translation> <translation id="3587482841069643663">Все</translation> +<translation id="3588790464166520201">Разрешить сайтам установку обработчиков платежей</translation> <translation id="3589766037099229847">Небезопасный контент заблокирован</translation> <translation id="3590194807845837023">Разблокировать профиль и перезапустить</translation> <translation id="3590295622232282437">Переход в управляемый сеанс.</translation> @@ -2426,6 +2444,7 @@ <translation id="3822559385185038546">Прокси-сервер принудительно включен администратором</translation> <translation id="3823310065043511710">Для Linux рекомендуется как минимум <ph name="INSTALL_SIZE" /> свободного пространства.</translation> <translation id="3824621460022590830">Токен регистрации устройства недействителен. Обратитесь к владельцу или администратору устройства. Код ошибки: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Разрешить сайтам использовать датчики движения</translation> <translation id="3826440694796503677">Администратор запретил добавлять другие аккаунты Google.</translation> <translation id="3827306204503227641">Всегда запускать плагины вне тестовой среды</translation> <translation id="3827774300009121996">Полноэкранный режим</translation> @@ -2478,6 +2497,8 @@ <translation id="3873423927483480833">Показать PIN-коды</translation> <translation id="3873915545594852654">Не удалось запустить ARC++.</translation> <translation id="3874164307099183178">Включить Google Ассистента</translation> +<translation id="3877075909000773256">Настройки функции "Обмен с окружением" для устройства пользователя <ph name="USER_NAME" /> с аккаунтом <ph name="USER_EMAIL" />.</translation> +<translation id="387771067039689031">Запретить сайтам использовать плагин для доступа к компьютеру</translation> <translation id="3879748587602334249">Диспетчер загрузки</translation> <translation id="3881478300875776315">Показать меньше строк</translation> <translation id="3882165008614329320">Видео с камеры или из файла</translation> @@ -2514,6 +2535,7 @@ <translation id="3919145445993746351">Чтобы автоматически установить расширения на всех своих компьютерах, включите синхронизацию.</translation> <translation id="3920504717067627103">Политики сертификатов</translation> <translation id="392089482157167418">Включить ChromeVox (голосовое сопровождение)</translation> +<translation id="3920909973552939961">Запретить сайтам устанавливать обработчики платежей</translation> <translation id="3923184630988645767">Передача данных</translation> <translation id="3923676227229836009">У этой страницы есть доступ для просмотра файлов</translation> <translation id="3924145049010392604">Meta</translation> @@ -2638,6 +2660,7 @@ <translation id="4058793769387728514">Проверить документ</translation> <translation id="406070391919917862">Фоновые приложения</translation> <translation id="4061374428807229313">Чтобы открыть доступ к папке, нажмите на нее правой кнопкой мыши в приложении "Файлы" и выберите "Предоставить доступ Parallels Desktop".</translation> +<translation id="406213378265872299">Настраиваемое поведение</translation> <translation id="4065876735068446555">Возможно, вам нужно перейти на страницу входа сети <ph name="NETWORK_ID" />.</translation> <translation id="4066207411788646768">Чтобы увидеть принтеры, доступные в вашей сети, подключитесь к Интернету.</translation> <translation id="4068776064906523561">Сохраненные отпечатки пальцев</translation> @@ -2785,6 +2808,7 @@ <translation id="425573743389990240">Скорость разрядки батареи в ваттах (при зарядке значение отрицательное)</translation> <translation id="4256316378292851214">Сохранить видео как...</translation> <translation id="4258348331913189841">Файловые системы</translation> +<translation id="4259388776256904261">Это может занять несколько минут…</translation> <translation id="4260182282978351200">Файл "<ph name="FILE_NAME" />" может представлять опасность. Отправить его в Google для проверки с помощью Дополнительной защиты? Чтобы перейти к панели скачанных файлов, нажмите Shift + F6.</translation> <translation id="4263223596040212967">Проверьте раскладку клавиатуры и повторите попытку.</translation> <translation id="4263757076580287579">Регистрация принтера отменена.</translation> @@ -2892,6 +2916,7 @@ <translation id="4400632832271803360">Чтобы сменить функции клавиш верхнего ряда, удерживайте клавишу Launcher</translation> <translation id="4400963414856942668">Чтобы добавить страницу в закладки, нажмите на значок звездочки.</translation> <translation id="4403775189117163360">Выбрать другую папку</translation> +<translation id="440391631796167175">Простых паролей не найдено</translation> <translation id="4404136731284211429">Сканировать</translation> <translation id="4404843640767531781">Чтобы пользоваться приложением "<ph name="APP_NAME" />", требуется разрешение родителя.</translation> <translation id="4405117686468554883">*.JPEG, *.JPG, *.PNG</translation> @@ -2936,6 +2961,7 @@ <translation id="4450974146388585462">Проверить подключение</translation> <translation id="4451479197788154834">Пароль сохранен на этом устройстве и в вашем аккаунте Google.</translation> <translation id="4451757071857432900">Заблокированы на сайтах, которые показывают навязчивую или вводящую в заблуждение рекламу (рекомендуется)</translation> +<translation id="4453205916657964690">Маска подсети</translation> <translation id="4453946976636652378">Введите поисковый запрос в <ph name="SEARCH_ENGINE_NAME" /> или укажите URL</translation> <translation id="4459169140545916303">Последние действия: <ph name="DEVICE_LAST_ACTIVATED_TIME" /> дн. назад</translation> <translation id="4460014764210899310">Отменить создание группы</translation> @@ -2963,6 +2989,7 @@ <translation id="4481530544597605423">Отключенные устройства</translation> <translation id="4483049906298469269">Не удалось выполнить проверку ping сетевого шлюза, не заданного по умолчанию.</translation> <translation id="4487489714832036847">Вместо традиционного ПО на Chromebook устанавливаются приложения, которые откроют вам новые возможности для работы, развлечений и не только.</translation> +<translation id="4488257340342212116">Разрешить сайтам использовать камеру</translation> <translation id="4488502501195719518">Удалить данные?</translation> <translation id="449232563137139956">Обычно сайты показывают изображения в качестве иллюстраций, например фото в интернет-магазинах или новостных статьях.</translation> <translation id="4493468155686877504">Рекомендуемый размер (<ph name="INSTALL_SIZE" />)</translation> @@ -2995,6 +3022,7 @@ <translation id="4524832533047962394">Режим регистрации устройства не поддерживается этой версией операционной системы. Убедитесь, что вы используете последнюю версию, и повторите попытку.</translation> <translation id="4527186207340858212">Создать профиль для работы?</translation> <translation id="452750746583162491">Проверить синхронизированные данные</translation> +<translation id="4527929807707405172">Включить прокрутку в обратную сторону. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Предлагать перевод</translation> <translation id="4530494379350999373">Происхождение</translation> <translation id="4531924570968473143">Добавьте пользователя на это устройство (<ph name="DEVICE_TYPE" />)</translation> @@ -3015,6 +3043,7 @@ <translation id="4545028762441890696">Чтобы снова включить его, предоставьте новые разрешения:</translation> <translation id="4545759655004063573">Не удается сохранить файл: нет прав. Выберите другой каталог.</translation> <translation id="4546308221697447294">Быстрый и удобный браузер Google Chrome</translation> +<translation id="4546345569117159016">Правая кнопка</translation> <translation id="4546692474302123343">Голосовой ввод в Google Ассистенте</translation> <translation id="4547659257713117923">Нет вкладок с других устройств</translation> <translation id="4547672827276975204">Автоматическое определение</translation> @@ -3074,6 +3103,7 @@ <translation id="4608500690299898628">&Найти...</translation> <translation id="4608520674724523647">Пример с завершенной регистрацией</translation> <translation id="4608703838363792434">Файл <ph name="FILE_NAME" /> содержит конфиденциальный контент.</translation> +<translation id="4609987916561367134">Разрешить сайтам использовать JavaScript</translation> <translation id="4610162781778310380">Ошибка в плагине <ph name="PLUGIN_NAME" /></translation> <translation id="4610637590575890427">Возможно, вы хотели перейти на <ph name="SITE" />?</translation> <translation id="4611114513649582138">Доступно Интернет-подключение</translation> @@ -3185,6 +3215,7 @@ <translation id="473775607612524610">Обновить</translation> <translation id="473936925429402449">Выбрано, показан дополнительный контент на карточке <ph name="CURRENT_ELEMENT" /> из <ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Билеты</translation> +<translation id="4742334355511750246">Запретить сайтам показывать изображения</translation> <translation id="4743260470722568160">Подробнее о том, <ph name="BEGIN_LINK" />как обновлять приложения<ph name="END_LINK" />…</translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Включить звук на сайте}one{Включить звук на сайтах}few{Включить звук на сайтах}many{Включить звук на сайтах}other{Включить звук на сайтах}}</translation> <translation id="4746351372139058112">Сообщения</translation> @@ -3320,6 +3351,7 @@ <translation id="4908811072292128752">Откройте новую вкладку, чтобы перейти на другой сайт, не закрывая предыдущий</translation> <translation id="4909038193460299775">Ваш аккаунт управляется доменом <ph name="DOMAIN" />. Все закладки, история, пароли и настройки будут удалены с устройства, однако данные в аккаунте Google сохранятся. Вы можете просмотреть и изменить их в <ph name="BEGIN_LINK" />Личном кабинете Google<ph name="END_LINK" />.</translation> <translation id="4912643508233590958">Переходы в активный режим</translation> +<translation id="4915961947098019832">Разрешить сайтам показывать изображения</translation> <translation id="4916542008280060967">Разрешить сайту изменять файл "<ph name="FILE_NAME" />"?</translation> <translation id="491691592645955587">Перейдите на безопасный браузер</translation> <translation id="4917385247580444890">Сильный</translation> @@ -3407,6 +3439,7 @@ <translation id="5027550639139316293">Сертификат электронной почты</translation> <translation id="5027562294707732951">Установить расширение</translation> <translation id="5029568752722684782">Удалить данные</translation> +<translation id="5033137252639132982">Запретить сайтам использовать датчики движения</translation> <translation id="5033266061063942743">Геометрические фигуры</translation> <translation id="5036662165765606524">Запретить сайтам автоматически скачивать более одного файла</translation> <translation id="5037676449506322593">Выделить все</translation> @@ -3456,6 +3489,7 @@ <translation id="5088172560898466307">Имя хоста сервера</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 с шифрованием RSA</translation> <translation id="5089810972385038852">Штат</translation> +<translation id="5090637338841444533">Запретить сайтам отслеживать положение камеры</translation> <translation id="5094721898978802975">Установка соединения со смежными нативными приложениями</translation> <translation id="5097002363526479830">Не удалось подключиться к сети <ph name="NAME" />: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Инструмент: <ph name="PRINT_NAME" /></translation> @@ -3764,6 +3798,7 @@ <translation id="5471768120198416576">Здравствуйте! Я буду озвучивать для вас текст.</translation> <translation id="5472627187093107397">Сохранять пароли для этого сайта</translation> <translation id="5473333559083690127">Повторно введите новый PIN-код</translation> +<translation id="5481273127572794904">Запретить сайтам автоматически скачивать несколько файлов</translation> <translation id="5481941284378890518">Добавить ближайшие принтеры</translation> <translation id="5483785310822538350">Запретить доступ к файлам и устройствам</translation> <translation id="5485080380723335835">В целях безопасности устройство <ph name="DEVICE_TYPE" /> было заблокировано. Чтобы продолжить, введите пароль вручную.</translation> @@ -3785,6 +3820,7 @@ <translation id="5495466433285976480">После перезагрузки все локальные аккаунты, файлы, данные и другие настройки будут удалены. Все пользователи должны снова войти в аккаунт.</translation> <translation id="5495597166260341369">Не выключать экран</translation> <translation id="5496587651328244253">Управление</translation> +<translation id="5496730470963166430">Запретить сайтам показывать всплывающие окна или использовать переадресацию</translation> <translation id="5497251278400702716">Этот файл</translation> <translation id="5498967291577176373">Ускорить ввод данных благодаря подсказкам с вашим именем, адресом и номером телефона</translation> <translation id="5499313591153584299">Этот файл может быть опасен для вашего компьютера.</translation> @@ -3792,6 +3828,7 @@ <translation id="5500709606820808700">Проверка безопасности выполнена сегодня.</translation> <translation id="5501809658163361512">{COUNT,plural, =1{Не удалось получить <ph name="ATTACHMENTS" /> с устройства "<ph name="DEVICE_NAME" />".}one{Не удалось получить <ph name="ATTACHMENTS" /> с устройства "<ph name="DEVICE_NAME" />".}few{Не удалось получить <ph name="ATTACHMENTS" /> с устройства "<ph name="DEVICE_NAME" />".}many{Не удалось получить <ph name="ATTACHMENTS" /> с устройства "<ph name="DEVICE_NAME" />".}other{Не удалось получить <ph name="ATTACHMENTS" /> с устройства "<ph name="DEVICE_NAME" />".}}</translation> <translation id="5502500733115278303">Импортированные из Firefox</translation> +<translation id="5502915260472117187">Ребенок</translation> <translation id="5503982651688210506">Разрешить сайту <ph name="HOST" /> и дальше использовать и перемещать вашу камеру, а также использовать микрофон</translation> <translation id="5505264765875738116">Сайты не могут запрашивать разрешения на отправку уведомлений</translation> <translation id="5505307013568720083">Закончились чернила</translation> @@ -3879,6 +3916,7 @@ <translation id="5596627076506792578">Ещё</translation> <translation id="5600706100022181951">Чтобы скачать обновление, потребуется <ph name="UPDATE_SIZE_MB" /> МБ мобильного трафика. Продолжить?</translation> <translation id="5601503069213153581">PIN-код</translation> +<translation id="5601823921345337195">Запретить сайтам подключаться к MIDI-устройствам</translation> <translation id="5602765853043467355">Удалить с устройства закладки, пароли, данные о работе в браузере и т. д.</translation> <translation id="5605623530403479164">Другие поисковые системы</translation> <translation id="5605758115928394442">На ваш телефон отправлено уведомление для подтверждения личности.</translation> @@ -3999,6 +4037,7 @@ <translation id="5747552184818312860">Срок действия</translation> <translation id="5747785204778348146">Нестабильная</translation> <translation id="5747809636523347288">Вс&тавить и перейти на страницу <ph name="URL" /></translation> +<translation id="5754152670305761216">Разрешить сайтам воспроизводить защищенный контент</translation> <translation id="5756163054456765343">Справочный &центр</translation> <translation id="5759728514498647443">"<ph name="APP_NAME" />" может читать документы, отправленные на печать через приложение "<ph name="APP_NAME" />".</translation> <translation id="5763751966069581670">USB-устройства не найдены</translation> @@ -4467,6 +4506,7 @@ <translation id="6295158916970320988">Все сайты</translation> <translation id="6295855836753816081">Сохранение...</translation> <translation id="6298962879096096191">Использование Google Play для установки приложений Android</translation> +<translation id="6300177430812514606">Запретить сайтам отправлять и получать данные в фоновом режиме</translation> <translation id="630065524203833229">В&ыход</translation> <translation id="6300718114348072351">Не удалось автоматически настроить принтер "<ph name="PRINTER_NAME" />". Задайте дополнительные параметры. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Чтобы использовать браузер в личных целях, а не как <ph name="EXISTING_USER" />, создайте в Chrome профиль для аккаунта <ph name="NEW_USER" />.</translation> @@ -4544,6 +4584,7 @@ <translation id="6390020764191254941">Открыть вкладку в новом окне</translation> <translation id="6390799748543157332">Страницы, открытые в гостевом режиме, не сохранятся в истории браузера и не оставят на компьютере следов, таких как файлы cookie. После того как вы их закроете, будут сохранены только скачанные вами файлы.</translation> <translation id="6393156038355142111">Сгенерировать надежный пароль</translation> +<translation id="6393550101331051049">Разрешить сайтам показывать небезопасный контент</translation> <translation id="6395423953133416962">Отправлять <ph name="BEGIN_LINK1" />сведения о системе<ph name="END_LINK1" /> и <ph name="BEGIN_LINK2" />значения показателей<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">Запретить сайтам использовать датчики движения</translation> <translation id="6398715114293939307">Удалить Google Play Маркет</translation> @@ -4576,6 +4617,7 @@ <translation id="6425556984042222041">Скорость озвучивания текста</translation> <translation id="6426200009596957090">Открыть настройки ChromeVox</translation> <translation id="642654727595919401">По правилам домена <ph name="DOMAIN" /> вам нужно выполнить резервное копирование данных и вернуть <ph name="DEVICE_TYPE" /> в течение недели. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Запретить сайтам воспроизводить звук</translation> <translation id="6428982734197629783">Обработка изображения…</translation> <translation id="6429384232893414837">Ошибка обновления</translation> <translation id="6430814529589430811">Единый сертификат ASCII с кодировкой Base64</translation> @@ -4604,6 +4646,7 @@ <translation id="6458701200018867744">Ошибка загрузки (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Найти выделенное</translation> <translation id="6459799433792303855">Активное окно перемещено на другой экран.</translation> +<translation id="6460566145397380451">Разрешить сайтам подключаться к MIDI-устройствам</translation> <translation id="6460601847208524483">Найти след.</translation> <translation id="6461170143930046705">Поиск сетей…</translation> <translation id="6463795194797719782">&Изменить</translation> @@ -4635,6 +4678,7 @@ <translation id="6499681088828539489">Не использовать прокси-серверы для общих сетей</translation> <translation id="650266656685499220">Чтобы создать альбомы, перейдите в Google Фото</translation> <translation id="6503077044568424649">Сайты</translation> +<translation id="650457560773015827">Левая кнопка</translation> <translation id="6504611359718185067">Чтобы добавить принтер, подключитесь к Интернету</translation> <translation id="6506374932220792071">Подпись ECDSA X9.62 с SHA-256</translation> <translation id="6508248480704296122">Похожее на <ph name="NAME_PH" /></translation> @@ -4836,6 +4880,7 @@ <translation id="676560328519657314">Ваши способы оплаты в Google Pay</translation> <translation id="6767566652486411142">Выбрать другой язык…</translation> <translation id="6767639283522617719">Не удалось подключить устройство к домену. Проверьте настройки организационного подразделения.</translation> +<translation id="6768034047581882264">Запретить сайтам показывать небезопасный контент</translation> <translation id="6769557323306147204">Организация "<ph name="ORGANIZATION_NAME" />" рекомендует вам перезагрузить устройство.</translation> <translation id="6769712124046837540">Добавление принтера...</translation> <translation id="6770602306803890733">Делает Интернет более безопасным для вас и других пользователей.</translation> @@ -4927,6 +4972,7 @@ <translation id="6865313869410766144">Данные для автозаполнения</translation> <translation id="6865598234501509159">Язык страницы – не <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">Журналы событий WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Тихо</translation> <translation id="686664946474413495">Цветовая температура</translation> <translation id="6868934826811377550">Подробности</translation> <translation id="6871644448911473373">Ответчик OCSP: <ph name="LOCATION" /></translation> @@ -4976,6 +5022,7 @@ <translation id="6922745772873733498">Чтобы запустить печать, введите PIN-код</translation> <translation id="6923132443355966645">Прокрутить/нажать</translation> <translation id="6923633482430812883">Ошибка. Убедитесь, что файловый сервер, к которому вы пытаетесь подключиться, поддерживает протокол SMB версии 2 или выше.</translation> +<translation id="6929126689972602640">Учебные аккаунты не поддерживают функцию родительского контроля. Чтобы добавить учебный аккаунт для доступа к Google Классу и другим учебным ресурсам, сначала войдите в личный аккаунт Google ребенка. Вы сможете добавить учебный аккаунт позже в настройках.</translation> <translation id="6929760895658557216">Окей, Google</translation> <translation id="6930036377490597025">Внешний электронный ключ или встроенный датчик</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Расширение отклонено}one{# расширение отклонено}few{# расширения отклонено}many{# расширений отклонено}other{# расширения отклонено}}</translation> @@ -5016,6 +5063,7 @@ <translation id="6972629891077993081">Устройства HID</translation> <translation id="6972754398087986839">Начать</translation> <translation id="6972887130317925583">Раскрытый пароль изменен. При необходимости вы можете проверить его в разделе "<ph name="SETTINGS" />".</translation> +<translation id="697312151395002334">Разрешить сайтам показывать всплывающие окна или использовать переадресацию</translation> <translation id="6973611239564315524">Доступна версия Debian 10 (Buster).</translation> <translation id="6974609594866392343">Демонстрационный офлайн-режим</translation> <translation id="6977381486153291903">Версия встроенного ПО</translation> @@ -5038,6 +5086,7 @@ <translation id="6995899638241819463">Сообщать, если пароли были раскрыты в результате утечки данных</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Журнал активности</translation> <translation id="6997707937646349884">На ваших устройствах:</translation> +<translation id="6998093258894828179">Скрыть подсказки</translation> <translation id="6998793565256476099">Зарегистрировать как устройство для проведения видеоконференций.</translation> <translation id="6999956497249459195">Новая группа</translation> <translation id="7000206553895739324">Принтер <ph name="PRINTER_NAME" /> подключен, но ещё не настроен.</translation> @@ -5054,6 +5103,7 @@ <translation id="7005848115657603926">Недопустимый диапазон страниц. Используйте <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">Нижнее поле</translation> <translation id="7007648447224463482">Открыть все в новом окне</translation> +<translation id="7009709314043432820">Приложение "<ph name="APP_NAME" />" использует камеру</translation> <translation id="701080569351381435">Просмотр исходного кода</translation> <translation id="7014174261166285193">Установка не выполнена.</translation> <translation id="7017004637493394352">Скажите "Окей, Google" ещё раз</translation> @@ -5073,6 +5123,7 @@ <translation id="7038632520572155338">Функция Switch Access</translation> <translation id="7039326228527141150">Доступ к USB-устройствам от <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Вход по смарт-карте Microsoft</translation> +<translation id="7039951224110875196">Создать аккаунт Google для ребенка</translation> <translation id="7040230719604914234">Оператор</translation> <translation id="7043108582968290193">Готово! Несовместимых приложений не обнаружено.</translation> <translation id="7044124535091449260">Подробнее о доступе для сайта…</translation> @@ -5144,6 +5195,7 @@ <translation id="7121362699166175603">Удаление истории и вариантов автозаполнения в адресной строке. Информация о других ваших действиях в Интернете может также храниться на странице <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Режим разработчика</translation> <translation id="7121728544325372695">Умные переносы</translation> +<translation id="7123030151043029868">Разрешить сайтам автоматически скачивать несколько файлов</translation> <translation id="7123360114020465152">Принтер больше не поддерживается.</translation> <translation id="7125148293026877011">Удалить Crostini с устройства</translation> <translation id="7127980134843952133">История скачиваний</translation> @@ -5158,6 +5210,7 @@ <translation id="7136984461011502314">Добро пожаловать в <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Произошла ошибка. Выберите другое изображение.</translation> <translation id="713888829801648570">Невозможно подтвердить пароль в офлайн-режиме.</translation> +<translation id="7139627972753429585">Приложение "<ph name="APP_NAME" />" использует микрофон</translation> <translation id="7140928199327930795">Нет других доступных устройств.</translation> <translation id="7141105143012495934">Ошибка входа: не удалось получить данные аккаунта. Обратитесь к администратору или повторите попытку.</translation> <translation id="7143207342074048698">Подключение</translation> @@ -5297,6 +5350,7 @@ <translation id="7324297612904500502">Форум бета-версии</translation> <translation id="7325209047678309347">Бумага застряла</translation> <translation id="7325437708553334317">Расширение высокой контрастности</translation> +<translation id="7326004502692201767">Настройте устройство <ph name="DEVICE_TYPE" /> для ребенка</translation> <translation id="7328699668338161242">Ассистент уже знает ваш голос</translation> <translation id="7328867076235380839">Недопустимое сочетание</translation> <translation id="7329154610228416156">Не удалось выполнить вход из-за перенаправления на небезопасный URL (<ph name="BLOCKED_URL" />). Обратитесь к администратору.</translation> @@ -5421,6 +5475,7 @@ <translation id="7465635034594602553">Произошла ошибка. Запустите <ph name="APP_NAME" /> снова через несколько минут.</translation> <translation id="7465778193084373987">URL отзыва сертификатов Netscape</translation> <translation id="7469894403370665791">Автоматически подключаться к этой сети</translation> +<translation id="7470424110735398630">Разрешить сайтам просматривать буфер обмена</translation> <translation id="747114903913869239">Ошибка: не удается расшифровать расширение</translation> <translation id="7473891865547856676">Пропустить</translation> <translation id="747459581954555080">Восстановить все</translation> @@ -5530,6 +5585,7 @@ <translation id="7607002721634913082">Приостановлен</translation> <translation id="7608810328871051088">Настройки Android</translation> <translation id="7609148976235050828">Подключитесь к Интернету и повторите попытку.</translation> +<translation id="7612655942094160088">Включить функции, использующие подключение к телефону.</translation> <translation id="7614260613810441905">Запрашивать разрешение на изменение сайтами файлов или папок на устройстве (рекомендуется)</translation> <translation id="761530003705945209">Сохранение резервных копий на Google Диске. Позволяет в любой момент восстанавливать данные (в том числе из приложений) или переносить их с одного устройства на другое. Резервные копии загружаются в Google и шифруются с помощью пароля вашего аккаунта Google.</translation> <translation id="7615365294369022248">Ошибка при добавлении аккаунта</translation> @@ -5648,6 +5704,7 @@ <translation id="7732111077498238432">В этой сети установлены правила</translation> <translation id="7737115349420013392">Подключение к устройству "<ph name="DEVICE_NAME" />"...</translation> <translation id="7737238973539693982">Удаление Linux (бета)</translation> +<translation id="7737948071472253612">Запретить сайтам использовать камеру</translation> <translation id="7740996059027112821">Стандартный</translation> <translation id="7742706086992565332">Вы можете настроить масштаб страницы для просмотра определенных сайтов.</translation> <translation id="774377079771918250">Выберите, где сохранить пароль</translation> @@ -5656,6 +5713,7 @@ <translation id="7750228210027921155">Картинка в картинке</translation> <translation id="7751260505918304024">Показать все</translation> <translation id="7753735457098489144">Не удалось выполнить установку, так как на устройстве недостаточно места. Удалите файлы, которые больше не нужны.</translation> +<translation id="7754347746598978109">Запретить сайтам использовать JavaScript</translation> <translation id="7754704193130578113">Всегда указывать место для скачивания</translation> <translation id="7755287808199759310">Для разблокировки обратитесь к родителю.</translation> <translation id="7757592200364144203">Переименовать устройство</translation> @@ -5708,6 +5766,7 @@ <translation id="7798844538707273832">Автоматически отключено разрешение "<ph name="PERMISSION" />"</translation> <translation id="7799299114731150374">Обои установлены.</translation> <translation id="7800518121066352902">Повернуть п&ротив часовой стрелки</translation> +<translation id="7802539296536804623">Не показывать подсказки на этой странице</translation> <translation id="780301667611848630">Спасибо, не надо</translation> <translation id="7804072833593604762">Вкладка закрыта</translation> <translation id="7805768142964895445">Состояние</translation> @@ -6135,6 +6194,7 @@ <translation id="826905130698769948">Недействительный сертификат клиента.</translation> <translation id="8270242299912238708">PDF-файлы</translation> <translation id="827097179112817503">Показывать кнопку "Главная страница"</translation> +<translation id="8271379370373330993">Следующие действия должны выполнить родители. После настройки вы можете передать устройство <ph name="DEVICE_TYPE" /> обратно ребенку.</translation> <translation id="8272443605911821513">Управляйте расширениями в соответствующем разделе в меню дополнительных инструментов.</translation> <translation id="8274332263553132018">Файл для трансляции</translation> <translation id="8274924778568117936">Не выключайте и не закрывайте <ph name="DEVICE_TYPE" />, выполняется обновление. После завершения установки <ph name="DEVICE_TYPE" /> перезагрузится.</translation> @@ -6158,6 +6218,7 @@ <translation id="8300011035382349091">Изменить закладку для этой вкладки</translation> <translation id="8300374739238450534">Полуночный синий</translation> <translation id="8300849813060516376">Сбой OTASP</translation> +<translation id="8304383784961451596">Вы не можете использовать это устройство. Обратитесь к его администратору, чтобы получить разрешение, или войдите в аккаунт Google, контролируемый через сервис Family Link.</translation> <translation id="8308179586020895837">Запрашивать разрешение на доступ к камере для сайта <ph name="HOST" /></translation> <translation id="830868413617744215">Бета</translation> <translation id="8309458809024885768">Такой сертификат уже существует</translation> @@ -6171,6 +6232,7 @@ <translation id="8322814362483282060">Доступ к вашему микрофону для этой страницы заблокирован.</translation> <translation id="8323167517179506834">Введите URL</translation> <translation id="8324784016256120271">Сайты могут использовать файлы cookie, чтобы отслеживать ваши действия в браузере, например, для показа персонализированной рекламы.</translation> +<translation id="8325413836429495820">Запретить сайтам просматривать буфер обмена</translation> <translation id="8326478304147373412">PKCS #7, цепочка сертификатов</translation> <translation id="8327039559959785305">Не удалось подключить файлы Linux. Повторите попытку.</translation> <translation id="8327676037044516220">Разрешения и настройки контента</translation> @@ -6220,6 +6282,7 @@ <translation id="8382913212082956454">Копировать &адрес электронной почты</translation> <translation id="8386091599636877289">Политика не найдена.</translation> <translation id="8386903983509584791">Поиск завершен</translation> +<translation id="8387361103813440603">Запретить сайтам определять ваше местоположение</translation> <translation id="8389416080014625855">Создать QR-код для этой страницы</translation> <translation id="8389492867173948260">Разрешить расширению просмотр и изменение ваших данных на посещаемых сайтах</translation> <translation id="8390449457866780408">Сервер недоступен.</translation> @@ -6404,6 +6467,7 @@ <translation id="8621866727807194849">На компьютере обнаружено вредоносное ПО. Chrome удалит его, восстановит настройки и отключит расширения. Это вернет браузер в обычное состояние.</translation> <translation id="8621979332865976405">Откройте доступ ко всему экрану</translation> <translation id="862542460444371744">Расширения</translation> +<translation id="8625663000550647058">Запретить сайтам использовать микрофон</translation> <translation id="862727964348362408">Приостановлено</translation> <translation id="862750493060684461">Кеш CSS</translation> <translation id="8627706565932943526">Ошибка синхронизации</translation> @@ -6484,6 +6548,7 @@ <translation id="8714838604780058252">Фон</translation> <translation id="8715480913140015283">На фоновой вкладке используется камера.</translation> <translation id="8716931980467311658">Удалить с устройства <ph name="DEVICE_TYPE" /> все приложения для Linux, а также данные из папки "Файлы Linux"?</translation> +<translation id="8717145295869185525">Запретить сайтам использовать устройства и данные виртуальной реальности</translation> <translation id="8717864919010420084">Копировать ссылку</translation> <translation id="8719472795285728850">Прослушивание событий расширений…</translation> <translation id="8719653885894320876">Ошибка скачивания плагина <ph name="PLUGIN_NAME" /></translation> @@ -6905,6 +6970,7 @@ <translation id="9179734824669616955">Установка Linux (бета) на устройстве <ph name="DEVICE_TYPE" /></translation> <translation id="9180281769944411366">Подождите несколько минут. Запуск контейнера Linux…</translation> <translation id="9180380851667544951">Сайт может открыть доступ к вашему экрану</translation> +<translation id="9186963452600581158">Войти в аккаунт Google ребенка</translation> <translation id="9188732951356337132">Отправка данных о работе устройства. Сейчас это устройство автоматически отправляет в Google диагностическую информацию, сведения об использовании приложений и самого устройства. Установить личность ребенка по этим данным нельзя. Они нужны нам, чтобы в будущем повысить стабильность приложений и внести другие улучшения. Некоторые данные в обобщенном виде пригодятся партнерам Google, например разработчикам Android. Если запись дополнительной истории приложений и веб-поиска включена, эта информация может сохраняться в аккаунте ребенка. <ph name="BEGIN_LINK2" />Подробнее…<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + общий ключ</translation> <translation id="9198090666959937775">Используйте телефон Android в качестве электронного ключа</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index b4e8380..609a2ad 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606">Domena <ph name="DOMAIN" /> je onemogočila most za odpravljanje težav s sistemom Android (ADB). S tem bo naprava <ph name="DEVICE_TYPE" /> v 24 urah ponastavljena. Varnostno kopirajte datoteke, ki jih želite obdržati.</translation> <translation id="1977965994116744507">Približajte telefon, če želite odkleniti napravo <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Prihodnje posodobitve programske opreme in varnostne posodobitve bodo nameščene samodejno.</translation> +<translation id="1978057560491495741">Odstrani naslov</translation> <translation id="1979095679518582070">Izklop te funkcije ne vpliva na zmožnost te naprave, da pošilja podatke, potrebne za ključne storitve, kot so posodobitve in varnost sistema.</translation> <translation id="1979280758666859181">Preklapljate na kanal s starejšo različico brskalnika <ph name="PRODUCT_NAME" />. Sprememba kanala bo uporabljena, ko se različica kanala ujema z različico, ki je trenutno nameščena v vaši napravi.</translation> <translation id="197989455406964291">KDC ne podpira vrste šifriranja</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Ta nastavitev se nanaša na uporabnika <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Uredi ime mape</translation> <translation id="2225864335125757863">Zaradi varnosti računa takoj spremenite ta gesla:</translation> +<translation id="2226204716217107988">Želite preklopiti na drug profil?</translation> <translation id="2226449515541314767">Temu spletnemu mestu je preprečen popolni nadzor nad napravami MIDI.</translation> <translation id="2226907662744526012">Samodejno odkleni, ko je vnesena koda PIN</translation> <translation id="222704500187107962">Ta razširitev bo samodejno odstranjena, ko zaprete trenutno sejo brez beleženja dejavnosti</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Konfiguriranje omrežja</translation> <translation id="230927227160767054">Ta stran želi namestiti rutino za obravnavo storitev.</translation> <translation id="2309620859903500144">Temu spletnemu mestu je onemogočen dostop do tipal gibanja ali svetlobe.</translation> +<translation id="2312219318583366810">URL strani</translation> <translation id="2314165183524574721">Trenutna nastavitev vidnosti je skrita</translation> <translation id="2314774579020744484">Jezik, ki se uporablja za prevajanje strani</translation> <translation id="2315414688463285945">Napaka pri konfiguriranju datotek za Linux. Poskusite znova.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Na tem varnostnem ključu ni shranjenih podatkov za prijavo</translation> <translation id="3714195043138862580">Ta predstavitvena naprava je bila onemogočena za uporabo.</translation> <translation id="3714633008798122362">spletni koledar</translation> +<translation id="3715954932774762075">V aplikacijah in na spletnih mestih, ki so na voljo v več jezikih, bo uporabljen prvi podprti jezik s tega seznama. Te nastavitve se sinhronizirajo z nastavitvami brskalnika. <ph name="BEGIN_LINK_LEARN_MORE" />Več o tem<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Domača stran</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Vi in Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Obstoječi videoposnetek iz fotoaparata ali datoteke</translation> <translation id="3886446263141354045">Vaša zahteva za dostop do tega mesta je poslana uporabniku <ph name="NAME" /></translation> <translation id="3888550877729210209">Ustvarjanje zapiskov z aplikacijo <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Vklopite sinhronizacijo za Chrome, če želite uporabljati sinhronizacijo poverilnic za Wi-Fi</translation> <translation id="3892414795099177503">Dodaj OpenVPN/L2TP ...</translation> <translation id="3893536212201235195">Branje in spreminjanje nastavitev funkcij za ljudi s posebnimi potrebami</translation> <translation id="3893630138897523026">ChromeVox (izgovorjava povratnih informacij)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Dodaj vse zavihke med zaznamke</translation> <translation id="5449716055534515760">Zapri &okno</translation> <translation id="5452974209916053028">Trenutna seja brez beleženja dejavnosti: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Oblaček s podnapisom je bil premaknjen <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % počez in <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % navzdol</translation> <translation id="5454166040603940656">pri ponudniku <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Neveljavno</translation> <translation id="5457459357461771897">Branje in izbris fotografij, glasbe in drugih predstavnosti v računalniku</translation> @@ -3923,6 +3929,7 @@ <translation id="5602765853043467355">Počistite zaznamke, zgodovino, gesla in drugo v tej napravi</translation> <translation id="5605623530403479164">Drugi iskalniki</translation> <translation id="5605758115928394442">V vaš telefon smo poslali obvestilo, da potrdite, da ste to res vi.</translation> +<translation id="560834977503641186">Sinhronizacija poverilnic za Wi-Fi, več o tem</translation> <translation id="5608580678041221894">Dotaknite se teh tipk, če želite prilagoditi ali premakniti območje za obrezovanje</translation> <translation id="5609231933459083978">Videti je, da je aplikacija neveljavna.</translation> <translation id="5610038042047936818">Preklopi v osnovni način fotoaparata</translation> @@ -4114,6 +4121,7 @@ <translation id="5841270259333717135">Konfiguriranje etherneta</translation> <translation id="5842497610951477805">Omogočanje Bluetootha</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Samodejni podnapisi so vidni, pritisnite F6, če želite preklapljati</translation> <translation id="5844574845205796324">Predlagaj nove vsebine za raziskovanje</translation> <translation id="5846200638699387931">Napaka v sintaksi razmerja: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Nameščanje posodobitev in aplikacij. Če nadaljujete, se strinjate, da lahko ta naprava tudi samodejno prenese in namesti posodobitve ter aplikacije, ki jih zagotavljajo Google, vaš operater in proizvajalec vaše naprave – morda s prenosom podatkov v mobilnih omrežjih. Nekatere od teh aplikacij morda ponujajo nakupe v aplikaciji.</translation> @@ -5370,6 +5378,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> je zdaj prikazano na celotnem zaslonu.</translation> <translation id="7340650977506865820">Spletno mesto souporablja vaš zaslon</translation> <translation id="7341834142292923918">Želi dostop do tega spletnega mesta</translation> +<translation id="7343372807593926528">Preden pošljete povratne informacije, opišite težavo.</translation> <translation id="7345706641791090287">Potrdite geslo</translation> <translation id="7346909386216857016">V redu, razumem</translation> <translation id="7347452120014970266">S tem boste izbrisali vse podatke in piškotke, ki jih je shranilo spletno mesto <ph name="ORIGIN_NAME" /> s svojimi nameščenimi aplikacijami.</translation> @@ -5786,6 +5795,7 @@ <translation id="7819857487979277519">PSK (WPA ali RSN)</translation> <translation id="7819992334107904369">Sinhronizacija za Chrome</translation> <translation id="782057141565633384">Kopiraj naslov videoposnetka</translation> +<translation id="7822187537422052256">Ali ste prepričani, da želite odstraniti ta naslov?</translation> <translation id="7824864914877854148">Varnostnega kopiranja ni bilo mogoče dokončati zaradi napake</translation> <translation id="7825666486843191125">Vsi stiki v bližini, ko je zaslon odklenjen</translation> <translation id="782590969421016895">Uporabi trenutne strani</translation> @@ -6311,6 +6321,7 @@ <translation id="8419098111404128271">Rezultati iskanja za poizvedbo »<ph name="SEARCH_TEXT" />«</translation> <translation id="8419368276599091549">Pozdravljeni v napravi <ph name="DEVICE_TYPE" />.</translation> <translation id="8420308167132684745">Urejanje slovarskih vnosov</translation> +<translation id="8421361468937925547">Samodejni podnapisi (samo angleščina)</translation> <translation id="8422787418163030046">Ni pladnja</translation> <translation id="8425213833346101688">Spremeni</translation> <translation id="8425492902634685834">Pripni v opravilno vrstico</translation> @@ -6339,6 +6350,7 @@ <translation id="8449036207308062757">Upravljanje shrambe</translation> <translation id="8452135315243592079">Ni kartice SIM</translation> <translation id="8455026683977728932">Omogočanje ilustracije orodja ADB ni uspelo</translation> +<translation id="8456398879271637452">Samodejni podnapisi so vidni, pritisnite Ctrl + tipko za nazaj ali Ctrl + tipko za naprek, če želite preklapljati</translation> <translation id="845702320058262034">Povezave ni mogoče vzpostaviti. Bluetooth v telefonu mora biti vklopljen.</translation> <translation id="8457451314607652708">Uvozi zaznamke</translation> <translation id="8458627787104127436">Odpri vse (<ph name="URL_COUNT" />) v novem oknu</translation> @@ -6849,6 +6861,7 @@ <translation id="9027459031423301635">Povezavo odpri v novem &zavihku</translation> <translation id="9030515284705930323">Organizacija za vaš račun ni omogočila Trgovine Google Play. Če želite več informacij, se obrnite na skrbnika.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Vtičnik <ph name="PLUGIN_NAME" /> ni več podprt.</translation> <translation id="9031549947500880805">Varnostno kopiranje v Google Drive. Kadar koli lahko preprosto obnovite podatke v napravi ali zamenjate napravo z drugo. Varnostne kopije vključujejo podatke aplikacij.</translation> <translation id="9033765790910064284">Vseeno nadaljuj</translation> <translation id="9033857511263905942">&Prilepi</translation> @@ -6857,6 +6870,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Imate še en poskus.}one{Imate še # poskus.}two{Imate še # poskusa.}few{Imate še # poskuse.}other{Imate še # poskusov.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Želite posodobiti geslo za <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Samodejni podnapisi so vidni, pritisnite ⌘ + Option + puščico gor ali dol, če želite preklapljati</translation> <translation id="9041692268811217999">Dostop do lokalnih datotek v vašem računalniku je onemogočil skrbnik</translation> <translation id="904224458472510106">Tega dejanja ni mogoče razveljaviti</translation> <translation id="9042893549633094279">Zasebnost in varnost</translation> @@ -6895,6 +6909,7 @@ <translation id="9088446193279799727">Linuxa ni bilo mogoče konfigurirati. Vzpostavite internetno povezavo in poskusite znova.</translation> <translation id="9088917181875854783">Potrdite, da je geslo prikazano v napravi »<ph name="DEVICE_NAME" />«:</translation> <translation id="9089416786594320554">Načini vnosa</translation> +<translation id="909108997331068008">Profil uporabnika <ph name="EXISTING_USER" /> je že prijavljen tukaj: <ph name="NEW_USER" />.</translation> <translation id="9093429538970210897">Priporočamo varnostno kopiranje datotek, če nadgradnje ne bi bilo mogoče dokončati. Če začnete nadgradnjo, se bo Linux (beta) zaustavil. Pred nadaljevanjem shranite odprte datoteke.</translation> <translation id="9094033019050270033">Posodobi geslo</translation> <translation id="9094038138851891550">Neveljavno uporabniško ime</translation> @@ -7068,5 +7083,6 @@ <translation id="994289308992179865">Ponav&ljaj</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Vzpostavljanje varne povezave ...</translation> +<translation id="99731366405731005">Vklopite <ph name="LINK1_BEGIN" />sinhronizacijo za Chrome<ph name="LINK1_END" />, če želite uporabljati sinhronizacijo poverilnic za Wi-Fi. <ph name="LINK2_BEGIN" />Več o tem<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Preglej</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 9c5d43f..34ee1125 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -390,6 +390,7 @@ <translation id="1436390408194692385">E vlefshme për <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Vazhdo konfigurimin</translation> <translation id="1436784010935106834">U hoq</translation> +<translation id="1437986450143295708">Përshkruaj problemin në detaje</translation> <translation id="144283815522798837">U zgjodhën <ph name="NUMBER_OF_ITEMS_SELECTED" /></translation> <translation id="1442851588227551435">Cakto biletë aktive Kerberos</translation> <translation id="1444628761356461360">Ky cilësim menaxhohet nga zotëruesi i pajisjes, <ph name="OWNER_EMAIL" /></translation> @@ -860,6 +861,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> ka çaktivizuar korrigjimin e ADB-së. Kjo do ta rivendosë pajisjen tënde <ph name="DEVICE_TYPE" /> brenda 24 orësh. Rezervo çdo skedar që dëshiron ta mbash.</translation> <translation id="1977965994116744507">Afroje telefonin më shumë për të shkyçur pajisjen tënde <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Përditësimet e ardhshme të softuerëve dhe të sigurisë do të instalohen automatikisht.</translation> +<translation id="1978057560491495741">Hiq adresën</translation> <translation id="1979095679518582070">Çaktivizimi i kësaj veçorie nuk ndikon në aftësinë e kësaj pajisjeje për të dërguar informacionin e nevojshëm për shërbimet bazë, siç janë përditësimet dhe siguria e sistemit.</translation> <translation id="1979280758666859181">Po kalon në një kanal me version më të vjetër të <ph name="PRODUCT_NAME" />. Ndryshimi i kanalit do të zbatohet kur versioni i tij të përputhet me versionin e instaluar aktualisht në pajisjen tënde.</translation> <translation id="197989455406964291">KDC nuk mbështet llojin e enkriptimit</translation> @@ -1061,6 +1063,7 @@ <translation id="2224444042887712269">Ky cilësim i përket <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Redakto emrin e dosjes</translation> <translation id="2225864335125757863">Ndryshoji këto fjalëkalime menjëherë për ta mbajtur llogarinë tënde të sigurt:</translation> +<translation id="2226204716217107988">Të kalohet në një profil tjetër?</translation> <translation id="2226449515541314767">Kjo faqe është bllokuar nga pasja e kontrollit të plotë mbi pajisjet MIDI.</translation> <translation id="2226907662744526012">Shkyçe automatikisht pasi të jetë futur kodi PIN</translation> <translation id="222704500187107962">Ky përjashtim do të hiqet automatikisht pasi të dalësh nga sesioni aktual "i fshehtë"</translation> @@ -1129,6 +1132,7 @@ <translation id="2307462900900812319">Konfiguro rrjetin</translation> <translation id="230927227160767054">kjo faqe dëshiron të instalojë një përpunues të shërbimit.</translation> <translation id="2309620859903500144">Kësaj faqeje i është bllokuar qasja te sensorët e lëvizjes ose të dritës.</translation> +<translation id="2312219318583366810">URL-ja e faqes</translation> <translation id="2314165183524574721">Cilësimi aktual i dukshmërisë është "I fshehur"</translation> <translation id="2314774579020744484">Gjuha e përdorur kur përkthehen faqen</translation> <translation id="2315414688463285945">Gabim në konfigurimin e skedarëve të Linux. Provo përsëri.</translation> @@ -2324,6 +2328,7 @@ <translation id="3713047097299026954">Ky çelës sigurie nuk ka asnjë të dhënë identifikimi</translation> <translation id="3714195043138862580">Kjo pajisje demonstrimi është vendosur në gjendje jashtë shërbimi.</translation> <translation id="3714633008798122362">kalendari në ueb</translation> +<translation id="3715954932774762075">Aplikacionet dhe sajtet e uebit që ofrohen në shumë gjuhë do të përdorin gjuhën e parë të mbështetur nga kjo listë. Këto preferenca sinkronizohen me cilësimet e shfletuesit tënd. <ph name="BEGIN_LINK_LEARN_MORE" />Mëso më shumë<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Faqja bazë</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Ti dhe Google</translation> @@ -2481,6 +2486,7 @@ <translation id="3882165008614329320">Video ekzistuese nga kamera ose skedari</translation> <translation id="3886446263141354045">Kërkesa jote për qasje te ky sajt është dërguar te <ph name="NAME" />.</translation> <translation id="3888550877729210209">Marrja e shënimeve me <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Aktivizo "Sinkronizimin e Chrome" për të përdorur "Sinkronizimin e Wi-Fi"</translation> <translation id="3892414795099177503">Shto OpenVPN / L2TP...</translation> <translation id="3893536212201235195">Lexo dhe ndrysho cilësimet e qasjes</translation> <translation id="3893630138897523026">ChromeVox (komente të thëna me gojë)</translation> @@ -3741,6 +3747,7 @@ <translation id="5449588825071916739">Shëno të gjitha skedat si referencë</translation> <translation id="5449716055534515760">Mbyll dri&taren</translation> <translation id="5452974209916053028">Sesioni aktual i fshehtë: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Flluska e titrave u zhvendos në <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% djathtas, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% poshtë</translation> <translation id="5454166040603940656">me <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">E pavlefshme</translation> <translation id="5457459357461771897">Lexo dhe fshi fotografitë, muzikën dhe media të tjera nga kompjuteri</translation> @@ -3880,6 +3887,7 @@ <translation id="5602765853043467355">Pastro faqeshënuesit, historikun, fjalëkalimet dhe më shumë nga kjo pajisje</translation> <translation id="5605623530403479164">Motorët e tjerë të kërkimit</translation> <translation id="5605758115928394442">Një njoftim është dërguar te telefoni yt për të konfirmuar që je ti.</translation> +<translation id="560834977503641186">"Sinkronizimi i Wi-Fi", Mëso më shumë</translation> <translation id="5608580678041221894">Trokit te tastet e mëposhtme për të rregulluar ose zhvendosur zonën e prerjes</translation> <translation id="5609231933459083978">Aplikacioni duket se është i pavlefshëm.</translation> <translation id="5610038042047936818">Kalo te modaliteti i kamerës</translation> @@ -4069,6 +4077,7 @@ <translation id="5841270259333717135">Konfiguro eternetin</translation> <translation id="5842497610951477805">Aktivizo Bluetooth-in</translation> <translation id="5843706793424741864">Farenhait</translation> +<translation id="584451707753263735">"Titra në çast" është i dukshëm, shtyp F6 për të kaluar fokusin në cikël</translation> <translation id="5844574845205796324">Sugjero përmbajtje të re për të eksploruar</translation> <translation id="5846200638699387931">Gabim i sintaksës së marrëdhënies: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instalo përditësimet dhe aplikacionet. Duke vazhduar, ti pranon se kjo pajisje mund të shkarkojë dhe instalojë gjithashtu automatikisht përditësime dhe aplikacione nga Google, operatori yt celular, prodhuesi i pajisjes sate, duke përdorur mundësisht të dhënat celulare. Disa prej këtyre aplikacioneve mund të ofrojnë blerje përmes aplikacioneve.</translation> @@ -5310,6 +5319,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> tani është në ekran të plotë.</translation> <translation id="7340650977506865820">Sajti po ndan ekranin tënd</translation> <translation id="7341834142292923918">Kërkon qasje te ky sajt</translation> +<translation id="7343372807593926528">Përshkruaj problemin përpara se të dërgosh komente.</translation> <translation id="7345706641791090287">Konfirmo fjalëkalimin</translation> <translation id="7346909386216857016">Në rregull, kuptova</translation> <translation id="7347452120014970266">Kjo do të pastrojë të gjitha të dhënat dhe kukit e ruajtura nga <ph name="ORIGIN_NAME" /> dhe aplikacionet e tij të instaluara</translation> @@ -5720,6 +5730,7 @@ <translation id="7819857487979277519">PSK (WPA ose RSN)</translation> <translation id="7819992334107904369">Sinkronizimi i Chrome</translation> <translation id="782057141565633384">K&opjo adresën e videos</translation> +<translation id="7822187537422052256">Je i sigurt që dëshiron ta heqësh këtë adresë?</translation> <translation id="7824864914877854148">Rezervimi nuk mund të përfundonte për shkak të një gabimi</translation> <translation id="7825666486843191125">Të gjitha kontaktet pranë teje kur ekrani yt është i shkyçur</translation> <translation id="782590969421016895">Përdor faqet aktuale</translation> @@ -6240,6 +6251,7 @@ <translation id="8419098111404128271">Rezultatet e kërkimit për "<ph name="SEARCH_TEXT" />"</translation> <translation id="8419368276599091549">Mirë se erdhe në pajisjen tënde <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Redakto hyrjet e fjalorit</translation> +<translation id="8421361468937925547">"Titra në çast" (vetëm anglisht)</translation> <translation id="8422787418163030046">Tabakaja mungon</translation> <translation id="8425213833346101688">Ndrysho</translation> <translation id="8425492902634685834">Gozhdoje te "Shiriti i detyrave"</translation> @@ -6268,6 +6280,7 @@ <translation id="8449036207308062757">Menaxho hapësirën ruajtëse</translation> <translation id="8452135315243592079">Karta SIM mungon</translation> <translation id="8455026683977728932">Aktivizimi i ilustrimit të ADB-së dështoi</translation> +<translation id="8456398879271637452">"Titra në çast" është i dukshëm, shtyp Ctrl + Prapa + Ctrl + Përpara për të kaluar fokusin në cikël</translation> <translation id="845702320058262034">Nuk mund të lidhet. Sigurohu që të jetë aktivizuar Bluetooth-i i telefonit tënd.</translation> <translation id="8457451314607652708">Importo faqeshënuesit</translation> <translation id="8458627787104127436">Hapi të gjitha (<ph name="URL_COUNT" />) në dritare të re</translation> @@ -6776,6 +6789,7 @@ <translation id="9027459031423301635">Hape lidhjen në një &skedë të re</translation> <translation id="9030515284705930323">Organizata jote nuk e ka aktivizuar Dyqanin e Google Play për llogarinë tënde. Kontakto me administratorin për më shumë informacione.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> nuk mbështetet më</translation> <translation id="9031549947500880805">Rezervo në "Diskun e Google". Restauro të dhënat e tua ose ndërro me lehtësi pajisjen në çdo kohë. Rezervimi yt përfshin të dhënat e aplikacioneve.</translation> <translation id="9033765790910064284">Vazhdo gjithsesi</translation> <translation id="9033857511263905942">&Ngjite</translation> @@ -6784,6 +6798,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Të ka mbetur një përpjekje.}other{Të kanë mbetur # përpjekje.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Të përditësohet fjalëkalimi për <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">"Titra në çast" është i dukshëm, shtyp ⌘ + Option + Shigjetën lart ose Shigjetën poshtë për të kaluar fokusin në cikël</translation> <translation id="9041692268811217999">Qasja në skedarët lokalë në kompjuterin tënd është çaktivizuar nga administratori yt</translation> <translation id="904224458472510106">Ky operacion nuk mund të zhbëhet</translation> <translation id="9042893549633094279">Privatësia dhe siguria</translation> @@ -6822,6 +6837,7 @@ <translation id="9088446193279799727">Linux nuk mund të konfigurohej. Lidhu me internetin dhe provo përsëri.</translation> <translation id="9088917181875854783">Konfirmo që ky kod shfaqet në "<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Metodat e hyrjes</translation> +<translation id="909108997331068008">Profili i <ph name="EXISTING_USER" /> është identifikuar tashmë në <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Rezervimi i skedarëve rekomandohet në rast se përmirësimi nuk mund të kryhet. Fillimi i përmirësimit do të shkaktojë fikjen e sistemit Linux (Beta). Ruaj skedarët e hapur përpara se të vazhdosh.</translation> <translation id="9094033019050270033">Përditëso fjalëkalimin</translation> <translation id="9094038138851891550">Emër i pavlefshëm përdoruesi</translation> @@ -6994,5 +7010,6 @@ <translation id="994289308992179865">&Pambarimisht</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Po vendos një lidhje të sigurt...</translation> +<translation id="99731366405731005">Aktivizo <ph name="LINK1_BEGIN" />Sinkronizimin e Chrome<ph name="LINK1_END" /> për të përdorur "Sinkronizimin e Wi-Fi". <ph name="LINK2_BEGIN" />Mëso më shumë<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspekto</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 537d6e1..1a0f795 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -869,6 +869,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> je onemogućio ADB otklanjanje grešaka. To će resetovati <ph name="DEVICE_TYPE" /> za 24 sata. Napravite rezervne kopije svih fajlova koje želite da zadržite.</translation> <translation id="1977965994116744507">Približite telefon da biste otključali <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Buduća softverska i bezbednosna ažuriranja će se instalirati automatski.</translation> +<translation id="1978057560491495741">Uklonite adresu</translation> <translation id="1979095679518582070">Isključivanje ove funkcije ne utiče na mogućnost ovog uređaja da šalje informacije potrebne za osnovne usluge, na primer, ažuriranja sistema i bezbednost.</translation> <translation id="1979280758666859181">Prelazite na kanal sa starijom verzijom <ph name="PRODUCT_NAME" />-a. Promena kanala će se primeniti kada se verzija kanala bude podudarala sa verzijom koja je trenutno instalirana na uređaju.</translation> <translation id="197989455406964291">KDC ne podržava tip šifrovanja</translation> @@ -1071,6 +1072,7 @@ <translation id="2224444042887712269">Vlasnik ovog podešavanja je <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Izmena imena direktorijuma</translation> <translation id="2225864335125757863">Promenite ove lozinke odmah da biste zaštitili nalog:</translation> +<translation id="2226204716217107988">Želite li da pređete na drugi profil?</translation> <translation id="2226449515541314767">Sprečeno je da ovaj sajt u potpunosti kontroliše MIDI uređaje.</translation> <translation id="2226907662744526012">Otključaj automatski kada se unese PIN</translation> <translation id="222704500187107962">Ovaj izuzetak će biti automatski uklonjen kada izađete iz aktuelne sesije bez arhiviranja</translation> @@ -1140,6 +1142,7 @@ <translation id="2307462900900812319">Konfiguriši mrežu</translation> <translation id="230927227160767054">Ova stranica želi da instalira obrađivača usluge.</translation> <translation id="2309620859903500144">Ovom sajtu je zabranjen pristup senzorima za pokret ili svetlo.</translation> +<translation id="2312219318583366810">URL stranice</translation> <translation id="2314165183524574721">Aktuelno podešavanje vidljivosti je: Skriveno</translation> <translation id="2314774579020744484">Jezik koji se koristi za prevođenje stranica</translation> <translation id="2315414688463285945">Greška pri konfigurisanju Linux datoteka. Probajte ponovo.</translation> @@ -2343,6 +2346,7 @@ <translation id="3713047097299026954">Na ovom bezbednosnom ključu nema podataka za prijavljivanje</translation> <translation id="3714195043138862580">Za ovaj uređaj za demonstraciju opozvano je dodeljivanje.</translation> <translation id="3714633008798122362">veb kalendar</translation> +<translation id="3715954932774762075">Aplikacije i veb-sajtovi koji su dostupni na više jezika koriste prvi podržani jezik sa ove liste. Ova podešavanja se sinhronizuju sa podešavanjima pregledača. <ph name="BEGIN_LINK_LEARN_MORE" />Saznajte više<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Početna stranica</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Vi i Google</translation> @@ -2503,6 +2507,7 @@ <translation id="3882165008614329320">Postojeći video iz kamere ili datoteke</translation> <translation id="3886446263141354045">Zahtev za pristup ovom sajtu je poslat korisniku <ph name="NAME" /></translation> <translation id="3888550877729210209">Pravljenje beležaka pomoću aplikacije <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Uključite Chrome sinhronizaciju da biste koristili Wi-Fi sinhronizaciju</translation> <translation id="3892414795099177503">Dodaj OpenVPN/L2TP...</translation> <translation id="3893536212201235195">Čitanje i menjanje vaših podešavanja pristupačnosti</translation> <translation id="3893630138897523026">ChromeVox (govorne povratne informacije)</translation> @@ -3776,6 +3781,7 @@ <translation id="5449588825071916739">Obeleži sve kartice</translation> <translation id="5449716055534515760">Close Win&dow (Zatvori prozor)</translation> <translation id="5452974209916053028">Aktuelna sesija bez arhiviranja: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Oblačić sa titlom je premešten <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% na suprotnu stranu, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% nadole</translation> <translation id="5454166040603940656">sa dobavljačem <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Nevažeće</translation> <translation id="5457459357461771897">Čitanje slika, muzike i drugih medija sa računara i brisanje tih medija</translation> @@ -3919,6 +3925,7 @@ <translation id="5602765853043467355">Obriši obeleživače, istoriju, lozinke i drugo sa ovog uređaja</translation> <translation id="5605623530403479164">Ostali pretraživači</translation> <translation id="5605758115928394442">Poslali smo vam obaveštenje na telefon da biste potvrdili da ste to vi.</translation> +<translation id="560834977503641186">Wi-Fi sinhronizacija, saznajte više</translation> <translation id="5608580678041221894">Dodirnite sledeće tastere da biste prilagodili ili premestili oblast opsecanja</translation> <translation id="5609231933459083978">Izgleda da je aplikacija nevažeća.</translation> <translation id="5610038042047936818">Prebaci na režim kamere</translation> @@ -4110,6 +4117,7 @@ <translation id="5841270259333717135">Konfigurišite eternet</translation> <translation id="5842497610951477805">Omogući Bluetooth</translation> <translation id="5843706793424741864">Farenhajt</translation> +<translation id="584451707753263735">Vidi se titl uživo, pritiskajte F6 da biste premeštali fokus</translation> <translation id="5844574845205796324">Predlaži nov sadržaj za istraživanje</translation> <translation id="5846200638699387931">Sintaksička greška odnosa vrednosti: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Instalirajte ažuriranja i aplikacije. Ako nastavite, slažete se da ovaj uređaj može i da automatski preuzima i instalira ažuriranja i aplikacije od Google-a, mobilnog operatera i proizvođača ovog uređaja, uz moguće korišćenje mobilnih podataka. Neke od ovih aplikacija mogu da nude kupovine u aplikaciji.</translation> @@ -5366,6 +5374,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> je sada u režimu celog ekrana.</translation> <translation id="7340650977506865820">Sajt deli ekran</translation> <translation id="7341834142292923918">Želi da pristupa ovom sajtu</translation> +<translation id="7343372807593926528">Opišite problem da biste poslali povratne informacije.</translation> <translation id="7345706641791090287">Potvrdite lozinku</translation> <translation id="7346909386216857016">Važi</translation> <translation id="7347452120014970266">Ovim brišete sve podatke i kolačiće koje čuvaju sajt <ph name="ORIGIN_NAME" /> i njegove instalirane aplikacije</translation> @@ -5782,6 +5791,7 @@ <translation id="7819857487979277519">PSK (WPA ili RSN)</translation> <translation id="7819992334107904369">Chrome sinhronizacija</translation> <translation id="782057141565633384">K&opiraj adresu videa</translation> +<translation id="7822187537422052256">Želite li stvarno da uklonite ovu adresu?</translation> <translation id="7824864914877854148">Nismo uspeli da napravimo rezervnu kopiju zbog greške</translation> <translation id="7825666486843191125">Svi kontakti u blizini kada je ekran otključan</translation> <translation id="782590969421016895">Koristi ove stranice</translation> @@ -6307,6 +6317,7 @@ <translation id="8419098111404128271">Rezultati pretrage za „<ph name="SEARCH_TEXT" />“</translation> <translation id="8419368276599091549">Dobro došli u <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Izmeni unose u rečniku</translation> +<translation id="8421361468937925547">Titl uživo (samo na engleskom)</translation> <translation id="8422787418163030046">Nedostaje fioka</translation> <translation id="8425213833346101688">Promeni</translation> <translation id="8425492902634685834">Prikači na traku zadataka</translation> @@ -6335,6 +6346,7 @@ <translation id="8449036207308062757">Upravljaj memorijskim prostorom</translation> <translation id="8452135315243592079">SIM kartica nedostaje</translation> <translation id="8455026683977728932">Omogućavanje ilustracije ADB-a nije uspelo.</translation> +<translation id="8456398879271637452">Vidi se titl uživo, pritiskajte Ctrl + Back ili Ctrl + Forward da biste premeštali fokus</translation> <translation id="845702320058262034">Povezivanje nije uspelo. Proverite da li je Bluetooth na telefonu uključen.</translation> <translation id="8457451314607652708">Uvezi obeleživače</translation> <translation id="8458627787104127436">Otvori sve (<ph name="URL_COUNT" />) u novom prozoru</translation> @@ -6845,6 +6857,7 @@ <translation id="9027459031423301635">Otvori link u novoj &kartici</translation> <translation id="9030515284705930323">Organizacija nije omogućila Google Play prodavnicu za nalog. Kontaktirajte administratora za više informacija.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Dodatna komponenta <ph name="PLUGIN_NAME" /> više nije podržana.</translation> <translation id="9031549947500880805">Pravite rezervne kopije na Google disku. Lako vratite podatke ili pređite na drugi uređaj u bilo kom trenutku. Rezervna kopija obuhvata podatke aplikacija.</translation> <translation id="9033765790910064284">Ipak nastavi</translation> <translation id="9033857511263905942">&Nalepi</translation> @@ -6853,6 +6866,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Imate još jedan pokušaj.}one{Imate još # pokušaj.}few{Imate još # pokušaja.}other{Imate još # pokušaja.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Želite li da ažurirate lozinku za <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Vidi se titl uživo, pritiskajte ⌘ + Option + strelicu nagore ili nadole da biste premeštali fokus</translation> <translation id="9041692268811217999">Administrator je onemogućio pristup lokalnim datotekama na računaru</translation> <translation id="904224458472510106">Ova operacija ne može da se opozove</translation> <translation id="9042893549633094279">Privatnost i bezbednost</translation> @@ -6891,6 +6905,7 @@ <translation id="9088446193279799727">Konfigurisanje Linux-a nije uspelo. Povežite se na internet i probajte ponovo.</translation> <translation id="9088917181875854783">Potvrdite da se ovaj pristupni kôd prikazuje na uređaju „<ph name="DEVICE_NAME" />“:</translation> <translation id="9089416786594320554">Metodi unosa</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> je pomoću profila već prijavljen(a) na <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Preporučuje se da napravite rezervne kopije u slučaju da nadogradnja ne može da se dovrši. Kad nadogradnja počne, Linux (beta) će se isključiti. Sačuvajte otvorene datoteke pre nego što nastavite.</translation> <translation id="9094033019050270033">Ažuriraj lozinku</translation> <translation id="9094038138851891550">Korisničko ime je nevažeće</translation> @@ -7064,5 +7079,6 @@ <translation id="994289308992179865">&Ponavljaj</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Uspostavljanje bezbedne veze...</translation> +<translation id="99731366405731005">Uključite <ph name="LINK1_BEGIN" />Chrome sinhronizaciju<ph name="LINK1_END" /> da biste koristili Wi-Fi sinhronizaciju. <ph name="LINK2_BEGIN" />Saznajte više<ph name="LINK2_END" /></translation> <translation id="998747458861718449">P&regledaj</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 5ea6aa9..231d402 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -869,6 +869,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> је онемогућио ADB отклањање грешака. То ће ресетовати <ph name="DEVICE_TYPE" /> за 24 сата. Направите резервне копије свих фајлова које желите да задржите.</translation> <translation id="1977965994116744507">Приближите телефон да бисте откључали <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Будућа софтверска и безбедносна ажурирања ће се инсталирати аутоматски.</translation> +<translation id="1978057560491495741">Уклоните адресу</translation> <translation id="1979095679518582070">Искључивање ове функције не утиче на могућност овог уређаја да шаље информације потребне за основне услуге, на пример, ажурирања система и безбедност.</translation> <translation id="1979280758666859181">Прелазите на канал са старијом верзијом <ph name="PRODUCT_NAME" />-а. Промена канала ће се применити када се верзија канала буде подударала са верзијом која је тренутно инсталирана на уређају.</translation> <translation id="197989455406964291">KDC не подржава тип шифровања</translation> @@ -1071,6 +1072,7 @@ <translation id="2224444042887712269">Власник овог подешавања је <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Измена имена директоријума</translation> <translation id="2225864335125757863">Промените ове лозинке одмах да бисте заштитили налог:</translation> +<translation id="2226204716217107988">Желите ли да пређете на други профил?</translation> <translation id="2226449515541314767">Спречено је да овај сајт у потпуности контролише MIDI уређаје.</translation> <translation id="2226907662744526012">Откључај аутоматски када се унесе PIN</translation> <translation id="222704500187107962">Овај изузетак ће бити аутоматски уклоњен када изађете из актуелне сесије без архивирања</translation> @@ -1140,6 +1142,7 @@ <translation id="2307462900900812319">Конфигуриши мрежу</translation> <translation id="230927227160767054">Ова страница жели да инсталира обрађивача услуге.</translation> <translation id="2309620859903500144">Овом сајту је забрањен приступ сензорима за покрет или светло.</translation> +<translation id="2312219318583366810">URL странице</translation> <translation id="2314165183524574721">Актуелно подешавање видљивости је: Скривено</translation> <translation id="2314774579020744484">Језик који се користи за превођење страница</translation> <translation id="2315414688463285945">Грешка при конфигурисању Linux датотека. Пробајте поново.</translation> @@ -2343,6 +2346,7 @@ <translation id="3713047097299026954">На овом безбедносном кључу нема података за пријављивање</translation> <translation id="3714195043138862580">За овај уређај за демонстрацију опозвано је додељивање.</translation> <translation id="3714633008798122362">веб календар</translation> +<translation id="3715954932774762075">Апликације и веб-сајтови који су доступни на више језика користе први подржани језик са ове листе. Ова подешавања се синхронизују са подешавањима прегледача. <ph name="BEGIN_LINK_LEARN_MORE" />Сазнајте више<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Почетна страница</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Ви и Google</translation> @@ -2503,6 +2507,7 @@ <translation id="3882165008614329320">Постојећи видео из камере или датотеке</translation> <translation id="3886446263141354045">Захтев за приступ овом сајту је послат кориснику <ph name="NAME" /></translation> <translation id="3888550877729210209">Прављење бележака помоћу апликације <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Укључите Chrome синхронизацију да бисте користили Wi-Fi синхронизацију</translation> <translation id="3892414795099177503">Додај OpenVPN/L2TP...</translation> <translation id="3893536212201235195">Читање и мењање ваших подешавања приступачности</translation> <translation id="3893630138897523026">ChromeVox (говорне повратне информације)</translation> @@ -3776,6 +3781,7 @@ <translation id="5449588825071916739">Обележи све картице</translation> <translation id="5449716055534515760">Close Win&dow (Затвори прозор)</translation> <translation id="5452974209916053028">Актуелна сесија без архивирања: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Облачић са титлом је премештен <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% на супротну страну, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% надоле</translation> <translation id="5454166040603940656">са добављачем <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Неважеће</translation> <translation id="5457459357461771897">Читање слика, музике и других медија са рачунара и брисање тих медија</translation> @@ -3919,6 +3925,7 @@ <translation id="5602765853043467355">Обриши обележиваче, историју, лозинке и друго са овог уређаја</translation> <translation id="5605623530403479164">Остали претраживачи</translation> <translation id="5605758115928394442">Послали смо вам обавештење на телефон да бисте потврдили да сте то ви.</translation> +<translation id="560834977503641186">Wi-Fi синхронизација, сазнајте више</translation> <translation id="5608580678041221894">Додирните следеће тастере да бисте прилагодили или преместили област опсецања</translation> <translation id="5609231933459083978">Изгледа да је апликација неважећа.</translation> <translation id="5610038042047936818">Пребаци на режим камере</translation> @@ -4110,6 +4117,7 @@ <translation id="5841270259333717135">Конфигуришите етернет</translation> <translation id="5842497610951477805">Омогући Bluetooth</translation> <translation id="5843706793424741864">Фаренхајт</translation> +<translation id="584451707753263735">Види се титл уживо, притискајте F6 да бисте премештали фокус</translation> <translation id="5844574845205796324">Предлажи нов садржај за истраживање</translation> <translation id="5846200638699387931">Синтаксичка грешка односа вредности: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Инсталирајте ажурирања и апликације. Ако наставите, слажете се да овај уређај може и да аутоматски преузима и инсталира ажурирања и апликације од Google-а, мобилног оператера и произвођача овог уређаја, уз могуће коришћење мобилних података. Неке од ових апликација могу да нуде куповине у апликацији.</translation> @@ -5366,6 +5374,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> је сада у режиму целог екрана.</translation> <translation id="7340650977506865820">Сајт дели екран</translation> <translation id="7341834142292923918">Жели да приступа овом сајту</translation> +<translation id="7343372807593926528">Опишите проблем да бисте послали повратне информације.</translation> <translation id="7345706641791090287">Потврдите лозинку</translation> <translation id="7346909386216857016">Важи</translation> <translation id="7347452120014970266">Овим бришете све податке и колачиће које чувају сајт <ph name="ORIGIN_NAME" /> и његове инсталиране апликације</translation> @@ -5782,6 +5791,7 @@ <translation id="7819857487979277519">PSK (WPA или RSN)</translation> <translation id="7819992334107904369">Chrome синхронизација</translation> <translation id="782057141565633384">К&опирај адресу видеа</translation> +<translation id="7822187537422052256">Желите ли стварно да уклоните ову адресу?</translation> <translation id="7824864914877854148">Нисмо успели да направимо резервну копију због грешке</translation> <translation id="7825666486843191125">Сви контакти у близини када је екран откључан</translation> <translation id="782590969421016895">Користи ове странице</translation> @@ -6307,6 +6317,7 @@ <translation id="8419098111404128271">Резултати претраге за „<ph name="SEARCH_TEXT" />“</translation> <translation id="8419368276599091549">Добро дошли у <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Измени уносе у речнику</translation> +<translation id="8421361468937925547">Титл уживо (само на енглеском)</translation> <translation id="8422787418163030046">Недостаје фиока</translation> <translation id="8425213833346101688">Промени</translation> <translation id="8425492902634685834">Прикачи на траку задатака</translation> @@ -6335,6 +6346,7 @@ <translation id="8449036207308062757">Управљај меморијским простором</translation> <translation id="8452135315243592079">SIM картица недостаје</translation> <translation id="8455026683977728932">Омогућавање илустрације ADB-а није успело.</translation> +<translation id="8456398879271637452">Види се титл уживо, притискајте Ctrl + Back или Ctrl + Forward да бисте премештали фокус</translation> <translation id="845702320058262034">Повезивање није успело. Проверите да ли је Bluetooth на телефону укључен.</translation> <translation id="8457451314607652708">Увези обележиваче</translation> <translation id="8458627787104127436">Отвори све (<ph name="URL_COUNT" />) у новом прозору</translation> @@ -6845,6 +6857,7 @@ <translation id="9027459031423301635">Отвори линк у новој &картици</translation> <translation id="9030515284705930323">Организација није омогућила Google Play продавницу за налог. Контактирајте администратора за више информација.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">Додатна компонента <ph name="PLUGIN_NAME" /> више није подржана.</translation> <translation id="9031549947500880805">Правите резервне копије на Google диску. Лако вратите податке или пређите на други уређај у било ком тренутку. Резервна копија обухвата податке апликација.</translation> <translation id="9033765790910064284">Ипак настави</translation> <translation id="9033857511263905942">&Налепи</translation> @@ -6853,6 +6866,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Имате још један покушај.}one{Имате још # покушај.}few{Имате још # покушаја.}other{Имате још # покушаја.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Желите ли да ажурирате лозинку за <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Види се титл уживо, притискајте ⌘ + Option + стрелицу нагоре или надоле да бисте премештали фокус</translation> <translation id="9041692268811217999">Администратор је онемогућио приступ локалним датотекама на рачунару</translation> <translation id="904224458472510106">Ова операција не може да се опозове</translation> <translation id="9042893549633094279">Приватност и безбедност</translation> @@ -6891,6 +6905,7 @@ <translation id="9088446193279799727">Конфигурисање Linux-а није успело. Повежите се на интернет и пробајте поново.</translation> <translation id="9088917181875854783">Потврдите да се овај приступни кôд приказује на уређају „<ph name="DEVICE_NAME" />“:</translation> <translation id="9089416786594320554">Методи уноса</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> је помоћу профила већ пријављен(а) на <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Препоручује се да направите резервне копије у случају да надоградња не може да се доврши. Кад надоградња почне, Linux (бета) ће се искључити. Сачувајте отворене датотеке пре него што наставите.</translation> <translation id="9094033019050270033">Ажурирај лозинку</translation> <translation id="9094038138851891550">Корисничко име је неважеће</translation> @@ -7064,5 +7079,6 @@ <translation id="994289308992179865">&Понављај</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Успостављање безбедне везе...</translation> +<translation id="99731366405731005">Укључите <ph name="LINK1_BEGIN" />Chrome синхронизацију<ph name="LINK1_END" /> да бисте користили Wi-Fi синхронизацију. <ph name="LINK2_BEGIN" />Сазнајте више<ph name="LINK2_END" /></translation> <translation id="998747458861718449">П&регледај</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 1795317..6531fae 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -872,6 +872,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> har inaktiverat felsökning med ADB. Detta återställer din <ph name="DEVICE_TYPE" /> inom 24 timmar. Säkerhetskopiera alla filer du vill spara.</translation> <translation id="1977965994116744507">Håll mobilen närmare om du vill låsa upp din <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Framtida programvara och säkerhetsuppdateringar installeras automatiskt.</translation> +<translation id="1978057560491495741">Ta bort adress</translation> <translation id="1979095679518582070">Enheten kan fortfarande skicka den information som behövs för viktiga tjänster, som systemuppdateringar och säkerhet, även om du inaktiverar funktionen.</translation> <translation id="1979280758666859181">Du byter till en kanal med en äldre version av <ph name="PRODUCT_NAME" />. Kanalen byts när kanalversionen matchar den version som är installerad på din enhet.</translation> <translation id="197989455406964291">KDC har inte stöd för krypteringstypen</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">Den här inställningen tillhör <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Redigera mappnamn</translation> <translation id="2225864335125757863">Skydda kontot genom att ändra dessa lösenord omedelbart:</translation> +<translation id="2226204716217107988">Vill du byta till en annan profil?</translation> <translation id="2226449515541314767">Webbplatsen har blockerats från fullständig kontroll över MIDI-enheter.</translation> <translation id="2226907662744526012">Lås upp automatiskt när pinkoden har angetts</translation> <translation id="222704500187107962">Detta undantag tas bort automatiskt när du stänger den aktuella inkognitosessionen</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">Konfigurera nätverk</translation> <translation id="230927227160767054">Den här sidan vill installera en tjänsthanterare.</translation> <translation id="2309620859903500144">Den här webbplatsen får inte använda enhetens rörelse- eller ljussensor.</translation> +<translation id="2312219318583366810">Sidans webbadress</translation> <translation id="2314165183524574721">Den aktuella synlighetsinställningen är Dold</translation> <translation id="2314774579020744484">Språk som sidor ska översättas till</translation> <translation id="2315414688463285945">Ett fel uppstod när Linux-filer skulle konfigureras. Försök igen.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">Det finns inga inloggningsuppgifter på den här säkerhetsnyckeln</translation> <translation id="3714195043138862580">Demoenheten har avregistrerats.</translation> <translation id="3714633008798122362">webbkalender</translation> +<translation id="3715954932774762075">Det första språk som stöds i den här listan kommer att användas i appar och webbplatser är tillgängliga på flera språk. Dessa inställningar synkroniseras med inställningarna för webbläsaren. <ph name="BEGIN_LINK_LEARN_MORE" />Läs mer<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Startsida</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Du och Google</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">Befintlig video från kamera eller fil</translation> <translation id="3886446263141354045">Din begäran om att få tillgång till denna webbplats har skickats till <ph name="NAME" /></translation> <translation id="3888550877729210209">Anteckna med <ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Aktivera Chrome Sync om du vill använda Wi-Fi-synkronisering</translation> <translation id="3892414795099177503">Lägg till OpenVPN/L2TP …</translation> <translation id="3893536212201235195">Läsa och ändra tillgänglighetsinställningarna</translation> <translation id="3893630138897523026">ChromeVox (talad feedback)</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">Skapa bokmärken för alla flikar</translation> <translation id="5449716055534515760">Stäng fön&ster</translation> <translation id="5452974209916053028">Nuvarande inkognitosession: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Textbubblan har flyttats till <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % från skärmens vänstra kant, <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % från skärmens överkant</translation> <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ogiltigt</translation> <translation id="5457459357461771897">Läsa och ta bort foton, musik och andra media från datorn</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">Rensa bokmärken, historik , lösenord med mera från den här enheten</translation> <translation id="5605623530403479164">Andra sökmotorer</translation> <translation id="5605758115928394442">En avisering har skickats till din mobil för att bekräfta att det är du.</translation> +<translation id="560834977503641186">Wi-Fi-synkronisering, läs mer</translation> <translation id="5608580678041221894">Tryck på följande knappar för att justera eller flytta beskärningsområdet</translation> <translation id="5609231933459083978">Appen ser ut att vara ogiltig.</translation> <translation id="5610038042047936818">Byt till kameraläget</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Konfigurera Ethernet</translation> <translation id="5842497610951477805">Aktivera Bluetooth</translation> <translation id="5843706793424741864">Fahrenheit</translation> +<translation id="584451707753263735">Live Caption visas, tryck på F6 för att ändra fokus</translation> <translation id="5844574845205796324">Föreslå nytt innehåll att utforska</translation> <translation id="5846200638699387931">Syntaxfel i relation: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Installera uppdateringar och appar. Genom att fortsätta godkänner du att enheten kan ladda ned och installera uppdateringar och appar automatiskt från Google, operatören och enhetstillverkaren, eventuellt genom att använda mobildata. Köp i appar erbjuds i vissa av dessa appar.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> visas nu i helskärm.</translation> <translation id="7340650977506865820">Webbplatsen delar din skärm</translation> <translation id="7341834142292923918">Begär åtkomst till webbplatsen</translation> +<translation id="7343372807593926528">Beskriv problemet innan du skickar feedback.</translation> <translation id="7345706641791090287">Bekräfta lösenordet</translation> <translation id="7346909386216857016">Ok, jag förstår</translation> <translation id="7347452120014970266">All data och alla cookies som har sparats av <ph name="ORIGIN_NAME" /> och tillhörande installerade appar rensas</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA eller RSN)</translation> <translation id="7819992334107904369">Chrome Sync</translation> <translation id="782057141565633384">K&opiera videoadress</translation> +<translation id="7822187537422052256">Vill du ta bort den här adressen?</translation> <translation id="7824864914877854148">Det gick inte att slutföra säkerhetskopieringen på grund av ett fel</translation> <translation id="7825666486843191125">Alla kontakter i närheten när skärmen är upplåst</translation> <translation id="782590969421016895">Använd aktuella sidor</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">Sökresultat för ”<ph name="SEARCH_TEXT" />”</translation> <translation id="8419368276599091549">Välkommen till <ph name="DEVICE_TYPE" />!</translation> <translation id="8420308167132684745">Redigera poster i ordlista</translation> +<translation id="8421361468937925547">Live Caption (endast engelska)</translation> <translation id="8422787418163030046">Fack saknas</translation> <translation id="8425213833346101688">Ändra</translation> <translation id="8425492902634685834">Fäst i aktivitetsfältet</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">Hantera lagringsutrymme</translation> <translation id="8452135315243592079">SIM-kort saknas</translation> <translation id="8455026683977728932">Kunde inte aktivera illustration med adb</translation> +<translation id="8456398879271637452">Live Caption visas, tryck på Ctrl + Bakåt eller Ctrl + framåt för att ändra fokus</translation> <translation id="845702320058262034">Det gick inte att ansluta. Kontrollera att Bluetooth har aktiverats på mobilen.</translation> <translation id="8457451314607652708">Importera bokmärken</translation> <translation id="8458627787104127436">Öppna alla (<ph name="URL_COUNT" />) i ett nytt fönster</translation> @@ -6847,6 +6859,7 @@ <translation id="9027459031423301635">Öppna länk i ny &flik</translation> <translation id="9030515284705930323">Organisationen har inte aktiverat Google Play Butik för ditt konto. Kontakta administratören om du vill veta mer.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> stöds inte längre</translation> <translation id="9031549947500880805">Säkerhetskopiera på Google Drive. Återställ data eller byt enkelt enhet när du vill. Säkerhetskopian innehåller appdata.</translation> <translation id="9033765790910064284">Fortsätt ändå</translation> <translation id="9033857511263905942">K&listra in</translation> @@ -6855,6 +6868,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Du har ett försök kvar.}other{Du har # försök kvar.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Vill du uppdatera lösenordet för <ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Live Caption visas, tryck på ⌘ + Alt + uppåtpil eller nedåtpil för att ändra fokus</translation> <translation id="9041692268811217999">Administratören har inaktiverat åtkomsten till lokala filer på datorn</translation> <translation id="904224458472510106">Åtgärden kan inte ångras</translation> <translation id="9042893549633094279">Sekretess och säkerhet</translation> @@ -6893,6 +6907,7 @@ <translation id="9088446193279799727">Det gick inte att konfigurera Linux. Anslut till internet och försök igen.</translation> <translation id="9088917181875854783">Bekräfta att denna nyckel visas på <ph name="DEVICE_NAME" />:</translation> <translation id="9089416786594320554">Inmatningsmetoder</translation> +<translation id="909108997331068008">Profilen som tillhör <ph name="EXISTING_USER" /> är redan inloggad på <ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Vi rekommenderar att du säkerhetskopierar filer ifall det inte skulle gå att slutföra uppgraderingen. Linux (beta) avslutas när du startar uppgraderingen. Spara öppna filer innan du fortsätter.</translation> <translation id="9094033019050270033">Uppdatera lösenordet</translation> <translation id="9094038138851891550">Ogiltigt användarnamn</translation> @@ -7066,5 +7081,6 @@ <translation id="994289308992179865">&Repetera</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Upprättar en säker anslutning...</translation> +<translation id="99731366405731005">Aktivera <ph name="LINK1_BEGIN" />Chrome Sync<ph name="LINK1_END" /> om du vill använda Wi-Fi-synkronisering. <ph name="LINK2_BEGIN" />Läs mer<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspektera</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 87968eb..585d586 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -401,7 +401,7 @@ <translation id="1451375123200651445">இணையப்பக்கம், ஒற்றைக் கோப்பு</translation> <translation id="1451917004835509682">மேற்பார்வையிடப்படும் பயனரைச் சேர்</translation> <translation id="1454223536435069390">ஸ்கிரீன் ஷாட்டை எடு</translation> -<translation id="145432137617179457">எழுத்துப் பிழை சரிபார்ப்பானை ஆதரிக்கும் மொழிகள்</translation> +<translation id="145432137617179457">எழுத்துப்பிழை சரிபார்ப்பு செயல்படும் மொழிகள்</translation> <translation id="1459693405370120464">வானிலை</translation> <translation id="1459967076783105826">நீட்டிப்புகளால் சேர்க்கப்பட்ட தேடல் இன்ஜின்கள்</translation> <translation id="146000042969587795">இந்த சட்டகம் சில பாதுகாப்பாற்ற உள்ளடக்கத்தைக் கொண்டுள்ளதால் தடுக்கப்பட்டது.</translation> @@ -872,6 +872,7 @@ <translation id="1976307821760494606">ADB பிழைதிருத்தத்தை <ph name="DOMAIN" /> முடக்கியுள்ளது. இதனால் <ph name="DEVICE_TYPE" /> சாதனம் 24 மணிநேரத்தில் மீட்டமைக்கப்படும். உங்களுக்குத் தேவையான கோப்புகளைக் காப்புப் பிரதி எடுத்துக்கொள்ளவும்.</translation> <translation id="1977965994116744507"><ph name="DEVICE_TYPE" /> சாதனத்தைத் திறக்க, அதற்கு அருகில் உங்கள் மொபைலை எடுத்து வரவும்.</translation> <translation id="1978006917103730774">இனிவரும் மென்பொருள் மற்றும் பாதுகாப்பு தொடர்பான புதுப்பிப்புகள் தானாகவே நிறுவப்படும்.</translation> +<translation id="1978057560491495741">முகவரியை அகற்றுங்கள்</translation> <translation id="1979095679518582070">இந்த அம்சத்தை முடக்குவதால் சிஸ்டம் புதுப்பிப்புகள், பாதுகாப்பு போன்ற அத்தியாவசிய சேவைகளைப் பெறத் தேவைப்படும் தகவலை அனுப்புவதற்கான இந்தச் சாதனத் திறனில் பாதிப்பு ஏற்படாது.</translation> <translation id="1979280758666859181"><ph name="PRODUCT_NAME" /> இன் பழைய பதிப்பிற்கு சேனலை மாற்றுகிறீர்கள். உங்கள் சாதனத்தில் நிறுவப்பட்ட பதிப்புடன் சேனல் பதிப்பு பொருந்தும்போது சேனலின் மாற்றமும் பயன்படுத்தப்படும்.</translation> <translation id="197989455406964291">என்க்ரிப்ஷன் வகையை KDC ஆதரிக்கவில்லை</translation> @@ -1074,6 +1075,7 @@ <translation id="2224444042887712269">இந்த அமைப்பானது <ph name="OWNER_EMAIL" /> க்கு உரியதாகும்.</translation> <translation id="2224551243087462610">கோப்புறை பெயரை மாற்று</translation> <translation id="2225864335125757863">உங்கள் கணக்கைப் பாதுகாப்பாக வைத்துக்கொள்ள இந்தக் கடவுச்சொற்களை உடனடியாக மாற்றவும்:</translation> +<translation id="2226204716217107988">வேறொரு சுயவிவரத்திற்கு மாறவா?</translation> <translation id="2226449515541314767">MIDI சாதனங்களை முழுமையாக கட்டுப்படுத்துவதிலிருந்து இந்தத் தளம் தடுக்கப்பட்டுள்ளது.</translation> <translation id="2226907662744526012">பின்னை உள்ளிட்டதும் தானாகத் திற</translation> <translation id="222704500187107962">நடப்பு மறைநிலை அமர்வைவிட்டு நீங்கள் வெளியேறியவுடன் இந்த விதிவிலக்கு தானாக அகற்றப்படும்</translation> @@ -1143,6 +1145,7 @@ <translation id="2307462900900812319">நெட்வொர்க்கை உள்ளமை</translation> <translation id="230927227160767054">இந்தப் பக்கம் சேவை ஹேண்ட்லரை நிறுவ உள்ளது.</translation> <translation id="2309620859903500144">இந்தத் தளம் உங்கள் நகர்வு அல்லது ஒளி சென்சார்களை அணுகுவதிலிருந்து தடைசெய்யப்பட்டுள்ளது.</translation> +<translation id="2312219318583366810">பக்கத்தின் URL</translation> <translation id="2314165183524574721">தற்போதைய தெரிவுநிலை அமைப்பு: மறைக்கப்பட்டுள்ளது</translation> <translation id="2314774579020744484">பக்கங்களை மொழிபெயர்க்கும்போது பயன்படுத்தப்படும் மொழி</translation> <translation id="2315414688463285945">Linux கோப்புகளை உள்ளமைப்பதில் பிழை. மீண்டும் முயலவும்.</translation> @@ -2346,6 +2349,7 @@ <translation id="3713047097299026954">இந்தப் பாதுகாப்பு விசையில் உள்நுழைவுத் தகவல்கள் எதுவும் சேமிக்கப்படவில்லை</translation> <translation id="3714195043138862580">சேவையகம் இந்த டெமோ சாதனத்திற்கான அணுகலை அகற்றியுள்ளது.</translation> <translation id="3714633008798122362">வலை காலெண்டர்</translation> +<translation id="3715954932774762075">பல மொழிகளில் கிடைக்கும் ஆப்ஸும் இணையதளங்களும் இந்தப் பட்டியலில் முதலில் உள்ள ஆதரிக்கும் மொழியைப் பயன்படுத்தும். இந்த விருப்பத்தேர்வுகள் உங்கள் உலாவி அமைப்புகளுடன் ஒத்திசைக்கப்படும். <ph name="BEGIN_LINK_LEARN_MORE" />மேலும் அறிக<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">முகப்புப் பக்கம்</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">நீங்களும் Googleளும்</translation> @@ -2506,6 +2510,7 @@ <translation id="3882165008614329320">கேமரா அல்லது கோப்பிலிருக்கும் வீடியோ</translation> <translation id="3886446263141354045">இந்தத் தளத்தை அணுகுவதற்கான உங்கள் கோரிக்கை <ph name="NAME" />க்கு அனுப்பப்பட்டது</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> மூலம் குறிப்புகளை எடுத்தல்</translation> +<translation id="3890064827463908288">Wi-Fi ஒத்திசைவைப் பயன்படுத்த Chrome ஒத்திசைவை இயக்க வேண்டும்</translation> <translation id="3892414795099177503">OpenVPN / L2TPஐச் சேர்...</translation> <translation id="3893536212201235195">உங்கள் அணுகல்தன்மை அமைப்புகளைப் படித்தல் மற்றும் மாற்றுதல்</translation> <translation id="3893630138897523026">ChromeVox (பேச்சுவடிவ கருத்து)</translation> @@ -3378,7 +3383,7 @@ <translation id="4939805055470675027"><ph name="CARRIER_NAME" /> உடன் இணைக்க முடியவில்லை</translation> <translation id="4940364377601827259">சேமிப்பதற்கு <ph name="PRINTER_COUNT" /> பிரிண்டர்கள் உள்ளன.</translation> <translation id="4940845626435830013">டிஸ்க் அளவை ரிசர்வ் செய்</translation> -<translation id="4941074198479265146">வழக்கமாக இசையை உருவாக்குதல், திருத்துதல் ஆகிய அம்சங்களுக்காக MIDI சாதனங்களுடன் தளங்கள் இணையும்</translation> +<translation id="4941074198479265146">வழக்கமாக இசையை உருவாக்குதல், எடிட்டிங் ஆகிய அம்சங்களுக்காக MIDI சாதனங்களுடன் தளங்கள் இணையும்</translation> <translation id="4941246025622441835">நிறுவன மேலாண்மைக்காக சாதனத்தைச் சேர்க்கும்போது இந்தச் சாதனக் கோரிக்கையைப் பயன்படுத்தவும்:</translation> <translation id="4941627891654116707">எழுத்துரு அளவு</translation> <translation id="494286511941020793">பதிலி உள்ளமைவு உதவி</translation> @@ -3779,6 +3784,7 @@ <translation id="5449588825071916739">எல்லா தாவல்களையும் புக்மார்க்கிடுக</translation> <translation id="5449716055534515760">Close Win&dow</translation> <translation id="5452974209916053028">நடப்பு மறைநிலை அமர்வு: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">வசனக் குமிழ் <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% பக்கவாட்டிலும் <ph name="POSITION_ON_SCREEN_FROM_TOP" />% கீழும் நகர்த்தப்பட்டது</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> உடன்</translation> <translation id="5457113250005438886">தவறானது</translation> <translation id="5457459357461771897">உங்கள் கம்ப்யூட்டரிலிருந்து படங்கள், இசை மற்றும் பிற மீடியாவைப் படிக்கலாம், நீக்கலாம்</translation> @@ -3922,6 +3928,7 @@ <translation id="5602765853043467355">இந்தச் சாதனத்திலிருந்து புக்மார்க்குகள், வரலாறு, கடவுச்சொற்கள் மற்றும் பலவற்றை அழிக்கவும்</translation> <translation id="5605623530403479164">பிற தேடல் இன்ஜின்கள்</translation> <translation id="5605758115928394442">அது நீங்கள்தான் என்பதை உறுதிப்படுத்த உங்கள் ஃபோனுக்கு ஓர் அறிவிப்பு அனுப்பப்பட்டுள்ளது.</translation> +<translation id="560834977503641186">Wi-Fi ஒத்திசைவு, மேலும் அறிக</translation> <translation id="5608580678041221894">செதுக்கும் பகுதியைச் சரிசெய்ய அல்லது நகர்த்த, பின்வரும் விசைகளைத் தட்டவும்</translation> <translation id="5609231933459083978">ஆப்ஸ் தவறானது என்பதுபோல் தெரிகிறது.</translation> <translation id="5610038042047936818">கேமரா பயன்முறைக்கு மாறு</translation> @@ -4113,6 +4120,7 @@ <translation id="5841270259333717135">ஈத்தர்நெட்டை உள்ளமை</translation> <translation id="5842497610951477805">புளூடூத்தை இயக்கு</translation> <translation id="5843706793424741864">ஃபாரன்ஹீட்</translation> +<translation id="584451707753263735">உடனடி வசனம் காட்டப்படுகிறது, ஃபோகஸை மாற்ற F6 விசையை அழுத்தவும்</translation> <translation id="5844574845205796324">பயன்படுத்திப் பார்க்க புதிய உள்ளடக்கத்தைப் பரிந்துரை</translation> <translation id="5846200638699387931">ரிலேஷன் சின்டாக்ஸ் பிழை: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">புதுப்பிப்புகளையும் ஆப்ஸையும் நிறுவுதல். தொடர்வதன் மூலம் இந்தச் சாதனமானது Google, உங்கள் தொலைத்தொடர்பு நிறுவனம் மற்றும் இந்தச் சாதனத்தின் உற்பத்தியாளர் ஆகியோரிடமிருந்து வரும் புதுப்பிப்புகளையும் ஆப்ஸையும் மொபைல் டேட்டா வழியே தானாகவே பதிவிறக்கி, நிறுவக்கூடும் என்பதை ஏற்கிறீர்கள். இதில் சில ஆப்ஸ், ஆப்ஸில் வாங்குதல்களை வழங்கக்கூடும்.</translation> @@ -5369,6 +5377,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" />, இப்போது முழுத் திரையில் உள்ளது.</translation> <translation id="7340650977506865820">தளமானது உங்கள் திரையைப் பகிர்கிறது</translation> <translation id="7341834142292923918">இந்தத் தளத்திற்கு அணுகலைக் கோருகிறது</translation> +<translation id="7343372807593926528">கருத்தை அனுப்புவதற்கு முன், சிக்கல் குறித்து விளக்கவும்.</translation> <translation id="7345706641791090287">கடவுச்சொல்லை உறுதிப்படுத்தவும்</translation> <translation id="7346909386216857016">சரி, புரிந்தது</translation> <translation id="7347452120014970266">இது <ph name="ORIGIN_NAME" /> மற்றும் அதனால் நிறுவப்பட்ட ஆப்ஸ் அனைத்திலும் சேமிக்கப்பட்ட அனைத்துத் தரவையும் குக்கீகளையும் அழிக்கும்</translation> @@ -5785,6 +5794,7 @@ <translation id="7819857487979277519">PSK (WPA அல்லது RSN)</translation> <translation id="7819992334107904369">Chrome ஒத்திசைவு</translation> <translation id="782057141565633384">வீடியோ முகவரியை ந&கலெடு</translation> +<translation id="7822187537422052256">இந்த முகவரியை நிச்சயமாக அகற்ற விரும்புகிறீர்களா?</translation> <translation id="7824864914877854148">காப்புப் பிரதி பிழையின் காரணமாக முடிக்க முடியவில்லை</translation> <translation id="7825666486843191125">உங்கள் சாதனத்தின் திரை அன்லாக் செய்யப்பட்டிருக்கும்போது உங்களுக்கு அருகிலுள்ள அனைத்துத் தொடர்புகளும்</translation> <translation id="782590969421016895">தற்போதைய பக்கங்களைப் பயன்படுத்து</translation> @@ -6310,6 +6320,7 @@ <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' உடன் பொருந்தும் தேடல் முடிவுகள்</translation> <translation id="8419368276599091549">உங்கள் <ph name="DEVICE_TYPE" />க்கு வரவேற்கிறோம்!</translation> <translation id="8420308167132684745">அகராதி உள்ளீடுகளைத் திருத்துக</translation> +<translation id="8421361468937925547">உடனடி வசனம் (ஆங்கிலத்தில் மட்டும்)</translation> <translation id="8422787418163030046">பிரிண்டரில் டிரே இல்லை</translation> <translation id="8425213833346101688">மாற்று</translation> <translation id="8425492902634685834">பணிப்பட்டிக்குப் பொருத்து</translation> @@ -6338,6 +6349,7 @@ <translation id="8449036207308062757">சேமிப்பிடத்தை நிர்வகி</translation> <translation id="8452135315243592079">சிம் கார்டு இல்லை</translation> <translation id="8455026683977728932">ADB விளக்கப்படத்தை இயக்க முடியவில்லை</translation> +<translation id="8456398879271637452">உடனடி வசனம் காட்டப்படுகிறது, ஃபோகஸை மாற்ற Ctrl + Back/Ctrl + Forward ஆகிய விசைகளைச் சேர்த்து அழுத்தவும்</translation> <translation id="845702320058262034">இணைக்க முடியவில்லை மொபைலின் புளூடூத் ஆன் ஆகியிருப்பதை உறுதிப்படுத்தவும்</translation> <translation id="8457451314607652708">புத்தகக்குறிகளை இறக்குமதி செய்</translation> <translation id="8458627787104127436">அனைத்தையும் (<ph name="URL_COUNT" />) புதிய சாளரத்தில் திற</translation> @@ -6848,6 +6860,7 @@ <translation id="9027459031423301635">இணைப்பைப் புதிய &தாவலில் திற</translation> <translation id="9030515284705930323">உங்கள் கணக்கிற்கு Google Play ஸ்டோர் அணுகலை உங்கள் நிறுவனம் இயக்கவில்லை. மேலும் தகவலுக்கு, உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> ஆதரிக்கப்படவில்லை</translation> <translation id="9031549947500880805">Google Driveவிற்குக் காப்புப் பிரதி எடுக்கவும். எப்போது வேண்டுமானாலும் உங்கள் தரவை எளிதாக மீட்டெடுக்கலாம் அல்லது சாதனத்தை மாற்றலாம். ஆப்ஸ் தரவும் உங்கள் காப்புப் பிரதியில் அடங்கும்.</translation> <translation id="9033765790910064284">பரவாயில்லை, தொடரவும்</translation> <translation id="9033857511263905942">&ஒட்டு</translation> @@ -6856,6 +6869,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{இன்னும் ஒருமுறை முயலலாம்.}other{இன்னும் # முறை முயலலாம்.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" />க்கான கடவுச்சொல்லைப் புதுப்பிக்கவா?</translation> +<translation id="9041049756004505730">உடனடி வசனம் காட்டப்படுகிறது, ஃபோகஸை மாற்ற ⌘ + Option + மேல்நோக்கிய அம்புக்குறி/கீழ்நோக்கிய அம்புக்குறி ஆகிய விசைகளைச் சேர்த்து அழுத்தவும்</translation> <translation id="9041692268811217999">உங்கள் கம்ப்யூட்டரில் இருக்கும் அகக் கோப்புகளுக்கான அணுகலை நிர்வாகி முடக்கியுள்ளார்</translation> <translation id="904224458472510106">இந்தச் செயலைத் திரும்பப்பெற முடியாது</translation> <translation id="9042893549633094279">தனியுரிமை மற்றும் பாதுகாப்பு</translation> @@ -6894,6 +6908,7 @@ <translation id="9088446193279799727">Linuxஸை உள்ளமைக்க இயலவில்லை. இணையத்துடன் இணைத்து மீண்டும் முயலவும்.</translation> <translation id="9088917181875854783">"<ph name="DEVICE_NAME" />" இல் காண்பிக்கப்படும் இந்த கடவுவிசையை உறுதிப்படுத்துக:</translation> <translation id="9089416786594320554">உள்ளீட்டு முறைகள்</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> ஏற்கெனவே <ph name="NEW_USER" /> கணக்கின் மூலம் உள்நுழைந்துள்ளார்</translation> <translation id="9093429538970210897">மேம்படுத்தலை நிறைவுசெய்ய முடியாமல் போகும்பட்சத்தில் கோப்புகளைக் காப்புப் பிரதி எடுத்துக்கொள்ளவும். மேம்படுத்தலைத் தொடங்கினால் Linux (பீட்டா) ஷட்-டவுன் செய்யப்படும். தொடர்வதற்கு முன்பு திறந்துள்ள கோப்புகளைச் சேமிக்கவும்.</translation> <translation id="9094033019050270033">கடவுச்சொல்லைப் புதுப்பி</translation> <translation id="9094038138851891550">பயனர்பெயர் செல்லாதது</translation> @@ -7067,5 +7082,6 @@ <translation id="994289308992179865">&சுழற்சி</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">பாதுகாப்பான இணைப்பை உருவாக்குகிறது...</translation> +<translation id="99731366405731005">Wi-Fi ஒத்திசைவைப் பயன்படுத்த <ph name="LINK1_BEGIN" />Chrome ஒத்திசைவை<ph name="LINK1_END" /> இயக்கவும். <ph name="LINK2_BEGIN" />மேலும் அறிக<ph name="LINK2_END" /></translation> <translation id="998747458861718449">க&ண்காணி</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index ed93963..4fc678a1 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">మీ బుక్మార్క్లు, చరిత్ర, ఇతర సెట్టింగ్లు మీ Google ఖాతాకు సింక్ చేయబడతాయి.</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">హోమ్ నెట్వర్క్, రోమింగ్ కాదు</translation> +<translation id="1315056510003830387">ఫ్లాష్ను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="1315144594965013365">రెండు పరికరాలూ అన్లాక్ అయి, దగ్గరగా ఉన్నాయని, వాటిలో బ్లూటూత్ ఆన్ చేసి ఉందని నిర్ధారించుకోండి. మీరు Chromebookతో షేర్ చేస్తుంటే, దానిలో సమీప షేరింగ్ ఫీచర్ ఆన్లో ఉందని నిర్ధారించుకోండి (సమయాన్ని ఎంచుకోవడం ద్వారా స్టేటస్ ప్రాంతాన్ని తెరిచి, ఆపై సమీప షేరింగ్ను ఎంచుకోండి).</translation> <translation id="1316136264406804862">శోధిస్తోంది...</translation> <translation id="1316495628809031177">సమకాలీకరణ పాజ్ చేయబడింది</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">ఫిజికల్ SIMని యాక్టివేట్ చేయండి</translation> <translation id="1387519831959169718">మీ బ్రౌజింగ్ను వేరు చేసి ఉంచడానికి, మీరు <ph name="NEW_USER" /> కోసం ఒక కొత్త ప్రొఫైల్ను క్రియేట్ చేయవచ్చు</translation> <translation id="138784436342154190">డిఫాల్ట్ ప్రారంభ పేజీని పునరుద్ధరించాలా?</translation> +<translation id="1388253969141979417">మీ మైక్రోఫోన్ ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="1388728792929436380">అప్డేట్లు పూర్తయినప్పుడు <ph name="DEVICE_TYPE" /> రీస్టార్ట్ అవుతుంది.</translation> <translation id="1389342855416376185">రక్షించబడిన కంటెంట్ను బ్లాక్ చేయండి</translation> <translation id="1390548061267426325">సాధారణ ట్యాబ్ లాగా తెరువు</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">ప్రాప్యత చేసే ముందు అడగాలి</translation> <translation id="1434696352799406980">దీని వలన మీ ప్రారంభ పేజీ, కొత్త ట్యాబ్ పేజీ, శోధన ఇంజిన్, పిన్ చేసిన ట్యాబ్లు రీసెట్ చేయబడతాయి. ఇది అన్ని ఎక్స్టెన్షన్లను కూడా నిలిపివేస్తుంది. కుక్కీల వంటి తాత్కాలిక డేటాను తీసివేస్తుంది. మీ బుక్మార్క్లు, చరిత్ర, సేవ్ చేసిన పాస్వర్డ్లు తీసివేయబడవు.</translation> <translation id="1434886155212424586">హోమ్పేజీ అనేది కొత్త ట్యాబ్ పేజీ</translation> +<translation id="1435515966666225466">మీ కంప్యూటర్ను యాక్సెస్ చేసేందుకు ప్లగ్ఇన్ను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="1436390408194692385"><ph name="TICKET_TIME_LEFT" /> పాటు చెల్లుబాటు అవుతుంది</translation> <translation id="1436671784520050284">సెటప్ని కొనసాగించు</translation> <translation id="1436784010935106834">తీసివేయబడింది</translation> @@ -473,6 +476,7 @@ <translation id="1530838837447122178">మౌస్ మరియు టచ్ప్యాడ్ పరికర సెట్టింగ్లను తెరవండి</translation> <translation id="1531004739673299060">యాప్ విండో</translation> <translation id="1531275250079031713">'కొత్త Wi-Fiని జోడించు' డైలాగ్ను చూపు</translation> +<translation id="1535228823998016251">బిగ్గరగా</translation> <translation id="1536754031901697553">డిస్కనెక్ట్ చేస్తోంది...</translation> <translation id="1537254971476575106">పూర్తి స్క్రీన్ మాగ్నిఫైయర్</translation> <translation id="15373452373711364">పెద్ద మౌస్ కర్సర్</translation> @@ -556,6 +560,7 @@ <translation id="1627408615528139100">ఇప్పటికే డౌన్లోడ్ చేయబడింది</translation> <translation id="1628948239858170093">తెరవడానికి ముందు ఫైల్ను స్కాన్ చేయాలా?</translation> <translation id="1629314197035607094">పాస్వర్డ్ గడువు ముగిసింది</translation> +<translation id="163072119192489970">డేటాను పంపడాన్ని, అలాగే అందుకోవడాన్ని పూర్తి చేయడాని అనుమతించబడింది</translation> <translation id="1630768113285622200">రీస్టార్ట్ చేసి, కొనసాగించు</translation> <translation id="1632082166874334883">మీ Google ఖాతాలో పాస్వర్డ్ స్టోర్ చేయబడింది</translation> <translation id="1632803087685957583">మీ కీబోర్డ్ పునరావృత రేటు, పద సూచన మొదలైనవి సర్దుబాటు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది</translation> @@ -753,6 +758,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> నిలిపివేయబడింది</translation> <translation id="184273675144259287">మీ Linux యాప్లు, ఫైల్లను మునుపు సేవ్ చేసిన బ్యాకప్తో భర్తీ చేయండి</translation> <translation id="1842766183094193446">మీరు ఖచ్చితంగా డెమో మోడ్ని ప్రారంభించాలనుకుంటున్నారా?</translation> +<translation id="1845727111305721124">శబ్దాన్ని ప్లే చేయడానికి అనుమతించడింది</translation> <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />ను అమలు చేయడానికి కంట్రోల్ నొక్కి, క్లిక్ చేయండి</translation> <translation id="1849186935225320012">ఈ పేజీ MIDI పరికరాలకు పూర్తి నియంత్రణను కలిగి ఉంది.</translation> <translation id="1850508293116537636">&సవ్యదిశలో తిప్పు</translation> @@ -777,6 +783,7 @@ <translation id="187145082678092583">తక్కువ యాప్లు</translation> <translation id="1871534214638631766">కంటెంట్పై కుడి క్లిక్ చేసినప్పుడు లేదా ఎక్కువసేపు నొక్కినప్పుడు సంబంధిత సమాచారాన్ని చూపు</translation> <translation id="1871615898038944731">మీ <ph name="DEVICE_TYPE" /> తాజాగా ఉంది</translation> +<translation id="1874248162548993294">ఏవైనా యాడ్లను చూపించడానికి అనుమతించబడింది</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{ట్యాబ్ను మరొక విండోకు తరలించండి}other{ట్యాబ్లను మరొక విండోకు తరలించండి}}</translation> <translation id="1875386316419689002">HID పరికరానికి ఈ ట్యాబ్ కనెక్ట్ చేయబడింది.</translation> <translation id="1875387611427697908">దీనిని <ph name="CHROME_WEB_STORE" /> నుండి మాత్రమే జోడించవచ్చు</translation> @@ -832,6 +839,7 @@ <translation id="1931152874660185993">భాగాలు ఇన్స్టాల్ చేయబడలేదు.</translation> <translation id="1932098463447129402">ముందు కాదు</translation> <translation id="1933809209549026293">దయచేసి మౌస్ లేదా కీబోర్డ్ను కనెక్ట్ చేయండి. మీరు బ్లూటూత్ పరికరాన్ని ఉపయోగిస్తుంటే, అది జత చేయడానికి సిద్ధంగా ఉందని నిర్ధారించుకోండి.</translation> +<translation id="1935303383381416800">మీ లొకేషన్ను చూడటానికి అనుమతించబడింది</translation> <translation id="1936931585862840749">ఎన్ని కాపీలను ప్రింట్ చేయాలో సూచించడానికి సంఖ్యను (1 నుండి <ph name="MAX_COPIES" />) ఉపయోగించండి.</translation> <translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> అయిన ఈ పరికరంతో <ph name="ARCHITECTURE_CONTAINER" /> రకమైన కంటెయినర్ ఆర్కిటెక్చర్ను దిగుమతి చేయడం సాధ్యపడదు. మీరు ఈ కంటెయినర్ను వేరే పరికరంలోకి పునరుద్ధరించడం ప్రయత్నించవచ్చు లేదా ఈ కంటెయినర్ చిత్రంలోని ఫైల్లను "ఫైల్స్ యాప్"లో తెరవడం ద్వారా యాక్సెస్ చేయవచ్చు.</translation> <translation id="1938351510777341717">బాహ్య ఆదేశం</translation> @@ -949,6 +957,7 @@ <translation id="2090165459409185032">మీ ఖాతా సమాచారాన్ని పునరుద్ధరించడానికి, దీనికి వెళ్లండి: google.com/accounts/recovery</translation> <translation id="2090876986345970080">సిస్టమ్ భద్రతా సెట్టింగ్</translation> <translation id="2091887806945687916">ధ్వని</translation> +<translation id="209539936453343974">తల్లిదండ్రుల కంట్రోల్స్ను సెట్ అప్ చేయడానికి, చిన్నారి ఖచ్చితంగా తల్లి/తండ్రి మేనేజ్ చేసే Google ఖాతాను కలిగి ఉండాలి. తల్లిదండ్రులు స్క్రీన్ పరిమితిని సెటప్ చేయడానికి, వెబ్సైట్లను ఆమోదించడం లేదా బ్లాక్ చేయడానికి, అలాగే Family Link యాప్తో మరింత చేయడానికి <ph name="DEVICE_TYPE_PLURAL" /> అనుమతిస్తాయి. Google Classroom వంటి సైట్లలో చిన్నారి పాఠశాల విద్యను అభ్యసించాల్సిన అవసరం ఉంటే, తర్వాత స్కూల్ ఖాతాను జోడించవచ్చు.</translation> <translation id="2096715839409389970">మూడవ పక్షం కుక్కీలను తొలగించు</translation> <translation id="2097372108957554726">మీరు కొత్త పరికరాలను నమోదు చేయడానికి Chromeకు సైన్ ఇన్ చేయాలి</translation> <translation id="2098805196501063469">మిగిలిన పాస్వర్డ్లను తనిఖీ చేయండి</translation> @@ -1099,6 +1108,7 @@ <translation id="2261323523305321874">మీ నిర్వాహకులు కొన్ని పాత ప్రొఫైల్లను నిలిపివేసేలా వ్యవస్థాగత మార్పు చేశారు.</translation> <translation id="2262332168014443534">ఇప్పుడు లైట్ మోడ్లో HTTPSతో పాటు అన్ని పేజీలలో మరింత వేగంగా బ్రౌజ్ చేయవచ్చు.</translation> <translation id="2262477216570151239">పునరావృతానికి ముందు జాప్యం</translation> +<translation id="2262888617381992508">సురక్షితమైన కంటెంట్ను ప్లే చేయడానికి అనుమతించబడలేదు</translation> <translation id="2263189956353037928">సైన్ అవుట్ చేసి, తిరిగి సైన్ ఇన్ చేయి</translation> <translation id="2263371730707937087">స్క్రీన్ రిఫ్రెష్ రేటు</translation> <translation id="22665427234727190">బ్లూటూత్ పరికరాలను సైట్ యాక్సెస్ చేయాలన్నప్పుడు అనుమతి అడగాలి (సిఫార్సు చేయడమైనది)</translation> @@ -1367,6 +1377,7 @@ <translation id="2571655996835834626">కుక్కీలు, JavaScript, ప్లగ్ఇన్లు, భౌగోళిక స్థానం, మైక్రోఫోన్, కెమెరా మొదలైన ఫీచర్లకు వెబ్సైట్ల యాక్సెస్ను నియంత్రించే మీ సెట్టింగ్లను మార్చండి.</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" />కి చదవడానికి మాత్రమే యాక్సెస్ మంజూరు చేయబడింది.</translation> <translation id="2575247648642144396">ప్రస్తుత పేజీలో ఎక్స్టెన్షన్ను అమలు చేయగలిగినప్పుడు ఈ చిహ్నం కనిపిస్తుంది. చిహ్నంపై క్లిక్ చేయడం ద్వారా లేదా <ph name="EXTENSION_SHORTCUT" />ను నొక్కడం ద్వారా ఈ ఎక్స్టెన్షన్ను ఉపయోగించండి.</translation> +<translation id="2575441894380764255">అనుచితమైన లేదా తప్పుదారి పట్టించే యాడ్లను చూపించడానికి అనుమతించబడలేదు</translation> <translation id="257779572837908839">సమావేశాల కోసం Chromebox వలె సెటప్ చేయండి</translation> <translation id="2579232805407578790">సర్వర్తో కనెక్ట్ చేయడం సాధ్యపడలేదు. దయచేసి మీ నెట్వర్క్ కనెక్షన్ను చెక్ చేసి, మళ్లీ ట్రై చేయండి. సమస్య కొనసాగినట్లయితే, మీ Chromebookను రీస్టార్ట్ చేయండి. ఎర్రర్ కోడ్: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">బహుళ ఫైల్లను డౌన్లోడ్ చేయడానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించు</translation> @@ -1633,6 +1644,7 @@ <translation id="2880660355386638022">విండో స్థలం</translation> <translation id="2881076733170862447">మీరు ఎక్స్టెన్షన్ క్లిక్ చేసినప్పుడు</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> పునఃప్రారంభించబడుతుంది మరియు కొద్దిసేపట్లో రీసెట్ చేయబడుతుంది</translation> +<translation id="288387288628762616">ఫ్లాష్ను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="2885378588091291677">విధి సంచాలకులు</translation> <translation id="2885729872133513017">సర్వర్ ప్రతిస్పందనను డీకోడ్ చేస్తుండగా సమస్య ఏర్పడింది.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1667,6 +1679,7 @@ <translation id="2923234477033317484">ఈ ఖాతాను తీసివేయి</translation> <translation id="2926085873880284723">డిఫాల్ట్ షార్ట్కట్లను పునరుద్ధరించండి</translation> <translation id="2927017729816812676">కాష్ నిల్వ</translation> +<translation id="2928795416630981206">మీ కెమెరా పొజిషన్ను ట్రాక్ చేయడానికి అనుమతించబడింది</translation> <translation id="2931157624143513983">ప్రింట్ చేయగల సైజ్కు అమర్చు</translation> <translation id="2932085390869194046">పాస్వర్డ్ను సూచించు...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (పిల్లల ఖాతా)</translation> @@ -1674,6 +1687,7 @@ <translation id="2932883381142163287">దుర్వినియోగాన్ని రిపోర్ట్ చేయి</translation> <translation id="2933632078076743449">చివరి అప్డేట్</translation> <translation id="2934999512438267372">MIDI డివైజ్ల పూర్తి కంట్రోల్ అనుమతించబడింది</translation> +<translation id="2935654492420446828">పాఠశాల ఖాతాను తర్వాత జోడించండి</translation> <translation id="2936851848721175671">బ్యాకప్ & పునరుద్ధరణ</translation> <translation id="2938225289965773019"><ph name="PROTOCOL" /> లింక్లను తెరవండి</translation> <translation id="2938845886082362843">మీ 'సెక్యూరిటీ కీ'లో నిల్వ చేసిన సైన్-ఇన్ డేటాను చూసి, తొలగించండి</translation> @@ -1777,6 +1791,7 @@ <translation id="3060379269883947824">వినడానికి-ఎంచుకోండిని ప్రారంభించు</translation> <translation id="3060952009917586498">పరికర భాషను మార్చండి. ప్రస్తుత భాష <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">ట్యాబ్ మూసివేత ప్రతిస్పందన.</translation> +<translation id="306535478112428611">మీ పరికరంలోని ఫైల్లు, అలాగే ఫోల్డర్లను ఎడిట్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="3065522099314259755">కీబోర్డ్ పునరావృత ప్రతిస్పందన సమయం</translation> <translation id="3067198179881736288">యాప్ను ఇన్స్టాల్ చేయాలా?</translation> <translation id="3067198360141518313">ఈ ప్లగ్ఇన్ను అమలు చేయి</translation> @@ -1912,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - నెట్వర్క్ ఎర్రర్</translation> <translation id="3248902735035392926">భద్రత చాలా ముఖ్యమైనది. <ph name="BEGIN_LINK" />ఇప్పుడే మీ ఎక్స్టెన్షన్లను తనిఖీ చేయడానికి<ph name="END_LINK" /> సమయం తీసుకోండి</translation> <translation id="3251759466064201842"><సర్టిఫికెట్లో భాగం కాదు></translation> +<translation id="325238099842880997">చిన్నారులు ఆడుకోవడానికి, అన్వేషించడానికి, అలాగే ఇంట్లో పాఠశాల విద్యను అభ్యసించడానికి సహాయపడేలా డిజిటల్ గ్రౌండ్ నియమాలను సెట్ చేయండి</translation> <translation id="3253225298092156258">అందుబాటులో లేదు</translation> <translation id="3253448572569133955">తెలియని ఖాతా</translation> <translation id="3254084468305910013">{COUNT,plural, =0{భద్రత సమస్యలు కనుగొనబడలేదు}=1{{COUNT} భద్రత సమస్య కనుగొనబడింది}other{{COUNT} భద్రత సమస్యలు కనుగొనబడ్డాయి}}</translation> @@ -2039,6 +2055,7 @@ <translation id="3404249063913988450">స్క్రీన్ సేవర్ను ఎనేబుల్ చేయి</translation> <translation id="3405664148539009465">ఫాంట్లను అనుకూలంగా మార్చు</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">వర్చువల్ రియాలిటీ పరికరాలను, అలాగే డేటాను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="3406396172897554194">భాష లేదా ఇన్పుట్ పేరు ఆధారంగా సెర్చ్ చేయండి</translation> <translation id="3406605057700382950"> &బుక్మార్క్ల బార్ను చూపు</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{ఈ ఎక్స్టెన్షన్ ప్రమాదకరం కావచ్చు}other{ఈ ఎక్స్టెన్షన్లు ప్రమాదకరం కావచ్చు}}</translation> @@ -2203,6 +2220,7 @@ <translation id="3586806079541226322">ఈ ఫైల్ను తెరవడం కుదరదు</translation> <translation id="3586931643579894722">వివరాలను దాచిపెట్టు</translation> <translation id="3587482841069643663">మొత్తం</translation> +<translation id="3588790464166520201">పేమెంట్ హ్యాండ్లర్లను ఇన్స్టాల్ చేయడానికి అనుమతించబడింది</translation> <translation id="3589766037099229847">అసురక్షిత కంటెంట్ బ్లాక్ చేయబడింది</translation> <translation id="3590194807845837023">ప్రొఫైల్ను అన్లాక్ చేసి, మళ్లీ ప్రారంభించు</translation> <translation id="3590295622232282437">నిర్వహిత సెషన్లోకి ప్రవేశిస్తోంది.</translation> @@ -2428,6 +2446,7 @@ <translation id="3822559385185038546">ఈ ప్రాక్సీని మీ నిర్వాహకులు అమలు చేసారు</translation> <translation id="3823310065043511710">Linux కోసం కనీసం <ph name="INSTALL_SIZE" /> స్పేస్ కావాలి.</translation> <translation id="3824621460022590830">పరికర ఎన్రోల్మెంట్ టోకెన్ చెల్లదు. మీ పరికర ఓనర్ను లేదా అడ్మినిస్ట్రేటర్ను దయచేసి సంప్రదించండి. ఎర్రర్ కోడ్: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">మోషన్ సెన్సార్లను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="3826440694796503677">మరిన్ని Google ఖాతాలను చేర్చడాన్ని మీ నిర్వాహకుడు నిలిపివేశారు</translation> <translation id="3827306204503227641">శాండ్బాక్స్ చేయని ప్లగిన్లను అనుమతించడం కొనసాగించు</translation> <translation id="3827774300009121996">&పూర్తి స్క్రీన్</translation> @@ -2480,6 +2499,8 @@ <translation id="3873423927483480833">పిన్లను చూపుతుంది</translation> <translation id="3873915545594852654">ARC++కి సంబంధించి ఒక సమస్య సంభవించింది.</translation> <translation id="3874164307099183178">Google Assistantను ఆన్ చేయండి</translation> +<translation id="3877075909000773256"><ph name="USER_NAME" /> పరికరం కోసం సమీప షేర్ సెట్టింగ్లు, <ph name="USER_EMAIL" /> ఖాతా ద్వారా షేర్ చేయబడుతున్నాయి.</translation> +<translation id="387771067039689031">మీ కంప్యూటర్ను యాక్సెస్ చేసేందుకు ప్లగ్ఇన్ను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="3879748587602334249">డౌన్లోడ్ మేనేజర్</translation> <translation id="3881478300875776315">కొన్ని వరుసలను మాత్రమే చూపించు</translation> <translation id="3882165008614329320">కెమెరా లేదా ఫైల్లో ఇప్పటికే ఉన్న వీడియో</translation> @@ -2516,6 +2537,7 @@ <translation id="3919145445993746351">మీ అన్ని కంప్యూటర్లలో మీ ఎక్స్టెన్షన్లను పొందడానికి, సింక్ను ఆన్ చేయండి</translation> <translation id="3920504717067627103">సర్టిఫికెట్ విధానాలు</translation> <translation id="392089482157167418">ChromeVox (చదవబడే అభిప్రాయం)ను ప్రారంభించు</translation> +<translation id="3920909973552939961">పేమెంట్ హ్యాండ్లర్లను ఇన్స్టాల్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="3923184630988645767">డేటా వినియోగం</translation> <translation id="3923676227229836009">ఈ పేజీకి ఫైల్లను చూసే అనుమతి ఉంది</translation> <translation id="3924145049010392604">Meta</translation> @@ -2640,6 +2662,7 @@ <translation id="4058793769387728514">పత్రాన్ని ఇప్పుడు తనిఖీ చేయి</translation> <translation id="406070391919917862">నేపథ్య అనువర్తనాలు</translation> <translation id="4061374428807229313">షేర్ చేయడానికి, Files యాప్లోని ఫోల్డర్పై కుడి క్లిక్ చేయండి, తర్వాత "Parallels desktopతో షేర్ చేయి"ని ఎంచుకోండి.</translation> +<translation id="406213378265872299">అనుకూలీకరించబడిన ప్రవర్తనలు</translation> <translation id="4065876735068446555">మీరు ఉపయోగిస్తున్న నెట్వర్క్ (<ph name="NETWORK_ID" />)కి మీరు దాని లాగిన్ పేజీని సందర్శించడం అవసరం కావచ్చు.</translation> <translation id="4066207411788646768">మీ నెట్వర్క్లో అందుబాటులో గల ప్రింటర్లను చూడడానికి మీ కనెక్షన్ను తనిఖీ చేయండి</translation> <translation id="4068776064906523561">సేవ్ చేయబడిన వేలిముద్రలు</translation> @@ -2787,6 +2810,7 @@ <translation id="425573743389990240">వాట్లలో బ్యాటరీ తరుగుదల రేట్ (నెగెటివ్ విలువ ఉందంటే బ్యాటరీ ఛార్జ్ అవుతోందని అర్థం)</translation> <translation id="4256316378292851214">వీడియోను ఇలా సే&వ్ చేయి...</translation> <translation id="4258348331913189841">ఫైల్ సిస్టమ్లు</translation> +<translation id="4259388776256904261">దీనికి కొంత సమయం పట్టవచ్చు</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> ప్రమాదకరమైనది కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా? డౌన్లోడ్ల బార్ ప్రాంతంలోకి వెళ్లడం కోసం 'Shift+F6' నొక్కండి.</translation> <translation id="4263223596040212967">మీ కీబోర్డ్ లేఅవుట్ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation> <translation id="4263757076580287579">ప్రింటర్ నమోదు రద్దు చేయబడింది.</translation> @@ -2894,6 +2918,7 @@ <translation id="4400632832271803360">ఎగువ-అడ్డు వరుసలోని కీల ప్రవర్తనను మార్చడానికి లాంచర్ కీని నొక్కి ఉంచండి</translation> <translation id="4400963414856942668">మీరు ట్యాబ్ను బుక్మార్క్ చేయడానికి నక్షత్రం గుర్తును క్లిక్ చేయవచ్చు</translation> <translation id="4403775189117163360">వేరొక ఫోల్డర్ను ఎంచుకోండి</translation> +<translation id="440391631796167175">బలహీనమైన పాస్వర్డ్లు ఏవీ కనుగొనబడలేదు</translation> <translation id="4404136731284211429">మళ్లీ స్కాన్ చేయి</translation> <translation id="4404843640767531781"><ph name="APP_NAME" />ను మీ తల్లి/తండ్రి బ్లాక్ చేశారు. ఈ యాప్ను ఉపయోగించడానికి మీ తల్లి/తండ్రి అనుమతిని అడగండి.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2938,6 +2963,7 @@ <translation id="4450974146388585462">విశ్లేషించు</translation> <translation id="4451479197788154834">మీ పాస్వర్డ్ ఈ పరికరంలో అలాగే మీ Google ఖాతాలో సేవ్ చేయబడింది</translation> <translation id="4451757071857432900">అనుచితమైన లేదా తప్పుదారి పట్టించే ప్రకటనలను చూపించే సైట్లలో బ్లాక్ చేయబడింది (సిఫార్సు చేయబడింది)</translation> +<translation id="4453205916657964690">సబ్నెట్ మాస్క్</translation> <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" />లో వెతకండి లేదా URLని టైప్ చేయండి</translation> <translation id="4459169140545916303"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> రోజుల క్రితం యాక్టివ్గా ఉంది</translation> <translation id="4460014764210899310">విడివిడిగా ఉంచు</translation> @@ -2965,6 +2991,7 @@ <translation id="4481530544597605423">జతను తీసివేసిన పరికరాలు</translation> <translation id="4483049906298469269">డిఫాల్ట్-యేతర నెట్వర్క్ గేట్వేను పింగ్ చేయడంలో విఫలమైంది</translation> <translation id="4487489714832036847">సంప్రదాయ సాఫ్ట్వేర్కు బదులుగా Chromebooks యాప్లను ఉపయోగిస్తాయి. పని సామర్థ్యాన్ని పెంచడం, వినోదం ఇంకా మరిన్నింటి కోసం యాప్లను పొందండి.</translation> +<translation id="4488257340342212116">మీ కెమెరాను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="4488502501195719518">మొత్తం డేటాను క్లియర్ చేయాలా?</translation> <translation id="449232563137139956">ఆన్లైన్ స్టోర్లు లేదా వార్తా కథనాల ఫోటోలు వంటి వాటిని ఉదాహరణగా అందించడానికి సాధారణంగా సైట్లు ఇమేజ్లను చూపిస్తాయి</translation> <translation id="4493468155686877504">సిఫార్సు చేయబడినది (<ph name="INSTALL_SIZE" />)</translation> @@ -2997,6 +3024,7 @@ <translation id="4524832533047962394">సరఫరా చేయబడిన నమోదు మోడ్కు ఈ ఆపరేటింగ్ సిస్టమ్ వెర్షన్లో మద్దతు లేదు. దయచేసి మీరు తాజా వెర్షన్ను ఉపయోగిస్తున్నారని నిర్ధారించుకోండి.</translation> <translation id="4527186207340858212">ఆఫీస్ కోసం కొత్త ప్రొఫైల్ క్రియేట్ చేయాలనుకుంటున్నారా?</translation> <translation id="452750746583162491">సింక్ చేసిన మీ డేటాను రివ్యూ చేయండి</translation> +<translation id="4527929807707405172">రివర్స్ స్క్రోలింగ్ను ఎనేబుల్ చేయండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="4528494169189661126">అనువాద సూచన</translation> <translation id="4530494379350999373">మూలం</translation> <translation id="4531924570968473143">మీరు ఎవరిని ఈ <ph name="DEVICE_TYPE" />కు జోడించాలనుకుంటున్నారు?</translation> @@ -3017,6 +3045,7 @@ <translation id="4545028762441890696">దీనిని తిరిగి ప్రారంభించడానికి, కొత్త అనుమతులను ఆమోదించండి:</translation> <translation id="4545759655004063573">సరిపోని అనుమతుల కారణంగా సేవ్ చేయలేరు. దయచేసి మరొక స్థానానికి సేవ్ చేయండి.</translation> <translation id="4546308221697447294">Google Chromeతో వేగంగా బ్రౌజ్ చేయండి</translation> +<translation id="4546345569117159016">కుడివైపు బటన్</translation> <translation id="4546692474302123343">Google Assistant వాయిస్ ఇన్పుట్</translation> <translation id="4547659257713117923">ఇతర పరికరాల నుండి ట్యాబ్లు లేవు</translation> <translation id="4547672827276975204">స్వయంచాలకంగా సెట్ చేయి</translation> @@ -3076,6 +3105,7 @@ <translation id="4608500690299898628">&కనుగొను...</translation> <translation id="4608520674724523647">విజయవంతమైన నమోదు ఉదాహరణ</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" />లో గోప్యమైన కంటెంట్ ఉంది</translation> +<translation id="4609987916561367134">JavaScriptను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />కు ఎర్రర్ ఎదురైంది</translation> <translation id="4610637590575890427">మీరు <ph name="SITE" />కు వెళ్లాలనుకుంటున్నారా?</translation> <translation id="4611114513649582138">డేటా కనెక్షన్ అందుబాటులో ఉంది</translation> @@ -3187,6 +3217,7 @@ <translation id="473775607612524610">అప్డేట్</translation> <translation id="473936925429402449"><ph name="TOTAL_ELEMENTS" />లో <ph name="CURRENT_ELEMENT" />వ అదనపు కంటెంట్ ఎంచుకోబడింది</translation> <translation id="4739639199548674512">టిక్కెట్లు</translation> +<translation id="4742334355511750246">ఇమేజ్లను చూపడానికి అనుమతించబడలేదు</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />అప్లికేషన్లను ఎలా అప్డేట్ చేయాలో తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{సైట్ను అన్మ్యూట్ చేయి}other{సైట్లను అన్మ్యూట్ చేయి}}</translation> <translation id="4746351372139058112">Messages</translation> @@ -3322,6 +3353,7 @@ <translation id="4908811072292128752">ఒకేసారి రెండు సైట్లను బ్రౌజ్ చేయడానికి కొత్త ట్యాబ్ను తెరవండి</translation> <translation id="4909038193460299775">ఈ ఖాతా <ph name="DOMAIN" /> నిర్వహణలో ఉన్నందున, మీ బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు మరియు ఇతర సెట్టింగ్లు ఈ పరికరం నుండి తీసివేయబడతాయి. అయితే, మీ డేటా మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది, దానిని <ph name="BEGIN_LINK" />Google డాష్బోర్డ్<ph name="END_LINK" />లో నిర్వహించవచ్చు.</translation> <translation id="4912643508233590958">ఇన్యాక్టివ్ మేల్కొలుపులు</translation> +<translation id="4915961947098019832">ఇమేజ్లను చూపించడానికి అనుమతించబడింది</translation> <translation id="4916542008280060967"><ph name="FILE_NAME" />ను ఎడిట్ చేయడానికి సైట్ను అనుమతించాలనుకుంటున్నారా?</translation> <translation id="491691592645955587">సురక్షితమైన బ్రౌజర్కు మారండి</translation> <translation id="4917385247580444890">బలమైన</translation> @@ -3409,6 +3441,7 @@ <translation id="5027550639139316293">ఇమెయిల్ సర్టిఫికెట్</translation> <translation id="5027562294707732951">ఎక్స్టెన్షన్ని జోడించు</translation> <translation id="5029568752722684782">కాపీని తీసివేయి</translation> +<translation id="5033137252639132982">మోషన్ సెన్సార్లను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="5033266061063942743">జ్యామితీయ ఆకారాలు</translation> <translation id="5036662165765606524">బహుళ ఫైల్లను ఆటోమేటిక్గా డౌన్లోడ్ చేయడానికి ఏ సైట్నూ అనుమతించవద్దు</translation> <translation id="5037676449506322593">అన్నీ ఎంచుకోండి</translation> @@ -3458,6 +3491,7 @@ <translation id="5088172560898466307">సర్వర్ హోస్ట్ పేరు</translation> <translation id="5088534251099454936">RSA ఎన్క్రిప్షన్తో PKCS #1 SHA-512</translation> <translation id="5089810972385038852">రాష్ట్రం</translation> +<translation id="5090637338841444533">మీ కెమెరా పొజిషన్ను ట్రాక్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="5094721898978802975">సహకరిస్తున్న స్థానిక అనువర్తనాలతో కమ్యూనికేట్ చేయండి</translation> <translation id="5097002363526479830">'<ph name="NAME" />' నెట్వర్క్కు కనెక్ట్ చేయడంలో విఫలమైంది: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">టూల్: <ph name="PRINT_NAME" /></translation> @@ -3766,6 +3800,7 @@ <translation id="5471768120198416576">హలో! నేను మీ వచనం నుండి ప్రసంగం వాయిస్ని.</translation> <translation id="5472627187093107397">ఈ సైట్ కోసం పాస్వర్డ్లను సేవ్ చేయండి</translation> <translation id="5473333559083690127">కొత్త PINని మళ్లీ నమోదు చేయండి</translation> +<translation id="5481273127572794904">ఆటోమేటిక్గా అనేక ఫైల్లను డౌన్లోడ్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="5481941284378890518">సమీప ప్రింటర్లను జోడించు</translation> <translation id="5483785310822538350">ఫైల్ మరియు పరికర యాక్సెస్ను ఉపసంహరించు</translation> <translation id="5485080380723335835">భద్రత కోసం మీ <ph name="DEVICE_TYPE" /> లాక్ అయింది. కొనసాగించడానికి మీ పాస్వర్డ్ను మాన్యువల్గా నమోదు చేయండి.</translation> @@ -3787,6 +3822,7 @@ <translation id="5495466433285976480">మీరు తర్వాతిసారి పునఃప్రారంభించినప్పుడు ఇది స్థానిక వినియోగదారులు, ఫైల్లు, డేటా మరియు ఇతర సెట్టింగ్లు మొత్తాన్ని తీసివేస్తుంది. వినియోగదారులందరూ మళ్లీ సైన్ ఇన్ చేయాల్సి ఉంటుంది.</translation> <translation id="5495597166260341369">ప్రదర్శనను ఆన్లో ఉంచండి</translation> <translation id="5496587651328244253">క్రమంగా పేర్చు</translation> +<translation id="5496730470963166430">పాప్-అప్లను పంపడానికి లేదా మళ్లింపులను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="5497251278400702716">ఈ ఫైల్</translation> <translation id="5498967291577176373">ఇన్లైన్ సూచనలతో మీ పేరు, అడ్రెస్ లేదా ఫోన్ నంబర్ను త్వరగా రాయండి</translation> <translation id="5499313591153584299">ఈ ఫైల్ మీ కంప్యూటర్కు హానికరం కావచ్చు.</translation> @@ -3794,6 +3830,7 @@ <translation id="5500709606820808700">భద్రతా తనిఖీ నేడు రన్ చేయబడింది</translation> <translation id="5501809658163361512">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> నుండి <ph name="ATTACHMENTS" />ని అందుకోవడం విఫలమైంది}other{<ph name="DEVICE_NAME" /> నుండి <ph name="ATTACHMENTS" />ని అందుకోవడం విఫలమైంది}}</translation> <translation id="5502500733115278303">Firefox నుండి దిగుమతి చెయ్యబడింది</translation> +<translation id="5502915260472117187">చిన్నారి</translation> <translation id="5503982651688210506">మీ కెమెరా, మైక్రోఫోన్ను ఉపయోగించడానికి, తరలించడానికి <ph name="HOST" />ను అనుమతించడాన్ని కొనసాగించండి</translation> <translation id="5505264765875738116">నోటిఫికేషన్లను పంపడానికి సైట్లు అడగవు</translation> <translation id="5505307013568720083">ఇంక్ లేదు</translation> @@ -3881,6 +3918,7 @@ <translation id="5596627076506792578">మరిన్ని ఎంపికలు</translation> <translation id="5600706100022181951"><ph name="UPDATE_SIZE_MB" /> MB మొబైల్ డేటాను ఉపయోగించి అప్డేట్ డౌన్లోడ్ చేయబడుతుంది. మీరు కొనసాగాలని అనుకుంటున్నారా?</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5601823921345337195">MIDI పరికరాలకు కనెక్ట్ చేయడానికి అనుమతించబడలేదు</translation> <translation id="5602765853043467355">ఈ పరికరం నుండి బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు వంటివాటిని తీసివేయి</translation> <translation id="5605623530403479164">ఇతర శోధన ఇంజిన్లు</translation> <translation id="5605758115928394442">మీరేనని నిర్ధారించుకోవడానికి మీ ఫోన్కు ఒక నోటిఫికేషన్ పంపబడింది.</translation> @@ -4001,6 +4039,7 @@ <translation id="5747552184818312860">గడువు ముగింపు</translation> <translation id="5747785204778348146">డెవలపర్ - అస్థిరం</translation> <translation id="5747809636523347288">అతికించి <ph name="URL" />కు వెళ్ళండి</translation> +<translation id="5754152670305761216">సురక్షితమైన కంటెంట్ను ప్లే చేయడానికి అనుమతించబడింది</translation> <translation id="5756163054456765343">స&హాయ కేంద్రం</translation> <translation id="5759728514498647443">మీరు <ph name="APP_NAME" /> ద్వారా ముద్రించడానికి పంపే పత్రాలు <ph name="APP_NAME" /> ద్వారా చదవబడతాయి.</translation> <translation id="5763751966069581670">USB పరికరాలు కనుగొనబడలేదు</translation> @@ -4469,6 +4508,7 @@ <translation id="6295158916970320988">అన్ని సైట్లు</translation> <translation id="6295855836753816081">సేవ్ చేస్తోంది...</translation> <translation id="6298962879096096191">Android యాప్లను ఇన్స్టాల్ చేయడానికి Google Playను ఉపయోగిస్తుంది</translation> +<translation id="6300177430812514606">డేటాను పంపడాన్ని లేదా అందుకోవడాన్ని పూర్తి చేయడానికి అనుమతించబడలేదు</translation> <translation id="630065524203833229">ని&ష్క్రమించు</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" />ను ఆటోమేటిక్గా కాన్ఫిగర్ చేయలేకపోయింది. దయచేసి అధునాతన ప్రింటర్ వివరాలను పేర్కొనండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="6301076166764763868">వ్యక్తిగత బ్రౌజింగ్ను అలాగే <ph name="EXISTING_USER" /> బ్రౌజింగ్ను వేరు చేయడానికి, <ph name="NEW_USER" /> కోసం కొత్త ప్రొఫైల్ను క్రియేట్ చేయండి</translation> @@ -4546,6 +4586,7 @@ <translation id="6390020764191254941">ట్యాబ్ను కొత్త విండోకు తరలించు</translation> <translation id="6390799748543157332">మీరు ఈ విండోలో తెరిచే పేజీలు బ్రౌజర్ చరిత్రలో కనిపించవు, తెరిచిన అన్ని అతిథి విండోలను మీరు మూసివేసిన తర్వాత, అవి కంప్యూటర్లో కుక్కీల వంటి ఇతర జాడలను వదిలిపెట్టవు. అయితే, మీరు డౌన్లోడ్ చేసే ఫైల్లు భద్రపరచబడతాయి.</translation> <translation id="6393156038355142111">శక్తివంతమైన పాస్వర్డ్ని సూచించు</translation> +<translation id="6393550101331051049">సురక్షితం కాని కంటెంట్ను చూపడానికి అనుమతించబడింది</translation> <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />సిస్టమ్ సమాచారం<ph name="END_LINK1" /> మరియు <ph name="BEGIN_LINK2" />గణాంకాలు<ph name="END_LINK2" /> పంపు</translation> <translation id="6396988158856674517">మోషన్ సెన్సార్లను ఉపయోగించకుండా సైట్లను బ్లాక్ చేయి</translation> <translation id="6398715114293939307">Google Play స్టోర్ని తీసివేయండి</translation> @@ -4578,6 +4619,7 @@ <translation id="6425556984042222041">టెక్ట్స్-టు-స్పీచ్ రేట్</translation> <translation id="6426200009596957090">ChromeVox సెట్టింగ్లను తెరువు</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> కోసం మీరు మీ డేటాను బ్యాకప్ చేసి, 1 వారం లోగా ఈ <ph name="DEVICE_TYPE" />ని రిటర్న్ చేయాలి.<ph name="LINK_BEGIN" />వివరాలను చూడండి<ph name="LINK_END" /></translation> +<translation id="642729974267661262">శబ్దాన్ని ప్లే చేయడానికి అనుమతించబడలేదు</translation> <translation id="6428982734197629783">ఇమేజ్ను ప్రాసెస్ చేస్తోంది</translation> <translation id="6429384232893414837">అప్డేట్లో ఎర్రర్</translation> <translation id="6430814529589430811">Base64-ఎన్కోడ్ చేసిన ASCII, ఒక్క సర్టిఫికెట్</translation> @@ -4606,6 +4648,7 @@ <translation id="6458701200018867744">అప్లోడ్ విఫలమైంది (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">కనుగొనడానికి ఎంపికను ఉపయోగించండి</translation> <translation id="6459799433792303855">యాక్టివ్ విండో మరో డిస్ప్లేకు తరలించబడింది.</translation> +<translation id="6460566145397380451">MIDI పరికరాలకు కనెక్ట్ చేయడానికి అనుమతించబడింది</translation> <translation id="6460601847208524483">తరువాతది కనుగొను</translation> <translation id="6461170143930046705">నెట్వర్క్ల కోసం వెతుకుతోంది...</translation> <translation id="6463795194797719782">సవ&రించు</translation> @@ -4637,6 +4680,7 @@ <translation id="6499681088828539489">భాగస్వామ్య నెట్వర్క్ల కోసం ప్రాక్సీలను అనుమతించవద్దు</translation> <translation id="650266656685499220">ఆల్బమ్లను క్రియేట్ చేయడానికి, 'Google ఫోటోలు'కు వెళ్లండి</translation> <translation id="6503077044568424649">ఎక్కువగా సందర్శించేవి</translation> +<translation id="650457560773015827">ఎడమవైపు బటన్</translation> <translation id="6504611359718185067">ప్రింటర్ను జోడించడానికి ఇంటర్నెట్కు కనెక్ట్ అవ్వండి</translation> <translation id="6506374932220792071">SHA-256తో X9.62 ECDSA సంతకం</translation> <translation id="6508248480704296122"><ph name="NAME_PH" />కు సంబంధించినది</translation> @@ -4838,6 +4882,7 @@ <translation id="676560328519657314">Google Payలో మీ పేమెంట్ ఆప్షన్లు</translation> <translation id="6767566652486411142">మరొక భాషను ఎంచుకోండి...</translation> <translation id="6767639283522617719">డొమైన్కు చేర్చడం సాధ్యపడలేదు. సంస్థాగత యూనిట్ యొక్క సెట్టింగ్లు సరిగ్గా ఉన్నాయని నిర్ధారించుకోండి.</translation> +<translation id="6768034047581882264">సురక్షితం కాని కంటెంట్ను చూపడానికి అనుమతించబడలేదు</translation> <translation id="6769557323306147204">ఈ పరికరాన్ని అప్డేట్ చేయమని <ph name="ORGANIZATION_NAME" /> మీకు తెలియజేస్తోంది.</translation> <translation id="6769712124046837540">ప్రింటర్ని జోడిస్తోంది...</translation> <translation id="6770602306803890733">మీకు, వెబ్లోని ప్రతిఒక్కరికీ సెక్యూరిటీని మెరుగుపరుస్తుంది</translation> @@ -4929,6 +4974,7 @@ <translation id="6865313869410766144">స్వీయపూర్తి ఫారమ్ డేటా</translation> <translation id="6865598234501509159">పేజీ <ph name="LANGUAGE" />లో లేదు</translation> <translation id="6865708901122695652">WebRTC ఈవెంట్ లాగ్లు (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">నిశ్శబ్దం</translation> <translation id="686664946474413495">రంగు ఉష్ణోగ్రత</translation> <translation id="6868934826811377550">వివరాలను చూడండి</translation> <translation id="6871644448911473373">OCSP ప్రతిస్పందనదారు: <ph name="LOCATION" /></translation> @@ -4978,6 +5024,7 @@ <translation id="6922745772873733498">ముద్రించడానికి పిన్ను నమోదు చేయండి</translation> <translation id="6923132443355966645">స్క్రోల్ / క్లిక్</translation> <translation id="6923633482430812883">షేర్ని మౌంట్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మీరు కనెక్ట్ చేస్తున్న ఫైల్ సర్వర్లో SMBv2 లేదా అంతకంటే తాజా వెర్షన్కు మద్దతు ఉందో లేదో తనిఖీ చేయండి.</translation> +<translation id="6929126689972602640">పాఠశాల ఖాతాలకు తల్లిదండ్రుల కంట్రోల్స్ సపోర్ట్ చేయబడవు. ఇంట్లో పాఠశాల విద్య కోసం Google Classroom, అలాగే ఇతర వెబ్సైట్లను యాక్సెస్ చేసేందుకు పాఠశాల ఖాతాను జోడించడానికి, ముందుగా మీ చిన్నారి వ్యక్తిగత ఖాతా నుండి సైన్ ఇన్ చేయండి. మీరు సెటప్లో పాఠశాల ఖాతాను తర్వాత జోడించవచ్చు.</translation> <translation id="6929760895658557216">Okay Google</translation> <translation id="6930036377490597025">బహిర్గత సెక్యూరిటీ కీ లేదా అంతర్నిర్మిత సెన్సార్</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{ఒక ఎక్స్టెన్షన్ తిరస్కారించబడింది}other{# ఎక్స్టెన్షన్లు తిరస్కారించబడ్డాయి}}</translation> @@ -5018,6 +5065,7 @@ <translation id="6972629891077993081">HID పరికరాలు</translation> <translation id="6972754398087986839">ప్రారంభించండి</translation> <translation id="6972887130317925583">చోరీకి గురైన పాస్వర్డ్ విజయవంతంగా మార్చబడింది. <ph name="SETTINGS" />లలో మీ పాస్వర్డ్లను ఎప్పుడైనా చెక్ చేయండి.</translation> +<translation id="697312151395002334">పాప్-అప్లను పంపడానికి, అలాగే మళ్లింపులను ఉపయోగించడానికి అనుమతించబడింది</translation> <translation id="6973611239564315524">Debian 10 (Buster)కు అప్గ్రేడ్ అందుబాటులో ఉంది</translation> <translation id="6974609594866392343">ఆఫ్లైన్ డెమో మోడ్</translation> <translation id="6977381486153291903">ఫర్మ్వేర్ పునర్విమర్శ</translation> @@ -5040,6 +5088,7 @@ <translation id="6995899638241819463">మీరు ఉపయోగించే పాస్వర్డ్లు, ఏదైనా డేటా ఉల్లంఘనలో బహిర్గతమైతే మిమ్మల్ని హెచ్చరిస్తుంది</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - కార్యకలాపం లాగ్</translation> <translation id="6997707937646349884">మీ పరికరాలలో:</translation> +<translation id="6998093258894828179">కార్డ్లను దాచండి</translation> <translation id="6998793565256476099">వీడియో సమావేశం కోసం పరికరాన్ని నమోదు చేయండి</translation> <translation id="6999956497249459195">కొత్త గ్రూప్</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> కనెక్ట్ చేయబడింది, కానీ కాన్ఫిగర్ చేయాలి</translation> @@ -5056,6 +5105,7 @@ <translation id="7005848115657603926">చెల్లుబాటు కాని పేజీ పరిధి, <ph name="EXAMPLE_PAGE_RANGE" />ను ఉపయోగించు</translation> <translation id="7006634003215061422">దిగువ అంచు</translation> <translation id="7007648447224463482">అన్నీ కొత్త విండోలో తెరువు</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> మీ కెమెరాను ఉపయోగిస్తోంది</translation> <translation id="701080569351381435">సోర్స్ను చూడండి</translation> <translation id="7014174261166285193">వ్యవస్థాపన విఫలమైంది.</translation> <translation id="7017004637493394352">మళ్లీ "Ok Google" చెప్పండి</translation> @@ -5075,6 +5125,7 @@ <translation id="7038632520572155338">స్విచ్ యాక్సెస్</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> అందించిన USB పరికరాలకు యాక్సెస్</translation> <translation id="7039912931802252762">Microsoft Smart Card Logon</translation> +<translation id="7039951224110875196">చిన్నారి కోసం Google ఖాతాను క్రియేట్ చేయండి</translation> <translation id="7040230719604914234">ఆపరేటర్</translation> <translation id="7043108582968290193">పూర్తయింది! అనుకూలంగా లేని అప్లికేషన్లను కనుగొనబడలేదు.</translation> <translation id="7044124535091449260">సైట్ యాక్సెస్ గురించి మరింత తెలుసుకోండి</translation> @@ -5146,6 +5197,7 @@ <translation id="7121362699166175603">చిరునామా బార్లో చరిత్ర, స్వీయపూరింపులను తొలగిస్తుంది. మీ Google ఖాతా <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />లో ఇతర రూపాల్లో ఉన్న బ్రౌజింగ్ చరిత్రను కలిగి ఉండవచ్చు.</translation> <translation id="7121438501124788993">డెవలపర్ మోడ్</translation> <translation id="7121728544325372695">స్మార్ట్ డాష్లు</translation> +<translation id="7123030151043029868">ఆటోమేటిక్గా అనేక ఫైల్లను డౌన్లోడ్ చేయడానికి అనుమతించబడింది</translation> <translation id="7123360114020465152">ఇకపై మద్దతు లేదు</translation> <translation id="7125148293026877011">Crostiniని తొలగించండి</translation> <translation id="7127980134843952133">డౌన్లోడ్ చరిత్ర</translation> @@ -5160,6 +5212,7 @@ <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />కు స్వాగతం</translation> <translation id="7136993520339022828">ఎర్రర్ ఏర్పడింది. ఇతర చిత్రాలను ఎంచుకోవడం ద్వారా దయచేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="713888829801648570">క్షమించండి, మీరు ఆఫ్లైన్లో ఉన్నందున మీ పాస్వర్డ్ను ధ్రువీకరించడం సాధ్యపడదు.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> మీ మైక్రోఫోన్ను ఉపయోగిస్తోంది</translation> <translation id="7140928199327930795">అందుబాటులో ఉన్న ఇతర పరికరాలు ఏవీ లేవు.</translation> <translation id="7141105143012495934">మీ ఖాతా వివరాలను తిరిగి పొందలేనందున సైన్-ఇన్ విఫలమైంది. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి లేదా మళ్లీ ప్రయత్నించండి.</translation> <translation id="7143207342074048698">కనెక్ట్ అవుతో.</translation> @@ -5299,6 +5352,7 @@ <translation id="7324297612904500502">బీటా ఫోరమ్</translation> <translation id="7325209047678309347">పేపర్ జామ్ అయింది</translation> <translation id="7325437708553334317">అధిక కాంట్రాస్ట్ పొడిగింపు</translation> +<translation id="7326004502692201767">ఈ <ph name="DEVICE_TYPE" />ను చిన్నారి కోసం సెటప్ చేయండి</translation> <translation id="7328699668338161242">ఇప్పటికే మీ వాయిస్ని మీ అసిస్టెంట్ గుర్తించగలదు</translation> <translation id="7328867076235380839">చెల్లని కాంబినేషన్</translation> <translation id="7329154610228416156">అసురక్షిత URL (<ph name="BLOCKED_URL" />)ను ఉపయోగించేలా కాన్ఫిగర్ చేయబడినందున సైన్-ఇన్ విఫలమైంది. దయచేసి మీ నిర్వాహకుడిని సంప్రదించండి.</translation> @@ -5423,6 +5477,7 @@ <translation id="7465635034594602553">ఏదో తప్పు జరిగింది. దయచేసి కొద్ది నిమిషాలు వేచి ఉండి, <ph name="APP_NAME" />ను మళ్లీ రన్ చేయండి.</translation> <translation id="7465778193084373987">Netscape సర్టిఫికెట్ రద్దు URL</translation> <translation id="7469894403370665791">ఆటోమేటిక్గా ఈ నెట్వర్క్కు కనెక్ట్ చేయి</translation> +<translation id="7470424110735398630">మీ క్లిప్బోర్డ్ చూడటానికి అనుమతించబడింది</translation> <translation id="747114903913869239">ఎర్రర్: ఎక్స్టెన్షన్లను డీకోడ్ చేయడం సాధ్యం కాలేదు</translation> <translation id="7473891865547856676">వద్దు, ధన్యవాదాలు</translation> <translation id="747459581954555080">అన్నీ పునరుద్ధరించు</translation> @@ -5532,6 +5587,7 @@ <translation id="7607002721634913082">పాజ్ చెయ్యబడింది</translation> <translation id="7608810328871051088">Android ప్రాధాన్యతలు</translation> <translation id="7609148976235050828">దయచేసి ఇంటర్నెట్కి కనెక్ట్ చేసి, మళ్లీ ప్రయత్నించండి.</translation> +<translation id="7612655942094160088">కనెక్ట్ చేసిన ఫోన్ ఫీచర్లు ఎనేబుల్ చేయబడతాయి.</translation> <translation id="7614260613810441905">సైట్ మీ పరికరంలో ఫైల్లు లేదా ఫోల్డర్లను సవరించాలనుకున్నప్పుడు అడగండి (సిఫార్సు చేయబడింది)</translation> <translation id="761530003705945209">Google డిస్క్లో బ్యాకప్ చేయండి. సులభంగా మీ డేటాను పునరుద్ధరించండి లేదా ఎప్పుడైనా పరికరాన్ని స్విచ్ చేయండి. మీ బ్యాకప్లో యాప్ డేటా కూడా ఉంటుంది. మీ బ్యాకప్లు Googleకు అప్లోడ్ చేయబడతాయి, మీ Google ఖాతా పాస్వర్డ్ను ఉపయోగించి ఎన్క్రిప్ట్ చేయబడతాయి.</translation> <translation id="7615365294369022248">ఖాతాను జోడించడంలో ఎర్రర్ ఏర్పడింది</translation> @@ -5650,6 +5706,7 @@ <translation id="7732111077498238432">విధానం ద్వారా నెట్వర్క్ నియంత్రించబడుతుంది</translation> <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />"తో పెయిర్ చేస్తోంది ...</translation> <translation id="7737238973539693982">Linux (బీటా)ని తొలగించండి</translation> +<translation id="7737948071472253612">మీ కెమెరాను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="7740996059027112821">ప్రామాణికం</translation> <translation id="7742706086992565332">మీరు ఎంత దగ్గరగా లేదా దూరంగా జూమ్ చేయాలనే దానిని కొన్ని నిర్దిష్ట వెబ్సైట్లలో మీరు సెట్ చేసుకోవచ్చు</translation> <translation id="774377079771918250">ఎక్కడ సేవ్ చేయాలో ఎంచుకోండి</translation> @@ -5658,6 +5715,7 @@ <translation id="7750228210027921155">చిత్రంలో చిత్రం</translation> <translation id="7751260505918304024">అన్నీ చూపించు</translation> <translation id="7753735457098489144">స్టోరేజ్ స్పేస్ లేనందున, ఇన్స్టాల్ చేయడం విఫలమైంది. స్పేస్ను ఖాళీ చేయడానికి, పరికర స్టోరేజ్ నుండి ఫైల్లను తొలగించండి.</translation> +<translation id="7754347746598978109">JavaScriptను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="7754704193130578113">ప్రతి ఫైల్ను డౌన్లోడ్ చేసే ముందు ఎక్కడ సేవ్ చేయాలో అడుగు</translation> <translation id="7755287808199759310">మీ తల్లి/తండ్రి దీన్ని మీ కోసం అన్బ్లాక్ చేయగలరు</translation> <translation id="7757592200364144203">పరికరం పేరు మార్చండి</translation> @@ -5709,6 +5767,7 @@ <translation id="7798844538707273832"><ph name="PERMISSION" /> ఆటోమేటిక్గా బ్లాక్ చేయబడింది</translation> <translation id="7799299114731150374">వాల్పేపర్ విజయవంతంగా సెట్ చేయబడింది</translation> <translation id="7800518121066352902">అ&పసవ్యదిశలో తిప్పు</translation> +<translation id="7802539296536804623">ఈ పేజీలో కార్డ్లను చూపవద్దు</translation> <translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation> <translation id="7804072833593604762">ట్యాబ్ మూసివేయబడింది</translation> <translation id="7805768142964895445">స్థితి</translation> @@ -6134,6 +6193,7 @@ <translation id="826905130698769948">చెల్లని క్లయింట్ సర్టిఫికెట్</translation> <translation id="8270242299912238708">PDF పత్రాలు</translation> <translation id="827097179112817503">హోమ్ బటన్ను చూపు</translation> +<translation id="8271379370373330993">తల్లిదండ్రులారా, తర్వాత కొన్ని దశలు మీ కోసం. ఖాతాను సెటప్ చేసిన తర్వాత మీరు <ph name="DEVICE_TYPE" />ను చిన్నారికి తిరిగి ఇవ్వచ్చు.</translation> <translation id="8272443605911821513">"మరిన్ని సాధనాలు" మెనూలోని ఎక్స్టెన్షన్లను క్లిక్ చేయడం ద్వారా మీ ఎక్స్టెన్షన్లను నిర్వహించండి.</translation> <translation id="8274332263553132018">ఫైల్ను ప్రసారం చేయండి</translation> <translation id="8274924778568117936">అప్డేట్ పూర్తయ్యే వరకు మీ <ph name="DEVICE_TYPE" />ని ఆఫ్ చేయవద్దు లేదా మూసివేయవద్దు. ఇనస్టలేషన్ పూర్తయిన తర్వాత మీ <ph name="DEVICE_TYPE" /> పునఃప్రారంభమవుతుంది.</translation> @@ -6157,6 +6217,7 @@ <translation id="8300011035382349091">ఈ ట్యాబ్కు సేవ్ చేసిన బుక్మార్క్ను సవరించండి</translation> <translation id="8300374739238450534">మిడ్నైట్ బ్లూ</translation> <translation id="8300849813060516376">OTASP విఫలమైంది</translation> +<translation id="8304383784961451596">మీరు ఈ పరికరాన్ని ఉపయోగించడానికి అనుమతించబడలేదు. సైన్ ఇన్ అనుమతి కోసం దయచేసి అడ్మినిస్ట్రేటర్ను కాంటాక్ట్ చేయండి లేదా Family Link ద్వారా పర్యవేక్షించబడిన Google ఖాతాతో సైన్ ఇన్ చేయండి.</translation> <translation id="8308179586020895837"><ph name="HOST" /> మీ కెమెరాను యాక్సెస్ చేయాలనుకుంటే నాకు తెలియజేయి</translation> <translation id="830868413617744215">బీటా</translation> <translation id="8309458809024885768">ప్రమాణపత్రం ఇప్పటికే ఉంది</translation> @@ -6170,6 +6231,7 @@ <translation id="8322814362483282060">మీ మైక్రోఫోన్ను ప్రాప్యత చేయనీయకుండా ఈ పేజీ బ్లాక్ చేయబడింది.</translation> <translation id="8323167517179506834">URLను టైప్ చేయండి</translation> <translation id="8324784016256120271">వివిధ సైట్లలో మీ బ్రౌజింగ్ కార్యకలాపాన్ని చూడటానికి, సైట్లు కుక్కీలను ఉపయోగించవచ్చు, ఉదాహరణకు, యాడ్లను వ్యక్తిగతీకరించడానికి</translation> +<translation id="8325413836429495820">మీ క్లిప్బోర్డ్ను చూడటానికి అనుమతించబడలేదు</translation> <translation id="8326478304147373412">PKCS #7, సర్టిఫికెట్ చైన్</translation> <translation id="8327039559959785305">Linux ఫైల్లను మౌంట్ చేయడంలో ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="8327676037044516220">అనుమతులు, కంటెంట్ సెట్టింగ్లు</translation> @@ -6219,6 +6281,7 @@ <translation id="8382913212082956454">&ఇమెయిల్ చిరునామాను కాపీ చేయండి</translation> <translation id="8386091599636877289">విధానం కనుగొనబడలేదు.</translation> <translation id="8386903983509584791">స్కాన్ పూర్తయింది</translation> +<translation id="8387361103813440603">మీ లొకేషన్ను చూడటానికి అనుమతించబడలేదు</translation> <translation id="8389416080014625855">ఈ పేజీ కోసం QR కోడ్ను రూపొందించండి</translation> <translation id="8389492867173948260">మీరు సందర్శించే వెబ్సైట్లలో ఉన్న మీ డేటా మొత్తాన్ని చదవడం లేదా మార్చడం కోసం ఈ ఎక్స్టెన్షన్ను అనుమతించండి:</translation> <translation id="8390449457866780408">సర్వర్ అందుబాటులో లేదు.</translation> @@ -6403,6 +6466,7 @@ <translation id="8621866727807194849">మీ కంప్యూటర్లో మీ భద్రతకు హాని కలిగించే సాఫ్ట్వేర్ ఉంది. కనుక Chrome దానిని తీసివేసి, మీ సెట్టింగ్లను పునరుద్ధరించి, ఎక్స్టెన్షన్లను నిలిపివేస్తోంది. ఆపై మీ బ్రౌజర్ మళ్లీ ఎప్పటిలాగే సాధారణంగా పని చేస్తుంది.</translation> <translation id="8621979332865976405">మీ పూర్తి స్క్రీన్ను షేర్ చేయండి</translation> <translation id="862542460444371744">&పొడిగింపులు</translation> +<translation id="8625663000550647058">మీ మైక్రోఫోన్ ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="862727964348362408">తాత్కాలికంగా రద్దు చేయబడింది</translation> <translation id="862750493060684461">CSS కాష్</translation> <translation id="8627706565932943526">సమకాలీకరణ లోపం</translation> @@ -6483,6 +6547,7 @@ <translation id="8714838604780058252">నేపథ్య గ్రాఫిక్స్</translation> <translation id="8715480913140015283">బ్యాక్గ్రౌండ్ ట్యాబ్ మీ కెమెరాను ఉపయోగిస్తోంది</translation> <translation id="8716931980467311658">ఈ <ph name="DEVICE_TYPE" /> నుండి మీ Linux ఫైల్ల ఫోల్డర్లోని అన్ని Linux అప్లికేషన్లు మరియు డేటాను తొలగించాలా?</translation> +<translation id="8717145295869185525">వర్చువల్ రియాలిటీ పరికరాలను, అలాగే డేటాను ఉపయోగించడానికి అనుమతించబడలేదు</translation> <translation id="8717864919010420084">లింక్ని కాపీ చేయి</translation> <translation id="8719472795285728850">ఎక్స్టెన్షన్ కార్యకలాపాల కోసం వింటోంది...</translation> <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> డౌన్లోడ్ విఫలమైంది</translation> @@ -6904,6 +6969,7 @@ <translation id="9179734824669616955">మీ <ph name="DEVICE_TYPE" />లో Linux (బీటా)ను సెటప్ చేయండి</translation> <translation id="9180281769944411366">ఈ ప్రాసెస్కు కొన్ని నిమిషాలు పట్టవచ్చు. Linux కంటైనర్ ప్రారంభం అవుతోంది.</translation> <translation id="9180380851667544951">సైట్ మీ స్క్రీన్ను షేర్ చేయవచ్చు</translation> +<translation id="9186963452600581158">చిన్నారి Google ఖాతాతో సైన్ ఇన్ చేయండి</translation> <translation id="9188732951356337132">వినియోగం & విశ్లేషణల డేటాను పంపండి. ఈ పరికరం ప్రస్తుతం సమస్య విశ్లేషణ, అలాగే పరికర, యాప్ వినియోగ డేటాను ఆటోమేటిక్గా Googleకి పంపుతుంది. ఇది మీ చిన్నారి గురించి గుర్తించడానికి ఉపయోగించబడదు, ఇది కేవలం సిస్టమ్, యాప్ స్థిరత్వానికి, అలాగే ఇతర మెరుగుదలలకు సహాయపడుతుంది. కొంత సముదాయ డేటా కూడా Google యాప్లకు, అలాగే Android డెవలపర్ల లాంటి భాగస్వాములకు సహాయపడుతుంది. మీ చిన్నారి కోసం అదనపు వెబ్ & యాప్ కార్యకలాపం సెట్టింగ్ను ఆన్ చేసినట్లయితే, ఈ డేటా వారి Google ఖాతాలో సేవ్ చేయబడవచ్చు. <ph name="BEGIN_LINK2" />మరింత తెలుసుకోండి<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + ముందుగా భాగస్వామ్యం చేసిన కీ</translation> <translation id="9198090666959937775">మీ Android ఫోన్ను సెక్యూరిటీ కీగా ఉపయోగించండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index ce7df04..be592a38 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -4971,7 +4971,7 @@ <translation id="686022878923628150">บล็อกเว็บไซต์ไม่ให้เชื่อมต่อกับอุปกรณ์ MIDI</translation> <translation id="6860427144121307915">เปิดในแท็บ</translation> <translation id="686366188661646310">ลบรหัสผ่านไหม</translation> -<translation id="6865313869410766144">ข้อมูลฟอร์มที่ป้อนอัตโนมัติ</translation> +<translation id="6865313869410766144">ข้อมูลแบบฟอร์มที่ป้อนอัตโนมัติ</translation> <translation id="6865598234501509159">หน้านี้ไม่ใช่ภาษา<ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">บันทึกเหตุการณ์ WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> <translation id="686609795364435700">เงียบ</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 17d90520..22194a7 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">Yer işaretleriniz, geçmişiniz ve diğer ayarlarınız Google Hesabınızla senkronize edilecek.</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">Ev ağı, dolaşımda değil</translation> +<translation id="1315056510003830387">Flash kullanmasına izin verilmeyen siteler</translation> <translation id="1315144594965013365">Her iki cihazın da kilidinin açık ve birbirine yakın olduğundan, Bluetooth ayarlarının etkin olduğundan emin olun. Bir Chromebook ile paylaşıyorsanız Yakındakilerle Paylaş özelliğinin açık olduğundan emin olun (saati seçerek durum alanını açıp Yakındakilerle Paylaş'ı seçin).</translation> <translation id="1316136264406804862">Aranıyor...</translation> <translation id="1316495628809031177">Senkronizasyon duraklatıldı</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">Fiziksel SIM kartını etkinleştir</translation> <translation id="1387519831959169718">Göz atma işlemlerinizi ayrı tutmak isterseniz <ph name="NEW_USER" /> için yeni profil oluşturabilirsiniz</translation> <translation id="138784436342154190">Varsayılan başlangıç sayfası geri yüklensin mi?</translation> +<translation id="1388253969141979417">Mikrofonunuzu kullanmasına izin verilen siteler</translation> <translation id="1388728792929436380">Güncellemeler tamamlandığında <ph name="DEVICE_TYPE" /> yeniden başlatılacak.</translation> <translation id="1389342855416376185">Korumalı içerikleri engelle</translation> <translation id="1390548061267426325">Normal Sekme Olarak Aç</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">Erişmeden önce sor</translation> <translation id="1434696352799406980">Bu işlem, başlangıç sayfanızı, yeni sekme sayfanızı, arama motorunuzu ve sabit sekmelerinizi sıfırlar. Ayrıca, tüm uzantılar devre dışı bırakılır ve çerezler gibi geçici veriler temizlenir. Yer işaretleriniz, geçmişiniz ve kayıtlı şifreleriniz temizlenmez.</translation> <translation id="1434886155212424586">Ana sayfa Yeni Sekme sayfasıdır</translation> +<translation id="1435515966666225466">Bilgisayarınıza erişmek için eklenti kullanmasına izin verilen siteler</translation> <translation id="1436390408194692385"><ph name="TICKET_TIME_LEFT" /> süreyle geçerli</translation> <translation id="1436671784520050284">Kuruluma devam et</translation> <translation id="1436784010935106834">Kaldırıldı</translation> @@ -473,6 +476,7 @@ <translation id="1530838837447122178">Fare ve dokunmatik alan cihaz ayarlarını aç</translation> <translation id="1531004739673299060">Uygulama Penceresi</translation> <translation id="1531275250079031713">"Yeni kablosuz ağ ekle" iletişim kutusunu göster</translation> +<translation id="1535228823998016251">Yüksek sesli</translation> <translation id="1536754031901697553">Bağlantı kesiliyor...</translation> <translation id="1537254971476575106">Tam ekran büyüteci</translation> <translation id="15373452373711364">Büyük fare imleci</translation> @@ -556,6 +560,7 @@ <translation id="1627408615528139100">Zaten indirildi</translation> <translation id="1628948239858170093">Dosya açılmadan önce taransın mı?</translation> <translation id="1629314197035607094">Şifrenin süresi doldu</translation> +<translation id="163072119192489970">Veri gönderip alma işlemini bitirmesine izin verilen siteler</translation> <translation id="1630768113285622200">Yeniden başlat ve devam et</translation> <translation id="1632082166874334883">Şifre Google hesabınızda depolandı</translation> <translation id="1632803087685957583">Klavyenizin yineleme hızı, kelime tahmini ve daha birçok özelliği ayarlamanıza olanak tanır</translation> @@ -753,6 +758,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> devre dışı bırakıldı</translation> <translation id="184273675144259287">Linux uygulamalarınızı ve dosyalarınızı önceki bir yedek ile değiştirme</translation> <translation id="1842766183094193446">Demo modunu etkinleştirmek istediğinizden emin misiniz?</translation> +<translation id="1845727111305721124">Ses çalmasına izin verilen siteler</translation> <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> eklentisini çalıştırmak için Control tuşuyla birlikte tıklayın</translation> <translation id="1849186935225320012">Bu sayfa MIDI cihazları üzerinde tam denetime sahip.</translation> <translation id="1850508293116537636">Saat &yönünde döndür</translation> @@ -777,6 +783,7 @@ <translation id="187145082678092583">Daha az uygulama</translation> <translation id="1871534214638631766">İçeriği sağ tıkladığınızda veya uzun bastığınızda ilgili bilgileri gösterir</translation> <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> cihazınız güncel</translation> +<translation id="1874248162548993294">Her reklamı göstermesine izin verilen siteler</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Sekmeyi başka bir pencereye taşı}other{Sekmeleri başka bir pencereye taşı}}</translation> <translation id="1875386316419689002">Bu sekme bir HID cihazına bağlı.</translation> <translation id="1875387611427697908">Bu yalnızca <ph name="CHROME_WEB_STORE" /> kullanılarak eklenebilir</translation> @@ -832,6 +839,7 @@ <translation id="1931152874660185993">Yüklü bileşen yok.</translation> <translation id="1932098463447129402">Şundan Önce Değil:</translation> <translation id="1933809209549026293">Bir fare veya klavye bağlayın. Bluetooth cihaz kullanıyorsanız cihazın eşleştirmeye hazır olduğundan emin olun.</translation> +<translation id="1935303383381416800">Konumunuzu görmesine izin verilen siteler</translation> <translation id="1936931585862840749">Yazdırılacak kopya sayısını göstermek için bir sayı (1-<ph name="MAX_COPIES" /> arası) kullanın.</translation> <translation id="1937774647013465102">Bu cihaz (<ph name="ARCHITECTURE_DEVICE" />) ile kapsayıcı mimarisinin türü <ph name="ARCHITECTURE_CONTAINER" /> içe aktarılamıyor. Bu kapsayıcıyı farklı bir cihaza geri yüklemeyi deneyebilir veya Files uygulamasını açarak bu kapsayıcı görüntüsündeki dosyalara erişebilirsiniz.</translation> <translation id="1938351510777341717">Harici Komut</translation> @@ -949,6 +957,7 @@ <translation id="2090165459409185032">Hesap bilgilerinizi kurtarmak için şu adrese gidin: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Sistem güvenlik ayarı</translation> <translation id="2091887806945687916">Ses</translation> +<translation id="209539936453343974">Ebeveyn denetimlerini ayarlayabilmek için çocuğun, ebeveyn tarafından yönetilen bir Google Hesabı olmalıdır. <ph name="DEVICE_TYPE_PLURAL" />, ebeveynlerin Family Link uygulamasıyla ekran başında kalma süresi sınırları belirleme, web sitelerini onaylayıp engelleme gibi pek çok işlem yapmalarına olanak tanır. Çocuğun, Google Classroom gibi sitelerde ödev yapması gerekirse daha sonra bir okul hesabı eklenebilir.</translation> <translation id="2096715839409389970">Üçüncü taraf çerezlerini sil</translation> <translation id="2097372108957554726">Yeni cihazlar kaydettirebilmeniz için Chrome'da oturum açmanız gerekir</translation> <translation id="2098805196501063469">Kalan şifreleri kontrol et</translation> @@ -1099,6 +1108,7 @@ <translation id="2261323523305321874">Yöneticiniz, bazı eski profilleri devre dışı bırakan, sistem çapında bir değişiklik yaptı.</translation> <translation id="2262332168014443534">Basit mod artık HTTPS dahil tüm sayfalara daha hızlı göz atmanızı sağlıyor.</translation> <translation id="2262477216570151239">Tekrardan önce gecikme</translation> +<translation id="2262888617381992508">Korunan içerikleri oynatmasına izin verilmeyen siteler</translation> <translation id="2263189956353037928">Oturumu kapat ve tekrar oturum aç</translation> <translation id="2263371730707937087">Ekran yenileme hızı</translation> <translation id="22665427234727190">Bir site HID cihazlarına erişmek istediğinde sor (önerilen)</translation> @@ -1367,6 +1377,7 @@ <translation id="2571655996835834626">Web sitelerinin çerezler, JavaScript, eklentiler, coğrafi konum, mikrofon, kamera ve benzeri erişimini denetleyen ayarlarınızı değiştirin.</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> birimine salt okunur erişim izni verildi.</translation> <translation id="2575247648642144396">Uzantı, mevcut sayfada işlem yapabildiğinde bu simge görünür. Simgeyi tıklayarak veya <ph name="EXTENSION_SHORTCUT" /> tuşuna basarak bu uzantıyı kullanın.</translation> +<translation id="2575441894380764255">Araya giren veya yanıltıcı reklamlar göstermesine izin verilmeyen siteler</translation> <translation id="257779572837908839">Chromebox video konferansı olarak kurun</translation> <translation id="2579232805407578790">Sunucuyla bağlantı kurulamadı. Lütfen ağ bağlantınızı kontrol edip tekrar deneyin. Sorun devam ederse Chromebook'unuzu yeniden başlatın. Hata kodu: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162"><ph name="HOST" /> ana makinesinin birden fazla dosya indirmesine her zaman izin ver</translation> @@ -1633,6 +1644,7 @@ <translation id="2880660355386638022">Pencere yerleşimi</translation> <translation id="2881076733170862447">Uzantıyı Tıkladığınızda</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> geçici olarak yeniden başlatılacak ve sıfırlanacaktır.</translation> +<translation id="288387288628762616">Flash kullanmasına izin verilen siteler</translation> <translation id="2885378588091291677">Görev Yöneticisi</translation> <translation id="2885729872133513017">Sunucu yanıtının kodu çözülürken bir sorun oluştu.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1667,6 +1679,7 @@ <translation id="2923234477033317484">Bu hesabı kaldır</translation> <translation id="2926085873880284723">Varsayılan kısayolları geri yükle</translation> <translation id="2927017729816812676">Önbellek Depolama Alanı</translation> +<translation id="2928795416630981206">Kameranızın konumunu izlemesine izin verilen siteler</translation> <translation id="2931157624143513983">Yazdırılabilir alana sığdır</translation> <translation id="2932085390869194046">Şifre Öner...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (Çocuklar için hesap)</translation> @@ -1674,6 +1687,7 @@ <translation id="2932883381142163287">Kötüye kullanım bildir</translation> <translation id="2933632078076743449">Son Güncelleme</translation> <translation id="2934999512438267372">MIDI cihazlarının tam denetimine izin verildi</translation> +<translation id="2935654492420446828">Okul hesabını daha sonra ekleyin</translation> <translation id="2936851848721175671">Yedekleme ve geri yükleme</translation> <translation id="2938225289965773019"><ph name="PROTOCOL" /> bağlantılarını açma</translation> <translation id="2938845886082362843">Güvenlik anahtarınızda depolanan oturum açma verilerini görüntüleyin ve silin</translation> @@ -1777,6 +1791,7 @@ <translation id="3060379269883947824">Seç ve Dinle'yi etkinleştir</translation> <translation id="3060952009917586498">Cihaz dilini değiştirin. Mevcut dil: <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Sekme sonlandırıldı geri bildirimi.</translation> +<translation id="306535478112428611">Cihazınızdaki dosyaları veya klasörleri düzenlemesine izin verilmeyen siteler</translation> <translation id="3065522099314259755">Klavye tekrar gecikmesi</translation> <translation id="3067198179881736288">Uygulama yüklensin mi?</translation> <translation id="3067198360141518313">Bu eklentiyi çalıştır</translation> @@ -1912,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - Ağ hatası</translation> <translation id="3248902735035392926">Güvenlik önemlidir. Bir dakikanızı ayırıp <ph name="BEGIN_LINK" />uzantılarınızı şimdi kontrol edin<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><Sertifikanın Parçası Değil></translation> +<translation id="325238099842880997">Çocukların oyun oynamasına, keşfetmesine ve evde ödev yapmasına yardımcı olmak için dijital temel kurallar belirleyin</translation> <translation id="3253225298092156258">Kullanılamaz</translation> <translation id="3253448572569133955">Bilinmeyen hesap</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Güvenlik sorunu bulunmadı}=1{{COUNT} güvenlik sorunu bulundu}other{{COUNT} güvenlik sorunu bulundu}}</translation> @@ -2039,6 +2055,7 @@ <translation id="3404249063913988450">Ekran koruyucuyu etkinleştir</translation> <translation id="3405664148539009465">Yazı tiplerini özelleştir</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">Sanal gerçeklik cihazları ve verileri kullanmasına izin verilen siteler</translation> <translation id="3406396172897554194">Dile veya giriş adına göre ara</translation> <translation id="3406605057700382950">Yer işaretleri ç&ubuğunu göster</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Bu uzantı tehlikeli olabilir}other{Bu uzantılar tehlikeli olabilir}}</translation> @@ -2203,6 +2220,7 @@ <translation id="3586806079541226322">Bu dosya açılamıyor</translation> <translation id="3586931643579894722">Ayrıntıları gizle</translation> <translation id="3587482841069643663">Tümü</translation> +<translation id="3588790464166520201">Ödeme işleyiciler yüklemesine izin verilen siteler</translation> <translation id="3589766037099229847">Güvenli olmayan içerik engellendi</translation> <translation id="3590194807845837023">Profilin Kilidini Aç ve Tekrar Başlat</translation> <translation id="3590295622232282437">Yönetilen oturuma giriliyor.</translation> @@ -2428,6 +2446,7 @@ <translation id="3822559385185038546">Bu proxy, yöneticiniz tarafından uygulanıyor</translation> <translation id="3823310065043511710">Linux için en az <ph name="INSTALL_SIZE" /> alan olması önerilir.</translation> <translation id="3824621460022590830">Cihaz kaydı jetonu geçersiz. Lütfen cihaz sahibiyle ya da yöneticisiyle iletişime geçin. Hata kodu: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Hareket sensörlerini kullanmasına izin verilen siteler</translation> <translation id="3826440694796503677">Yöneticiniz başka Google Hesaplarının eklenmesini devre dışı bıraktı</translation> <translation id="3827306204503227641">Korumalı alanda olmayan eklentilere izin vermeye devam et</translation> <translation id="3827774300009121996">&Tam Ekran</translation> @@ -2480,6 +2499,8 @@ <translation id="3873423927483480833">PIN numaralarını göster</translation> <translation id="3873915545594852654">ARC++ ile ilgili bir sorun oluştu.</translation> <translation id="3874164307099183178">Google Asistan'ı aç</translation> +<translation id="3877075909000773256"><ph name="USER_EMAIL" /> hesabından yaptığı paylaşımlar için <ph name="USER_NAME" /> kullanıcısına ait cihazın Yakındakilerle Paylaş ayarları.</translation> +<translation id="387771067039689031">Bilgisayarınıza erişmek için eklenti kullanmasına izin verilmeyen siteler</translation> <translation id="3879748587602334249">İndirme yöneticisi</translation> <translation id="3881478300875776315">Daha az satır göster</translation> <translation id="3882165008614329320">Kameradan veya dosyadan mevcut video</translation> @@ -2516,6 +2537,7 @@ <translation id="3919145445993746351">Uzantıları tüm bilgisayarlarınızda almak için senkronizasyonu açın</translation> <translation id="3920504717067627103">Sertifika Politikaları</translation> <translation id="392089482157167418">ChromeVox'u (sesli geri bildirim) etkinleştir</translation> +<translation id="3920909973552939961">Ödeme işleyici yüklemesine izin verilmeyen siteler</translation> <translation id="3923184630988645767">Veri kullanımı</translation> <translation id="3923676227229836009">Bu sayfanın dosyaları görüntülemesine izin verilir</translation> <translation id="3924145049010392604">Meta</translation> @@ -2640,6 +2662,7 @@ <translation id="4058793769387728514">Dokümanı Şimdi Denetle</translation> <translation id="406070391919917862">Arka Plan Uygulamaları</translation> <translation id="4061374428807229313">Paylaşmak için Dosyalar uygulamasındaki bir klasörü sağ tıklayıp ardından "Parallels Desktop ile paylaş"ı seçin.</translation> +<translation id="406213378265872299">Özelleştirilmiş davranışlar</translation> <translation id="4065876735068446555">Kullandığınız ağ (<ph name="NETWORK_ID" />) bir giriş sayfasını ziyaret etmenizi gerektiriyor olabilir.</translation> <translation id="4066207411788646768">Ağınızdaki kullanılabilir yazıcıları görmek için lütfen bağlantınızı kontrol edin</translation> <translation id="4068776064906523561">Kayıtlı parmak izleri</translation> @@ -2787,6 +2810,7 @@ <translation id="425573743389990240">Vat Cinsinden Pil Boşalma Oranı (Negatif değer, pilin şarj edilmekte olduğu anlamına gelir)</translation> <translation id="4256316378292851214">Video Olarak Kay&det...</translation> <translation id="4258348331913189841">Dosya sistemleri</translation> +<translation id="4259388776256904261">Bu işlem biraz zaman alabilir</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> tehlikeli olabilir. Dosya taranmak üzere Google Gelişmiş Koruma'ya gönderilsin mi? İndirme çubuğu alanına gitmek için Üst Karakter+F6 tuşlarına basın.</translation> <translation id="4263223596040212967">Klavye düzeninizi kontrol edip tekrar deneyin.</translation> <translation id="4263757076580287579">Yazıcı kayıt işlemi iptal edildi.</translation> @@ -2894,6 +2918,7 @@ <translation id="4400632832271803360">Üst satırdaki tuşların davranışını değiştirmek için Başlatıcı tuşunu basılı tutun</translation> <translation id="4400963414856942668">Sekmeye yer işareti koymak için yıldızı tıklayabilirsiniz</translation> <translation id="4403775189117163360">Farklı bir klasör seçin</translation> +<translation id="440391631796167175">Zayıf şifre bulunmadı</translation> <translation id="4404136731284211429">Tekrar tara</translation> <translation id="4404843640767531781"><ph name="APP_NAME" />, ebeveyniniz tarafından engellendi. Bu uygulamayı kullanmak için ebeveyninizden izin isteyin.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2938,6 +2963,7 @@ <translation id="4450974146388585462">Teşhis Et</translation> <translation id="4451479197788154834">Şifreniz bu cihazda ve Google Hesabınızda kayıtlı</translation> <translation id="4451757071857432900">Araya giren veya yanıltıcı reklamlar gösteren sitelerde engellendi (önerilen)</translation> +<translation id="4453205916657964690">Alt ağ maskesi</translation> <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" /> üzerinde arayın veya bir URL yazın</translation> <translation id="4459169140545916303"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> gün önce etkindi</translation> <translation id="4460014764210899310">Grubu çöz</translation> @@ -2965,6 +2991,7 @@ <translation id="4481530544597605423">Eşlemesi kaldırılmış cihazlar</translation> <translation id="4483049906298469269">Varsayılan olmayan ağ geçidi pinglenemedi</translation> <translation id="4487489714832036847">Chromebook'lar geleneksel yazılım yerine uygulama kullanır. Üretkenlik, eğlence ve diğer konularla ilgili uygulamalar edinin.</translation> +<translation id="4488257340342212116">Kameranızı kullanmasına izin verilen siteler</translation> <translation id="4488502501195719518">Tüm veriler temizlensin mi?</translation> <translation id="449232563137139956">Siteler genellikle görsel içerik sağlayabilmek için online mağazaların veya haber makalelerinin fotoğrafları gibi resimler gösterir</translation> <translation id="4493468155686877504">Önerilen (<ph name="INSTALL_SIZE" />)</translation> @@ -2997,6 +3024,7 @@ <translation id="4524832533047962394">Sağlanan kayıt modu işletim sisteminin bu sürümü tarafından desteklenmiyor. Lütfen en yeni sürümü kullandığınızdan emin olun.</translation> <translation id="4527186207340858212">İş için yeni profil oluşturulsun mu?</translation> <translation id="452750746583162491">Senkronize edilmiş verilerinizi inceleyin</translation> +<translation id="4527929807707405172">Ters kaydırmayı etkinleştirin. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Çeviri önerisi</translation> <translation id="4530494379350999373">Kaynak</translation> <translation id="4531924570968473143">Bu <ph name="DEVICE_TYPE" /> cihazına kimleri eklemek istersiniz?</translation> @@ -3017,6 +3045,7 @@ <translation id="4545028762441890696">Tekrar etkinleştirmek için yeni izinleri kabul edin:</translation> <translation id="4545759655004063573">İzinler yetersiz olduğundan kaydedilemiyor. Lütfen başka bir yere kaydedin.</translation> <translation id="4546308221697447294">Google Chrome ile hızlı göz atın</translation> +<translation id="4546345569117159016">Sağ düğme</translation> <translation id="4546692474302123343">Google Asistan ses girişi</translation> <translation id="4547659257713117923">Diğer Cihazlardan Sekme Yok</translation> <translation id="4547672827276975204">Otomatik olarak ayarla</translation> @@ -3076,6 +3105,7 @@ <translation id="4608500690299898628">&Bul...</translation> <translation id="4608520674724523647">Başarılı kayıt resmi</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> hassas içeriğe sahip</translation> +<translation id="4609987916561367134">JavaScript kullanmasına izin verilen siteler</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> eklentisi bir hatayla karşılaştı</translation> <translation id="4610637590575890427"><ph name="SITE" /> sitesine mi gitmek istediniz?</translation> <translation id="4611114513649582138">Veri bağlantısı mevcut</translation> @@ -3187,6 +3217,7 @@ <translation id="473775607612524610">Güncelle</translation> <translation id="473936925429402449"><ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /> ekstra içerik seçildi</translation> <translation id="4739639199548674512">Biletler</translation> +<translation id="4742334355511750246">Resim göstermesine izin verilmeyen siteler</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Uygulamaların nasıl güncelleneceğini öğrenin<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Sitenin sesini aç}other{Sitelerin sesini aç}}</translation> <translation id="4746351372139058112">Mesajlar</translation> @@ -3322,6 +3353,7 @@ <translation id="4908811072292128752">İki siteye aynı anda göz atmak için yeni bir sekme açın</translation> <translation id="4909038193460299775">Bu hesap <ph name="DOMAIN" /> tarafından yönetildiğinden, yer işaretleri, geçmişi, şifreler ve diğer ayarlarınız bu cihazdan silinir. Ancak verileriniz Google Hesabınızda kalmaya devam eder ve <ph name="BEGIN_LINK" />Google Hesap Özeti<ph name="END_LINK" />'nde yönetilebilir.</translation> <translation id="4912643508233590958">Boşta Kalma Uyanmaları</translation> +<translation id="4915961947098019832">Resim göstermesine izin verilen siteler</translation> <translation id="4916542008280060967">Siteye <ph name="FILE_NAME" /> dosyasını düzenleme izni verilsin mi?</translation> <translation id="491691592645955587">Güvenli bir tarayıcıya geç</translation> <translation id="4917385247580444890">Güçlü</translation> @@ -3409,6 +3441,7 @@ <translation id="5027550639139316293">E-posta Sertifikası</translation> <translation id="5027562294707732951">Uzantı ekle</translation> <translation id="5029568752722684782">Kopyayı temizle</translation> +<translation id="5033137252639132982">Hareket sensörlerini kullanmasına izin verilmeyen siteler</translation> <translation id="5033266061063942743">Geometrik şekiller</translation> <translation id="5036662165765606524">Hiçbir sitenin otomatik olarak birden fazla dosya indirmesine izin verme</translation> <translation id="5037676449506322593">Tümünü Seç</translation> @@ -3458,6 +3491,7 @@ <translation id="5088172560898466307">Sunucu ana makinesinin adı</translation> <translation id="5088534251099454936">PKCS #1 RSA Şifrelemeli SHA-512</translation> <translation id="5089810972385038852">Eyalet</translation> +<translation id="5090637338841444533">Kameranızın konumunu izlemesine izin verilmeyen siteler</translation> <translation id="5094721898978802975">İşbirliği yapan yerel uygulamalarla iletişim kurma</translation> <translation id="5097002363526479830">'<ph name="NAME" />' ağına bağlanamadı: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Araç: <ph name="PRINT_NAME" /></translation> @@ -3766,6 +3800,7 @@ <translation id="5471768120198416576">Merhaba! Ben sizin metin okuma sesinizim.</translation> <translation id="5472627187093107397">Bu site için şifreleri kaydet</translation> <translation id="5473333559083690127">Yeni PIN'i tekrar girin</translation> +<translation id="5481273127572794904">Birden fazla dosyayı otomatik olarak indirmesine izin verilmeyen siteler</translation> <translation id="5481941284378890518">Yakınlardaki Yazıcıları Ekle</translation> <translation id="5483785310822538350">Dosya ve cihaz erişimini iptal et</translation> <translation id="5485080380723335835">Güvenlik amacıyla <ph name="DEVICE_TYPE" /> cihazınız kilitlendi. Devam etmek için şifrenizi manuel olarak girin.</translation> @@ -3787,6 +3822,7 @@ <translation id="5495466433285976480">Bu işlem, cihazı tekrar başlattığınızda tüm yerel kullanıcıları, dosyaları, verileri ve diğer ayarları kaldıracak. Tüm kullanıcıların yeniden oturum açması gerekecek.</translation> <translation id="5495597166260341369">Ekranı açık tut</translation> <translation id="5496587651328244253">Düzenle</translation> +<translation id="5496730470963166430">Pop-up'lar göndermesine veya yönlendirmeler kullanmasına izin verilmeyen siteler</translation> <translation id="5497251278400702716">Bu dosya</translation> <translation id="5498967291577176373">Adınız, adresiniz veya telefon numaranız için satır içi önerilerle daha hızlı yazın</translation> <translation id="5499313591153584299">Bu dosya bilgisayarınıza zarar verebilir.</translation> @@ -3794,6 +3830,7 @@ <translation id="5500709606820808700">Güvenlik kontrolü bugün çalıştırıldı</translation> <translation id="5501809658163361512">{COUNT,plural, =1{<ph name="ATTACHMENTS" />, <ph name="DEVICE_NAME" /> adlı cihazdan alınamadı}other{<ph name="ATTACHMENTS" />, <ph name="DEVICE_NAME" /> adlı cihazdan alınamadı}}</translation> <translation id="5502500733115278303">Firefox'tan Aktarıldı</translation> +<translation id="5502915260472117187">Çocuk</translation> <translation id="5503982651688210506"><ph name="HOST" /> sitesine hem kameramı kullanması, hareket ettirmesi hem de mikrofonumu kullanması için izni vermeye devam et</translation> <translation id="5505264765875738116">Siteler bildirim göndermek isteyemez</translation> <translation id="5505307013568720083">Mürekkep bitti</translation> @@ -3881,6 +3918,7 @@ <translation id="5596627076506792578">Diğer seçenekler</translation> <translation id="5600706100022181951">Güncellemeyi indirmek için <ph name="UPDATE_SIZE_MB" /> MB mobil veri kullanılacak. Devam etmek istiyor musunuz?</translation> <translation id="5601503069213153581">PIN</translation> +<translation id="5601823921345337195">MIDI cihazlarına bağlanmasına izin verilmeyen siteler</translation> <translation id="5602765853043467355">Yer işaretleri, geçmiş, şifreler ve diğer bilgileri bu cihazdan temizle</translation> <translation id="5605623530403479164">Diğer arama motorları</translation> <translation id="5605758115928394442">Telefonunuza kimliğinizi doğrulamak için bir bildirim gönderildi.</translation> @@ -4002,6 +4040,7 @@ <translation id="5747552184818312860">Süre sonu tarihi</translation> <translation id="5747785204778348146">Geliştirici - kararsız</translation> <translation id="5747809636523347288">Ya&pıştır ve <ph name="URL" /> adresine git</translation> +<translation id="5754152670305761216">Korunan içeriği oynatmasına izin verilen siteler</translation> <translation id="5756163054456765343">Y&ardım merkezi</translation> <translation id="5759728514498647443"><ph name="APP_NAME" /> aracılığıyla yazdırılmaları için gönderdiğiniz dokümanlar <ph name="APP_NAME" /> tarafından okunabilir.</translation> <translation id="5763751966069581670">USB cihazı bulunamadı</translation> @@ -4470,6 +4509,7 @@ <translation id="6295158916970320988">Tüm siteler</translation> <translation id="6295855836753816081">Kaydediliyor...</translation> <translation id="6298962879096096191">Android uygulamalarını yüklemek için Google Play'i kullanın</translation> +<translation id="6300177430812514606">Veri gönderip alma işlemini bitirmesine izin verilmeyen siteler</translation> <translation id="630065524203833229">Çı&kış</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> otomatik olarak yapılandırılamıyor. Lütfen gelişmiş yazıcı ayrıntılarını belirtin. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Kişisel hesaptan ve <ph name="EXISTING_USER" /> hesabından yapılan göz atma işlemlerini birbirinden ayırmak amacıyla <ph name="NEW_USER" /> için yeni profil oluşturun</translation> @@ -4547,6 +4587,7 @@ <translation id="6390020764191254941">Sekmeyi Yeni Pencereye Taşı</translation> <translation id="6390799748543157332">Bu pencerede görüntülediğiniz sayfalar, göz atma geçmişinde görünmez ve açık olan tüm Misafir pencerelerini kapattığınızda bilgisayarda çerez gibi başka izler bırakmaz. Ancak indirdiğiniz dosyalar saklanır.</translation> <translation id="6393156038355142111">Güçlü şifre öner</translation> +<translation id="6393550101331051049">Güvenli olmayan içerik göstermesine izin verilen siteler</translation> <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />Sistem bilgileri<ph name="END_LINK1" /> ve <ph name="BEGIN_LINK2" />metrikleri<ph name="END_LINK2" /> gönder</translation> <translation id="6396988158856674517">Sitelerin hareket sensörünü kullanmasını engelle</translation> <translation id="6398715114293939307">Google Play Store'u kaldır</translation> @@ -4579,6 +4620,7 @@ <translation id="6425556984042222041">Metin okuma konuşma hızı</translation> <translation id="6426200009596957090">ChromeVox ayarlarını aç</translation> <translation id="642654727595919401"><ph name="DOMAIN" />, verilerinizi yedeklemenizi ve bu <ph name="DEVICE_TYPE" /> cihazı 1 hafta içinde iade etmenizi gerektiriyor.<ph name="LINK_BEGIN" />Ayrıntılara bakın<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Ses çalmasına izin verilmeyen siteler</translation> <translation id="6428982734197629783">Resim işleniyor</translation> <translation id="6429384232893414837">Güncelleme hatası</translation> <translation id="6430814529589430811">Base64 kodlu ASCII, tek sertifika</translation> @@ -4607,6 +4649,7 @@ <translation id="6458701200018867744">Yükleme başarısız oldu (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Bul için Seçim'i Kullan</translation> <translation id="6459799433792303855">Etkin pencere başka bir ekrana taşındı.</translation> +<translation id="6460566145397380451">MIDI cihazlarına bağlanmasına izin verilen siteler</translation> <translation id="6460601847208524483">Sonrakini Bul</translation> <translation id="6461170143930046705">Ağ aranıyor...</translation> <translation id="6463795194797719782">&Düzenle</translation> @@ -4638,6 +4681,7 @@ <translation id="6499681088828539489">Paylaşılan ağlar için proxy'lere izin verme</translation> <translation id="650266656685499220">Albüm oluşturmak için Google Fotoğraflar'a gidin</translation> <translation id="6503077044568424649">En çok ziyaret edilenler</translation> +<translation id="650457560773015827">Sol düğme</translation> <translation id="6504611359718185067">Yazıcı eklemek için İnternet'e bağlanın</translation> <translation id="6506374932220792071">SHA-256 ile X9.62 ECDSA İmzası</translation> <translation id="6508248480704296122"><ph name="NAME_PH" /> ile ilgili</translation> @@ -4839,6 +4883,7 @@ <translation id="676560328519657314">Google Pay ödeme yöntemleriniz</translation> <translation id="6767566652486411142">Başka Bir Dil Seç...</translation> <translation id="6767639283522617719">Alan adına katılınamıyor. Kuruluş birimi ayarlarının doğruluğundan emin olun.</translation> +<translation id="6768034047581882264">Güvenli olmayan içerik göstermesine izin verilmeyen siteler</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> bu cihazı güncellemenizi öneriyor.</translation> <translation id="6769712124046837540">Yazıcı ekleniyor...</translation> <translation id="6770602306803890733">Hem siz hem de web'deki herkes için güvenliği iyileştirir</translation> @@ -4930,6 +4975,7 @@ <translation id="6865313869410766144">Form otomatik doldurma verileri</translation> <translation id="6865598234501509159">Sayfa <ph name="LANGUAGE" /> Değil</translation> <translation id="6865708901122695652">WebRTC etkinlik günlükleri (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Sessiz</translation> <translation id="686664946474413495">Renk sıcaklığı</translation> <translation id="6868934826811377550">Ayrıntılara Bakın</translation> <translation id="6871644448911473373">OCSP Yanıtlayanı: <ph name="LOCATION" /></translation> @@ -4979,6 +5025,7 @@ <translation id="6922745772873733498">Yazdırmak için bir pin girin</translation> <translation id="6923132443355966645">Kaydırma / Tıklama</translation> <translation id="6923633482430812883">Paylaşım eklenirken hata oluştu. Lütfen bağlandığınız dosya sunucusunun SMBv2 veya sonraki sürümünü desteklediğinden emin olun.</translation> +<translation id="6929126689972602640">Ebeveyn denetimleri, okul hesapları için desteklenmez. Hem Google Classroom'a hem de evde ödev yapmak amacıyla diğer sitelere erişmek için okul hesabı eklemek üzere önce çocuğun kişisel hesabıyla oturum açın. Okul hesabını daha sonra kurulumda ekleyebilirsiniz.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">Harici güvenlik anahtarı veya yerleşik sensör</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Bir uzantı reddedildi}other{# uzantı reddedildi}}</translation> @@ -5019,6 +5066,7 @@ <translation id="6972629891077993081">HID cihazlar</translation> <translation id="6972754398087986839">Başlarken</translation> <translation id="6972887130317925583">Güvenliği ihlal edilmiş şifre değiştirildi. Şifrelerinizi <ph name="SETTINGS" /> üzerinden her zaman kontrol edebilirsiniz.</translation> +<translation id="697312151395002334">Pop-up'lar gönderip yönlendirmeler kullanmasına izin verilen siteler</translation> <translation id="6973611239564315524">Debian 10 (Buster) sürümüne geçiş yapılabilir</translation> <translation id="6974609594866392343">Çevrimdışı demo modu</translation> <translation id="6977381486153291903">Donanım yazılımı düzeltmesi</translation> @@ -5041,6 +5089,7 @@ <translation id="6995899638241819463">Şifreleriniz bir veri ihlalinde ifşa olursa uyarı alın</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - Etkinlik Günlüğü</translation> <translation id="6997707937646349884">Cihazlarınızda:</translation> +<translation id="6998093258894828179">Kartları gizle</translation> <translation id="6998793565256476099">Video konferans için cihazı kaydetme</translation> <translation id="6999956497249459195">Yeni grup</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> bağlandı, ancak yapılandırılması gerekiyor</translation> @@ -5057,6 +5106,7 @@ <translation id="7005848115657603926">Geçersiz sayfa aralığı, şunu kullanın: <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">Alt kenar boşluğu</translation> <translation id="7007648447224463482">Tümünü yeni pencerede aç</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" />, kameranızı kullanıyor.</translation> <translation id="701080569351381435">Kaynağı Görüntüle</translation> <translation id="7014174261166285193">Yükleme işlemi başarısız oldu.</translation> <translation id="7017004637493394352">Tekrar "Ok Google" deyin</translation> @@ -5076,6 +5126,7 @@ <translation id="7038632520572155338">Anahtar erişimi</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> tedarikçisinin USB cihazlarına erişme</translation> <translation id="7039912931802252762">Microsoft Akıllı Kart Oturumu Açma</translation> +<translation id="7039951224110875196">Çocuk için Google Hesabı oluşturun</translation> <translation id="7040230719604914234">Operatör</translation> <translation id="7043108582968290193">Bitti! Uyumsuz uygulama bulunamadı.</translation> <translation id="7044124535091449260">Site erişimi hakkında daha fazla bilgi</translation> @@ -5147,6 +5198,7 @@ <translation id="7121362699166175603">Geçmişi ve adres çubuğundaki otomatik tamamlamaları temizler. Google Hesabınızın <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> adresinde başka biçimlerde tarama geçmişi olabilir.</translation> <translation id="7121438501124788993">Geliştirici Modu</translation> <translation id="7121728544325372695">Akıllı Kısa Çizgiler</translation> +<translation id="7123030151043029868">Birden fazla dosyayı otomatik olarak indirmesine izin verilen siteler</translation> <translation id="7123360114020465152">Artık desteklenmiyor</translation> <translation id="7125148293026877011">Crostini'yi sil</translation> <translation id="7127980134843952133">İndirme geçmişi</translation> @@ -5161,6 +5213,7 @@ <translation id="7136984461011502314"><ph name="PRODUCT_NAME" /> Uygulamasına Hoş Geldiniz</translation> <translation id="7136993520339022828">Hata oluştu. Lütfen diğer görselleri seçerek tekrar deneyin.</translation> <translation id="713888829801648570">Çevrimdışı olduğunuz için maalesef şifreniz doğrulanamadı.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> mikrofonunuzu kullanıyor</translation> <translation id="7140928199327930795">Başka kullanılabilir cihaz yok.</translation> <translation id="7141105143012495934">Hesap ayrıntılarınız alınamadığı için oturum açma işlemi başarısız oldu. Lütfen yöneticinizle iletişime geçin veya tekrar deneyin.</translation> <translation id="7143207342074048698">Bağlanıyor</translation> @@ -5300,6 +5353,7 @@ <translation id="7324297612904500502">Beta Forumu</translation> <translation id="7325209047678309347">Kağıt sıkıştı</translation> <translation id="7325437708553334317">Yüksek Kontrast Uzantısı</translation> +<translation id="7326004502692201767">Bu <ph name="DEVICE_TYPE" /> cihazı çocuk için kurun</translation> <translation id="7328699668338161242">Asistanınız sesinizi zaten tanıyabiliyor</translation> <translation id="7328867076235380839">Geçersiz kombinasyon</translation> <translation id="7329154610228416156">Güvenli olmayan bir URL (<ph name="BLOCKED_URL" />) kullanmak üzere yapılandırıldığından oturum açılamadı. Lütfen yöneticinizle iletişime geçin.</translation> @@ -5424,6 +5478,7 @@ <translation id="7465635034594602553">Bir sorun oldu. Lütfen birkaç dakika bekleyip <ph name="APP_NAME" /> uygulamasını tekrar çalıştırın.</translation> <translation id="7465778193084373987">Netscape Sertifika İptali URL'si</translation> <translation id="7469894403370665791">Bu ağa otomatik olarak bağlan</translation> +<translation id="7470424110735398630">Panonuzu görmesine izin verilen siteler</translation> <translation id="747114903913869239">Hata: Uzantının kodu çözülemiyor</translation> <translation id="7473891865547856676">Hayır, Teşekkürler</translation> <translation id="747459581954555080">Tümünü geri yükle</translation> @@ -5533,6 +5588,7 @@ <translation id="7607002721634913082">Duraklatıldı</translation> <translation id="7608810328871051088">Android tercihleri</translation> <translation id="7609148976235050828">Lütfen internete bağlanın ve tekrar deneyin.</translation> +<translation id="7612655942094160088">Bağlı telefon özelliklerini etkinleştir.</translation> <translation id="7614260613810441905">Bir site, cihazımdaki dosyaları veya klasörleri düzenlemek istediğinde sor (önerilir)</translation> <translation id="761530003705945209">Google Drive'a yedekle. Verilerinizi istediğiniz zaman kolayca geri yükleyin veya cihazlar arasında geçiş yapın. Yedeklemeniz, uygulama verilerini içerir. Yedek verileriniz Google'a yüklenir ve Google Hesabınızın şifresi kullanılarak şifrelenir.</translation> <translation id="7615365294369022248">Hesap eklenirken bir hata oluştu</translation> @@ -5651,6 +5707,7 @@ <translation id="7732111077498238432">Ağ, politika ile denetleniyor</translation> <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" ile eşleniyor...</translation> <translation id="7737238973539693982">Linux'u (Beta) silin</translation> +<translation id="7737948071472253612">Kameranızı kullanmasına izin verilmeyen siteler</translation> <translation id="7740996059027112821">Standart</translation> <translation id="7742706086992565332">Belirli web sitelerinde ne kadar yakınlaştırma veya uzaklaştırma yapacağınızı ayarlayabilirsiniz</translation> <translation id="774377079771918250">Nereye kaydedileceğini seçin</translation> @@ -5659,6 +5716,7 @@ <translation id="7750228210027921155">Pencere içinde pencere</translation> <translation id="7751260505918304024">Tümünü göster</translation> <translation id="7753735457098489144">Depolama alanı yetersiz olduğu için yüklenemedi. Yer açmak için cihaz depolama alanından dosya silin.</translation> +<translation id="7754347746598978109">JavaScript kullanmasına izin verilmeyen siteler</translation> <translation id="7754704193130578113">İndirmeden önce her dosyanın nereye kaydedileceğini sor</translation> <translation id="7755287808199759310">Ebeveyniniz engellemeyi sizin için kaldırabilir</translation> <translation id="7757592200364144203">Cihazın adını değiştir</translation> @@ -5711,6 +5769,7 @@ <translation id="7798844538707273832"><ph name="PERMISSION" /> izni otomatik olarak engellendi</translation> <translation id="7799299114731150374">Duvar kağıdı başarıyla ayarlandı</translation> <translation id="7800518121066352902">Saat Yönünün &Tersine Döndür</translation> +<translation id="7802539296536804623">Kartları bu sayfada gösterme</translation> <translation id="780301667611848630">Hayır, teşekkürler</translation> <translation id="7804072833593604762">Sekme Kapatıldı</translation> <translation id="7805768142964895445">Durum</translation> @@ -6138,6 +6197,7 @@ <translation id="826905130698769948">Geçersiz istemci sertifikası</translation> <translation id="8270242299912238708">PDF dokümanları</translation> <translation id="827097179112817503">Ana Sayfa düğmesini göster</translation> +<translation id="8271379370373330993">Ebeveynler, sonraki birkaç adım sizin için. Hesap kurulumundan sonra <ph name="DEVICE_TYPE" /> cihazını çocuğa geri verebilirsiniz.</translation> <translation id="8272443605911821513">"Diğer araçlar" menüsündeki Uzantılar'ı tıklayarak uzantılarınızı yönetin.</translation> <translation id="8274332263553132018">Dosya yayınlayın</translation> <translation id="8274924778568117936">Güncelleme bitene kadar <ph name="DEVICE_TYPE" /> cihazınızı kapatmayın. Yükleme işlemi tamamlandıktan sonra <ph name="DEVICE_TYPE" /> cihazınız yeniden başlatılacaktır.</translation> @@ -6161,6 +6221,7 @@ <translation id="8300011035382349091">Bu sekmenin yer işaretini düzenle</translation> <translation id="8300374739238450534">Gece mavisi</translation> <translation id="8300849813060516376">OTASP başarısız oldu</translation> +<translation id="8304383784961451596">Bu cihazı kullanmak için yetkili değilsiniz. Oturum açma izni için lütfen yöneticinize danışın veya Family Link gözetimindeki bir Google hesabı ile oturum açın.</translation> <translation id="8308179586020895837"><ph name="HOST" /> sitesi kamerama erişmek isterse sor</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">Sertifika zaten var</translation> @@ -6174,6 +6235,7 @@ <translation id="8322814362483282060">Bu sayfanın mikrofonunuza erişimi engellenmiştir.</translation> <translation id="8323167517179506834">URL yaz</translation> <translation id="8324784016256120271">Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerez kullanabilir</translation> +<translation id="8325413836429495820">Panonuzu görmesine izin verilmeyen siteler</translation> <translation id="8326478304147373412">PKCS #7, sertifika zinciri</translation> <translation id="8327039559959785305">Linux dosyaları yüklenirken hata oluştu. Lütfen tekrar deneyin.</translation> <translation id="8327676037044516220">İzinler ve içerik ayarları</translation> @@ -6223,6 +6285,7 @@ <translation id="8382913212082956454">E-posta &adresini kopyala</translation> <translation id="8386091599636877289">Politika bulunamadı.</translation> <translation id="8386903983509584791">Tarama tamamlandı</translation> +<translation id="8387361103813440603">Konumunuzu görmesine izin verilmeyen siteler</translation> <translation id="8389416080014625855">Bu Sayfa için QR kodu oluştur</translation> <translation id="8389492867173948260">Bu uzantının ziyaret ettiğiniz web sitelerindeki tüm verilerinizi okuması ve değiştirmesine izin verin:</translation> <translation id="8390449457866780408">Sunucu kullanılamıyor.</translation> @@ -6407,6 +6470,7 @@ <translation id="8621866727807194849">Bilgisayarınızda zararlı yazılım var. Chrome bunu kaldırıyor, ayarlarınızı geri yüklüyor ve uzantılarınızı devre dışı bırakıyor. Bu işlem, tarayıcınızın tekrar normal şekilde çalışmasını sağlayacak.</translation> <translation id="8621979332865976405">Tüm ekranınızı paylaşın</translation> <translation id="862542460444371744">&Uzantılar</translation> +<translation id="8625663000550647058">Mikrofonunuzu kullanmasına izin verilmeyen siteler</translation> <translation id="862727964348362408">Askıya alındı</translation> <translation id="862750493060684461">CSS önbelleği</translation> <translation id="8627706565932943526">Senkronizasyon hatası</translation> @@ -6487,6 +6551,7 @@ <translation id="8714838604780058252">Arka plan grafikleri</translation> <translation id="8715480913140015283">Arka plan sekmesi kameranızı kullanıyor</translation> <translation id="8716931980467311658">Linux dosyaları klasörünüzdeki tüm Linux uygulamaları ve verileri bu <ph name="DEVICE_TYPE" /> cihazdan silinsin mi?</translation> +<translation id="8717145295869185525">Sanal gerçeklik cihazları ve verileri kullanmasına izin verilmeyen siteler</translation> <translation id="8717864919010420084">Bağlantıyı Kopyala</translation> <translation id="8719472795285728850">Uzantı etkinlikleri dinleniyor...</translation> <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> indirilemedi</translation> @@ -6908,6 +6973,7 @@ <translation id="9179734824669616955"><ph name="DEVICE_TYPE" /> cihazınızda Linux (Beta) kurulumu yapın</translation> <translation id="9180281769944411366">Bu işlem birkaç dakika sürebilir. Linux kapsayıcısı başlatılıyor.</translation> <translation id="9180380851667544951">Site, ekranınızı paylaşabilir</translation> +<translation id="9186963452600581158">Çocuğunuzun Google Hesabıyla oturum açın</translation> <translation id="9188732951356337132">Kullanım ve teşhis verilerini gönder. Bu cihaz şu anda teşhis, cihaz ve uygulama kullanımı verilerini otomatik olarak Google'a gönderiyor. Bu veriler, çocuğunuzun kimliğini tespit etmek için kullanılmaz; sistem ve uygulama kararlılığı ile diğer özellikleri iyileştirmeye yardımcı olur. Bazı birleştirilmiş veriler, Google uygulamalarına ve iş ortaklarına da (ör. Android geliştiricileri) yardımcı olur. Çocuğunuz için ek Web ve Uygulama Etkinliği açıksa bu veriler çocuğunuzun Google Hesabına kaydedilebilir. <ph name="BEGIN_LINK2" />Daha Fazla Bilgi<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + önceden paylaşılan anahtar</translation> <translation id="9198090666959937775">Android telefonunuzu bir güvenlik anahtarı olarak kullanın</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index b3906475..0b0890c 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -279,6 +279,7 @@ <translation id="1313705515580255288">Xatcho‘plar, brauzer tarixi va boshqa sozlamalaringiz Google hisobingizga sinxronlanadi.</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">Roumingsiz uy tarmog‘i</translation> +<translation id="1315056510003830387">Flash ishlatish taqiqlangan</translation> <translation id="1315144594965013365">Ikkala qurilma ham ochiq, orasidagi masofa yaqin va Bluetooth yoniq ekanini tekshiring. Agar Chromebook qurilmasiga yuborsangiz, unda Yaqin-atrofga yuborish (holat qatorida vaqt va Yaqin-atrofga yuborishni tanlang) funksiyasi yoniqligini tekshiring.</translation> <translation id="1316136264406804862">Qidirilmoqda...</translation> <translation id="1316495628809031177">Sinxronizatsiya pauza qilingan</translation> @@ -338,6 +339,7 @@ <translation id="1386791642444521222">Jismoniy SIM kartani faollashtiring</translation> <translation id="1387519831959169718">Internetni alohida kezish maqsadida <ph name="NEW_USER" /> uchun yangi profil ochishingiz mumkin</translation> <translation id="138784436342154190">Standart boshlang‘ich sahifa tiklansinmi?</translation> +<translation id="1388253969141979417">Mikrofondan foydalanishga ruxsat berilgan</translation> <translation id="1388728792929436380">Yangilanishlar tugasa, <ph name="DEVICE_TYPE" /> qurilmasi qayta ishga tushiriladi.</translation> <translation id="1389342855416376185">Himoyalangan kontentni taqiqlash</translation> <translation id="1390548061267426325">Oddiy ichki oynada ochish</translation> @@ -388,6 +390,7 @@ <translation id="1433811987160647649">Ruxsat so‘ralsin</translation> <translation id="1434696352799406980">Bosh sahifa, yangi tezkor havolalar sahifasi, qidiruv tizimi va qadalgan sahifalar tiklanadi. Shuningdek, barcha kengaytmalar o‘chiriladi va cookie kabi vaqtinchalik fayllar tozalanadi. Xatcho‘plar, tarix va saqlab qo‘yilgan parollaringiz saqlanib qoladi.</translation> <translation id="1434886155212424586">Yangi varaq sahifasi bosh sahifa qilib belgilandi</translation> +<translation id="1435515966666225466">Kompyuteringizga kirish uchun plagindan foydalanishga ruxsat berilgan</translation> <translation id="1436390408194692385">Muddati: <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Sozlashni davom ettirish</translation> <translation id="1436784010935106834">Olib tashlangan</translation> @@ -471,6 +474,7 @@ <translation id="1530838837447122178">Sichqoncha va sensorli panel sozlamalarini ochish</translation> <translation id="1531004739673299060">Ilova oynasi</translation> <translation id="1531275250079031713">“Yangi Wi-Fi kiritish” oynasini ochish</translation> +<translation id="1535228823998016251">Baland</translation> <translation id="1536754031901697553">Uzilmoqda…</translation> <translation id="1537254971476575106">Butun ekran rejimidagi lupa</translation> <translation id="15373452373711364">Sichqonchaning katta kursori</translation> @@ -554,6 +558,7 @@ <translation id="1627408615528139100">Allaqachon yuklab olingan</translation> <translation id="1628948239858170093">Ochishdan oldin fayl tekshirilsinmi?</translation> <translation id="1629314197035607094">Parol eskirdi</translation> +<translation id="163072119192489970">Axborot yuborish va qabul qilishni yakunlashga ruxsat berilgan</translation> <translation id="1630768113285622200">Oʻchirib yoqish va davom etish</translation> <translation id="1632082166874334883">Parol Google hisobingizga saqlangan</translation> <translation id="1632803087685957583">Tugmalar qaytarilish tezligi, so‘zlar taklifi va boshqalarni sozlash imkonini beradi</translation> @@ -751,6 +756,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> o‘chiq</translation> <translation id="184273675144259287">Linux ilova va fayllarining oldingi nusxalarini tiklash</translation> <translation id="1842766183094193446">Demo rejim yoqilsinmi?</translation> +<translation id="1845727111305721124">Ovoz ijro etishga ruxsat berilgan</translation> <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> plaginini ishga tushirish uchun CTRL tugmasini bosib turgan holda sichqoncha tugmasini bosing</translation> <translation id="1849186935225320012">Bu sahifa MIDI qurilmalarini to‘liq boshqaradi.</translation> <translation id="1850508293116537636">Soat mili yo‘nalishida burish</translation> @@ -775,6 +781,7 @@ <translation id="187145082678092583">Kamroq ilovalar</translation> <translation id="1871534214638631766">Ustiga oʻng klik yoki biroz bosib turilsa, tegishli axborot chiqsin</translation> <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> qurilmangizdagi Chromium OS versiyasi yangi</translation> +<translation id="1874248162548993294">Reklama chiqarishga ruxsat berilgan</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Varaqni boshqa oynaga olish}other{Varaqlarni boshqa oynaga olish}}</translation> <translation id="1875386316419689002">Bu varaq HID qurilmaga ulangan.</translation> <translation id="1875387611427697908">Buni faqat <ph name="CHROME_WEB_STORE" /> sahifasidan qo‘shish mumkin</translation> @@ -830,6 +837,7 @@ <translation id="1931152874660185993">Hech qanday komponent o‘rnatilmagan.</translation> <translation id="1932098463447129402">Erta bo‘lmasin</translation> <translation id="1933809209549026293">Sichqoncha yoki klaviaturani ulang. Agar Bluetooth-qurilmadan foydalanayotgan bo‘lsangiz, qurilma ulanishga tayyorligini tekshiring.</translation> +<translation id="1935303383381416800">Joylashuvingizni koʻrishga ruxsat berilgan</translation> <translation id="1936931585862840749">Chop etish uchun nusxalar sonini kiriting (1-<ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> protsessorli qurilmangizga <ph name="ARCHITECTURE_CONTAINER" /> turidagi zaxiraviy nusxasi tiklanmaydi. Arxivni boshqa turdagi protsessorli qurilmada tiklash yoki Fayllar ilovasi orqali tarkibidagi zaxiralangan fayllarini ochish mumkin.</translation> <translation id="1938351510777341717">Tashqi buyruq</translation> @@ -947,6 +955,7 @@ <translation id="2090165459409185032">Hisob ma’lumotini tiklash uchun bu yerga o‘ting: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Tizim xavfsizlik sozlamasi</translation> <translation id="2091887806945687916">Tovush</translation> +<translation id="209539936453343974">Ota-ona nazoratini sozlash uchun farzandda ota-ona tomonidan boshqariladigan Google hisobi boʻlishi kerak. <ph name="DEVICE_TYPE_PLURAL" /> ota-onalarga qurilmadan foydalanish vaqtini cheklash, saytlarni taqiqlash yoki maʼqullash va boshqa amallar uchun Family Link ilovasidan foydalanish imkonini beradi. Bola Google Classroom kabi saytlarda uy vazifasini bajarishi lozim boʻlsa, keyinroq maktab hisobini kiritish mumkin.</translation> <translation id="2096715839409389970">Tashqi cookie fayllarni tozalash</translation> <translation id="2097372108957554726">Yangi qurilmani ro‘yxatdan o‘tkazish uchun Chrome hisobingizga kiring</translation> <translation id="2098805196501063469">Qolgan parollarni tekshirish</translation> @@ -1097,6 +1106,7 @@ <translation id="2261323523305321874">Administrator ba’zi eski profillarni faolsizlantirdi.</translation> <translation id="2262332168014443534">Lite rejimda barcha sahifalar tez yuklanadi, hatto HTTPS saytlar ham.</translation> <translation id="2262477216570151239">Qaytarishdan avvalgi kechiktirish vaqti</translation> +<translation id="2262888617381992508">Himoyalangan kontentni ijro etish taqiqlangan</translation> <translation id="2263189956353037928">Hisobingizdan chiqing va qaytadan kiring</translation> <translation id="2263371730707937087">Ekran kadrlar chastotasi</translation> <translation id="22665427234727190">Sayt Bluetooth qurilmalardan foydalanishi oldidan ruxsat olsin (tavsiya etiladi)</translation> @@ -1365,6 +1375,7 @@ <translation id="2571655996835834626">Saytlarning cookie fayllari, JavaScript, plaginlar, geo-maʼlumotlar, mikrofon, kamera va boshqa fuksiyalarga ruxsat sozlamalarini oʻzgartirish</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" />’ga faqat o‘qishga ruxsat berildi.</translation> <translation id="2575247648642144396">Agar kengaytma joriy sahifada ishlay olsa, uning ikonkasi paydo bo‘ladi. Bu kengaytmani ikonkasi ustiga bosib yoki <ph name="EXTENSION_SHORTCUT" /> tugmalar birkmasini bosib faollashtiring.</translation> +<translation id="2575441894380764255">Yoqimsiz yoki befoyda reklamalar chiqishi taqiqlangan</translation> <translation id="257779572837908839">Video muloqotlar uchun Chromebox sifatida foydalanish</translation> <translation id="2579232805407578790">Serverga ulana olmadi. Tarmoq aloqasini tekshiring va qaytadan urining. Muammo davom etaversa, Chromebook qurilmasini qayta ishga tushiring. Xatolik kodi: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162"><ph name="HOST" /> saytidan har doim birdaniga bir nechta fayl yuklab olishga ruxsat berilsin</translation> @@ -1631,6 +1642,7 @@ <translation id="2880660355386638022">Oynani joylashtirish</translation> <translation id="2881076733170862447">Kengaytma bosilganda</translation> <translation id="2882943222317434580">Hozir <ph name="IDS_SHORT_PRODUCT_NAME" /> qaytadan ishga tushiriladi va sozlamalari ilk holatga qaytariladi</translation> +<translation id="288387288628762616">Flash ishlatishga ruxsat berilgan</translation> <translation id="2885378588091291677">Vazifalar boshqaruvi</translation> <translation id="2885729872133513017">Server javobi deshifrlanmadi.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1665,6 +1677,7 @@ <translation id="2923234477033317484">Bu hisobni olib tashlash</translation> <translation id="2926085873880284723">Standart yorliqlarni tiklash</translation> <translation id="2927017729816812676">Kesh xotirasi</translation> +<translation id="2928795416630981206">Kamerangiz joylashuvini kuzatishga ruxsat berilgan</translation> <translation id="2931157624143513983">Bosma oʻlchamga moslash</translation> <translation id="2932085390869194046">Parol yaratish...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (bolalar hisobi)</translation> @@ -1672,6 +1685,7 @@ <translation id="2932883381142163287">Shikoyat xabari yuborish</translation> <translation id="2933632078076743449">Oxirgi yangilanish</translation> <translation id="2934999512438267372">MIDI qurilmalarini toʻliq boshqarishi mumkin</translation> +<translation id="2935654492420446828">Keyinroq maktab hisobini kiritish</translation> <translation id="2936851848721175671">Zaxiralash va tiklash</translation> <translation id="2938225289965773019"><ph name="PROTOCOL" /> havolalarini ochish</translation> <translation id="2938845886082362843">Elektron kalitdagi kirish maʼlumotlarini ochish va tozalash</translation> @@ -1775,6 +1789,7 @@ <translation id="3060379269883947824">Teginib tinglash xususiyatini yoqish</translation> <translation id="3060952009917586498">Qurilmadagi tilni almashtirish. Joriy til: <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Javob yo‘qligi uchun yopilgan tab haqida xabar.</translation> +<translation id="306535478112428611">Qurilmangizdagi fayl va jildlarni tahrirlash taqiqlangan</translation> <translation id="3065522099314259755">Klaviaturada qayta kiritishda kutish vaqti</translation> <translation id="3067198179881736288">Ilova o‘rnatilsinmi?</translation> <translation id="3067198360141518313">Bu plaginni ishga tushirish</translation> @@ -1910,6 +1925,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> – tarmoq xatosi</translation> <translation id="3248902735035392926">Xavfsizlik muhim ahamiyatga ega. Vaqt ajrating va hoziroq <ph name="BEGIN_LINK" />kengaytmalaringizni tekshiring<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><Sertifikat qismi hisoblanmaydi></translation> +<translation id="325238099842880997">Farzandning oʻynashi, saytlarni ochishi va uy vazifasini bajarishi uchun raqamli qoidalarni belgilash</translation> <translation id="3253225298092156258">Mavjud emas</translation> <translation id="3253448572569133955">Notanish hisob</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Xavfsizlikka oid muammo topilmadi}=1{Xavfsizlikka oid {COUNT} ta muammo aniqlandi}other{Xavfsizlikka oid {COUNT} ta muammo aniqlandi}}</translation> @@ -2037,6 +2053,7 @@ <translation id="3404249063913988450">Ekran lavhasini faollashtirish</translation> <translation id="3405664148539009465">Shriftlarni sozlash</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">Virtual reallik qurilmalari va axborotidan foydalanishga ruxsat berilgan</translation> <translation id="3406396172897554194">Til yoki klaviatura nomi orqali qidirish</translation> <translation id="3406605057700382950">&Xatcho‘plar panelini ko‘rsatish</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Bu kengaytma xavfli boʻlishi mumkin}other{Bu kengaytmalar xavfli boʻlishi mumkin}}</translation> @@ -2201,6 +2218,7 @@ <translation id="3586806079541226322">Bu fayl ochilmadi</translation> <translation id="3586931643579894722">Tafsilotlarni yopish</translation> <translation id="3587482841069643663">Barchasi</translation> +<translation id="3588790464166520201">Toʻlov vositalarini oʻrnatishga ruxsat berilgan</translation> <translation id="3589766037099229847">Himoyalanmagan kontent bloklandi</translation> <translation id="3590194807845837023">Profilni qulfdan chiqarish va qayta ishga tushirish</translation> <translation id="3590295622232282437">Boshqariladigan seansga kirilmoqda.</translation> @@ -2426,6 +2444,7 @@ <translation id="3822559385185038546">Bu proksi-server sozlamalari administrator tomonidan belgilangan</translation> <translation id="3823310065043511710">Linux uchun kamida <ph name="INSTALL_SIZE" /> joy ochilishi tavsiya etiladi.</translation> <translation id="3824621460022590830">Qurilmalarni qayd qilish tokeni yaroqsiz. Qurilma egasi yoki administratorga murojaat qiling. Xatolik kodi: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Harakat sensorlaridan foydalanishga ruxsat berilgan</translation> <translation id="3826440694796503677">Boshqa Google hisoblarini qoʻshish administrator tomonidan oʻchirib qoʻyilgan</translation> <translation id="3827306204503227641">Sinov muhitida bo‘lmagan plaginlarga ruxsat berish</translation> <translation id="3827774300009121996">&To‘liq ekran rejimi</translation> @@ -2478,6 +2497,8 @@ <translation id="3873423927483480833">PIN kodlar berkitilmasin</translation> <translation id="3873915545594852654">ARC++ ishga tushmadi.</translation> <translation id="3874164307099183178">Google Assistentni yoqish</translation> +<translation id="3877075909000773256"><ph name="USER_NAME" /> qurilmasi uchun Yaqin-atrofga yuborish funksiyasi sozlamalari <ph name="USER_EMAIL" /> hisobi ostida yuboriladi.</translation> +<translation id="387771067039689031">Kompyuteringizga kirish uchun plagindan foydalanish taqiqlangan</translation> <translation id="3879748587602334249">Yuklanmalar menejeri</translation> <translation id="3881478300875776315">Kamroq qatorlarni koʻrsatish</translation> <translation id="3882165008614329320">Kamera yoki galereyadan olingan video</translation> @@ -2514,6 +2535,7 @@ <translation id="3919145445993746351">Kengaytmalardan barcha qurilmalaringizda foydalanish uchun sinxronizatsiyani yoqing</translation> <translation id="3920504717067627103">Sertifikat siyosati</translation> <translation id="392089482157167418">ChromeVox (ovozli ta’rif) kengaytmasini yoqish</translation> +<translation id="3920909973552939961">Toʻlov vositalarini oʻrnatish taqiqlangan</translation> <translation id="3923184630988645767">Trafik sarfi</translation> <translation id="3923676227229836009">Bu sahifa fayllarni ocha oladi</translation> <translation id="3924145049010392604">Meta</translation> @@ -2638,6 +2660,7 @@ <translation id="4058793769387728514">Hujjatni tekshirish</translation> <translation id="406070391919917862">Fondagi ilovalar</translation> <translation id="4061374428807229313">Fayllar ilovasida jild ustida sichqonchaning oʻng tugmasini bosing va “Parallels Desktop bilan ulashish” bandini tanlang.</translation> +<translation id="406213378265872299">Moslangan harakatlar</translation> <translation id="4065876735068446555">Siz ulangan (<ph name="NETWORK_ID" />) tarmog‘i hisob sahifasida tasdiq tekshiruvidan o‘tishingizni talab qilishi mumkin.</translation> <translation id="4066207411788646768">Tarmoqdagi printerlar roʻyxatini chiqarish uchun aloqani tekshiring</translation> <translation id="4068776064906523561">Saqlangan barmoq izlari</translation> @@ -2785,6 +2808,7 @@ <translation id="425573743389990240">Batareya quvvatsizlantirish tezligi Vattda (quvvatlanayotganda qiymati teskari ko‘rsatiladi)</translation> <translation id="4256316378292851214">Videoni saqlab &olish...</translation> <translation id="4258348331913189841">Fayl tizimlari</translation> +<translation id="4259388776256904261">Iltimos, kutib turing</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> fayli xavfli boʻlishi mumkin. Tekshirish uchun Google Kuchaytirilgan himoya xizmatiga yuborilsinmi? Yuklanmalar paneliga qaytish uchun Shift+F6 tugmalarini bosing.</translation> <translation id="4263223596040212967">Klaviatura tartibini tekshiring va qaytadan urining.</translation> <translation id="4263757076580287579">Printerni ro‘yxatdan o‘tkazish bekor qilindi.</translation> @@ -2892,6 +2916,7 @@ <translation id="4400632832271803360">Yuqori qatordagi tugmalar rejimni almashtirish uchun qidiruv tugmasini bosib turing</translation> <translation id="4400963414856942668">Varaqni bukmarklash uchun yulduzchani bosing</translation> <translation id="4403775189117163360">Boshqa jildni tanlash</translation> +<translation id="440391631796167175">Kuchsiz parol topilmadi</translation> <translation id="4404136731284211429">Yana qidirish</translation> <translation id="4404843640767531781"><ph name="APP_NAME" /> ota-onangiz tomonidan bloklangan. Bu ilovadan foydalanish uchun ota-onangizdan ruxsat oling.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2936,6 +2961,7 @@ <translation id="4450974146388585462">Ulanish tekshiruvi</translation> <translation id="4451479197788154834">Parolingiz shu qurilma va Google hisobingizga saqlandi</translation> <translation id="4451757071857432900">Saytlarda chiquvchi yoqimsiz yoki befoyda reklamalar bloklanmoqda (tavsiya etiladi)</translation> +<translation id="4453205916657964690">Quyi tarmoq niqobi</translation> <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" /> orqali qidiring yoki URL manzilni kiriting</translation> <translation id="4459169140545916303"><ph name="DEVICE_LAST_ACTIVATED_TIME" /> kun oldin onlayn edi</translation> <translation id="4460014764210899310">Guruhni bekor qilish</translation> @@ -2963,6 +2989,7 @@ <translation id="4481530544597605423">Uzilgan qurilmalar</translation> <translation id="4483049906298469269">Ikkilamchi tarmoq shlyuzi ping qilinmadi</translation> <translation id="4487489714832036847">Chromebook qurilmalarida odatiy dasturlar oʻrniga ilovalar ishlatiladi. Ish va unumdorlik, hordiq va boshqa turkumdagi ilovalarni oʻrnating.</translation> +<translation id="4488257340342212116">Kameradan foydalanishga ruxsat berilgan</translation> <translation id="4488502501195719518">Barcha maʼlumotlar oʻchirib tashlansinmi?</translation> <translation id="449232563137139956">Saytlar odatda onlayn doʻkonlar yoki gazeta maqolalarni tasvirlash maqsadida rasmlarni koʻrsatadi</translation> <translation id="4493468155686877504">Tavsiya etiladi (<ph name="INSTALL_SIZE" />)</translation> @@ -2995,6 +3022,7 @@ <translation id="4524832533047962394">Ushbu OT versiyasida qaydlash rejimi ishlamaydi. Tizimni oxirgi versiyagacha yangilang.</translation> <translation id="4527186207340858212">Ish uchun yangi profil yaratilsinmi?</translation> <translation id="452750746583162491">Sinxronlangan maʼlumotlaringizni tekshiring</translation> +<translation id="4527929807707405172">Teskari varaqlashni yoqish. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Tarjima taklifi</translation> <translation id="4530494379350999373">Kelib chiqishi</translation> <translation id="4531924570968473143">Bu <ph name="DEVICE_TYPE" /> qurilmasiga kimni qoʻshmoqchisiz?</translation> @@ -3015,6 +3043,7 @@ <translation id="4545028762441890696">Uni qayta ishga tushirish uchun yangi ruxsatlarga rozi bo‘lishingiz lozim:</translation> <translation id="4545759655004063573">Ruxsat yo‘qligi tufayli saqlab bo‘lmadi. Boshqa jildni tanlang.</translation> <translation id="4546308221697447294">Google Chrome yordamida internet tezligi oshadi</translation> +<translation id="4546345569117159016">Oʻng tugma</translation> <translation id="4546692474302123343">Google Assistentda ovoz bilan yozish</translation> <translation id="4547659257713117923">Boshqa qurilmalarda ochilgan tablar yo‘q</translation> <translation id="4547672827276975204">Avtomatik aniqlansin</translation> @@ -3074,6 +3103,7 @@ <translation id="4608500690299898628">&Qidirish...</translation> <translation id="4608520674724523647">Muvaffaqiyatli registratsiyaga namuna</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> faylida maxfiy kontent bor</translation> +<translation id="4609987916561367134">JavaScript ishlatishga ruxsat berilgan</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> jarayonida xatolik yuz berdi</translation> <translation id="4610637590575890427">Balki <ph name="SITE" /> saytiga o‘tmoqchi bo‘lgandirsiz?</translation> <translation id="4611114513649582138">Mobil internet mavjud</translation> @@ -3185,6 +3215,7 @@ <translation id="473775607612524610">Yangilash</translation> <translation id="473936925429402449">Tanlangan, <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /> sonli qoʻshimcha kontent</translation> <translation id="4739639199548674512">Chiptalar</translation> +<translation id="4742334355511750246">Rasmlarni chiqarish taqiqlangan</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Ilovalarni yangilash haqida axborot<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Sayt ovozini yoqish}other{Saytlar ovozini yoqish}}</translation> <translation id="4746351372139058112">Xabarlar</translation> @@ -3320,6 +3351,7 @@ <translation id="4908811072292128752">Yangi varaq ochib, bir vaqtda ikkita saytni kezish mumkin</translation> <translation id="4909038193460299775">Chunki bu hisob <ph name="DOMAIN" /> domeni tomonidan boshqariladi. Xatcho‘plar, tarix, parol va boshqa sozlamalar bu qurilmadan o‘chiriladi, lekin mavjud ma’lumotlaringiz Google hisobingizda saqlanib qoladi va ular bilan <ph name="BEGIN_LINK" />Google Shaxsiy kabinet<ph name="END_LINK" /> orqali ishlash mumkin.</translation> <translation id="4912643508233590958">Uyqu rejimidan chiqishlar</translation> +<translation id="4915961947098019832">Rasmlarni koʻrsatishga ruxsat berilgan</translation> <translation id="4916542008280060967">Saytga <ph name="FILE_NAME" /> faylini tahrirlashga ruxsat berilsinmi?</translation> <translation id="491691592645955587">Xavfsiz brauzerdan foydalaning</translation> <translation id="4917385247580444890">Kuchli</translation> @@ -3407,6 +3439,7 @@ <translation id="5027550639139316293">Email sertifikati</translation> <translation id="5027562294707732951">Kengaytmani o‘rnatish</translation> <translation id="5029568752722684782">Nusxani o‘chirib tashlash</translation> +<translation id="5033137252639132982">Harakat sensorlaridan foydalanish taqiqlangan</translation> <translation id="5033266061063942743">Geometrik shakllar</translation> <translation id="5036662165765606524">Saytlarga bir nechta faylni avtomatik yuklab olishni taqiqlash</translation> <translation id="5037676449506322593">Hammasini belgilash</translation> @@ -3456,6 +3489,7 @@ <translation id="5088172560898466307">Server hosti nomi</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 algoritmli RSA shifrlash</translation> <translation id="5089810972385038852">Shtat</translation> +<translation id="5090637338841444533">Kamerangiz joylashuvini kuzatish taqiqlangan</translation> <translation id="5094721898978802975">Ichki o‘rnatilgan va bir biriga bog‘langan ilovalar bilan aloqa o‘rnatish</translation> <translation id="5097002363526479830">“<ph name="NAME" />” tarmog‘iga ulanmadi: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Vosita: <ph name="PRINT_NAME" /></translation> @@ -3764,6 +3798,7 @@ <translation id="5471768120198416576">Salom! Men sizga matnni nutqqa aylantirib beraman.</translation> <translation id="5472627187093107397">Bu sayt parollarini saqlash</translation> <translation id="5473333559083690127">Yangi PIN kodni qayta kiriting</translation> +<translation id="5481273127572794904">Bir nechta faylni avtomatik yuklab olish taqiqlangan</translation> <translation id="5481941284378890518">Yaqin-atrofdagi printerlarni qo‘shish</translation> <translation id="5483785310822538350">Fayl va qurilmadan ruxsatni olib qo‘yish</translation> <translation id="5485080380723335835">Xavfsizlik uchun <ph name="DEVICE_TYPE" /> qulflandi. Davom etish uchun parolingizni qo‘lda kiriting.</translation> @@ -3785,6 +3820,7 @@ <translation id="5495466433285976480">Qayta o‘chirib yoqishdan so‘ng barcha mahalliy hisoblar, fayllar, ma’lumotlar va boshqa sozlamalar o‘chirib yuboriladi. Barcha foydalanuvchilar hisobga qaytadan kirishlari kerak bo‘ladi.</translation> <translation id="5495597166260341369">Ekran yoniq qolsin</translation> <translation id="5496587651328244253">Boshqarish</translation> +<translation id="5496730470963166430">Qalqib chiquvchi oynalarni yuborish yoki yoʻnaltirish taqiqlangan</translation> <translation id="5497251278400702716">Bu fayl</translation> <translation id="5498967291577176373">Shaxsiy axborot takliflari orqali ism, manzil yoki telefon raqamini tezroq yozing</translation> <translation id="5499313591153584299">Bu fayl kompyuteringiz uchun zararli bo‘lishi mumkin.</translation> @@ -3792,6 +3828,7 @@ <translation id="5500709606820808700">Xavfsizlik tekshiruvi bugun bajarilgan</translation> <translation id="5501809658163361512">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> qurilmasidan <ph name="ATTACHMENTS" /> qabul qilinmadi}other{<ph name="DEVICE_NAME" /> qurilmasidan <ph name="ATTACHMENTS" /> qabul qilinmadi}}</translation> <translation id="5502500733115278303">Firefox brauzeridan import qilinganlar</translation> +<translation id="5502915260472117187">Bola</translation> <translation id="5503982651688210506"><ph name="HOST" /> saytiga kameradan foydalanish va siljitish, mikrofondan foydalanish uchun ruxsat berish</translation> <translation id="5505264765875738116">Saytlar bildirishnoma chiqarishga ruxsat soʻray olmaydi</translation> <translation id="5505307013568720083">Siyoh tugagan</translation> @@ -3879,6 +3916,7 @@ <translation id="5596627076506792578">Boshqa sozlamalar</translation> <translation id="5600706100022181951">Yangilanishni yuklab olish uchun <ph name="UPDATE_SIZE_MB" /> mobil trafik zarur. Yuklab olinsinmi?</translation> <translation id="5601503069213153581">PIN kod</translation> +<translation id="5601823921345337195">MIDI qurilmalarga ulanishga ruxsat berilmagan</translation> <translation id="5602765853043467355">Qurilmadagi xatcho‘plar, tarix, parollar va boshqa ma’lumotlarni tozalash</translation> <translation id="5605623530403479164">Boshqa qidiruv tizimlari</translation> <translation id="5605758115928394442">Telefoningizga bildirishnoma yuborildi. Shaxsingizni tasdiqlang.</translation> @@ -3999,6 +4037,7 @@ <translation id="5747552184818312860">Amal qilish muddati</translation> <translation id="5747785204778348146">Dasturchilar kanali (barqaror emas)</translation> <translation id="5747809636523347288">Joyla&sh va ochish: <ph name="URL" /></translation> +<translation id="5754152670305761216">Himoyalangan kontentni ijro etishga ruxsat berilgan</translation> <translation id="5756163054456765343">&Yordam markazi</translation> <translation id="5759728514498647443"><ph name="APP_NAME" /> yordamida chop etishga jo‘natilgan hujjatlarni <ph name="APP_NAME" /> ilovasida o‘qish mumkin.</translation> <translation id="5763751966069581670">Hech qanday USB qurilma topilmadi</translation> @@ -4467,6 +4506,7 @@ <translation id="6295158916970320988">Barcha saytlar</translation> <translation id="6295855836753816081">Saqlanmoqda...</translation> <translation id="6298962879096096191">Android ilovalarini o‘rnatish uchun Google Play ishlatilsin</translation> +<translation id="6300177430812514606">Maʼlumotlarni yuborish yoki qabul qilishni tugatish taqiqlangan</translation> <translation id="630065524203833229">&Chiqish</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> printeri avtomatik sozlanmadi. Printer uchun batafsil axborotlarni kiriting. <ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Internetni <ph name="EXISTING_USER" /> bilan alohida kezish maqsadida Chromeda <ph name="NEW_USER" /> uchun yangi profil oching</translation> @@ -4544,6 +4584,7 @@ <translation id="6390020764191254941">Varaqni yangi oynaga olish</translation> <translation id="6390799748543157332">Bu oynada ko‘riladigan sahifalar brauzer tarixida qolmaydi, barcha ochiq turgan Mehmon oynalarini yopganingizdan keyin ular kompyuterda cookie fayli singari iz ham qoldirmaydi. Ammo, yuklab olingan fayllar saqlanib qoladi.</translation> <translation id="6393156038355142111">Ishonchli parol yaratish</translation> +<translation id="6393550101331051049">Xavfli kontentni chiqarishga ruxsat berilgan</translation> <translation id="6395423953133416962"><ph name="BEGIN_LINK1" />Tizim haqidagi ma’lumotlar<ph name="END_LINK1" /> va k<ph name="BEGIN_LINK2" />o‘rsatkichlar qiymatlarini<ph name="END_LINK2" /> jo‘natish</translation> <translation id="6396988158856674517">Saytlarga harakat sensorlaridan foydalanishni taqiqlash</translation> <translation id="6398715114293939307">Google Play Market olib tashlansin</translation> @@ -4576,6 +4617,7 @@ <translation id="6425556984042222041">Matnni nutqqa aylantirish tezligi</translation> <translation id="6426200009596957090">ChromeVox sozlamalarini ochish</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> maʼlumotlaringizni zaxiralash va bu <ph name="DEVICE_TYPE" /> qurilmasini 1 hafta ichida qaytarishingizni talab qilmoqda.<ph name="LINK_BEGIN" />Batafsil<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Ovozni ijro qilish taqiqlangan</translation> <translation id="6428982734197629783">Rasm qayta ishlanmoqda</translation> <translation id="6429384232893414837">Yangilashda xatolik yuz berdi</translation> <translation id="6430814529589430811">Base64 shifrida kodlangan ASCII yagona sertifikati</translation> @@ -4604,6 +4646,7 @@ <translation id="6458701200018867744">Yuklanmadi (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Belgilanish bo‘yicha qidiruv</translation> <translation id="6459799433792303855">Faol oyna boshqa ekranga uzatildi.</translation> +<translation id="6460566145397380451">MIDI qurilmalarga ulanishga ruxsat berilgan</translation> <translation id="6460601847208524483">Keyingisini topish</translation> <translation id="6461170143930046705">Tarmoqlar qidirilmoqda...</translation> <translation id="6463795194797719782">&O‘zgartirish...</translation> @@ -4635,6 +4678,7 @@ <translation id="6499681088828539489">Umumiy tarmoqlarga proksi-serverlardan foydalanishni taqiqlash</translation> <translation id="650266656685499220">Albomlar yaratish uchun Google Photos sahifasini oching</translation> <translation id="6503077044568424649">Eng ko‘p ochilgan saytlar</translation> +<translation id="650457560773015827">Chap tugma</translation> <translation id="6504611359718185067">Printer qo‘shish uchun internetga ulaning</translation> <translation id="6506374932220792071">SHA-256 algoritmli X9.62 ECDSA imzosi</translation> <translation id="6508248480704296122"><ph name="NAME_PH" /> bilan aloqador</translation> @@ -4836,6 +4880,7 @@ <translation id="676560328519657314">Google Pay xizmatidagi toʻlov usullaringiz</translation> <translation id="6767566652486411142">Boshqa tilni tanlang...</translation> <translation id="6767639283522617719">Domenga ulana olmadi. Tashkilot qismi uchun bu sozlamalarni tekshiring.</translation> +<translation id="6768034047581882264">Xavfli kontentni chiqarish uchun ruxsat berilmagan</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> tomonidan bu qurilmani oʻchirib yoqish tavsiya etilmoqda.</translation> <translation id="6769712124046837540">Printer qo‘shilmoqda...</translation> <translation id="6770602306803890733">Siz va yaqinlaringizni internetdan yaxshiroq himoyalaydi</translation> @@ -4927,6 +4972,7 @@ <translation id="6865313869410766144">Avtomatik to‘ldirish ma’lumotlari</translation> <translation id="6865598234501509159">Sahifa <ph name="LANGUAGE" /> tilida emas</translation> <translation id="6865708901122695652">WebRTC hodisa jurnallari (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Tinch joy</translation> <translation id="686664946474413495">Rang harorati</translation> <translation id="6868934826811377550">Batafsil</translation> <translation id="6871644448911473373">OCSP javob beruvchisi: <ph name="LOCATION" /></translation> @@ -4976,6 +5022,7 @@ <translation id="6922745772873733498">Chop etish uchun PIN kod kiriting</translation> <translation id="6923132443355966645">O‘tkazish va bosish</translation> <translation id="6923633482430812883">Xatolik yuz berdi. Siz ulanayotgan fayl serveri SMB protokolining 2-versiyasi yoki keyingi versiyalari bilan ishlay olishini tekshiring.</translation> +<translation id="6929126689972602640">Ota-ona nazoratida maktab hisoblaridan foydalanish mumkin emas. Google Classroom va boshqa saytlarga uy vazifalarini bajarish uchun kirish maqsadida maktab hisobini kiritmoqchi boʻlsangiz, farzandingizning shaxsiy hisobi bilan kiring. Maktab hisobini keyinroq sozlash orqali kiritish mumkin.</translation> <translation id="6929760895658557216">Hey, Google</translation> <translation id="6930036377490597025">Tashqi elektron kalit yoki xavfsizlik sensori</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Kengaytma rad etildi}other{# ta kengaytma rad etildi}}</translation> @@ -5016,6 +5063,7 @@ <translation id="6972629891077993081">HID qurilmalar</translation> <translation id="6972754398087986839">Boshlash</translation> <translation id="6972887130317925583">Oshkor qilingan parol almashtirildi. Parollarni istalgan vaqtda <ph name="SETTINGS" /> orqali tekshirish mumkin.</translation> +<translation id="697312151395002334">Oynalarni qalqib chiqishi va sahifalarni yoʻnaltirishga ruxsat berilgan</translation> <translation id="6973611239564315524">Debian 10 (Buster) versiyasi chiqdi</translation> <translation id="6974609594866392343">Oflayn demo rejimi</translation> <translation id="6977381486153291903">Mikrodastur versiyasi</translation> @@ -5038,6 +5086,7 @@ <translation id="6995899638241819463">Parolim oshkor etilganda ogohlantirilsin</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> – Faollik jurnali</translation> <translation id="6997707937646349884">Qurilmalaringizda:</translation> +<translation id="6998093258894828179">Bildirgilarni berkitish</translation> <translation id="6998793565256476099">Video konferensiyalar uchun mos qurilma sifatida ro‘yxatdan o‘tkazish</translation> <translation id="6999956497249459195">Yangi guruh</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> ulangan, lekin sozlanmagan</translation> @@ -5054,6 +5103,7 @@ <translation id="7005848115657603926">Sahifalar diapazoni noto‘g‘ri kiritildi. <ph name="EXAMPLE_PAGE_RANGE" /> ko‘rinishida kiriting.</translation> <translation id="7006634003215061422">Pastki maydon</translation> <translation id="7007648447224463482">Barchasini yangi oynalarda ochish</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> kameradan foydalanmoqda</translation> <translation id="701080569351381435">Sahifa kodini ko‘rish</translation> <translation id="7014174261166285193">O‘rnatish amali bajarilmadi.</translation> <translation id="7017004637493394352">Yana bir marta “Ok Google” deng</translation> @@ -5073,6 +5123,7 @@ <translation id="7038632520572155338">Switch Access</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" /> USB qurilmalariga kirish</translation> <translation id="7039912931802252762">Microsoft smart-kartasi orqali kirish</translation> +<translation id="7039951224110875196">Farzand uchun Google hisobini yaratish</translation> <translation id="7040230719604914234">Operator</translation> <translation id="7043108582968290193">Tayyor! Mos kelmaydigan ilovalar topilmadi.</translation> <translation id="7044124535091449260">Saytga ruxsat haqida batafsil axborot</translation> @@ -5144,6 +5195,7 @@ <translation id="7121362699166175603">Manzil qatoridagi tarix va avto‘ldirishlarni tozalaydi. Google hisobingiz orqali bajargan internetdagi faoliyatingizni <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> orqali ko‘rishingiz mumkin.</translation> <translation id="7121438501124788993">Dasturchi rejimi</translation> <translation id="7121728544325372695">Smart tirelar</translation> +<translation id="7123030151043029868">Bir nechta fayllarni avtomati yuklashga ruxsat berilgan</translation> <translation id="7123360114020465152">Printer ta’minoti to‘xtatilgan</translation> <translation id="7125148293026877011">Crostini tizimini oʻchirish</translation> <translation id="7127980134843952133">Yuklanishlar tarixi</translation> @@ -5158,6 +5210,7 @@ <translation id="7136984461011502314"><ph name="PRODUCT_NAME" />‘ga xush kelibsiz!</translation> <translation id="7136993520339022828">Xatolik yuz berdi. Boshqa rasmlarni tanlab, keyinroq qayta urining.</translation> <translation id="713888829801648570">Kechirasiz, parolni internetsiz tasdiqlab bo‘lmaydi.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> mikrofoningizni ishlatmoqda</translation> <translation id="7140928199327930795">Boshqa qurilmalar mavjud emas.</translation> <translation id="7141105143012495934">Hisobga kirishda xatolik yuz berdi, chunki hisob ma’lumotlarini yuklab bo‘lmadi. Administrator bilan bog‘laning yoki qaytadan urinib ko‘ring.</translation> <translation id="7143207342074048698">Ulanmoqda</translation> @@ -5297,6 +5350,7 @@ <translation id="7324297612904500502">Beta Forum</translation> <translation id="7325209047678309347">Qogʻoz tiqilib qoldi</translation> <translation id="7325437708553334317">Yuqori kontrast kengaytmasi</translation> +<translation id="7326004502692201767">Bu <ph name="DEVICE_TYPE" /> qurilmasini farzand uchun sozlang</translation> <translation id="7328699668338161242">Assistent ovozingizni allaqachon taniydi</translation> <translation id="7328867076235380839">Xato kombinatsiya</translation> <translation id="7329154610228416156">Kirish amalga oshmadi, chunki u xavfli URL manzildan foydalanish uchun moslangan (<ph name="BLOCKED_URL" />). Administrator bilan bog‘laning.</translation> @@ -5421,6 +5475,7 @@ <translation id="7465635034594602553">Xatolik yuz berdi. Bir necha daqiqadan keyin <ph name="APP_NAME" /> ilovasini qaytadan ishga tushiring.</translation> <translation id="7465778193084373987">Netscape sertifikatini bekor qilish URL manzili</translation> <translation id="7469894403370665791">Bu tarmoqqa avtomatik ravishda ulanish</translation> +<translation id="7470424110735398630">Vaqtinchalik xotirani koʻrishga ruxsat berilgan</translation> <translation id="747114903913869239">Xato: kengaytmani dekodlab bo‘lmadi</translation> <translation id="7473891865547856676">Yo‘q, rahmat</translation> <translation id="747459581954555080">Barchasini qayta tiklash</translation> @@ -5530,6 +5585,7 @@ <translation id="7607002721634913082">Vaqtincha to‘xtatildi</translation> <translation id="7608810328871051088">Android sozlamalari</translation> <translation id="7609148976235050828">Internetga ulanib, qaytadan urining.</translation> +<translation id="7612655942094160088">Ulangan telefon funksiyalarini faollashtirish.</translation> <translation id="7614260613810441905">Sayt qurilmadagi fayl va jildlarni tahrirlashi uchun ruxsat soʻralsin (tavsiya etiladi)</translation> <translation id="761530003705945209">Google Drive omboriga zaxiralash. Maʼlumotlaringizni osongina tiklang yoki qurilmani istalgan vaqt almashtiring. Zaxira ichida ilova maʼlumotlari ham bor. Zaxiralar Google serverlariga yuklanadi va farzandingizning Google hisobingiz paroli bilan shifrlanadi.</translation> <translation id="7615365294369022248">Hisobni kiritishda xatolik yuz berdi</translation> @@ -5648,6 +5704,7 @@ <translation id="7732111077498238432">Tarmoq sozlamalari faqat siyosat asosida</translation> <translation id="7737115349420013392">“<ph name="DEVICE_NAME" />” bilan ulanmoqda...</translation> <translation id="7737238973539693982">Linux (Beta)ni o‘chirish</translation> +<translation id="7737948071472253612">Kamerangizdan foydalanish taqiqlangan</translation> <translation id="7740996059027112821">Standart</translation> <translation id="7742706086992565332">Kerakli saytlar uchun kattalashtirish cheklovini sozlash mumkin</translation> <translation id="774377079771918250">Saqlash uchun joyni tanlang</translation> @@ -5656,6 +5713,7 @@ <translation id="7750228210027921155">Tasvir ustida tasvir</translation> <translation id="7751260505918304024">Hammasi</translation> <translation id="7753735457098489144">Oʻrnatish uchun xotirada joy yetarli emas. Joy ochish uchun qurilma xotirasidan fayllarni oʻchiring.</translation> +<translation id="7754347746598978109">JavaScript ishlatishga ruxsat berilmagan</translation> <translation id="7754704193130578113">Har bir faylni yuklashdan oldin qayerga saqlash so‘ralsin</translation> <translation id="7755287808199759310">Ota-onangiz tasdiqlashi mumkin</translation> <translation id="7757592200364144203">Qurilma nomini almashtirish</translation> @@ -5707,6 +5765,7 @@ <translation id="7798844538707273832"><ph name="PERMISSION" /> ruxsati avtomatik bloklandi.</translation> <translation id="7799299114731150374">Fon rasmi o‘rnatildi</translation> <translation id="7800518121066352902">Soat miliga teskari yo‘nalishda burish</translation> +<translation id="7802539296536804623">Bildirgilar bu sahifada chiqmasin</translation> <translation id="780301667611848630">Kerak emas</translation> <translation id="7804072833593604762">Varaq yopildi</translation> <translation id="7805768142964895445">Holat</translation> @@ -6134,6 +6193,7 @@ <translation id="826905130698769948">Yaroqsiz mijoz sertifikati</translation> <translation id="8270242299912238708">PDF hujjatlar</translation> <translation id="827097179112817503">“Boshi” tugmasini ko‘rsatish</translation> +<translation id="8271379370373330993">Ota-onalar, keyingi bosqichlar siz uchun. Hisobni sozlaganingizdan keyin <ph name="DEVICE_TYPE" /> qurilmasini farzandingizga berishingiz mumkin.</translation> <translation id="8272443605911821513">Kengaytmalarni “Qo‘shimcha asboblar” menyusidagi “Kengaytmalar” bo‘limidan boshqarish mumkin.</translation> <translation id="8274332263553132018">Faylni translatsiya qilish</translation> <translation id="8274924778568117936">Yangilanish tugamasdan oldin <ph name="DEVICE_TYPE" /> qurilmasini o‘chirmang va yopmang. Yangilanish o‘rnatilishi bilan <ph name="DEVICE_TYPE" /> qayta ishga tushiriladi.</translation> @@ -6157,6 +6217,7 @@ <translation id="8300011035382349091">Bu varaq bukmarkini tahrirlash</translation> <translation id="8300374739238450534">Tungi osmonrang</translation> <translation id="8300849813060516376">OTASP amalga oshmadi</translation> +<translation id="8304383784961451596">Bu qurilmadan foydalanish uchun sizga ruxsat berilmagan. Kirish ruxsatini olish uchun administratorga murojaat qiling yoki Family Link orqali nazorat qilinadigan Google hisobi bilan kiring.</translation> <translation id="8308179586020895837"><ph name="HOST" /> saytida kameradan foydalanishga ruxsat so‘ralsin</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">Sertifikat avvaldan mavjud</translation> @@ -6170,6 +6231,7 @@ <translation id="8322814362483282060">Bu sahifaning mikrofoningizdan foydalanishi bloklandi.</translation> <translation id="8323167517179506834">URL manzil kiriting</translation> <translation id="8324784016256120271">Saytlar reklamalarni sizga moslashtirish uchun brauzerdagi faoliyatingizni kuzatishi mumkin</translation> +<translation id="8325413836429495820">Vaqtinchalik xotirani koʻrish taqiqlangan</translation> <translation id="8326478304147373412">PKCS #7, sertifikat zanjiri</translation> <translation id="8327039559959785305">Linux fayllari ulanmadi. Qaytadan urining.</translation> <translation id="8327676037044516220">Ruxsatlar va kontent sozlamalari</translation> @@ -6219,6 +6281,7 @@ <translation id="8382913212082956454">&E-pochta manzilini nusxalash</translation> <translation id="8386091599636877289">Bu parametr topilmadi.</translation> <translation id="8386903983509584791">Tarmoq tekshirildi</translation> +<translation id="8387361103813440603">Joylashuvingizni koʻrish taqiqlangan</translation> <translation id="8389416080014625855">Bu sahifa uchun QR kod yaratish</translation> <translation id="8389492867173948260">Kengaytmaga tashrif buyurgan saytlaringizdagi ma’lumotlarni ko‘rish va o‘zgartirishga ruxsat bering:</translation> <translation id="8390449457866780408">Server ish faoliyatida emas.</translation> @@ -6403,6 +6466,7 @@ <translation id="8621866727807194849">Kompyuteringizda zararli dasturlar topildi. Chrome uni tozalab, sozlamalarni qayta tiklaydi, kengaytmalarni oʻchirib qoʻyadi. Keyin brauzeringiz yana nuqsonsiz ishlay boshlaydi.</translation> <translation id="8621979332865976405">Butun ekranni namoyish qilish</translation> <translation id="862542460444371744">&Kengaytmalar</translation> +<translation id="8625663000550647058">Mikrofondan foydalanish taqiqlangan</translation> <translation id="862727964348362408">To‘xtatib qo‘yildi</translation> <translation id="862750493060684461">CSS kesh</translation> <translation id="8627706565932943526">Sinxronlash xatoligi</translation> @@ -6483,6 +6547,7 @@ <translation id="8714838604780058252">Orqa fon</translation> <translation id="8715480913140015283">Fondagi varaq kamerangizdan foydalanmoqda</translation> <translation id="8716931980467311658">Ushbu <ph name="DEVICE_TYPE" /> qurilmadagi barcha Linux ilovalar va ma’lumotlar Linux fayllari jildidan o‘chirilsinmi?</translation> +<translation id="8717145295869185525">Virtual reallik qurilmalari va axborotidan foydalanish taqiqlangan</translation> <translation id="8717864919010420084">Havolani nusxalash</translation> <translation id="8719472795285728850">Kengaytma harakatlari kuzatilmoqda...</translation> <translation id="8719653885894320876">“<ph name="PLUGIN_NAME" />” plagini yuklab olinmadi</translation> @@ -6904,6 +6969,7 @@ <translation id="9179734824669616955"><ph name="DEVICE_TYPE" /> qurilmasida Linuxni (Beta) sozlash</translation> <translation id="9180281769944411366">Bu jarayon bir necha daqiqa olishi mumkin. Linux konteyneri ishga tushirilmoqda.</translation> <translation id="9180380851667544951">Sayt ekraningizni namoyish etishi mumkin</translation> +<translation id="9186963452600581158">Farzandingizning Google hisobi bilan kiring</translation> <translation id="9188732951356337132">Foydalanish va diagnostika axborotini yuborish. Bu qurilma hozirda qurilma va ilovalardan foydalanish haqidagi hamda diagnostika axborotini avtomatik tarzda Google kompaniyasiga yubormoqda. Ushbu axborotdan farzandingiz shaxsini aniqlash uchun foydalanilmaydi. Ular tizim va ilovalar barqarorligi kabilarni yaxshilash uchun ishlatiladi. Ayrim toʻplangan maʼlumotlar Android dasturchilar kabi hamkorlarimizga ham oʻz ilovalari va mahsulotlarini yanada yaxshilashga yordam beradi. Agar farzandingiz uchun Kengaytirilgan veb-qidiruv va ilovalar tarixi yoqilgan boʻlsa, bu maʼlumotlar uning Google hisobiga saqlanadi. <ph name="BEGIN_LINK2" />Batafsil<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + umumiy kalit</translation> <translation id="9198090666959937775">Telefonni elektron kalit sifatida ishlatish</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 0eec3f5..7db00cd 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -278,6 +278,7 @@ <translation id="1313705515580255288">Dấu trang, lịch sử và các cài đặt khác sẽ được đồng bộ hóa với tài khoản Google của bạn.</translation> <translation id="1314565355471455267">Android VPN</translation> <translation id="131461803491198646">Mạng chủ, không chuyển vùng</translation> +<translation id="1315056510003830387">Không được phép sử dụng đèn Flash</translation> <translation id="1315144594965013365">Hãy đảm bảo cả hai thiết bị đã mở khóa, ở gần nhau và đã bật Bluetooth. Nếu bạn đang chia sẻ với Chromebook, hãy đảm bảo thiết bị này đã bật tính năng Chia sẻ lân cận (mở khu vực trạng thái bằng cách chọn giờ, sau đó chọn tính năng Chia sẻ lân cận).</translation> <translation id="1316136264406804862">Đang tìm kiếm...</translation> <translation id="1316495628809031177">Quá trình đồng bộ hóa hiện tạm dừng</translation> @@ -337,6 +338,7 @@ <translation id="1386791642444521222">Kích hoạt SIM vật lý</translation> <translation id="1387519831959169718">Để tách biệt hoạt động duyệt web của mình, bạn có thể tạo một hồ sơ mới cho <ph name="NEW_USER" /></translation> <translation id="138784436342154190">Khôi phục trang khởi động mặc định?</translation> +<translation id="1388253969141979417">Được phép sử dụng micrô</translation> <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> sẽ khởi động lại khi cập nhật xong.</translation> <translation id="1389342855416376185">Chặn nội dung được bảo vệ</translation> <translation id="1390548061267426325">Mở dưới dạng thẻ thông thường</translation> @@ -387,6 +389,7 @@ <translation id="1433811987160647649">Hỏi trước khi truy cập</translation> <translation id="1434696352799406980">Thao tác này sẽ đặt lại trang khởi động, trang thẻ mới, công cụ tìm kiếm và thẻ được ghim. Thao tác này cũng sẽ vô hiệu hóa tất cả các tiện ích và xóa dữ liệu tạm thời như cookie. Dấu trang, lịch sử và mật khẩu đã lưu của bạn sẽ không bị xóa.</translation> <translation id="1434886155212424586">Trang chủ là trang Thẻ mới</translation> +<translation id="1435515966666225466">Được phép sử dụng trình bổ trợ để truy cập vào máy tính của bạn</translation> <translation id="1436390408194692385">Có hiệu lực trong <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Tiếp tục thiết lập</translation> <translation id="1436784010935106834">Đã xóa</translation> @@ -473,6 +476,7 @@ <translation id="1530838837447122178">Mở cài đặt thiết bị chuột và bàn di chuột</translation> <translation id="1531004739673299060">Cửa sổ ứng dụng</translation> <translation id="1531275250079031713">Hiển thị hộp thoại "Thêm Wi-Fi mới"</translation> +<translation id="1535228823998016251">Lớn</translation> <translation id="1536754031901697553">Đang ngắt kết nối...</translation> <translation id="1537254971476575106">Phóng to toàn bộ màn hình</translation> <translation id="15373452373711364">Con trỏ chuột lớn</translation> @@ -556,6 +560,7 @@ <translation id="1627408615528139100">Đã tải xuống</translation> <translation id="1628948239858170093">Quét tệp trước khi mở?</translation> <translation id="1629314197035607094">Mật khẩu đã hết hạn</translation> +<translation id="163072119192489970">Được phép kết thúc quá trình gửi và nhận dữ liệu</translation> <translation id="1630768113285622200">Khởi động lại và tiếp tục</translation> <translation id="1632082166874334883">Mật khẩu đã lưu trữ trong Tài khoản Google của bạn</translation> <translation id="1632803087685957583">Cho phép bạn điều chỉnh tốc độ lặp lại, tính năng dự đoán từ và các chức năng khác của bàn phím</translation> @@ -753,6 +758,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> đã bị vô hiệu hóa</translation> <translation id="184273675144259287">Thay thế các ứng dụng và tệp Linux của bạn bằng bản sao lưu trước đó</translation> <translation id="1842766183094193446">Bạn có chắc chắn muốn bật chế độ minh họa không?</translation> +<translation id="1845727111305721124">Được phép phát âm thanh</translation> <translation id="1846308012215045257">Giữ Control khi nhấp để chạy <ph name="PLUGIN_NAME" /></translation> <translation id="1849186935225320012">Trang này có quyền kiểm soát toàn bộ thiết bị MIDI.</translation> <translation id="1850508293116537636">Xoay &theo chiều kim đồng hồ</translation> @@ -777,6 +783,7 @@ <translation id="187145082678092583">Ẩn bớt ứng dụng</translation> <translation id="1871534214638631766">Hiển thị thông tin liên quan khi bạn nhấp chuột phải hoặc nhấn và giữ vào nội dung</translation> <translation id="1871615898038944731"><ph name="DEVICE_TYPE" /> của bạn đã cập nhật</translation> +<translation id="1874248162548993294">Được phép hiển thị quảng cáo bất kỳ</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Di chuyển thẻ sang một cửa sổ khác}other{Di chuyển các thẻ sang một cửa sổ khác}}</translation> <translation id="1875386316419689002">Thẻ này kết nối với một thiết bị HID.</translation> <translation id="1875387611427697908">Chỉ có thể thêm ứng dụng/tiện ích này từ <ph name="CHROME_WEB_STORE" /></translation> @@ -832,6 +839,7 @@ <translation id="1931152874660185993">Không có thành phần nào được cài đặt.</translation> <translation id="1932098463447129402">Không được Trước</translation> <translation id="1933809209549026293">Hãy kết nối chuột hoặc bàn phím. Nếu bạn đang sử dụng thiết bị Bluetooth, hãy đảm bảo thiết bị đã sẵn sàng ghép nối.</translation> +<translation id="1935303383381416800">Được phép xem vị trí của bạn</translation> <translation id="1936931585862840749">Hãy dùng số để biểu thị số lượng bản cần in (1 đến <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Không thể nhập loại kiến trúc vùng chứa <ph name="ARCHITECTURE_CONTAINER" /> bằng thiết bị thuộc loại <ph name="ARCHITECTURE_DEVICE" /> này. Bạn có thể thử khôi phục vùng chứa này vào một thiết bị khác hoặc truy cập vào các tệp bên trong hình ảnh vùng chứa này bằng cách mở trong ứng dụng Files.</translation> <translation id="1938351510777341717">Lệnh bên ngoài</translation> @@ -949,6 +957,7 @@ <translation id="2090165459409185032">Để khôi phục thông tin tài khoản của bạn, hãy truy cập: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Cài đặt bảo mật hệ thống</translation> <translation id="2091887806945687916">Âm thanh</translation> +<translation id="209539936453343974">Để thiết lập quyền kiểm soát của cha mẹ, trẻ phải có Tài khoản Google do cha/mẹ quản lý. Với <ph name="DEVICE_TYPE_PLURAL" />, cha mẹ có thể dùng ứng dụng Family Link để đặt giới hạn thời gian sử dụng thiết bị, phê duyệt hoặc chặn các trang web và làm nhiều việc khác. Nếu trẻ cần làm bài tập trên các trang web như Google Lớp học, bạn có thể thêm tài khoản trường học vào lúc khác.</translation> <translation id="2096715839409389970">Xóa cookie của bên thứ ba</translation> <translation id="2097372108957554726">Bạn cần đăng nhập Chrome để đăng ký thiết bị mới</translation> <translation id="2098805196501063469">Kiểm tra các mật khẩu còn lại</translation> @@ -1099,6 +1108,7 @@ <translation id="2261323523305321874">Quản trị viên của bạn đã thực hiện thay đổi trên toàn bộ hệ thống làm vô hiệu hóa một số hồ sơ cũ.</translation> <translation id="2262332168014443534">Chế độ thu gọn giờ đây giúp duyệt web nhanh hơn trên tất cả các trang, kể cả HTTPS.</translation> <translation id="2262477216570151239">Độ trễ trước khi lặp lại</translation> +<translation id="2262888617381992508">Không cho phép phát nội dung được bảo vệ</translation> <translation id="2263189956353037928">Đăng xuất và đăng nhập lại</translation> <translation id="2263371730707937087">Tốc độ làm mới màn hình</translation> <translation id="22665427234727190">Hỏi khi một trang web muốn truy cập vào các thiết bị Bluetooth (khuyên dùng)</translation> @@ -1367,6 +1377,7 @@ <translation id="2571655996835834626">Thay đổi các tùy chọn cài đặt kiểm soát quyền truy cập vào các tính năng của trang web, chẳng hạn như cookie, JavaScript, plugin, vị trí địa lý, micrô, máy ảnh, v.v.</translation> <translation id="2572032849266859634">Quyền truy cập chỉ đọc vào <ph name="VOLUME_NAME" /> đã được cấp.</translation> <translation id="2575247648642144396">Biểu tượng này sẽ hiển thị khi tiện ích có thể hoạt động trên trang hiện tại. Sử dụng tiện ích này bằng cách nhấp vào biểu tượng hoặc bằng cách nhấn <ph name="EXTENSION_SHORTCUT" />.</translation> +<translation id="2575441894380764255">Không được phép hiển thị quảng cáo xâm nhập hoặc quảng cáo gây hiểu nhầm</translation> <translation id="257779572837908839">Thiết lập làm Chromebox cho hội họp</translation> <translation id="2579232805407578790">Không thể kết nối với máy chủ. Vui lòng kiểm tra kết nối mạng rồi thử lại. Nếu sự cố này vẫn tiếp diễn, hãy khởi động lại Chromebook. Mã lỗi: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">Luôn cho phép <ph name="HOST" /> tải xuống nhiều tệp</translation> @@ -1633,6 +1644,7 @@ <translation id="2880660355386638022">Vị trí cửa sổ</translation> <translation id="2881076733170862447">Khi bạn nhấp vào tiện ích</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> sẽ khởi động lại và đặt lại trong giây lát</translation> +<translation id="288387288628762616">Được phép sử dụng đèn Flash</translation> <translation id="2885378588091291677">Trình quản lý tác vụ</translation> <translation id="2885729872133513017">Đã xảy ra lỗi khi giải mã phản hồi của máy chủ.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1667,6 +1679,7 @@ <translation id="2923234477033317484">Xóa tài khoản này</translation> <translation id="2926085873880284723">Khôi phục các phím tắt mặc định</translation> <translation id="2927017729816812676">Bộ nhớ đệm</translation> +<translation id="2928795416630981206">Được phép theo dõi vị trí máy ảnh của bạn</translation> <translation id="2931157624143513983">Vừa với vùng in được</translation> <translation id="2932085390869194046">Đề xuất mật khẩu...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (Tài khoản cho trẻ em)</translation> @@ -1674,6 +1687,7 @@ <translation id="2932883381142163287">Báo cáo lạm dụng</translation> <translation id="2933632078076743449">Lần cập nhật gần đây nhất</translation> <translation id="2934999512438267372">Đã cho phép toàn quyền kiểm soát các thiết bị MIDI</translation> +<translation id="2935654492420446828">Thêm một tài khoản trường học vào lúc khác</translation> <translation id="2936851848721175671">Sao lưu và khôi phục</translation> <translation id="2938225289965773019">Mở liên kết <ph name="PROTOCOL" /></translation> <translation id="2938845886082362843">Xem và xóa dữ liệu đăng nhập lưu trữ trên khóa bảo mật của bạn</translation> @@ -1777,6 +1791,7 @@ <translation id="3060379269883947824">Bật chọn để nói</translation> <translation id="3060952009917586498">Thay đổi ngôn ngữ của thiết bị. Ngôn ngữ hiện tại là <ph name="LANGUAGE" />.</translation> <translation id="3065041951436100775">Phản hồi thẻ bị lỗi.</translation> +<translation id="306535478112428611">Không được phép chỉnh sửa tệp và thư mục trên thiết bị của bạn</translation> <translation id="3065522099314259755">Độ trễ lặp lại trên bàn phím</translation> <translation id="3067198179881736288">Cài đặt ứng dụng?</translation> <translation id="3067198360141518313">Chạy plugin này</translation> @@ -1912,6 +1927,7 @@ <translation id="324849028894344899"><ph name="WINDOW_TITLE" /> - Lỗi mạng</translation> <translation id="3248902735035392926">Vấn đề an toàn rất quan trọng. Hãy dành giây lát để <ph name="BEGIN_LINK" />kiểm tra các tiện ích của bạn ngay bây giờ<ph name="END_LINK" /></translation> <translation id="3251759466064201842"><Không Thuộc Chứng chỉ></translation> +<translation id="325238099842880997">Đặt ra các quy tắc cơ bản về việc sử dụng thiết bị kỹ thuật số để định hướng hoạt động vui chơi, khám phá và làm bài tập ở nhà của trẻ</translation> <translation id="3253225298092156258">Chưa có</translation> <translation id="3253448572569133955">Tài khoản không xác định</translation> <translation id="3254084468305910013">{COUNT,plural, =0{Không phát hiện thấy vấn đề bảo mật}=1{Phát hiện thấy {COUNT} vấn đề bảo mật}other{Phát hiện thấy {COUNT} vấn đề bảo mật}}</translation> @@ -2039,6 +2055,7 @@ <translation id="3404249063913988450">Bật trình bảo vệ màn hình</translation> <translation id="3405664148539009465">Tùy chỉnh phông chữ</translation> <translation id="3405763860805964263">...</translation> +<translation id="3406290648907941085">Được phép sử dụng dữ liệu và thiết bị thực tế ảo</translation> <translation id="3406396172897554194">Tìm kiếm theo ngôn ngữ hoặc tên phương thức nhập</translation> <translation id="3406605057700382950">&Hiển thị thanh dấu trang</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Tiện ích này có thể nguy hiểm}other{Các tiện ích này có thể nguy hiểm}}</translation> @@ -2203,6 +2220,7 @@ <translation id="3586806079541226322">Không thể mở tệp này</translation> <translation id="3586931643579894722">Ẩn chi tiết</translation> <translation id="3587482841069643663">Tất cả</translation> +<translation id="3588790464166520201">Được phép cài đặt trình xử lý thanh toán</translation> <translation id="3589766037099229847">Đã chặn nội dung không an toàn</translation> <translation id="3590194807845837023">Mở khóa cấu hình và chạy lại</translation> <translation id="3590295622232282437">Đang vào phiên được quản lý.</translation> @@ -2428,6 +2446,7 @@ <translation id="3822559385185038546">Proxy này được quản trị viên của bạn thực thi</translation> <translation id="3823310065043511710">Linux nên có dung lượng tối thiểu là <ph name="INSTALL_SIZE" />.</translation> <translation id="3824621460022590830">Mã đăng ký thiết bị là không hợp lệ. Vui lòng liên hệ với quản trị viên hoặc chủ sở hữu thiết bị. Mã lỗi: <ph name="ERROR_CODE" />.</translation> +<translation id="3826071569074535339">Được phép sử dụng cảm biến chuyển động</translation> <translation id="3826440694796503677">Quản trị viên đã tắt tính năng thêm Tài khoản Google khác</translation> <translation id="3827306204503227641">Tiếp tục cho phép plugin không có hộp cát</translation> <translation id="3827774300009121996">&Toàn Màn hình</translation> @@ -2480,6 +2499,8 @@ <translation id="3873423927483480833">Hiển thị mã PIN</translation> <translation id="3873915545594852654">Đã xảy ra lỗi với ARC++.</translation> <translation id="3874164307099183178">Bật Trợ lý Google</translation> +<translation id="3877075909000773256">Các tùy chọn cài đặt Chia sẻ lân cận cho thiết bị của <ph name="USER_NAME" />, chia sẻ bằng tài khoản <ph name="USER_EMAIL" />.</translation> +<translation id="387771067039689031">Không được phép sử dụng trình bổ trợ để truy cập vào máy tính của bạn</translation> <translation id="3879748587602334249">Trình quản lý tải xuống</translation> <translation id="3881478300875776315">Ẩn bớt dòng</translation> <translation id="3882165008614329320">Video hiện có từ camera hoặc tệp</translation> @@ -2516,6 +2537,7 @@ <translation id="3919145445993746351">Để có các tiện ích trên tất cả các máy tính, hãy bật tính năng đồng bộ hóa</translation> <translation id="3920504717067627103">Chính sách Chứng chỉ</translation> <translation id="392089482157167418">Bật ChromeVox (phản hồi bằng giọng nói)</translation> +<translation id="3920909973552939961">Không được phép cài đặt trình xử lý thanh toán</translation> <translation id="3923184630988645767">Chế độ sử dụng dữ liệu</translation> <translation id="3923676227229836009">Trang này được phép xem tệp</translation> <translation id="3924145049010392604">Meta</translation> @@ -2640,6 +2662,7 @@ <translation id="4058793769387728514">Kiểm tra Tài liệu Ngay bây giờ</translation> <translation id="406070391919917862">Ứng dụng nền</translation> <translation id="4061374428807229313">Để chia sẻ, hãy nhấp chuột phải vào một thư mục trong ứng dụng Files rồi chọn "Chia sẻ với ứng dụng Parallels Desktop".</translation> +<translation id="406213378265872299">Chế độ hoạt động tùy chỉnh</translation> <translation id="4065876735068446555">Mạng 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> <translation id="4066207411788646768">Vui lòng kiểm tra kết nối của bạn để xem các máy in hiện có trong mạng</translation> <translation id="4068776064906523561">Vân tay đã lưu</translation> @@ -2787,6 +2810,7 @@ <translation id="425573743389990240">Tốc độ phóng điện của pin tính bằng Watt (giá trị âm có nghĩa là đang sạc pin)</translation> <translation id="4256316378292851214">Lưu &Video Dưới dạng...</translation> <translation id="4258348331913189841">Hệ thống tệp</translation> +<translation id="4259388776256904261">Quá trình này có thể mất một chút thời gian</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> có thể nguy hiểm. Bạn có muốn gửi tệp tới Chương trình Bảo vệ nâng cao của Google để quét không? Hãy nhấn tổ hợp phím Shift+F6 để chuyển tới khu vực thanh tệp tải xuống.</translation> <translation id="4263223596040212967">Kiểm tra bố cục bàn phím rồi thử lại.</translation> <translation id="4263757076580287579">Đăng ký máy in đã bị hủy.</translation> @@ -2894,6 +2918,7 @@ <translation id="4400632832271803360">Giữ phím Trình khởi chạy để chuyển đổi chức năng của các phím hàng trên cùng</translation> <translation id="4400963414856942668">Bạn có thể nhấp vào dấu sao để đánh dấu một thẻ</translation> <translation id="4403775189117163360">Chọn một thư mục khác</translation> +<translation id="440391631796167175">Không phát hiện thấy mật khẩu yếu</translation> <translation id="4404136731284211429">Quét lại</translation> <translation id="4404843640767531781">Cha mẹ bạn đã chặn <ph name="APP_NAME" />. Hãy xin phép cha mẹ cấp quyền sử dụng ứng dụng này.</translation> <translation id="4405117686468554883">*.jpeg, *.jpg, *.png</translation> @@ -2938,6 +2963,7 @@ <translation id="4450974146388585462">Chẩn đoán</translation> <translation id="4451479197788154834">Mật khẩu của bạn được lưu trên thiết bị này và trong Tài khoản Google</translation> <translation id="4451757071857432900">Đã chặn trên những trang web hiển thị quảng cáo xâm nhập hoặc quảng cáo gây hiểu nhầm (khuyên dùng)</translation> +<translation id="4453205916657964690">Mặt nạ mạng con</translation> <translation id="4453946976636652378">Tìm kiếm <ph name="SEARCH_ENGINE_NAME" /> hoặc nhập một URL</translation> <translation id="4459169140545916303">Hoạt động <ph name="DEVICE_LAST_ACTIVATED_TIME" /> ngày trước</translation> <translation id="4460014764210899310">Rã nhóm</translation> @@ -2965,6 +2991,7 @@ <translation id="4481530544597605423">Thiết bị được hủy ghép nối</translation> <translation id="4483049906298469269">Không ping được cổng của mạng không phải mạng mặc định</translation> <translation id="4487489714832036847">Chromebook dùng ứng dụng thay vì phần mềm truyền thống. Hãy tải các ứng dụng để giải trí, tăng năng suất và phục vụ nhiều mục đích khác.</translation> +<translation id="4488257340342212116">Được phép sử dụng máy ảnh của bạn</translation> <translation id="4488502501195719518">Xóa tất cả dữ liệu?</translation> <translation id="449232563137139956">Các trang web thường hiển thị hình ảnh để cung cấp hình minh họa, như ảnh cho cửa hàng trực tuyến hoặc tin bài</translation> <translation id="4493468155686877504">Đề xuất (<ph name="INSTALL_SIZE" />)</translation> @@ -2997,6 +3024,7 @@ <translation id="4524832533047962394">Chế độ đăng ký đã cung cấp không được phiên bản hệ điều hành này hỗ trợ. Vui lòng đảm bảo bạn đang chạy phiên bản mới nhất.</translation> <translation id="4527186207340858212">Tạo một hồ sơ công việc mới?</translation> <translation id="452750746583162491">Xem lại các dữ liệu đã đồng bộ hóa của bạn</translation> +<translation id="4527929807707405172">Bật chế độ cuộn ngược. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="4528494169189661126">Bản dịch đề xuất</translation> <translation id="4530494379350999373">Nguồn gốc</translation> <translation id="4531924570968473143">Bạn muốn thêm ai vào chiếc <ph name="DEVICE_TYPE" /> này?</translation> @@ -3017,6 +3045,7 @@ <translation id="4545028762441890696">Để bật lại, hãy chấp nhận các quyền mới:</translation> <translation id="4545759655004063573">Không thể lưu do không đủ quyền. Hãy lưu vào một vị trí khác.</translation> <translation id="4546308221697447294">Duyệt web nhanh bằng Google Chrome</translation> +<translation id="4546345569117159016">Nút chuột phải</translation> <translation id="4546692474302123343">Tính năng nhập bằng giọng nói của Trợ lý Google</translation> <translation id="4547659257713117923">Không có thẻ nào từ thiết bị khác</translation> <translation id="4547672827276975204">Tự động đặt</translation> @@ -3076,6 +3105,7 @@ <translation id="4608500690299898628">&Tìm...</translation> <translation id="4608520674724523647">Minh họa đăng ký thành công</translation> <translation id="4608703838363792434">Tệp <ph name="FILE_NAME" /> có chứa nội dung nhạy cảm</translation> +<translation id="4609987916561367134">Được phép sử dụng JavaScript</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> đã gặp lỗi</translation> <translation id="4610637590575890427">Có phải ý bạn là chuyển đến <ph name="SITE" /> không?</translation> <translation id="4611114513649582138">Kết nối dữ liệu có sẵn</translation> @@ -3187,6 +3217,7 @@ <translation id="473775607612524610">Cập nhật</translation> <translation id="473936925429402449">Nội dung bổ sung đã chọn <ph name="CURRENT_ELEMENT" />/<ph name="TOTAL_ELEMENTS" /></translation> <translation id="4739639199548674512">Phiếu</translation> +<translation id="4742334355511750246">Không được phép hiển thị hình ảnh</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Tìm hiểu cách cập nhật ứng dụng<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Bật âm thanh trang web}other{Bật âm thanh các trang web}}</translation> <translation id="4746351372139058112">Tin nhắn</translation> @@ -3322,6 +3353,7 @@ <translation id="4908811072292128752">Mở thẻ mới để duyệt hai trang web cùng lúc</translation> <translation id="4909038193460299775">Vì tài khoản này do <ph name="DOMAIN" /> quản lý nên dấu trang, lịch sử, mật khẩu và các cài đặt khác của bạn sẽ bị xóa khỏi thiết bị này. Tuy nhiên, dữ liệu của bạn sẽ vẫn được lưu trữ trong Tài khoản Google và có thể được quản lý trên <ph name="BEGIN_LINK" />Trang tổng quan Google<ph name="END_LINK" />.</translation> <translation id="4912643508233590958">Đánh thức khỏi chế độ rảnh</translation> +<translation id="4915961947098019832">Được phép hiển thị hình ảnh</translation> <translation id="4916542008280060967">Cho phép trang web chỉnh sửa <ph name="FILE_NAME" />?</translation> <translation id="491691592645955587">Chuyển sang trình duyệt an toàn</translation> <translation id="4917385247580444890">Mạnh</translation> @@ -3409,6 +3441,7 @@ <translation id="5027550639139316293">Chứng chỉ Email</translation> <translation id="5027562294707732951">Thêm tiện ích</translation> <translation id="5029568752722684782">Xóa bản sao</translation> +<translation id="5033137252639132982">Không được phép sử dụng cảm biến chuyển động</translation> <translation id="5033266061063942743">Hình dạng hình học</translation> <translation id="5036662165765606524">Không cho phép bất kỳ trang web nào tự động tải nhiều tệp xuống</translation> <translation id="5037676449506322593">Chọn Tất cả</translation> @@ -3458,6 +3491,7 @@ <translation id="5088172560898466307">Tên máy chủ</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 Với Mã hóa RSA</translation> <translation id="5089810972385038852">Tỉnh</translation> +<translation id="5090637338841444533">Không được phép theo dõi vị trí máy ảnh của bạn</translation> <translation id="5094721898978802975">Kết nối với ứng dụng gốc hợp tác</translation> <translation id="5097002363526479830">Không thể kết nối với mạng '<ph name="NAME" />': <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Công cụ: <ph name="PRINT_NAME" /></translation> @@ -3766,6 +3800,7 @@ <translation id="5471768120198416576">Chào bạn! Đây là giọng nói của tính năng chuyển văn bản sang lời nói.</translation> <translation id="5472627187093107397">Lưu mật khẩu cho trang web này</translation> <translation id="5473333559083690127">Nhập lại mã PIN mới</translation> +<translation id="5481273127572794904">Không được phép tự động tải nhiều tệp xuống</translation> <translation id="5481941284378890518">Thêm máy in lân cận</translation> <translation id="5483785310822538350">Thu hồi quyền truy cập vào tệp và thiết bị</translation> <translation id="5485080380723335835"><ph name="DEVICE_TYPE" /> của bạn bị khóa vì lý do bảo mật. Hãy nhập thủ công mật khẩu của bạn để tiếp tục.</translation> @@ -3787,6 +3822,7 @@ <translation id="5495466433285976480">Quá trình này sẽ xóa tất cả dữ liệu, tệp, người dùng trên máy và các cài đặt khác sau khi bạn khởi động lại vào lần kế tiếp. Tất cả người dùng sẽ cần đăng nhập lại.</translation> <translation id="5495597166260341369">Luôn bật màn hình</translation> <translation id="5496587651328244253">Tổ chức</translation> +<translation id="5496730470963166430">Không được phép gửi cửa sổ bật lên hoặc dùng lệnh chuyển hướng</translation> <translation id="5497251278400702716">Tệp này</translation> <translation id="5498967291577176373">Viết nhanh hơn nhờ nội dung đề xuất cùng dòng về tên, địa chỉ hoặc số điện thoại của bạn</translation> <translation id="5499313591153584299">Tệp này có thể có hại cho máy tính của bạn.</translation> @@ -3794,6 +3830,7 @@ <translation id="5500709606820808700">Tính năng kiểm tra an toàn đã chạy hôm nay</translation> <translation id="5501809658163361512">{COUNT,plural, =1{Không nhận được <ph name="ATTACHMENTS" /> từ thiết bị <ph name="DEVICE_NAME" />}other{Không nhận được <ph name="ATTACHMENTS" /> từ thiết bị <ph name="DEVICE_NAME" />}}</translation> <translation id="5502500733115278303">Đã nhập từ Firefox</translation> +<translation id="5502915260472117187">Trẻ</translation> <translation id="5503982651688210506">Tiếp tục cho phép <ph name="HOST" /> dùng và di chuyển máy ảnh, cũng như sử dụng micrô</translation> <translation id="5505264765875738116">Các trang web không thể xin phép gửi thông báo</translation> <translation id="5505307013568720083">Hết mực</translation> @@ -3881,6 +3918,7 @@ <translation id="5596627076506792578">Tùy chọn khác</translation> <translation id="5600706100022181951">Bản cập nhật sẽ được tải xuống bằng cách dùng <ph name="UPDATE_SIZE_MB" /> MB dữ liệu di động. Bạn có muốn tiếp tục không?</translation> <translation id="5601503069213153581">Mã PIN</translation> +<translation id="5601823921345337195">Không được phép kết nối với các thiết bị MIDI</translation> <translation id="5602765853043467355">Xóa dấu trang, lịch sử, mật khẩu và nhiều nội dung khác từ thiết bị này</translation> <translation id="5605623530403479164">Công cụ tìm kiếm khác</translation> <translation id="5605758115928394442">Chúng tôi đã gửi một thông báo đến điện thoại của bạn để xác nhận đó là bạn.</translation> @@ -4001,6 +4039,7 @@ <translation id="5747552184818312860">Hết hạn</translation> <translation id="5747785204778348146">Nhà phát triển - không chính thức</translation> <translation id="5747809636523347288">Dá&n và truy cập <ph name="URL" /></translation> +<translation id="5754152670305761216">Cho phép phát nội dung được bảo vệ</translation> <translation id="5756163054456765343">Trung tâm trợ g&iúp</translation> <translation id="5759728514498647443">Tài liệu bạn gửi để in qua <ph name="APP_NAME" /> có thể đọc được bằng <ph name="APP_NAME" />.</translation> <translation id="5763751966069581670">Không tìm thấy thiết bị USB nào</translation> @@ -4469,6 +4508,7 @@ <translation id="6295158916970320988">Tất cả các trang web</translation> <translation id="6295855836753816081">Đang lưu...</translation> <translation id="6298962879096096191">Sử dụng Google Play để cài đặt các ứng dụng Android</translation> +<translation id="6300177430812514606">Không được phép kết thúc quá trình gửi hoặc nhận dữ liệu</translation> <translation id="630065524203833229">T&hoát</translation> <translation id="6300718114348072351">Không thể tự động định cấu hình cho <ph name="PRINTER_NAME" />. Vui lòng chỉ định các tùy chọn cài đặt nâng cao cho máy in. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Để tách biệt giữa hoạt động duyệt web cá nhân và hoạt động duyệt web của <ph name="EXISTING_USER" />, hãy tạo một hồ sơ mới cho <ph name="NEW_USER" /></translation> @@ -4546,6 +4586,7 @@ <translation id="6390020764191254941">Di chuyển thẻ sang cửa sổ mới</translation> <translation id="6390799748543157332">Những trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử trình duyệt và sẽ không để lại các dấu vết khác như cookie trên máy tính sau khi bạn đóng tất cả cửa sổ Khách đang mở. Tuy nhiên, bất kỳ tệp nào bạn tải xuống cũng sẽ được giữ nguyên.</translation> <translation id="6393156038355142111">Đề xuất mật khẩu mạnh</translation> +<translation id="6393550101331051049">Được phép hiển thị nội dung không an toàn</translation> <translation id="6395423953133416962">Gửi <ph name="BEGIN_LINK1" />thông tin hệ thống<ph name="END_LINK1" /> và <ph name="BEGIN_LINK2" />số liệu<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">Chặn không cho các trang web sử dụng cảm biến chuyển động</translation> <translation id="6398715114293939307">Xóa Cửa hàng Google Play</translation> @@ -4578,6 +4619,7 @@ <translation id="6425556984042222041">Tốc độ lời nói của tính năng chuyển văn bản sang lời nói</translation> <translation id="6426200009596957090">Mở cài đặt ChromeVox</translation> <translation id="642654727595919401"><ph name="DOMAIN" /> yêu cầu bạn sao lưu dữ liệu và trả lại thiết bị <ph name="DEVICE_TYPE" /> này trong vòng 1 tuần.<ph name="LINK_BEGIN" />Xem thông tin chi tiết<ph name="LINK_END" /></translation> +<translation id="642729974267661262">Không được phép phát âm thanh</translation> <translation id="6428982734197629783">Đang xử lý hình ảnh</translation> <translation id="6429384232893414837">Lỗi cập nhật</translation> <translation id="6430814529589430811">ASCII được mã hóa base64, chứng chỉ đơn</translation> @@ -4606,6 +4648,7 @@ <translation id="6458701200018867744">Không tải lên được (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Sử dụng Phần lựa chọn cho Tìm kiếm</translation> <translation id="6459799433792303855">Cửa sổ đang hoạt động được di chuyển sang màn hình khác.</translation> +<translation id="6460566145397380451">Được phép kết nối với các thiết bị MIDI</translation> <translation id="6460601847208524483">Tìm Tiếp theo</translation> <translation id="6461170143930046705">Đang tìm mạng...</translation> <translation id="6463795194797719782">&Chỉnh sửa</translation> @@ -4637,6 +4680,7 @@ <translation id="6499681088828539489">Không cho phép proxy đối với các mạng chia sẻ</translation> <translation id="650266656685499220">Để tạo album, hãy chuyển đến Google Photos</translation> <translation id="6503077044568424649">Truy cập nhiều nhất</translation> +<translation id="650457560773015827">Nút chuột trái</translation> <translation id="6504611359718185067">Kết nối với Internet để thêm máy in</translation> <translation id="6506374932220792071">Chữ ký X9.62 ECDSA với SHA-256</translation> <translation id="6508248480704296122">Liên quan tới <ph name="NAME_PH" /></translation> @@ -4838,6 +4882,7 @@ <translation id="676560328519657314">Phương thức thanh toán của bạn trong Google Pay</translation> <translation id="6767566652486411142">Chọn ngôn ngữ khác...</translation> <translation id="6767639283522617719">Không thể kết hợp miền. Hãy đảm bảo các tùy chọn cài đặt cho đơn vị tổ chức là chính xác.</translation> +<translation id="6768034047581882264">Không được phép hiển thị nội dung không an toàn</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> yêu cầu bạn phải cập nhật thiết bị này.</translation> <translation id="6769712124046837540">Đang thêm máy in...</translation> <translation id="6770602306803890733">Tăng cường bảo mật cho bạn và mọi người trên web</translation> @@ -4929,6 +4974,7 @@ <translation id="6865313869410766144">Dữ liệu tự động điền vào biểu mẫu</translation> <translation id="6865598234501509159">Trang không viết bằng <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">Nhật ký sự kiện WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> +<translation id="686609795364435700">Yên lặng</translation> <translation id="686664946474413495">Nhiệt độ màu</translation> <translation id="6868934826811377550">Xem thông tin chi tiết</translation> <translation id="6871644448911473373">Phản hồi OCSP: <ph name="LOCATION" /></translation> @@ -4978,6 +5024,7 @@ <translation id="6922745772873733498">Nhập một mã pin để in</translation> <translation id="6923132443355966645">Cuộn / Nhấp</translation> <translation id="6923633482430812883">Lỗi kết nối mục chia sẻ. Vui lòng kiểm tra để đảm bảo rằng máy chủ tệp mà bạn đang kết nối hỗ trợ SMBv2 trở lên.</translation> +<translation id="6929126689972602640">Tài khoản trường học không hỗ trợ quyền kiểm soát của cha mẹ. Nếu bạn muốn thêm một tài khoản trường học nhằm truy cập vào Google Lớp học và các trang web khác để làm bài tập ở nhà, trước tiên, hãy đăng nhập bằng tài khoản cá nhân của trẻ. Bạn có thể thêm tài khoản trường học vào lúc khác trong phần cài đặt.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">Khóa bảo mật bên ngoài hoặc cảm biến tích hợp</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{1 tiện ích đã bị từ chối}other{# tiện ích đã bị từ chối}}</translation> @@ -5018,6 +5065,7 @@ <translation id="6972629891077993081">Thiết bị HID</translation> <translation id="6972754398087986839">Bắt đầu</translation> <translation id="6972887130317925583">Đã đổi thành công mật khẩu bị lộ. Bạn có thể kiểm tra mật khẩu bất cứ lúc nào trong phần <ph name="SETTINGS" />.</translation> +<translation id="697312151395002334">Được phép gửi cửa sổ bật lên và dùng lệnh chuyển hướng</translation> <translation id="6973611239564315524">Đã có bản nâng cấp lên Debian 10 (Buster)</translation> <translation id="6974609594866392343">Chế độ minh họa ngoại tuyến</translation> <translation id="6977381486153291903">Hiệu chỉnh chương trình cơ sở</translation> @@ -5040,6 +5088,7 @@ <translation id="6995899638241819463">Cảnh báo bạn nếu mật khẩu bị lộ trong một sự cố rò rỉ dữ liệu</translation> <translation id="6997642619627518301"><ph name="NAME_PH" /> - Nhật ký hoạt động</translation> <translation id="6997707937646349884">Trên các thiết bị của bạn:</translation> +<translation id="6998093258894828179">Ẩn thẻ</translation> <translation id="6998793565256476099">Đăng ký thiết bị tham gia hội nghị truyền hình</translation> <translation id="6999956497249459195">Nhóm mới</translation> <translation id="7000206553895739324"><ph name="PRINTER_NAME" /> đã kết nối nhưng cần định cấu hình</translation> @@ -5056,6 +5105,7 @@ <translation id="7005848115657603926">Phạm vi trang không hợp lệ, sử dụng <ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">Lề dưới</translation> <translation id="7007648447224463482">Mở tất cả trong cửa sổ mới</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> đang sử dụng máy ảnh của bạn</translation> <translation id="701080569351381435">Xem Nguồn</translation> <translation id="7014174261166285193">Cài đặt không thành công.</translation> <translation id="7017004637493394352">Nói "Ok Google" lần nữa</translation> @@ -5075,6 +5125,7 @@ <translation id="7038632520572155338">Tiếp cận bằng công tắc</translation> <translation id="7039326228527141150">Truy cập thiết bị USB từ <ph name="VENDOR_NAME" /></translation> <translation id="7039912931802252762">Đăng nhập Thẻ Thông minh của Microsoft</translation> +<translation id="7039951224110875196">Tạo Tài khoản Google cho trẻ</translation> <translation id="7040230719604914234">Nhà mạng</translation> <translation id="7043108582968290193">Xong! Không tìm thấy ứng dụng nào không tương thích.</translation> <translation id="7044124535091449260">Tìm hiểu thêm về quyền truy cập vào trang web</translation> @@ -5146,6 +5197,7 @@ <translation id="7121362699166175603">Xóa lịch sử duyệt web và nội dung tự động hoàn thành trong thanh địa chỉ. Tài khoản Google của bạn có thể có các dạng lịch sử duyệt web khác tại <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation> <translation id="7121438501124788993">Chế độ nhà phát triển</translation> <translation id="7121728544325372695">Dấu gạch ngang thông minh</translation> +<translation id="7123030151043029868">Được phép tự động tải nhiều tệp xuống</translation> <translation id="7123360114020465152">Không còn được hỗ trợ</translation> <translation id="7125148293026877011">Xóa Crostini</translation> <translation id="7127980134843952133">Lịch sử tải xuống</translation> @@ -5160,6 +5212,7 @@ <translation id="7136984461011502314">Chào mừng bạn đến với <ph name="PRODUCT_NAME" /></translation> <translation id="7136993520339022828">Đã xảy ra lỗi. Vui lòng thử lại bằng cách chọn các hình ảnh khác.</translation> <translation id="713888829801648570">Rất tiếc, không thể xác minh mật khẩu của bạn vì bạn hiện ngoại tuyến.</translation> +<translation id="7139627972753429585"><ph name="APP_NAME" /> đang sử dụng micrô của bạn</translation> <translation id="7140928199327930795">Hiện không có thiết bị nào khác.</translation> <translation id="7141105143012495934">Đăng nhập không thành công vì không thể truy xuất chi tiết tài khoản của bạn. Vui lòng liên hệ với quản trị viên của bạn hoặc thử lại.</translation> <translation id="7143207342074048698">Đang kết nối</translation> @@ -5299,6 +5352,7 @@ <translation id="7324297612904500502">Diễn đàn beta</translation> <translation id="7325209047678309347">Kẹt giấy</translation> <translation id="7325437708553334317">Tiện ích tương phản cao</translation> +<translation id="7326004502692201767">Thiết lập <ph name="DEVICE_TYPE" /> này cho trẻ</translation> <translation id="7328699668338161242">Trợ lý đã có thể nhận dạng giọng nói của bạn</translation> <translation id="7328867076235380839">Tổ hợp phím không hợp lệ</translation> <translation id="7329154610228416156">Đăng nhập không thành công vì đã được định cấu hình sử dụng URL không an toàn (<ph name="BLOCKED_URL" />). Vui lòng liên hệ với quản trị viên của bạn.</translation> @@ -5423,6 +5477,7 @@ <translation id="7465635034594602553">Đã xảy ra lỗi. Vui lòng đợi vài phút rồi chạy lại <ph name="APP_NAME" />.</translation> <translation id="7465778193084373987">ULR Thu hồi của Tổ chức Cấp Chứng chỉ Netscape</translation> <translation id="7469894403370665791">Tự động kết nối vào mạng này</translation> +<translation id="7470424110735398630">Được phép xem khay nhớ tạm của bạn</translation> <translation id="747114903913869239">Lỗi: Không thể giải mã tiện ích</translation> <translation id="7473891865547856676">Không, cảm ơn</translation> <translation id="747459581954555080">Khôi phục tất cả</translation> @@ -5532,6 +5587,7 @@ <translation id="7607002721634913082">Đã tạm dừng</translation> <translation id="7608810328871051088">Các tùy chọn Android</translation> <translation id="7609148976235050828">Vui lòng kết nối với Internet và thử lại.</translation> +<translation id="7612655942094160088">Bật các tính năng trên điện thoại đã kết nối.</translation> <translation id="7614260613810441905">Hỏi khi một trang web muốn chỉnh sửa các tệp hoặc thư mục trên thiết bị (khuyên dùng)</translation> <translation id="761530003705945209">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 cứ lúc nào. Nội dung sao lưu của bạn bao gồm các dữ liệu ứng dụng. Các bản sao lưu được tải lên Google và mã hóa bằng mật khẩu Tài khoản Google của bạn.</translation> <translation id="7615365294369022248">Đã xảy ra lỗi khi thêm một tài khoản</translation> @@ -5650,6 +5706,7 @@ <translation id="7732111077498238432">Mạng được kiểm soát bằng chính sách</translation> <translation id="7737115349420013392">Đang ghép nối với "<ph name="DEVICE_NAME" />"...</translation> <translation id="7737238973539693982">Xóa Linux (Beta)</translation> +<translation id="7737948071472253612">Không được phép sử dụng máy ảnh của bạn</translation> <translation id="7740996059027112821">Chuẩn</translation> <translation id="7742706086992565332">Bạn có thể đặt mức phóng to hoặc thu nhỏ trên một số trang web</translation> <translation id="774377079771918250">Chọn vị trí lưu</translation> @@ -5658,6 +5715,7 @@ <translation id="7750228210027921155">Hình trong hình</translation> <translation id="7751260505918304024">Hiển thị tất cả</translation> <translation id="7753735457098489144">Cài đặt không thành công do thiếu dung lượng bộ nhớ. Để giải phóng dung lượng, hãy xóa bớt tệp khỏi bộ nhớ của thiết bị.</translation> +<translation id="7754347746598978109">Không được phép sử dụng JavaScript</translation> <translation id="7754704193130578113">Hỏi vị trí lưu từng tệp trước khi tải xuống</translation> <translation id="7755287808199759310">Cha mẹ của bạn có thể bỏ chặn trang web cho bạn</translation> <translation id="7757592200364144203">Thay đổi tên thiết bị</translation> @@ -5710,6 +5768,7 @@ <translation id="7798844538707273832">Đã tự động chặn <ph name="PERMISSION" /></translation> <translation id="7799299114731150374">Đã đặt hình nền thành công</translation> <translation id="7800518121066352902">Xoay &ngược chiều kim đồng hồ</translation> +<translation id="7802539296536804623">Không hiển thị thẻ trên trang này</translation> <translation id="780301667611848630">Không, cảm ơn</translation> <translation id="7804072833593604762">Đã đóng thẻ</translation> <translation id="7805768142964895445">Trạng thái</translation> @@ -6138,6 +6197,7 @@ <translation id="826905130698769948">Chứng chỉ ứng dụng khách không hợp lệ</translation> <translation id="8270242299912238708">Tài liệu PDF</translation> <translation id="827097179112817503">Hiển thị nút trang chủ</translation> +<translation id="8271379370373330993">Cha mẹ chỉ cần thực hiện một vài bước nữa là xong. Bạn có thể đưa <ph name="DEVICE_TYPE" /> lại cho trẻ sau khi thiết lập tài khoản.</translation> <translation id="8272443605911821513">Quản lý tiện ích của bạn bằng cách nhấp vào Tiện ích trong menu "Công cụ khác".</translation> <translation id="8274332263553132018">Truyền tệp</translation> <translation id="8274924778568117936">Không tắt hoặc đóng <ph name="DEVICE_TYPE" /> cho đến khi cập nhật xong. <ph name="DEVICE_TYPE" /> của bạn sẽ khởi động lại sau khi cài đặt xong.</translation> @@ -6161,6 +6221,7 @@ <translation id="8300011035382349091">Chỉnh sửa dấu trang cho thẻ này</translation> <translation id="8300374739238450534">Xanh đậm</translation> <translation id="8300849813060516376">OTASP không thành công</translation> +<translation id="8304383784961451596">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 hoặc đăng nhập thông qua một Tài khoản Google được giám sát bằng Family Link.</translation> <translation id="8308179586020895837">Hỏi nếu <ph name="HOST" /> muốn truy cập máy ảnh của bạn</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">Chứng chỉ đã tồn tại</translation> @@ -6174,6 +6235,7 @@ <translation id="8322814362483282060">Trang này đã bị chặn truy cập micrô của bạn.</translation> <translation id="8323167517179506834">Nhập URL</translation> <translation id="8324784016256120271">Các trang web có thể dùng cookie để giám sát hoạt động duyệt web của bạn trên nhiều trang web, chẳng hạn để điều chỉnh quảng cáo cho phù hợp với bạn</translation> +<translation id="8325413836429495820">Không được phép xem khay nhớ tạm của bạn</translation> <translation id="8326478304147373412">PKCS #7, chuỗi chứng chỉ</translation> <translation id="8327039559959785305">Lỗi khi đính kèm tệp Linux. Vui lòng thử lại.</translation> <translation id="8327676037044516220">Các tùy chọn cài đặt nội dung và quyền</translation> @@ -6223,6 +6285,7 @@ <translation id="8382913212082956454">Sao chép địa chỉ &email</translation> <translation id="8386091599636877289">Không tìm thấy chính sách.</translation> <translation id="8386903983509584791">Đã quét xong</translation> +<translation id="8387361103813440603">Không được phép xem vị trí của bạn</translation> <translation id="8389416080014625855">Tạo mã QR cho trang này</translation> <translation id="8389492867173948260">Cho phép tiện ích này đọc và thay đổi tất cả dữ liệu trên các trang web bạn truy cập:</translation> <translation id="8390449457866780408">Máy chủ không khả dụng.</translation> @@ -6407,6 +6470,7 @@ <translation id="8621866727807194849">Máy tính của bạn có phần mềm độc hại. Chrome đang xóa phần mềm này, khôi phục các tùy chọn cài đặt của bạn và tắt tiện ích. Việc này sẽ giúp trình duyệt của bạn hoạt động lại bình thường.</translation> <translation id="8621979332865976405">Chia sẻ toàn bộ màn hình</translation> <translation id="862542460444371744">&Tiện ích mở rộng</translation> +<translation id="8625663000550647058">Không được phép sử dụng micrô của bạn</translation> <translation id="862727964348362408">Bị tạm ngưng</translation> <translation id="862750493060684461">Bộ nhớ đệm CSS</translation> <translation id="8627706565932943526">Lỗi đồng bộ hóa</translation> @@ -6487,6 +6551,7 @@ <translation id="8714838604780058252">Đồ họa nền</translation> <translation id="8715480913140015283">Thẻ nền đang sử dụng máy ảnh</translation> <translation id="8716931980467311658">Bạn muốn xóa tất cả ứng dụng Linux và dữ liệu trong thư mục tệp Linux khỏi <ph name="DEVICE_TYPE" /> này?</translation> +<translation id="8717145295869185525">Không được phép sử dụng dữ liệu và thiết bị thực tế ảo</translation> <translation id="8717864919010420084">Sao chép đường liên kết</translation> <translation id="8719472795285728850">Đang nghe các hoạt động của tiện ích...</translation> <translation id="8719653885894320876">Không tải <ph name="PLUGIN_NAME" /> xuống được</translation> @@ -6908,6 +6973,7 @@ <translation id="9179734824669616955">Thiết lập Linux (Beta) trên <ph name="DEVICE_TYPE" /></translation> <translation id="9180281769944411366">Quá trình này có thể mất vài phút. Đang khởi động vùng chứa Linux.</translation> <translation id="9180380851667544951">Trang web có thể chia sẻ màn hình của bạn</translation> +<translation id="9186963452600581158">Đăng nhập bằng Tài khoản Google của trẻ</translation> <translation id="9188732951356337132">Gửi dữ liệu chẩn đoán và dữ liệu về mức sử dụng. Thiết bị này hiện tự động gửi dữ liệu chẩn đoán, dữ liệu về mức sử dụng ứng dụng và thiết bị cho Google. Những thông tin này sẽ không dùng để nhận dạng con bạn mà giúp tăng độ ổn định của hệ thống và ứng dụng cũng như cải thiện các mặt khác. Một số dữ liệu tổng hợp cũng sẽ hữu ích cho các ứng dụng và đối tác của Google, chẳng hạn như những nhà phát triển Android. Nếu bạn bật mục cài đặt bổ sung Hoạt động 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 trẻ. <ph name="BEGIN_LINK2" />Tìm hiểu thêm<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + khóa chia sẻ trước</translation> <translation id="9198090666959937775">Dùng điện thoại Android làm khóa bảo mật</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index beeb7d5..52ef82ad 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -870,6 +870,7 @@ <translation id="1976307821760494606">I-<ph name="DOMAIN" /> ikhubaze ukulungisa amaphutha e-ADB. Lokhu kuzosetha kabusha i-<ph name="DEVICE_TYPE" /> yakho emahoreni angama-24. Yenza ikhophi yasenqolobaneni noma yimaphi amafayela ongathanda ukuwagcina.</translation> <translation id="1977965994116744507">Sondeza ifoni yakho ukuze uvule i-<ph name="DEVICE_TYPE" /> yakho.</translation> <translation id="1978006917103730774">Isofthiwe yangakusasa nezibuyekezo zokuphepha zizofakwa ngokuzenzakalelayo.</translation> +<translation id="1978057560491495741">Susa ikheli</translation> <translation id="1979095679518582070">Ukuvala lesi sici akuthinti ikhono lale divayisi lokwazi ukuthumela ulwazi oludingekayo lwamasevisi abalulekile afana nezibuyekezo zesistimu nokuvikelwa.</translation> <translation id="1979280758666859181">Uguqukela kusiteshi esinenguqulo endala ye-<ph name="PRODUCT_NAME" />. Ukuguqulwa kwesiteshi kuzosetshenziswa uma inguqulo yesiteshi ifana nenguqulo efakwe okwamanje kudivayisi yakho.</translation> <translation id="197989455406964291">I-KDC ayisekeli uhlobo lokubiyela</translation> @@ -1072,6 +1073,7 @@ <translation id="2224444042887712269">Lokhu kulungiselelwa kungokwe-<ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Hlela igama lefolda</translation> <translation id="2225864335125757863">Shintsha la maphasiwedi khona manje ukugcina i-akhawunti yakho iphephile:</translation> +<translation id="2226204716217107988">Shintshela kwenye iphrofayela?</translation> <translation id="2226449515541314767">Leli sayithi livinjelwe kusuka ekubeni nokulawulwa okugcwele kwamadivayisi we-MIDI.</translation> <translation id="2226907662744526012">Vula ngokuzenzekelayo lapho Iphinikhodi isifakiwe</translation> <translation id="222704500187107962">Lokhu kukhishwa kuzosuswa ngokuzenzakalelayo ngemuva kokuphuma kuseshini ye-Incognito yamanje</translation> @@ -1141,6 +1143,7 @@ <translation id="2307462900900812319">Lungiselela inethiwekhi</translation> <translation id="230927227160767054">Leli khasi lifuna ukufaka isibambi sesevisi.</translation> <translation id="2309620859903500144">Leli sayithi livinjelwe kusukela ekufinyeleleni kuzinzwa zakho zokunyakaza noma zokukhanya.</translation> +<translation id="2312219318583366810">Ikhasi le-URL</translation> <translation id="2314165183524574721">Isethingi lamanje lokubonakala lifihliwe</translation> <translation id="2314774579020744484">Ulimi olusetshenziswe uma kuhunyushwa amakhasi</translation> <translation id="2315414688463285945">Iphutha lokulungiselela amafayela e-Linux. Sicela uzame futhi.</translation> @@ -2344,6 +2347,7 @@ <translation id="3713047097299026954">Lo khiye wokuqinisekisa ubunikazi awunayo idatha yokungena ngemvume.</translation> <translation id="3714195043138862580">Le divayisi yedemo ibekwe esimweni sokususwa ukunikezwa.</translation> <translation id="3714633008798122362">ikhalenda yewebhu</translation> +<translation id="3715954932774762075">Izinhlelo zokusebenza namawebhusayithi atholakalayo ngezilimi eziningi kuzosebenzisa ulimi lokuqala okusekelwayo kusuka kulolu hlu. Lokhu okuncanyelwayo kuvunyelaniswa namasethingi wesiphequluli sakho. <ph name="BEGIN_LINK_LEARN_MORE" />Funda kabanzi<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">Ikhasi lasekhaya</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Wena ne-Google</translation> @@ -2504,6 +2508,7 @@ <translation id="3882165008614329320">Ividiyo ekhona kusuka kukhamera noma ifayela</translation> <translation id="3886446263141354045">Isicelo sakho sokufinyelela kule sayithi sithunyelwe ku-<ph name="NAME" /></translation> <translation id="3888550877729210209">Ukuthatha amanothi nge-<ph name="LOCK_SCREEN_APP_NAME" /></translation> +<translation id="3890064827463908288">Vula ukuvumelanisa kwe-Chrome ukuze usebenzise Ukuxhumana ne-Wi-Fi</translation> <translation id="3892414795099177503">Engeza i-OpenVPN / L2TP...</translation> <translation id="3893536212201235195">Funda futhi shintsha izilungiselelo zakho zokufinyeleleka</translation> <translation id="3893630138897523026">I-ChromeVox (impendulo ekhulunywayo)</translation> @@ -3778,6 +3783,7 @@ <translation id="5449588825071916739">Beka uphawu lokubekisa wonke amathebhu</translation> <translation id="5449716055534515760">Vala iwindi</translation> <translation id="5452974209916053028">Iseshini yamanje ye-incognito: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">Ihambise ibhamuza legama-ngcazo ku-<ph name="POSITION_ON_SCREEN_FROM_LEFT" />% ngokudlula, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% phansi</translation> <translation id="5454166040603940656">ne-<ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ayivumelekile</translation> <translation id="5457459357461771897">Funda futhi ususe izithombe, umculo, nenye imidiya esuka kukhompyutha yakho</translation> @@ -3921,6 +3927,7 @@ <translation id="5602765853043467355">Sula amabhukhimakhi, umlando, amaphasiwedi, nokuningi kusuka kule divayisi</translation> <translation id="5605623530403479164">Ezinye izinjini zokusesha</translation> <translation id="5605758115928394442">Isaziso siye sathunyelwa kufoni yakho ukuze kuqinisekiswe ukuthi unguwe.</translation> +<translation id="560834977503641186">Ukuxhumana ne-Wi-Fi, Funda kabanzi</translation> <translation id="5608580678041221894">Thepha okhiye abalandelayo ukuze ulungise noma uhambise indawo yokusika</translation> <translation id="5609231933459083978">Uhlelo lokusebenza lubonakala lungavumelekile.</translation> <translation id="5610038042047936818">Shintshela kumodi yekhamera</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">Lungiselela i-Ethernet</translation> <translation id="5842497610951477805">Ukunika amandla i-Bluetooth</translation> <translation id="5843706793424741864">I-Fahrenheit</translation> +<translation id="584451707753263735">Okushuthwe Bukhoma kuyabonakala, cindezela u-F6 ukuzungezisa ukugxilisa</translation> <translation id="5844574845205796324">Phakamisa okuqukethwe okusha ongakuhlola</translation> <translation id="5846200638699387931">Iphutha lokuhambisana kwesintheksi: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Faka izibuyekezo nezinhlelo zokusebenza. Ngokuqhubeka, uyavuma ukuthi le divayisi ingalanda ngokuzenzakalelayo futhi ifake izibuyekezo nezinhlelo zokusebenza kusuka ku-Google, inkampani yakho yenethiwekhi, kanye nomkhiqizi wedivayisi yakho, okungenzeka basebenzisa idatha yeselula. Ezinye zalezi nhlelo zokusebenza zinganikezela ngokuthenga okuphakathi nohlelo.</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413">I-<ph name="FULLSCREEN_ORIGIN" /> manje sokuyisikrini esigcwele.</translation> <translation id="7340650977506865820">Isayithi labelana ngesikrini sakho</translation> <translation id="7341834142292923918">Ufuna ukufinyelela kuleli sayithi</translation> +<translation id="7343372807593926528">Sicela uchaze inkinga ngaphambi kokuthi uthumele impendulo.</translation> <translation id="7345706641791090287">Qinisekisa iphasiwedi yakho</translation> <translation id="7346909386216857016">Ok, ngiyezwa</translation> <translation id="7347452120014970266">Lokhu kuzosula yonke idatha namakhukhi alondolozwe yi-<ph name="ORIGIN_NAME" /> nezinhlelo zokusebenza zakhona ezifakiwe</translation> @@ -5783,6 +5792,7 @@ <translation id="7819857487979277519">I-PSK (i-WPA noma i-RSN)</translation> <translation id="7819992334107904369">Ukuvumelanisa kwe-Chrome</translation> <translation id="782057141565633384">K&opisha ikheli levidiyo</translation> +<translation id="7822187537422052256">Ingabe uqinisekile ukuthi ufuna ukususa le akhawunti?</translation> <translation id="7824864914877854148">Ukwenza isipele akukwazanga ukuqedwa ngenxa yephutha</translation> <translation id="7825666486843191125">Bonke abathintwayo abaseduze nawe lapho isikrini sakho sivuliwe</translation> <translation id="782590969421016895">Sebenzisa amakhasi wamanje</translation> @@ -6308,6 +6318,7 @@ <translation id="8419098111404128271">Imiphumela yosesho ye-'<ph name="SEARCH_TEXT" />'</translation> <translation id="8419368276599091549">Siyakwamukela ku-<ph name="DEVICE_TYPE" /> yakho!</translation> <translation id="8420308167132684745">Hlela okufakwa kusichazamazwi</translation> +<translation id="8421361468937925547">Okushuthwe Bukhoma (I-English kuphela)</translation> <translation id="8422787418163030046">Ithreyi alikho</translation> <translation id="8425213833346101688">Guqula</translation> <translation id="8425492902634685834">Phina kwibha yomsebenzi</translation> @@ -6336,6 +6347,7 @@ <translation id="8449036207308062757">Phatha isitoreji</translation> <translation id="8452135315243592079">I-SIM card engekho</translation> <translation id="8455026683977728932">Yehlulekile ukunika amandla isibonisi se-ADB</translation> +<translation id="8456398879271637452">Okushuthiwe Bukhoma, cindezela u-Ctrl + Back noma Ctrl + Phambili ukuzungezisa ukugxilisa</translation> <translation id="845702320058262034">Ayikwazi ukuxhuma. Qiniseka ukuthi i-bluetooth yefoni yakho ivuliwe.</translation> <translation id="8457451314607652708">Ngenisa amabhukhimakhi</translation> <translation id="8458627787104127436">Vula konke (<ph name="URL_COUNT" />) ewindini elisha</translation> @@ -6846,6 +6858,7 @@ <translation id="9027459031423301635">Vula isixhumanisi kuthebhu entsha</translation> <translation id="9030515284705930323">Inhlangano yakho ayizange inike amandla i-Google Play Isitolo se-akhawunti yakho. Xhumana nomlawuli wakho ukuze uthole olunye ulwazi.</translation> <translation id="9030785788945687215">I-Gmail</translation> +<translation id="9030855135435061269">I-<ph name="PLUGIN_NAME" /> ayisasekelwa</translation> <translation id="9031549947500880805">Yenza isipele ku-Google Drayivu. Buyisa kalula idatha yakho noma shintsha idivayisi noma kunini. Isipele sakho sihlanganisa nedatha yohlelo lokusebenza.</translation> <translation id="9033765790910064284">Qhebeka kunjalo</translation> <translation id="9033857511263905942">Namathisela</translation> @@ -6854,6 +6867,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Unomzamo owodwa osele.}one{Unemizamo engu-# esele.}other{Unemizamo engu-# esele.}}</translation> <translation id="9039663905644212491">I-PEAP</translation> <translation id="9040661932550800571">Buyekeza iphasiwedi ye-<ph name="ORIGIN" />?</translation> +<translation id="9041049756004505730">Okushuthwe Bukhoma kuyabonakala, cindezela u-⌘ + Inketho + Umcibisholo waphezulu noma umcibisholo Waphansi ukuzungezisa ukugxilisa</translation> <translation id="9041692268811217999">Ukufinyelela kumafayela asendaweni kumshini wakho kukhutshazwe umlawuli wakho</translation> <translation id="904224458472510106">Lo msebenzi awukwazi ukuhlehliswa</translation> <translation id="9042893549633094279">Ubumfihlo nokuvikeleka</translation> @@ -6892,6 +6906,7 @@ <translation id="9088446193279799727">Ayikwazanga ukulungiselela i-Linux. Xhuma ku-inthanethi uphinde uzame futhi.</translation> <translation id="9088917181875854783">Sicela uqinisekise ukuthi lokhiye wokungena uboniswa ku-"<ph name="DEVICE_NAME" />":</translation> <translation id="9089416786594320554">Izindlela zokufaka</translation> +<translation id="909108997331068008">Iphrofayela ka-<ph name="EXISTING_USER" /> isingene ngemvume kakade ku-<ph name="NEW_USER" /></translation> <translation id="9093429538970210897">Ukwenza ikhophi yasenqolobaneni yamafayela kuyanconywa uma ukuthuthukisa kungenakuqedwa. Ukuqala ukuthuthukisa kuzobangela i-Linux (Beta) ukuba ivale. Sicela ulondoloze amafayela avuliwe ngaphambi kokuqhubeka.</translation> <translation id="9094033019050270033">Buyekeza iphasiwedi</translation> <translation id="9094038138851891550">Igama lomsebenzisi alivumelekile</translation> @@ -7065,5 +7080,6 @@ <translation id="994289308992179865">Iluphi</translation> <translation id="995782501881226248">I-YouTube</translation> <translation id="996250603853062861">Isungula ukuxhumeka okuvikelekile...</translation> +<translation id="99731366405731005">Vula <ph name="LINK1_BEGIN" />Ukuvumelanisa kwe-Chrome<ph name="LINK1_END" /> ukuze usebenzise Ukuxhumana ne-Wi-Fi. <ph name="LINK2_BEGIN" />Funda kabanzi<ph name="LINK2_END" /></translation> <translation id="998747458861718449">H&lola</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index f9098e7..dd88397 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">هناك برنامج ضار على جهاز الكمبيوتر. ويمكن لمتصفِّح Chrome إزالته واستعادة إعداداتك وإيقاف الإضافات لكي يعمل متصفِّحك بشكلٍ طبيعي من جديد.</translation> <translation id="1065672644894730302">لا يمكن قراءة إعداداتك المفضّلة. قد تكون بعض الميزات غير متاحة، ولن يتم حفظ التغييرات في الإعدادات المفضّلة.</translation> <translation id="1088300314857992706">كان <ph name="USER_EMAIL_ADDRESS" /> يستخدم Chrome سابقًا</translation> +<translation id="1088654056000736875">يزيل متصفِّح Chrome حاليًا البرامج الضارّة من جهاز الكمبيوتر...</translation> <translation id="1097330777386562916">محو بيانات الموقع وملفات تعريف الارتباط عند الخروج من Chrome</translation> <translation id="110877069173485804">هذا Chrome الخاص بك</translation> <translation id="1125124144982679672">مَن يستخدم متصفِّح Chrome؟</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">يمكنك استخدام ملفات شخصية مختلفة في متصفِّح Chrome للفصل بين التصفُّح الخاص بالعمل والتصفُّح الشخصي، أو للفصل بين الأشخاص المختلفين الذين يستخدمون هذا الجهاز.</translation> <translation id="137466361146087520">الإصدار التجريبي من Google Chrome</translation> <translation id="1399397803214730675">يحتوي جهاز الكمبيوتر هذا على نسخة أحدث من Google Chrome. إذا كان برنامج Google Chrome لا يعمل، يُرجى إزالة Google Chrome وإعادة المحاولة.</translation> +<translation id="140541193409212341">حدث خطأ أثناء تحقُّق متصفِّح Chrome من البرامج الضارّة على جهاز الكمبيوتر.</translation> <translation id="1434626383986940139">تطبيقات Chrome Canary</translation> <translation id="1513277449617685876">للفصل بين التصفُّح الشخصي والتصفُّح باستخدام حساب <ph name="NEW_USER" />، يمكنك إنشاء ملف شخصي جديد على متصفِّح Chrome.</translation> <translation id="1553358976309200471">تحديث Chrome</translation> @@ -57,6 +59,7 @@ <translation id="2429317896000329049">تعذر على Google Chrome مزامنة البيانات نظرًا لأن المزامنة غير متاحة في نطاقك.</translation> <translation id="2467438592969358367">يرغب Google Chrome في تصدير كلمات مرورك، لذا يُرجى كتابة كلمة مرور Windows للسماح بذلك.</translation> <translation id="2485422356828889247">إزالة التثبيت</translation> +<translation id="252502352004572774">يتحقّق متصفِّح Chrome حاليًا من البرامج الضارّة على جهاز الكمبيوتر...</translation> <translation id="2534507159460261402">Google Pay (تم النسخ إلى Chrome)</translation> <translation id="2580411288591421699">لا يمكن تثبيت نفس الإصدار المثبت من Google Chrome والذي يتم تشغيله حاليًا. يُرجى إغلاق Google Chrome وإعادة المحاولة.</translation> <translation id="2586406160782125153">سيؤدي هذا إلى حذف بيانات التصفح من هذا الجهاز. لاسترداد بياناتك لاحقًا، سجّل الدخول إلى Chrome كـ <ph name="USER_EMAIL" />.</translation> @@ -111,10 +114,12 @@ <translation id="4050175100176540509">تحسينات الأمان المهمة والميزات الجديدة متاحة في أحدث إصدار.</translation> <translation id="4053720452172726777">تخصيص Google Chrome والتحكم فيه</translation> <translation id="4110895483821904099">إعداد ملفك الشخصي الجديد على متصفِّح Chrome</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل دقيقة واحدة.}zero{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقيقة.}two{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل دقيقتَين ({NUM_MINS}).}few{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقائق.}many{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقيقة.}other{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_MINS} دقيقة.}}</translation> <translation id="4143243756087420366">الاسم والصورة على Chrome</translation> <translation id="4147555960264124640">إنك تسجل الدخول باستخدام حساب مُدار وتمنح المشرف إمكانية التحكم في ملفك الشخصي في Google Chrome. وسيتم ربط بيانات Chrome التابعة لك، مثل التطبيقات والإشارات المرجعية والسجلّ وكلمات المرور والإعدادات الأخرى بالمستخدم <ph name="USER_NAME" />. وستتمكن من حذف هذه البيانات عبر لوحة تحكم حسابات Google، ولكنك لن تتمكن من إقران هذه البيانات بحساب آخر. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">فشلت أداة المثبِّت في فك ضغط الأرشيف. يُرجى تنزيل Google Chrome مرة أخرى.</translation> <translation id="4191857738314598978">{0,plural, =1{يجب إعادة تشغيل Chrome في غضون يوم واحد}zero{يجب إعادة تشغيل Chrome في غضون # يوم}two{يجب إعادة تشغيل Chrome في غضون يومين}few{يجب إعادة تشغيل Chrome في غضون # أيام}many{يجب إعادة تشغيل Chrome في غضون # يومًا}other{يجب إعادة تشغيل Chrome في غضون # يوم}}</translation> +<translation id="4205362703535890467">لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق يوم أمس.</translation> <translation id="4205939740494406371">يتعذّر على Chrome التحقُّق من كلمات المرور. يُرجى إعادة المحاولة بعد 24 ساعة أو <ph name="BEGIN_LINK" />التحقُّق من كلمات المرور في حسابك على Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">هل تريد تسجيل الخروج من Chrome؟</translation> <translation id="4251615635259297716">هل ترغب في ربط بياناتك في Chrome بهذا الحساب؟</translation> @@ -143,6 +148,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">قد يكون هذا الملف ضارًا، لذلك فقد حظره Chrome.</translation> <translation id="479167709087336770">يستخدم ذلك المدقق الإملائي نفسه الذي يتم استخدامه في "بحث Google". ويتم إرسال النص الذي تكتبه في المتصفّح إلى Google. يمكنك دائمًا تغيير هذا السلوك في الإعدادات.</translation> +<translation id="4831688036548685548">لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل قليل.</translation> <translation id="4891791193823137474">دع Google Chrome يعمل في الخلفية</translation> <translation id="4895437082222824641">فتح الرابط في علامة تبويب جديدة في Chrome</translation> <translation id="4953650215774548573">تحديد Google Chrome المتصفح التلقائي</translation> @@ -158,6 +164,7 @@ <translation id="532046782124376502">تحذير: يتعذّر على Google Chrome منع الإضافات من تسجيل سجل تصفحك. لإيقاف هذه الإضافة في وضع التصفح المتخفي، ألغِ تحديد هذا الخيار.</translation> <translation id="5386244825306882791">كما أنها تتحكم في الصفحة التي تظهر عند تشغيل Chrome أو إجراء بحث من المربع متعدد الاستخدامات.</translation> <translation id="5394833366792865639">مشاركة علامة تبويب Chrome</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل يوم واحد.}zero{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} يوم.}two{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل يومَين ({NUM_DAYS}).}few{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} أيام.}many{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} يومًا.}other{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_DAYS} يوم.}}</translation> <translation id="5430073640787465221">ملف الإعدادات المفضّلة تالف أو غير صالح. يتعذر على Google Chrome استرداد إعداداتك.</translation> <translation id="556024056938947818">يحاول Google Chrome إظهار كلمات المرور.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -194,6 +201,7 @@ <translation id="6750954913813541382">لإصلاح الأخطاء الإملائية، يرسِل Chrome النص الذي تكتبه في المتصفّح إلى Google.</translation> <translation id="677276454032249905">هل تريد الخروج من Chrome على أي حال؟</translation> <translation id="683440813066116847">قاعدة الوارد إلى Google Chrome Canary للسماح بحركة مرور mDNS.</translation> +<translation id="6861451385429799394">لقد أوقف <ph name="BEGIN_LINK" />المشرف<ph name="END_LINK" /> ميزة "التحقُّق من البرامج الضارّة" في متصفِّح Chrome.</translation> <translation id="6885412569789873916">تطبيقات الإصدار التجريبي من Chrome</translation> <translation id="6943584222992551122">سيتم حذف بيانات تصفُّح هذا المستخدم من هذا الجهاز. لاسترداد البيانات، يُرجى تسجيل الدخول إلى Chrome بصفتك <ph name="USER_EMAIL" />.</translation> <translation id="6967962315388095737">قاعدة الوارد إلى الإصدار التجريبي من Google Chrome للسماح بحركة مرور mDNS.</translation> @@ -265,6 +273,7 @@ <translation id="8834965163890861871">يحاول Google Chrome تعديل كلمات المرور. للسماح بذلك، يُرجى كتابة كلمة مرور Windows الخاصة بك.</translation> <translation id="884296878221830158">كما أنها تتحكم في الصفحة التي تظهر عند تشغيل Chrome أو النقر على زر الصفحة الرئيسية.</translation> <translation id="8862326446509486874">لا تملك الحقوق الكافية للتثبيت على مستوى النظام. جرّب تشغيل المثبِّت بصفة مشرف.</translation> +<translation id="8907906903932240086">يمكن لمتصفِّح Chrome التحقُّق من البرامج الضارّة على جهاز الكمبيوتر.</translation> <translation id="8914504000324227558">إعادة تشغيل Chrome</translation> <translation id="8922193594870374009">لإرسال رقم من <ph name="ORIGIN" /> إلى هاتفك الذي يعمل بنظام التشغيل Android، يُرجى تسجيل الدخول إلى متصفِّح Chrome على الجهازَين.</translation> <translation id="8999208279178790196">{0,plural, =0{يتوفر تحديث لمتصفح Chrome}=1{يتوفر تحديث لمتصفح Chrome}two{يتوفر تحديث لمتصفح Chrome منذ يومين}few{يتوفر تحديث لمتصفح Chrome منذ # أيام}many{يتوفر تحديث لمتصفح Chrome منذ # يومًا}other{يتوفر تحديث لمتصفح Chrome منذ # يوم}}</translation> @@ -272,6 +281,7 @@ <translation id="9067395829937117663">يتطلب متصفح Google Chrome نظام التشغيل Windows 7 أو إصدارًا أحدث.</translation> <translation id="911206726377975832">هل تريد أيضًا حذف بيانات التصفح؟</translation> <translation id="9138603949443464873">لتطبيق التغييرات، يُرجى إعادة تشغيل Chrome</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل ساعة واحدة.}zero{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعة.}two{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل ساعتَين ({NUM_HOURS}).}few{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعات.}many{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعة.}other{لم يعثر متصفِّح Chrome على أي برامج ضارّة معروفة على جهاز الكمبيوتر. تمّ إجراء آخر عملية تحقُّق قبل {NUM_HOURS} ساعة.}}</translation> <translation id="919706545465235479">تحديث Chrome لبدء المزامنة</translation> <translation id="989369509083708165">Google Chrome هو متصفحك التلقائي</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb index 0d45a519..5b38bec 100644 --- a/chrome/app/resources/google_chrome_strings_fr.xtb +++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -7,6 +7,7 @@ <translation id="1065672644894730302">Impossible de lire vos préférences. Certaines fonctionnalités ne seront peut-être pas disponibles, et les modifications apportées à vos préférences ne seront pas enregistrées.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> utilisait Chrome précédemment</translation> +<translation id="1088654056000736875">Chrome supprime des logiciels malveillants de votre ordinateur…</translation> <translation id="1097330777386562916">Effacer les cookies et les données de site en quittant Chrome</translation> <translation id="110877069173485804">Voici votre Chrome</translation> <translation id="1125124144982679672">Qui utilise Chrome ?</translation> @@ -17,6 +18,7 @@ <translation id="1355000804395496115">Utilisez plusieurs profils dans Chrome pour distinguer la navigation professionnelle de la navigation personnelle, ou pour les différentes personnes qui utilisent cet appareil</translation> <translation id="137466361146087520">Version bêta de Google Chrome</translation> <translation id="1399397803214730675">Une version plus récente de Google Chrome est déjà installée sur cet ordinateur. Si celle-ci ne fonctionne pas, désinstallez Google Chrome, puis réessayez.</translation> +<translation id="140541193409212341">Une erreur s'est produite alors que Chrome était en train de rechercher des logiciels malveillants sur votre ordinateur</translation> <translation id="1434626383986940139">Applications Chrome Canary</translation> <translation id="1513277449617685876">Pour distinguer votre navigation personnelle de celle associée à votre compte <ph name="NEW_USER" />, créez un profil dans Chrome</translation> <translation id="1553358976309200471">Mettre à jour Chrome</translation> @@ -58,6 +60,7 @@ <translation id="2429317896000329049">Impossible de synchroniser vos données dans Google Chrome, car la synchronisation n'est pas disponible pour votre domaine.</translation> <translation id="2467438592969358367">Google Chrome veut exporter vos mots de passe. Pour autoriser cette action, saisissez votre mot de passe Windows.</translation> <translation id="2485422356828889247">Désinstaller</translation> +<translation id="252502352004572774">Chrome recherche des logiciels malveillants sur votre ordinateur…</translation> <translation id="2534507159460261402">Google Pay (copiée dans Chrome)</translation> <translation id="2580411288591421699">Impossible d'installer la version de Google Chrome qui est en cours d'exécution. Fermez Google Chrome et réessayez.</translation> <translation id="2586406160782125153">Cette action aura pour effet de supprimer vos données de navigation de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chrome en tant que <ph name="USER_EMAIL" />.</translation> @@ -112,10 +115,12 @@ <translation id="4050175100176540509">La dernière version propose d'importantes améliorations de la sécurité ainsi que de nouvelles fonctionnalités.</translation> <translation id="4053720452172726777">Personnaliser et contrôler Google Chrome</translation> <translation id="4110895483821904099">Configurer votre nouveau profil Chrome</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a 1 minute.}one{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_MINS} minute.}other{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_MINS} minutes.}}</translation> <translation id="4143243756087420366">Nom et photo dans Chrome</translation> <translation id="4147555960264124640">Vous vous connectez avec un compte géré et donnez le contrôle de votre profil Google Chrome à son administrateur. Vos données Chrome, telles que les applications, les favoris, l'historique, les mots de passe et les autres paramètres, vont être définitivement associées à <ph name="USER_NAME" />. Vous pouvez supprimer ces données via le tableau de bord des comptes Google, mais vous ne pouvez pas les associer à un autre compte. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Échec de la décompression de l'archive par le programme d'installation. Veuillez télécharger de nouveau Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Relancer Chrome d'ici un jour}one{Relancer Chrome d'ici # jour}other{Relancer Chrome d'ici # jours}}</translation> +<translation id="4205362703535890467">Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : hier.</translation> <translation id="4205939740494406371">Chrome ne parvient pas à vérifier vos mots de passe. Réessayez dans 24 heures ou <ph name="BEGIN_LINK" />vérifiez les mots de passe enregistrés dans votre compte Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Se déconnecter de Chrome ?</translation> <translation id="4251615635259297716">Associer vos données Chrome à ce compte ?</translation> @@ -144,6 +149,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Chrome a bloqué ce fichier, car ce dernier peut être dangereux.</translation> <translation id="479167709087336770">Le correcteur orthographique utilisé est le même que celui employé dans la recherche Google. Le texte que vous saisissez dans le navigateur est envoyé à Google. Vous pouvez toujours modifier ce comportement dans les paramètres.</translation> +<translation id="4831688036548685548">Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a quelques instants.</translation> <translation id="4891791193823137474">Laisser Google Chrome s'exécuter en arrière-plan</translation> <translation id="4895437082222824641">Ouvrir le lien dans un nouvel ongle&t Chrome</translation> <translation id="4953650215774548573">Définir Google Chrome en tant que navigateur par défaut</translation> @@ -159,6 +165,7 @@ <translation id="532046782124376502">Avertissement : Google Chrome ne peut pas empêcher les extensions d'enregistrer votre historique de navigation. Pour désactiver cette extension en mode navigation privée, désélectionnez-la.</translation> <translation id="5386244825306882791">Elle contrôle également la page qui s'affiche au démarrage de Chrome ou lorsque vous effectuez une recherche dans l'omnibox.</translation> <translation id="5394833366792865639">Partager un onglet Chrome</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a 1 jour.}one{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_DAYS} jour.}other{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_DAYS} jours.}}</translation> <translation id="5430073640787465221">Le fichier des préférences est endommagé ou n'est pas valide. Google Chrome ne peut pas récupérer vos paramètres.</translation> @@ -196,6 +203,7 @@ <translation id="6750954913813541382">Pour corriger les fautes d'orthographe, Chrome envoie à Google le texte que vous saisissez dans le navigateur</translation> <translation id="677276454032249905">Quitter Chrome quand même ?</translation> <translation id="683440813066116847">Règle de trafic entrant pour Google Chrome Canary autorisant le trafic mDNS</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />Votre administrateur<ph name="END_LINK" /> a désactivé la détection des logiciels malveillants par Chrome</translation> <translation id="6885412569789873916">Applications pour la version bêta de Chrome</translation> <translation id="6943584222992551122">Les données de navigation de cet utilisateur vont être supprimées de cet appareil. Pour les récupérer, connectez-vous à Chrome en tant que <ph name="USER_EMAIL" />.</translation> <translation id="6967962315388095737">Règle de trafic entrant pour la version bêta de Google Chrome autorisant le trafic mDNS.</translation> @@ -267,6 +275,7 @@ <translation id="8834965163890861871">Google Chrome tente de modifier les mots de passe. Pour autoriser cette action, saisissez votre mot de passe Windows.</translation> <translation id="884296878221830158">Elle contrôle également la page qui s'affiche au démarrage de Chrome ou lorsque vous cliquez sur le bouton Accueil.</translation> <translation id="8862326446509486874">Vous ne disposez pas des droits requis pour installer la version système. Relancez l'installation en vous connectant comme administrateur.</translation> +<translation id="8907906903932240086">Chrome peut rechercher des logiciels malveillants sur votre ordinateur</translation> <translation id="8914504000324227558">Relancer Google Chrome</translation> <translation id="8922193594870374009">Pour envoyer un numéro depuis <ph name="ORIGIN" /> vers votre téléphone Android, connectez-vous à Chrome sur les deux appareils.</translation> <translation id="8999208279178790196">{0,plural, =0{Une mise à jour de Chrome est disponible}=1{Une mise à jour de Chrome est disponible}one{Une mise à jour de Chrome est disponible depuis # jour}other{Une mise à jour de Chrome est disponible depuis # jours}}</translation> @@ -274,6 +283,7 @@ <translation id="9067395829937117663">Vous devez disposer de Windows 7 ou version ultérieure pour utiliser Google Chrome.</translation> <translation id="911206726377975832">Supprimer également vos données de navigation ?</translation> <translation id="9138603949443464873">Pour appliquer vos modifications, relancez Chrome</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a une heure.}one{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heure.}other{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heures.}}</translation> <translation id="919706545465235479">Mettre à jour Chrome pour lancer la synchronisation</translation> <translation id="989369509083708165">Google Chrome est votre navigateur par défaut</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_gl.xtb b/chrome/app/resources/google_chrome_strings_gl.xtb index 9f9d2bf8..671b8081 100644 --- a/chrome/app/resources/google_chrome_strings_gl.xtb +++ b/chrome/app/resources/google_chrome_strings_gl.xtb
@@ -8,6 +8,7 @@ É posible que algunhas funcións non estean dispoñibles e que non se garden os cambios nas preferencias.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> estaba utilizando Chrome previamente</translation> +<translation id="1088654056000736875">Chrome está quitando software daniño do teu ordenador...</translation> <translation id="1097330777386562916">Borrar as cookies e os datos dos sitios cando peches Chrome</translation> <translation id="110877069173485804">Este é o teu navegador Chrome</translation> <translation id="1125124144982679672">Quen está utilizando Chrome?</translation> @@ -18,6 +19,7 @@ <translation id="1355000804395496115">Utiliza distintos perfís en Chrome para separar a actividade de navegación persoal da do traballo, ou a das diferentes persoas que empregan este dispositivo</translation> <translation id="137466361146087520">Google Chrome Beta</translation> <translation id="1399397803214730675">Este ordenador ten instalada unha versión máis recente de Google Chrome. Se o software non funciona, desinstala Google Chrome e téntao de novo.</translation> +<translation id="140541193409212341">Produciuse un erro mentres Chrome buscaba software daniño no teu ordenador</translation> <translation id="1434626383986940139">Aplicacións de valores controlados de Chrome</translation> <translation id="1513277449617685876">Para separar a actividade de navegación persoal da de <ph name="NEW_USER" />, crea un perfil novo en Chrome</translation> <translation id="1553358976309200471">Actualizar Chrome</translation> @@ -59,6 +61,7 @@ <translation id="2429317896000329049">Google Chrome non puido sincronizar os teus datos porque a sincronización non está dispoñible para o teu dominio.</translation> <translation id="2467438592969358367">Google Chrome quere exportar os teus contrasinais. Escribe o teu contrasinal de Windows para permitir esta acción.</translation> <translation id="2485422356828889247">Desinstalar</translation> +<translation id="252502352004572774">Chrome está buscando software daniño no teu ordenador...</translation> <translation id="2534507159460261402">Google Pay (copiouse en Chrome)</translation> <translation id="2580411288591421699">Non se pode instalar a mesma versión de Google Chrome que se está executando actualmente. Pecha Google Chrome e téntao de novo.</translation> <translation id="2586406160782125153">Esta acción eliminará os teus datos de navegación deste dispositivo. Para recuperar os teus datos máis tarde, inicia sesión en Chrome como <ph name="USER_EMAIL" />.</translation> @@ -113,10 +116,12 @@ <translation id="4050175100176540509">A última versión conta con melloras de seguranza importantes e novas funcións.</translation> <translation id="4053720452172726777">Personaliza e controla Google Chrome</translation> <translation id="4110895483821904099">Configura o teu novo perfil de Chrome</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai 1 minuto.}other{Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai {NUM_MINS} minutos.}}</translation> <translation id="4143243756087420366">Imaxe e nome para o perfil de Chrome</translation> <translation id="4147555960264124640">Estás iniciando sesión cunha conta administrada, polo que concedes ao seu administrador o control sobre o teu perfil de Google Chrome. Os tes datos de Chrome, como aplicacións, marcadores, historial, contrasinais e outras opcións quedarán ligados de forma permanente a <ph name="USER_NAME" />. Poderás eliminar estes datos mediante o panel de control de contas de Google, pero non poderás asocialos a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">O instalador non puido descomprimir o arquivo. Descarga Google Chrome de novo.</translation> <translation id="4191857738314598978">{0,plural, =1{Reinicia Chrome en 1 día}other{Reinicia Chrome en # días}}</translation> +<translation id="4205362703535890467">Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: onte.</translation> <translation id="4205939740494406371">Chrome non puido comprobar os teus contrasinais. Téntao de novo dentro de 24 horas ou <ph name="BEGIN_LINK" />comproba os contrasinais na túa Conta de Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Queres pechar sesión en Chrome?</translation> <translation id="4251615635259297716">Queres ligar os teus datos de Chrome con esta conta?</translation> @@ -145,6 +150,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Este ficheiro pode ser perigoso, así que Chrome bloqueouno.</translation> <translation id="479167709087336770">Esta función utiliza o mesmo corrector ortográfico que o usado na busca de Google. O texto que escribas no navegador enviarase a Google. Podes cambiar esta opción na configuración cando queiras.</translation> +<translation id="4831688036548685548">Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai un momento.</translation> <translation id="4891791193823137474">Permitir que Google Chrome se execute en segundo plano</translation> <translation id="4895437082222824641">Abrir ligazón nunha nova &pestana de Chrome</translation> <translation id="4953650215774548573">Establecer Google Chrome como navegador predeterminado</translation> @@ -160,6 +166,7 @@ <translation id="532046782124376502">Advertencia: Google Chrome non pode evitar que as extensións rexistren o teu historial de navegación. Para desactivar esta extensión no modo de incógnito, desactiva a caixa correspondente a esta opción.</translation> <translation id="5386244825306882791">Tamén controla a páxina que se mostra ao iniciar Chrome ou ao realizar unha busca desde Omnibox.</translation> <translation id="5394833366792865639">Compartir unha pestana de Chrome</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai 1 día.}other{Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai {NUM_DAYS} días.}}</translation> <translation id="5430073640787465221">O teu ficheiro de preferencias está danado ou non é válido. Google Chrome non pode recuperar a túa configuración.</translation> @@ -198,6 +205,7 @@ <translation id="6750954913813541382">Para corrixir erros ortográficos, Chrome enviaralle a Google o texto que escribas no navegador</translation> <translation id="677276454032249905">Queres saír de Chrome de todas formas?</translation> <translation id="683440813066116847">Regra de entrada para Google Chrome Canary para permitir tráfico mDNS.</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />O teu administrador<ph name="END_LINK" /> desactivou a comprobación de software daniño de Chrome</translation> <translation id="6885412569789873916">Aplicacións de Chrome Beta</translation> <translation id="6943584222992551122">Os datos de navegación desta persoa eliminaranse deste dispositivo. Para recuperalos, inicia sesión en Chrome como <ph name="USER_EMAIL" />.</translation> <translation id="6967962315388095737">Regra de entrada para que Google Chrome Beta permita tráfico mDNS.</translation> @@ -269,6 +277,7 @@ <translation id="8834965163890861871">Google Chrome está tentando editar os contrasinais. Escribe o teu contrasinal de Windows para permitir esta acción.</translation> <translation id="884296878221830158">Tamén controla que páxina se mostra ao iniciar Chrome ou ao facer clic no botón Inicio.</translation> <translation id="8862326446509486874">Non tes os dereitos apropiados para efectuar a instalación a nivel do sistema. Tenta volver executar o instalador como administrador.</translation> +<translation id="8907906903932240086">Chrome pode buscar software daniño no teu ordenador</translation> <translation id="8914504000324227558">Reiniciar Chrome</translation> <translation id="8922193594870374009">Para enviar un número desde <ph name="ORIGIN" /> ao teu teléfono Android, inicia sesión en Chrome nos dous dispositivos.</translation> <translation id="8999208279178790196">{0,plural, =0{Hai unha actualización de Chrome dispoñible}=1{Hai unha actualización de Chrome dispoñible}other{Hai unha actualización de Chrome que leva dispoñible # días}}</translation> @@ -276,6 +285,7 @@ <translation id="9067395829937117663">Google Chrome require Windows 7 ou unha versión posterior.</translation> <translation id="911206726377975832">Queres eliminar tamén os teus datos de navegación?</translation> <translation id="9138603949443464873">Para aplicar os cambios, reinicia Chrome</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai 1 hora.}other{Chrome non atopou ningún software daniño coñecido no teu ordenador. Última comprobación: hai {NUM_HOURS} horas.}}</translation> <translation id="919706545465235479">Actualiza Chrome para iniciar a sincronización</translation> <translation id="989369509083708165">Google Chrome é o teu navegador predeterminado</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb index afda4cf..32436e2a 100644 --- a/chrome/app/resources/google_chrome_strings_id.xtb +++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">Ada software berbahaya di komputer Anda. Chrome dapat menghapusnya, memulihkan setelan Anda, dan menonaktifkan ekstensi agar browser berfungsi kembali secara normal.</translation> <translation id="1065672644894730302">Preferensi Anda tidak dapat dibaca. Beberapa fitur mungkin tidak tersedia dan perubahan pada preferensi tidak akan disimpan.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> sebelumnya menggunakan Chrome</translation> +<translation id="1088654056000736875">Chrome menghapus software berbahaya dari komputer Anda ...</translation> <translation id="1097330777386562916">Hapus cookie dan data situs ketika Anda keluar dari Chrome</translation> <translation id="110877069173485804">Ini Chrome Anda</translation> <translation id="1125124144982679672">Siapa yang menggunakan Chrome?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">Gunakan profil berbeda di Chrome untuk memisahkan penjelajahan pribadi dan kerja, atau untuk pengguna lain yang menggunakan perangkat ini</translation> <translation id="137466361146087520">Google Chrome Beta</translation> <translation id="1399397803214730675">Komputer ini telah memiliki versi Google Chrome yang lebih anyar. Jika software tidak bekerja, uninstal Google Chrome dan coba lagi.</translation> +<translation id="140541193409212341">Terjadi error saat Chrome memeriksa software berbahaya di komputer Anda</translation> <translation id="1434626383986940139">Aplikasi Chrome Canary</translation> <translation id="1513277449617685876">Untuk memisahkan penjelajahan pribadi dan <ph name="NEW_USER" />, buat profil baru di Chrome</translation> <translation id="1553358976309200471">Perbarui browser Chrome</translation> @@ -55,6 +57,7 @@ <translation id="2429317896000329049">Google Chrome tidak dapat menyinkronkan data Anda karena Sinkronisasi tidak tersedia untuk domain Anda.</translation> <translation id="2467438592969358367">Google Chrome ingin mengekspor sandi. Ketik sandi Windows Anda untuk mengizinkannya.</translation> <translation id="2485422356828889247">Uninstal</translation> +<translation id="252502352004572774">Chrome sedang memeriksa software berbahaya di komputer Anda ...</translation> <translation id="2534507159460261402">Google Pay (disalin ke Chrome)</translation> <translation id="2580411288591421699">Tak dapat memasang Google Chrome dengan versi yang sama dengan yang sedang aktif. Tutup dulu, baru coba lagi.</translation> <translation id="2586406160782125153">Tindakan ini akan menghapus data browsing dari perangkat ini. Untuk mengambil data nanti, login ke Chrome sebagai <ph name="USER_EMAIL" />.</translation> @@ -109,10 +112,12 @@ <translation id="4050175100176540509">Peningkatan keamanan dan fitur baru yang penting tersedia di versi terbaru.</translation> <translation id="4053720452172726777">Sesuaikan dan kontrol Google Chrome</translation> <translation id="4110895483821904099">Siapkan profil Chrome baru Anda</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: 1 menit yang lalu.}other{Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: {NUM_MINS} menit yang lalu.}}</translation> <translation id="4143243756087420366">Nama dan gambar Chrome</translation> <translation id="4147555960264124640">Anda masuk dengan akun terkelola dan memberikan administratornya kontrol atas profil Google Chrome Anda. Data Chrome Anda, seperti aplikasi, bookmark, histori, sandi, dan setelan lain selamanya akan dikaitkan ke <ph name="USER_NAME" />. Anda dapat menghapus data ini melalui Dasbor Akun Google, namun Anda tidak akan dapat mengaitkan data ini dengan akun yang lain. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Instalatur gagal mendekompresi arsip. Download kembali Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Luncurkan ulang Chrome dalam satu hari}other{Luncurkan ulang Chrome dalam # hari}}</translation> +<translation id="4205362703535890467">Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: kemarin.</translation> <translation id="4205939740494406371">Chrome tidak dapat memeriksa sandi Anda. Coba lagi setelah 24 jam atau <ph name="BEGIN_LINK" />periksa sandi di Akun Google Anda<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Logout dari Chrome?</translation> <translation id="4251615635259297716">Tautkan data Chrome Anda ke akun ini?</translation> @@ -141,6 +146,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">File ini mungkin berbahaya, jadi Chrome telah memblokirnya.</translation> <translation id="479167709087336770">Tindakan ini akan menggunakan pemeriksa ejaan yang sama dengan yang digunakan di penelusuran Google. Teks yang Anda ketikkan di browser dikirim ke Google. Anda dapat mengubah perilaku ini di setelan.</translation> +<translation id="4831688036548685548">Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: sesaat yang lalu.</translation> <translation id="4891791193823137474">Jalankan Google Chrome di latar belakang</translation> <translation id="4895437082222824641">Buka link di &tab Chrome baru</translation> <translation id="4953650215774548573">Setel Google Chrome sebagai browser default Anda</translation> @@ -154,6 +160,7 @@ <translation id="532046782124376502">Peringatan: Google Chrome tidak dapat mencegah ekstensi merekam histori browsing Anda. Untuk menonaktifkan ekstensi ini dalam mode samaran, batalkan memilih opsi ini.</translation> <translation id="5386244825306882791">Juga mengontrol halaman apa yang ditampilkan saat Anda memulai Chrome atau menelusuri dari Omnibox.</translation> <translation id="5394833366792865639">Bagikan tab Chrome</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: 1 hari yang lalu.}other{Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: {NUM_DAYS} hari yang lalu.}}</translation> <translation id="5430073640787465221">File preferensi Anda rusak atau tidak valid. Google Chrome tidak dapat memulihkan setelan Anda.</translation> <translation id="556024056938947818">Google Chrome mencoba menampilkan sandi.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -190,6 +197,7 @@ <translation id="6750954913813541382">Untuk memperbaiki kesalahan ejaan, Chrome mengirim teks yang Anda ketikkan di browser ke Google</translation> <translation id="677276454032249905">Tetap tutup Chrome?</translation> <translation id="683440813066116847">Inbound rule untuk Google Chrome Canary guna mengizinkan lalu lintas mDNS.</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />Administrator Anda<ph name="END_LINK" /> telah menonaktifkan pemeriksaan Chrome terhadap software berbahaya</translation> <translation id="6885412569789873916">Aplikasi Chrome Beta</translation> <translation id="6943584222992551122">Data browsing pengguna ini akan dihapus dari perangkat ini. Untuk memulihkan data, login ke Chrome sebagai <ph name="USER_EMAIL" />.</translation> <translation id="6967962315388095737">Inbound rule untuk Google Chrome Beta guna mengizinkan traffic mDNS.</translation> @@ -261,6 +269,7 @@ <translation id="8834965163890861871">Google Chrome mencoba mengedit sandi. Ketik sandi Windows Anda untuk mengizinkannya.</translation> <translation id="884296878221830158">Juga mengontrol halaman apa yang ditampilkan saat Anda memulai Chrome atau mengeklik tombol Beranda.</translation> <translation id="8862326446509486874">Anda tidak memiliki hak yang diperlukan untuk pemasangan tingkat sistem. Coba jalankan lagi pemasang saat login sebagai Administrator.</translation> +<translation id="8907906903932240086">Chrome dapat memeriksa software berbahaya di komputer Anda</translation> <translation id="8914504000324227558">Luncurkan Ulang Chrome</translation> <translation id="8922193594870374009">Untuk mengirimkan nomor dari <ph name="ORIGIN" /> ke ponsel Android Anda, login ke Chrome di kedua perangkat.</translation> <translation id="8999208279178790196">{0,plural, =0{Update Chrome tersedia}=1{Update Chrome tersedia}other{Update Chrome telah tersedia selama # hari}}</translation> @@ -268,6 +277,7 @@ <translation id="9067395829937117663">Google Chrome memerlukan Windows 7 atau lebih tinggi.</translation> <translation id="911206726377975832">Hapus juga data browsing Anda?</translation> <translation id="9138603949443464873">Untuk menerapkan perubahan, luncurkan ulang Chrome</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: 1 jam yang lalu.}other{Chrome tidak menemukan software berbahaya yang dikenal di komputer Anda. Terakhir diperiksa: {NUM_HOURS} jam yang lalu}}</translation> <translation id="919706545465235479">Perbarui Chrome untuk memulai sinkronisasi</translation> <translation id="989369509083708165">Google Chrome adalah browser default Anda</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index e899ce8..156cbc5 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -15,7 +15,7 @@ <translation id="123620459398936149">מערכת ההפעלה של Chrome לא הצליחה לסנכרן את הנתונים שלך. עדכן את משפט הסיסמה שלך לסנכרון.</translation> <translation id="1302523850133262269">המתן בזמן ש-Chrome מתקין את עדכוני המערכת האחרונים.</translation> <translation id="1355000804395496115">כדאי להשתמש בפרופילים שונים ב-Chrome כדי להפריד בין גלישה בעבודה וגלישה אישית, או בין אנשים שונים שמשתמשים במכשיר הזה</translation> -<translation id="137466361146087520">גרסת הביטא של Google Chrome</translation> +<translation id="137466361146087520">גרסת הבטא של Google Chrome</translation> <translation id="1399397803214730675">במחשב זה מותקנת כבר גירסה עדכנית יותר של Google Chrome. אם התוכנה אינה פועלת, הסר את ההתקנה של Google Chrome ונסה שוב.</translation> <translation id="140541193409212341">אירעה שגיאה בזמן ש-Chrome בדק אם יש במחשב תוכנה מזיקה</translation> <translation id="1434626383986940139">אפליקציות Chrome – קאנארי</translation> @@ -48,7 +48,7 @@ <translation id="2120620239521071941">פעולה זו תמחק <ph name="ITEMS_COUNT" /> פריטים מהמכשיר. כדי לשחזר את הנתונים מאוחר יותר, היכנס אל Chrome עם <ph name="USER_EMAIL" />.</translation> <translation id="2123055963409958220">דיווח על <ph name="BEGIN_LINK" />ההגדרות הנוכחיות<ph name="END_LINK" /> יעזור לשפר את Chrome</translation> <translation id="2151406531797534936">יש להפעיל מחדש את Chrome עכשיו</translation> -<translation id="2246246234298806438">Google Chrome אינו יכול להצג תצוגה מקדימה של ההדפסה כאשר מציג ה-PDF המובנה חסר.</translation> +<translation id="2246246234298806438">Google Chrome לא יכול להציג תצוגה מקדימה של ההדפסה כאשר מציג ה-PDF המובנה חסר.</translation> <translation id="2290014774651636340">המפתחות של Google API חסרים. פונקציונליות מסוימת של Google Chrome תהיה מושבתת.</translation> <translation id="2290095356545025170">האם אתה בטוח שאתה רוצה להסיר את Google Chrome?</translation> <translation id="2309047409763057870">זוהי התקנה משנית של Google Chrome, ולא ניתן להפוך אותו לדפדפן ברירת המחדל שלך.</translation> @@ -173,7 +173,7 @@ <translation id="5690427481109656848">Google LLC</translation> <translation id="5715063361988620182">{SECONDS,plural, =1{Google Chrome יבצע אתחול בעוד שנייה אחת}two{Google Chrome יבצע אתחול בעוד # שניות}many{Google Chrome יבצע אתחול בעוד # שניות}other{Google Chrome יבצע אתחול בעוד # שניות}}</translation> <translation id="573759479754913123">מידע על מערכת ההפעלה של Chrome</translation> -<translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome בגירסת Canary</translation> +<translation id="5795887333006832406"><ph name="PAGE_TITLE" /> - Google Chrome בגרסת Canary</translation> <translation id="5804318322022881572">לא ניתן היה להפעיל את Chrome. יש לנסות שוב.</translation> <translation id="5867197326698922595">Google Chrome מנסה לערוך את הסיסמאות.</translation> <translation id="5895138241574237353">הפעל מחדש</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb index 6518e68..f9c871c0 100644 --- a/chrome/app/resources/google_chrome_strings_kn.xtb +++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಕಂಡುಬಂದಿದೆ. Chrome ಅದನ್ನು ತೆಗೆದುಹಾಕಬಹುದು, ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ಪುನಃ ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವಂತೆ ಮಾಡಲು ವಿಸ್ತರಣೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation> <translation id="1065672644894730302">ನಿಮ್ಮ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ರೀಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಅಲ್ಲದೇ, ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ಲಭ್ಯವಿಲ್ಲದಿರಬಹುದು ಮತ್ತು ಪ್ರಾಶಸ್ತ್ಯಗಳಲ್ಲಿ ಮಾಡಿದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> ಅವರು ಈ ಹಿಂದೆ Chrome ಬಳಸುತ್ತಿದ್ದರು</translation> +<translation id="1088654056000736875">Chrome ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಿಂದ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕುತ್ತಿದೆ...</translation> <translation id="1097330777386562916">ನೀವು Chrome ನಿಂದ ನಿರ್ಗಮಿಸಿದಾಗ ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ</translation> <translation id="110877069173485804">ಇದು ನಿಮ್ಮ Chrome</translation> <translation id="1125124144982679672">Chrome ಅನ್ನು ಯಾರು ಬಳಸುತ್ತಿದ್ದಾರೆ?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">ಕೆಲಸ ಮತ್ತು ವೈಯಕ್ತಿಕ ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು ಅಥವಾ ಈ ಸಾಧನವನ್ನು ಬಳಸುವ ವಿಭಿನ್ನ ಜನರಿಗೆ Chrome ನಲ್ಲಿ ವಿಭಿನ್ನ ಪ್ರೊಫೈಲ್ಗಳನ್ನು ಬಳಸಿ</translation> <translation id="137466361146087520">Google Chrome ಬೀಟಾ</translation> <translation id="1399397803214730675">ಈ ಕಂಪ್ಯೂಟರ್ ಈಗಾಗಲೇ ತೀರಾ ಇತ್ತೀಚಿನ Google Chrome ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿದೆ. ಸಾಫ್ಟ್ವೇರ್ ಕಾರ್ಯ ನಿರ್ವಹಿಸದೆ ಇದ್ದರೆ, ದಯವಿಟ್ಟು Google Chrome ಅನ್ನು ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="140541193409212341">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ, Chrome ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಪರಿಶೀಲಿಸುತ್ತಿರುವಾಗ ದೋಷ ಸಂಭವಿಸಿದೆ</translation> <translation id="1434626383986940139">Chrome ಕ್ಯಾನರಿ ಅಪ್ಲಿಕೇಶನ್ಗಳು</translation> <translation id="1513277449617685876">ವೈಯಕ್ತಿಕ ಮತ್ತು <ph name="NEW_USER" /> ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಪ್ರತ್ಯೇಕಿಸಲು, Chrome ನಲ್ಲಿ ಹೊಸ ಪ್ರೊಫೈಲ್ ಅನ್ನು ರಚಿಸಿ</translation> <translation id="1553358976309200471">Chrome ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> @@ -57,6 +59,7 @@ <translation id="2429317896000329049">ನಿಮ್ಮ ಡೊಮೇನ್ನಲ್ಲಿ ಸಿಂಕ್ ಮಾಡುವ ಸೌಲಭ್ಯವಿಲ್ಲದ ಕಾರಣ Google Chrome ಗೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation> <translation id="2467438592969358367">Google Chrome ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ರಫ್ತು ಮಾಡಲು ಬಯಸುತ್ತದೆ. ಇದನ್ನು ಅನುಮತಿಸಲು ನಿಮ್ಮ Windows ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡಿ.</translation> <translation id="2485422356828889247">ಅನ್ಇನ್ಸ್ಟಾಲ್</translation> +<translation id="252502352004572774">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು Chrome ಪರಿಶೀಲಿಸುತ್ತಿದೆ...</translation> <translation id="2534507159460261402">Google Pay (Chrome ಗೆ ನಕಲಿಸಲಾಗಿದೆ)</translation> <translation id="2580411288591421699">ಪ್ರಸ್ತುತ ಚಾಲನೆಯಲ್ಲಿರುವ ಅದೇ Google Chrome ಆವೃತ್ತಿಯನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು Google Chrome ಮುಚ್ಚಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="2586406160782125153">ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಇದು ಅಳಿಸುತ್ತದೆ. ನಂತರ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಮರುಪಡೆಯಲು, <ph name="USER_EMAIL" /> ನಂತೆ Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> @@ -111,10 +114,12 @@ <translation id="4050175100176540509">ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯಲ್ಲಿ ಪ್ರಮುಖವಾದ ಭದ್ರತಾ ಸುಧಾರಣೆಗಳು ಮತ್ತು ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು ಲಭ್ಯವಿದೆ.</translation> <translation id="4053720452172726777">Google Chrome ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ</translation> <translation id="4110895483821904099">ನಿಮ್ಮ ಹೊಸ Chrome ಪ್ರೊಫೈಲ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: 1 ನಿಮಿಷದ ಹಿಂದೆ.}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_MINS} ನಿಮಿಷಗಳ ಹಿಂದೆ.}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_MINS} ನಿಮಿಷಗಳ ಹಿಂದೆ.}}</translation> <translation id="4143243756087420366">Chrome ಹೆಸರು ಮತ್ತು ಚಿತ್ರ</translation> <translation id="4147555960264124640">ನಿರ್ವಹಿಸಲಾದ ಖಾತೆ ಮತ್ತು ನಿಮ್ಮ Google Chrome ಪ್ರೊಫೈಲ್ನಾದ್ಯಂತ ಅದರ ನಿರ್ವಾಹಕ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುವುದರ ಮೂಲಕ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಹಾಗೂ ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳಂತಹ ನಿಮ್ಮ Chrome ಡೇಟಾವನ್ನು <ph name="USER_NAME" /> ಅವರಿಗೆ ಶಾಶ್ವತವಾಗಿ ಬಂಧಿಸಲಾಗುತ್ತದೆ. Google ಖಾತೆಗಳ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಮೂಲಕ ಈ ಡೇಟಾವನ್ನು ಅಳಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯ, ಆದರೆ ಬೇರೊಂದು ಖಾತೆಯೊಂದಿಗೆ ಈ ಡೇಟಾವನ್ನು ಸಂಯೋಜಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">ಆರ್ಕೈವ್ ಅನ್ನು ವಿಕಸನ ಮಾಡಲು ಇನ್ಸ್ಟಾಲರ್ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೊಮ್ಮೆ Google Chrome ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ.</translation> <translation id="4191857738314598978">{0,plural, =1{ಒಂದು ದಿನದ ಒಳಗೆ Chrome ಮರುಪ್ರಾರಂಭಿಸಿ}one{# ದಿನಗಳ ಒಳಗೆ Chrome ಮರುಪ್ರಾರಂಭಿಸಿ}other{# ದಿನಗಳ ಒಳಗೆ Chrome ಮರುಪ್ರಾರಂಭಿಸಿ}}</translation> +<translation id="4205362703535890467">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: ನಿನ್ನೆ.</translation> <translation id="4205939740494406371">Chrome ಗೆ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. 24 ಗಂಟೆಗಳ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ <ph name="BEGIN_LINK" />ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿರುವ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation> <translation id="4251615635259297716">ಈ ಖಾತೆಗೆ ನಿಮ್ಮ Chrome ಡೇಟಾವನ್ನು ಲಿಂಕ್ ಮಾಡುವುದೇ?</translation> @@ -143,6 +148,7 @@ <translation id="4754614261631455953">Google Chrome ಕ್ಯಾನರಿ (mDNS-In)</translation> <translation id="4771048833395599659">ಈ ಫೈಲ್ ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು, ಹೀಗಾಗಿ Chrome ಇದನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ.</translation> <translation id="479167709087336770">ಇದು Google ಹುಡುಕಾಟದಲ್ಲಿ ಬಳಸಲಾದ ಅದೇ ಕಾಗುಣಿತ ಪರೀಕ್ಷೆಯನ್ನು ಬಳಸುತ್ತದೆ. ನೀವು ಬ್ರೌಸರ್ನಲ್ಲಿ ಟೈಪ್ ಮಾಡುವ ಪಠ್ಯವನ್ನು Google ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನೀವು ಈ ವರ್ತನೆಯನ್ನು ಯಾವಾಗ ಬೇಕಾದರೂ ಬದಲಾಯಿಸಬಹುದು.</translation> +<translation id="4831688036548685548">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: ಸ್ವಲ್ಪ ಸಮಯದ ಹಿಂದೆ.</translation> <translation id="4891791193823137474">Google Chrome ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಚಾಲನೆಯಾಗಲು ಅನುಮತಿಸಿ</translation> <translation id="4895437082222824641">ಹೊಸ Chrome &ಟ್ಯಾಬ್ನಲ್ಲಿ ಲಿಂಕ್ ಅನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="4953650215774548573">Google Chrome ಅನ್ನು ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ರೂಪದಲ್ಲಿ ಹೊಂದಿಸಿ</translation> @@ -156,6 +162,7 @@ <translation id="532046782124376502">ಎಚ್ಚರಿಕೆ: ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸದಲ್ಲಿ ರೆಕಾರ್ಡಿಂಗ್ನಿಂದ ವಿಸ್ತರಣೆಗಳನ್ನು ತಡೆಯುವುದಿಲ್ಲ. ಅಜ್ಞಾತ ಮೋಡ್ನಲ್ಲಿ ವಿಸ್ತರಣೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಈ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಬೇಡಿ.</translation> <translation id="5386244825306882791">ನೀವು Chrome ಪ್ರಾರಂಭಿಸಿದಾಗ ಅಥವಾ ಓಮ್ನಿಬಾಕ್ಸ್ ನಿಂದ ಹುಡುಕಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="5394833366792865639">Chrome ಟ್ಯಾಬ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: 1 ದಿನದ ಹಿಂದೆ.}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_DAYS} ದಿನಗಳ ಹಿಂದೆ.}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_DAYS} ದಿನಗಳ ಹಿಂದೆ.}}</translation> <translation id="5430073640787465221">ನಿಮ್ಮ ಪ್ರಾಶಸ್ತ್ಯಗಳ ಫೈಲ್ ದೋಷಪೂರಿತವಾಗಿದೆ ಅಥವಾ ಅಮಾನ್ಯವಾಗಿದೆ. ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಪಡೆದುಕೊಳ್ಳುವಲ್ಲಿ Google Chrome ವಿಫಲಗೊಂಡಿದೆ.</translation> <translation id="556024056938947818">Google Chrome ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೋರಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -191,6 +198,7 @@ <translation id="6750954913813541382">ಕಾಗುಣಿತ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಲು, Chrome, ನೀವು ಬ್ರೌಸರ್ನಲ್ಲಿ ಟೈಪ್ ಮಾಡುವ ಪಠ್ಯವನ್ನು Google ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation> <translation id="677276454032249905">ಹೇಗಿದ್ದರೂ Chrome ನಿಂದ ನಿರ್ಗಮಿಸುವುದೇ?</translation> <translation id="683440813066116847">mDNS ಟ್ರಾಫಿಕ್ಗೆ ಅನುಮತಿಸುವ ನಿಟ್ಟಿನಲ್ಲಿ Google Chrome ಕ್ಯಾನರಿಗೆ ಒಳಬರುವ ನಿಯಮ.</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />ನಿಮ್ಮ ನಿರ್ವಾಹಕರು<ph name="END_LINK" /> Chrome ನ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಪರಿಶೀಲಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="6885412569789873916">Chrome ಬೀಟಾ ಅಪ್ಲಿಕೇಶನ್ಗಳು</translation> <translation id="6943584222992551122">ಈ ವ್ಯಕ್ತಿಯ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಈ ಸಾಧನದಿಂದ ಅಳಿಸಲಾಗುತ್ತದೆ. ಡೇಟಾವನ್ನು ಮರಳಿ ಪಡೆದುಕೊಳ್ಳಲು, Chrome ನಲ್ಲಿ <ph name="USER_EMAIL" /> ಎಂದು ಸೈನ್-ಇನ್ ಮಾಡಿ.</translation> <translation id="6967962315388095737">mDNS ಟ್ರಾಫಿಕ್ಗೆ ಅನುಮತಿಸುವ ನಿಟ್ಟಿನಲ್ಲಿ Google Chrome ಬೀಟಾಗೆ ಒಳಬರುವ ನಿಯಮ.</translation> @@ -263,6 +271,7 @@ <translation id="8834965163890861871">Google Chrome, ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ. ಇದನ್ನು ಅನುಮತಿಸಲು ನಿಮ್ಮ Windows ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಟೈಪ್ ಮಾಡಿ.</translation> <translation id="884296878221830158">ನೀವು Chrome ಪ್ರಾರಂಭಿಸಿದಾಗ ಅಥವಾ ಹೋಮ್ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="8862326446509486874">ಸಿಸ್ಟಂ ಮಟ್ಟದ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ನೀವು ಸರಿಯಾದ ಹಕ್ಕುಗಳನ್ನು ಹೊಂದಿಲ್ಲ. ನಿರ್ವಾಹಕರಂತೆ ಮತ್ತೆ ಇನ್ಸ್ಟಾಲರ್ ಅನ್ನು ರನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="8907906903932240086">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ಗಾಗಿ, Chrome ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಪರಿಶೀಲಿಸಬಹುದು</translation> <translation id="8914504000324227558">Chrome ಮರುಪ್ರಾರಂಭಿಸಿ</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> ನಿಂದ ನಿಮ್ಮ Android ಫೋನ್ಗೆ ಸಂಖ್ಯೆಯನ್ನು ಕಳುಹಿಸಲು, ಎರಡೂ ಸಾಧನಗಳಲ್ಲಿ Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ}=1{Chrome ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ}one{# ದಿನಗಳ ಮಟ್ಟಿಗೆ Chrome ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ}other{# ದಿನಗಳ ಮಟ್ಟಿಗೆ Chrome ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ}}</translation> @@ -270,6 +279,7 @@ <translation id="9067395829937117663">Google Chrome ಗೆ Windows 7 ಅಥವಾ ಹೆಚ್ಚಿನ ಆವೃತ್ತಿಯು ಅಗತ್ಯವಿರುತ್ತದೆ.</translation> <translation id="911206726377975832">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ಸಹ ಅಳಿಸುವುದೇ?</translation> <translation id="9138603949443464873">ನಿಮ್ಮ ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಲು, Chrome ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: 1 ಗಂಟೆಯ ಹಿಂದೆ.}one{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_HOURS} ಗಂಟೆಗಳ ಹಿಂದೆ.}other{ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಲ್ಲಿ ತಿಳಿದಿರುವ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು Chrome ಪತ್ತೆ ಮಾಡಿಲ್ಲ. ಕೊನೆಯ ಪರಿಶೀಲನೆ: {NUM_HOURS} ಗಂಟೆಗಳ ಹಿಂದೆ.}}</translation> <translation id="919706545465235479">ಸಿಂಕ್ ಪ್ರಾರಂಭಿಸಲು Chrome ಅಪ್ಡೇಟ್ ಮಾಡಿ</translation> <translation id="989369509083708165">Google Chrome ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಆಗಿದೆ.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_ne.xtb b/chrome/app/resources/google_chrome_strings_ne.xtb index 67af21c..2c4822c 100644 --- a/chrome/app/resources/google_chrome_strings_ne.xtb +++ b/chrome/app/resources/google_chrome_strings_ne.xtb
@@ -8,6 +8,7 @@ केही सुविधाहरू अनुपलब्ध हुन सक्छन् र प्राथमिकताहरूमा परिवर्तनहरू बचत हुने छैनन्।</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> ले पहिला Chrome प्रयोग गरिरहेको थियो</translation> +<translation id="1088654056000736875">Chrome ले तपाईंको कम्प्युटरबाट हानिकारक सफ्टवेयर हटाउँदै छ...</translation> <translation id="1097330777386562916">आफूले Chrome छाडेर बाहिरिँदा कुकी र साइटका डेटा हटाउनुहोस्</translation> <translation id="110877069173485804">यो तपाईंको क्रोम हो</translation> <translation id="1125124144982679672">Chrome कसले चलाउँदै हुनुहुन्छ?</translation> @@ -18,6 +19,7 @@ <translation id="1355000804395496115">कामका सिलसिलामा गरिने ब्राउजिङ र व्यक्तिगत रूपमा गरिने ब्राउजिङ अलग गर्न वा यो यन्त्र प्रयोग गर्ने विभिन्न मान्छेहरूका लागि Chrome मा विभिन्न प्रोफाइलहरू बनाउनुहोस्</translation> <translation id="137466361146087520">Google Chrome बिटा</translation> <translation id="1399397803214730675">यो कम्प्युटर पहिले नै Google Chrome को एउटा अझ हालैको संस्करण छ। यदि सफ्टवेयरले काम गरिरहेको छैन भने, कृपया Google Chrome को स्थापना हटाउनुहोस् र पुन: प्रयास गर्नुहोस्।</translation> +<translation id="140541193409212341">Chrome ले तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँचिरहेका बेला कुनै त्रुटि भयो</translation> <translation id="1434626383986940139">Chrome क्यानरी एप्स</translation> <translation id="1513277449617685876">व्यक्तिगत रूपमा गरिने ब्राउजिङ र <ph name="NEW_USER" /> बाट गरिने ब्राउजिङ अलग गर्न Chrome मा एउटा नयाँ प्रोफाइल बनाउनुहोस्</translation> <translation id="1553358976309200471">Chrome अपडेट गर्नुहोस्</translation> @@ -57,6 +59,7 @@ <translation id="2429317896000329049">Google Chrome ले तपाइँको लगत समक्रमण गर्न सकेन किनभने तपाइँको डोमेनको लागि समक्रमन उपलब्ध छैन।</translation> <translation id="2467438592969358367">Google Chrome तपाईंका पासवर्डहरू निर्यात गर्न चाहन्छ। यसो गर्ने अनुमति दिन Windows को आफ्नो पासवर्ड टाइप गर्नुहोस्।</translation> <translation id="2485422356828889247">विस्थापन गर्नुहोस्</translation> +<translation id="252502352004572774">Chrome ले तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँचिरहको छ...</translation> <translation id="2534507159460261402">Google Pay (Chrome मा प्रतिलिपि गरियो)</translation> <translation id="2580411288591421699">हाल चलिरहेको Google Chrome संस्करणलाई स्थापना गर्न सकिँदैन। कृपया Google Chrome बन्द गर्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation> <translation id="2586406160782125153">यसले यस यन्त्रको तपाईंको ब्राउजिङको डेटा मेट्नेछ। पछि आफ्नो डेटा प्राप्त गर्न Chrome मा <ph name="USER_EMAIL" /> को रूपमा साइन इन गर्नुहोस्।</translation> @@ -111,10 +114,12 @@ <translation id="4050175100176540509">नवीनतम संस्करणमा महत्वपूर्ण सुरक्षा सुधारहरू र नयाँ सुविधाहरू उपलब्ध छन्।</translation> <translation id="4053720452172726777">Google Chrome आफू अनुकूल र नियन्त्रण गर्नुहोस्</translation> <translation id="4110895483821904099">Chrome मा आफ्नो नयाँ प्रोफाइल सेटअप गर्नुहोस्</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: १ मिनेटअघि।}other{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: {NUM_MINS} मिनेटअघि।}}</translation> <translation id="4143243756087420366">Chrome प्रोफाइलको नाम र तस्बिर</translation> <translation id="4147555960264124640">तपाईं एउटा व्यवस्थित खाताद्वारा साइन इन गर्दै हुनुहुन्छ र यसको व्यवस्थापकलाई आफ्नो Google Chrome प्रोफाइल माथिको नियन्त्रण दिँदै हुनुहुन्छ। तपाईंको Chrome डाटा, जस्तै एप्स, बुकमार्कहरू, इतिहास, पासवर्डहरू, र अन्य सेटिङहरू स्थायी रूपमा <ph name="USER_NAME" /> सँग गाँसिनेछन्। तपाईंले यो डाटा Google खाताहरू ड्यासबोर्ड मार्फत मेटाउन सक्नुहुनेछ, तर तपाईं॥े यो डाटालाई अर्को खातासँग सम्बद्ध गर्न सक्नुहुन्न। <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">स्थापनाकर्ता आर्किभलाई अनकम्प्रेस गर्न असफल भयो। कृपया Google Chrome पुन: डाउनलोड गर्नुहोस्।</translation> <translation id="4191857738314598978">{0,plural, =1{एक दिनभित्र Chrome पुनः सुरु गर्नुहोस्}other{# दिनभित्र Chrome पुनः सुरु गर्नुहोस्}}</translation> +<translation id="4205362703535890467">Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: हिजो।</translation> <translation id="4205939740494406371">Chrome तपाईंका पासवर्डहरू जाँच्न सक्दैन। २४ घन्टापछि फेरि प्रयास गर्नुहोस् वा <ph name="BEGIN_LINK" />आफ्नो Google खातामा गई आफ्ना पासवर्डहरू जाँच्नुहोस्<ph name="END_LINK" />।</translation> <translation id="424864128008805179">Chrome बाट साइन आउट गर्ने हो?</translation> <translation id="4251615635259297716">तपाइँको Chrome लगतलाई यस खातामा लिङ्क गर्ने?</translation> @@ -143,6 +148,7 @@ <translation id="4754614261631455953">Google Chrome क्यानरी (mDNS-In)</translation> <translation id="4771048833395599659">यो फाइल खतरनाक हुन सक्छ, त्यसैले Chrome ले यसमाथि रोक लगाएको छ।</translation> <translation id="479167709087336770">यसले Google खोजमा प्रयोग गरिएकै हिज्जे परीक्षक प्रयोग गर्दछ। तपाईंले ब्राउजरमा टाइप गर्ने पाठ Google मा पठाइन्छ। तपाईं सेटिङमा गई जुनसुकै बेला उक्त व्यवहार परिवर्तन गर्न सक्नुहुन्छ।</translation> +<translation id="4831688036548685548">Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: केही बेरअघि।</translation> <translation id="4891791193823137474">Google Chrome लाई पृष्ठभूमिमा चल्न दिनुहोस्</translation> <translation id="4895437082222824641">लिंकलाई Chrome को नयाँ ट्याबमा खोल्नुहोस्</translation> <translation id="4953650215774548573">Google Chrome लाई तपाइँको पूर्वनिर्धारित ब्राउजरको रूपमा सेट गर्नुहोस्</translation> @@ -156,6 +162,7 @@ <translation id="532046782124376502">चेतावनी: Google Chrome ले विस्तारहरूलाई तपाईंको ब्राउजिङसम्बन्धी इतिहास रेकर्ड गर्नमाथि रोक लगाउन सक्दैन। यस विस्तारलाई इन्कोग्निटो मोडमा असक्षम पार्न यो विकल्पको चयन रद्द गर्नुहोस्।</translation> <translation id="5386244825306882791">यसले तपाईंले Chrome सुरु गर्नुहुँदा वा ओम्निहक्सको लागि खोजी गर्नुहुँदा कुन-कुन पृष्ठ देखाइन्छ भन्ने कुरा पनि नियन्त्रण गर्छ।</translation> <translation id="5394833366792865639">Chrome को ट्याब सेयर गर्नुहोस्</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: १ दिनअघि।}other{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: {NUM_DAYS} दिनअघि।}}</translation> <translation id="5430073640787465221">तपाईंको प्राथमिकता फाइल बिग्रेको वा अवैध छ। Google Chrome ले तपाईंको सेटिङहरू पुन: प्राप्त गर्न सकदैन।</translation> @@ -194,6 +201,7 @@ <translation id="6750954913813541382">हिज्जेसम्बन्धी त्रुटि सच्याउने प्रयोजनका लागि Chrome ले तपाईंले ब्राउजरमा टाइप गर्ने पाठ Google लाई पठाउँछ</translation> <translation id="677276454032249905">जे भए पनि Chrome बाट बाहिरिने हो?</translation> <translation id="683440813066116847">mDNS ट्राफिक अनुमतिका लागि गूगल क्रोम क्यानरीका लागि अन्तरगामी नियम।</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />तपाईंका एड्मिन<ph name="END_LINK" />ले Chrome को हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँच गर्ने सुविधा असक्षम पार्नुभएको छ</translation> <translation id="6885412569789873916">Chrome बिटा एपहरू</translation> <translation id="6943584222992551122">यस यन्त्रबाट यो व्यक्तिको ब्राउजिङ डेटा मेटाइने छ। डेटा पुनः प्राप्त गर्न <ph name="USER_EMAIL" /> का रूपमा Chrome मा साइन इन गर्नुहोस्।</translation> <translation id="6967962315388095737">mDNS ट्राफिकलाई अनुमति दिने Google Chrome बिटाको अन्तर्गामी नियम।</translation> @@ -265,6 +273,7 @@ <translation id="8834965163890861871">Google Chrome ले पासवर्डहरू बदल्ने प्रयास गर्दैछ। यसो गर्ने अनुमति दिन आफूले Windows मा प्रयोग गरेको पासवर्ड टाइप गर्नुहोस्।</translation> <translation id="884296878221830158">तपाइँले Chrome सुरु गर्दा वा गृह बटन क्लिक गर्दा यसले कुन पृष्ठ देखाउँछ भनेर पनि नियन्त्रण गर्छ।</translation> <translation id="8862326446509486874">तपाईंसँग सिस्टम-स्तरको स्थापनाको लागि उपयुक्त अधिकारहरू छैनन्। स्थापकलाई व्यवस्थापकको रूपमा पुन: चलाउने प्रयास गर्नुहोस्।</translation> +<translation id="8907906903932240086">Chrome ले तपाईंको कम्प्युटरमा हानिकारक सफ्टवेयर छन् कि छैनन् भनी जाँच्न सक्छ</translation> <translation id="8914504000324227558">Chrome पुनः सुरु गर्नुहोस्</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> बाट आफ्नो Android फोनमा कुनै नम्बर पठाउन दुवै यन्त्रमा Chrome मा साइन इन गर्नुहोस्।</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome को अद्यावधिक उपलब्ध छ}=1{Chrome को अद्यावधिक उपलब्ध छ}other{Chrome को अद्यावधिक # दिनदेखि उपलब्ध छ}}</translation> @@ -272,6 +281,7 @@ <translation id="9067395829937117663">Google Chrome लाई Windows 7 वा सो भन्दा पछाडिका संस्करणको आवश्यकता पर्छ।</translation> <translation id="911206726377975832">साथै तपाईंको ब्राउजिङ डाटा पनि मेट्ने?</translation> <translation id="9138603949443464873">आफूले गरेका परिवर्तनहरू लागू गर्न Chrome पुनः सुरु गर्नुहोस्</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: १ घन्टाअघि।}other{Chrome ले तपाईंको कम्प्युटरमा कुनै हानिकारक सफ्टवेयर भेट्टाएन। पछिल्लो पटक जाँच गरिएको: {NUM_HOURS} घन्टाअघि।}}</translation> <translation id="919706545465235479">सिंंक सुरु गर्न Chrome लाई अपडेट गर्नुहोस्</translation> <translation id="989369509083708165">Google Chrome तपाईंको पूर्वनिर्धारित ब्राउजर हो</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index 102ea7e..3af70129 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">На компьютере обнаружено вредоносное ПО. Chrome может удалить его, восстановить настройки и отключить расширения. Это вернет браузер в обычное состояние.</translation> <translation id="1065672644894730302">Не удается получить настройки. Некоторые функции могут быть недоступны, а изменения настроек не будут сохраняться.</translation> <translation id="1088300314857992706">Адрес <ph name="USER_EMAIL_ADDRESS" /> уже использовался в Chrome</translation> +<translation id="1088654056000736875">Браузер Chrome удаляет с компьютера вредоносное ПО…</translation> <translation id="1097330777386562916">Удалять файлы cookie и данные сайтов при выходе из Chrome</translation> <translation id="110877069173485804">Ваш персональный Chrome</translation> <translation id="1125124144982679672">Кто использует Chrome?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">Разные профили Chrome нужны для раздельного использования браузера в личных и рабочих целях или если с ним работают разные люди.</translation> <translation id="137466361146087520">Google Chrome (бета)</translation> <translation id="1399397803214730675">На компьютере уже установлена последняя версия браузера Google Chrome. Если он не работает, удалите его и установите снова.</translation> +<translation id="140541193409212341">При проверке браузером Chrome компьютера на наличие вредоносного ПО произошла ошибка.</translation> <translation id="1434626383986940139">Приложения Chrome Canary</translation> <translation id="1513277449617685876">Чтобы использовать браузер в личных целях, а не как <ph name="NEW_USER" />, создайте профиль в Chrome.</translation> <translation id="1553358976309200471">Обновить Chrome</translation> @@ -55,6 +57,7 @@ <translation id="2429317896000329049">Google Chrome не удалось синхронизировать данные, поскольку служба Sync недоступна для вашего домена.</translation> <translation id="2467438592969358367">Чтобы экспортировать пароли из Google Chrome, введите пароль своего аккаунта Windows.</translation> <translation id="2485422356828889247">Удалить</translation> +<translation id="252502352004572774">Браузер Chrome проверяет компьютер на наличие вредоносного ПО…</translation> <translation id="2534507159460261402">Google Pay (скопирована в Chrome)</translation> <translation id="2580411288591421699">Не удается установить версию Google Chrome, аналогичную уже выполняемой. Закройте Google Chrome и повторите попытку.</translation> <translation id="2586406160782125153">Данные о работе в браузере будут удалены с устройства. Чтобы восстановить данные позже, войдите в Chrome как <ph name="USER_EMAIL" />.</translation> @@ -109,10 +112,12 @@ <translation id="4050175100176540509">В последней версии улучшена защита и добавлены новые функции.</translation> <translation id="4053720452172726777">Настройка и управление Google Chrome</translation> <translation id="4110895483821904099">Создайте профиль Chrome</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: 1 минуту назад.}one{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минуту назад.}few{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минуты назад.}many{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минут назад.}other{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_MINS} минуты назад.}}</translation> <translation id="4143243756087420366">Имя и фото профиля Chrome</translation> <translation id="4147555960264124640">Выполнив вход в управляемый аккаунт, вы предоставляете администратору право контролировать настройки вашего профиля Google Chrome. Ваши данные Chrome (приложения, закладки, история, пароли и другие настройки) будут временно связаны с аккаунтом <ph name="USER_NAME" />. Эти данные можно удалить в Личном кабинете Google, но их нельзя связать с другим аккаунтом. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Не удалось извлечь файлы из архива. Скачайте Google Chrome заново.</translation> <translation id="4191857738314598978">{0,plural, =1{Перезапустите Chrome в течение дня}one{Перезапустите Chrome в течение # дня}few{Перезапустите Chrome в течение # дней}many{Перезапустите Chrome в течение # дней}other{Перезапустите Chrome в течение # дня}}</translation> +<translation id="4205362703535890467">Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: вчера.</translation> <translation id="4205939740494406371">Не удается проверить пароли в Chrome. Повторите попытку через 24 часа или <ph name="BEGIN_LINK" />проверьте пароли в аккаунте Google<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Выйти из Chrome?</translation> <translation id="4251615635259297716">Связать данные Chrome с этим аккаунтом?</translation> @@ -141,6 +146,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Chrome заблокировал этот файл как потенциально опасный.</translation> <translation id="479167709087336770">Используется та же технология проверки правописания, что и в Google Поиске. Текст, который вы введете в браузере, будет отправлен в Google. Этот параметр можно изменить в настройках.</translation> +<translation id="4831688036548685548">Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: только что.</translation> <translation id="4891791193823137474">Разрешить работу Google Chrome в фоновом режиме</translation> <translation id="4895437082222824641">Открыть ссылку в новой вкладке браузера Chrome</translation> <translation id="4953650215774548573">Сделать Google Chrome браузером по умолчанию</translation> @@ -154,6 +160,7 @@ <translation id="532046782124376502">Внимание! Google Chrome не может предотвратить запись расширений в историю просмотренных страниц. Чтобы отключить это расширение в режиме инкогнито, отмените этот параметр.</translation> <translation id="5386244825306882791">Кроме того, расширение изменило стартовую страницу Chrome и поисковую систему, используемую по умолчанию при вводе запроса в омнибокс.</translation> <translation id="5394833366792865639">Откройте доступ к вкладке Chrome</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: 1 день назад.}one{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} день назад.}few{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} дня назад.}many{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} дней назад.}other{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_DAYS} дня назад.}}</translation> <translation id="5430073640787465221">Файл настроек поврежден или недействителен. Google Chrome не может восстановить ваши параметры.</translation> <translation id="556024056938947818">Вводимые пароли будут отображаться в Google Chrome.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -189,6 +196,7 @@ <translation id="6750954913813541382">Для проверки правописания Chrome отправляет в Google текст, который вы вводите в браузере.</translation> <translation id="677276454032249905">Закрыть Chrome?</translation> <translation id="683440813066116847">Разрешить в Google Chrome Canary передачу входящего трафика по протоколу mDNS</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />Администратор<ph name="END_LINK" /> отключил выполнение браузером Chrome проверки на наличие вредоносного ПО.</translation> <translation id="6885412569789873916">Приложения Chrome (бета)</translation> <translation id="6943584222992551122">Данные о работе этого пользователя в браузере будут удалены с устройства. Чтобы восстановить их, войдите в Chrome как <ph name="USER_EMAIL" />.</translation> <translation id="6967962315388095737">Разрешить в Google Chrome (бета) передачу входящего трафика по протоколу mDNS</translation> @@ -260,6 +268,7 @@ <translation id="8834965163890861871">Google Chrome пытается изменить пароли. Чтобы разрешить это действие, введите свой пароль Windows.</translation> <translation id="884296878221830158">Кроме того, расширение изменило стартовую страницу Chrome и страницу, отображаемую при нажатии кнопки "Главная страница".</translation> <translation id="8862326446509486874">У вас нет прав, необходимых для установки на системном уровне. Запустите программу установки еще раз в качестве администратора.</translation> +<translation id="8907906903932240086">Браузер Chrome может проверить компьютер на наличие вредоносного ПО.</translation> <translation id="8914504000324227558">Перезапустить Chrome</translation> <translation id="8922193594870374009">Чтобы отправить номер с сайта <ph name="ORIGIN" /> на свой телефон Android, войдите в Chrome на обоих устройствах.</translation> <translation id="8999208279178790196">{0,plural, =0{Доступно обновление Chrome}=1{Доступно обновление Chrome}one{Обновление Chrome доступно # день}few{Обновление Chrome доступно # дня}many{Обновление Chrome доступно # дней}other{Обновление Chrome доступно # дня}}</translation> @@ -267,6 +276,7 @@ <translation id="9067395829937117663">Для работы Google Chrome необходима ОС Windows 7 или более поздней версии.</translation> <translation id="911206726377975832">Также удалить данные о работе в браузере?</translation> <translation id="9138603949443464873">Чтобы изменения вступили в силу, перезапустите Chrome.</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: 1 час назад.}one{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} час назад.}few{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} часа назад.}many{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} часов назад.}other{Браузер Chrome не обнаружил на вашем компьютере вредоносное ПО. Последняя проверка: {NUM_HOURS} часа назад.}}</translation> <translation id="919706545465235479">Чтобы начать синхронизацию, обновите Chrome</translation> <translation id="989369509083708165">Google Chrome используется как браузер по умолчанию</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index cc7f775..759ce9e 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">మీ కంప్యూటర్లో మీ భద్రతకు హాని కలిగించే సాఫ్ట్వేర్ ఉంది. మీ బ్రౌజర్ని మళ్లీ సాధారణంగా పని చేసేలా చేయడానికి Chrome దానిని తీసివేసి, మీ సెట్టింగ్లను పునరుద్ధరించి, ఎక్స్టెన్షన్లను నిలిపివేయగలదు.</translation> <translation id="1065672644894730302">మీ ప్రాధాన్యతలు చదవబడలేవు. కొన్ని లక్షణాలు అందుబాటులో ఉండకపోవచ్చు మరియు ప్రాధాన్యతలకు మార్పులు సేవ్ చేయబడకపోవచ్చు.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> మునుపు Chromeని ఉపయోగించింది</translation> +<translation id="1088654056000736875">Chrome మీ కంప్యూటర్ నుండి హానికరమైన సాఫ్ట్వేర్ను తీసివేస్తోంది...</translation> <translation id="1097330777386562916">మీరు Chrome నుండి నిష్క్రమించినప్పుడు, కుక్కీలు, సైట్ డేటాను క్లియర్ చేయండి</translation> <translation id="110877069173485804">ఇది మీ Chrome</translation> <translation id="1125124144982679672">Chromeను ఎవరు ఉపయోగిస్తున్నారు?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">ఈ పరికరాన్ని ఉపయోగించే వేర్వేరు వ్యక్తుల కోసం లేదా ఆఫీసును వ్యక్తిగత బ్రౌజింగ్లను విడిగా ఉంచడానికి Chromeలో వేర్వేరు ప్రొఫైల్లను ఉపయోగించండి</translation> <translation id="137466361146087520">Google Chrome బీటా</translation> <translation id="1399397803214730675">ఈ కంప్యూటర్లో ఇప్పటికే Google Chrome యొక్క తాజా వెర్షన్ ఉంది. సాఫ్ట్వేర్ పని చేయకపోతే, దయచేసి Google Chromeను అన్ఇన్స్టాల్ చేసి, మళ్ళీ ప్రయత్నించండి.</translation> +<translation id="140541193409212341">హానికరమైన సాఫ్ట్వేర్ కోసం Chrome మీ కంప్యూటర్ను చెక్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది</translation> <translation id="1434626383986940139">Chrome కెనరీ అనువర్తనాలు</translation> <translation id="1513277449617685876">వ్యక్తిగత బ్రౌజింగ్ అలాగే <ph name="NEW_USER" /> బ్రౌజింగ్ను వేరు చేయడానికి, Chromeలో కొత్త ప్రొఫైల్ను క్రియేట్ చేయండి</translation> <translation id="1553358976309200471">Chromeని నవీకరించు</translation> @@ -55,6 +57,7 @@ <translation id="2429317896000329049">మీ డొమైన్ కోసం సింక్ అందుబాటులో లేనందున Google Chrome మీ డేటాను సింక్ చేయలేకపోయింది.</translation> <translation id="2467438592969358367">Google Chrome మీ పాస్వర్డ్లను ఎగుమతి చేయాలనుకుంటోంది. దీనిని అనుమతించడం కోసం మీ Windows పాస్వర్డ్ని టైప్ చేయండి.</translation> <translation id="2485422356828889247">అన్ఇన్స్టాల్ చేయి</translation> +<translation id="252502352004572774">హానికరమైన సాఫ్ట్వేర్ కోసం Chrome మీ కంప్యూటర్ను చెక్ చేస్తోంది...</translation> <translation id="2534507159460261402">Google Pay (Chromeకి కాపీ చేయబడింది)</translation> <translation id="2580411288591421699">ప్రస్తుతం అమలవుతున్న Google Chrome వెర్షన్నే ఇన్స్టాల్ చేయడం సాధ్యపడదు. దయచేసి Google Chromeను మూసివేసి, మళ్ళీ ప్రయత్నించండి.</translation> <translation id="2586406160782125153">ఇది ఈ పరికరం నుండి మీ బ్రౌజింగ్ డేటాను తొలగిస్తుంది. మీ డేటాను తర్వాత తిరిగి పొందడానికి, Chromeకు <ph name="USER_EMAIL" /> లాగా సైన్ ఇన్ చేయండి.</translation> @@ -109,10 +112,12 @@ <translation id="4050175100176540509">ముఖ్యమైన భద్రతా మెరుగుదలలు మరియు కొత్త ఫీచర్లు తాజా వెర్షన్లో అందుబాటులో ఉన్నాయి.</translation> <translation id="4053720452172726777">Google Chromeను అనుకూలీకరించండి మరియు నియంత్రించండి</translation> <translation id="4110895483821904099">మీ కొత్త Chrome ప్రొఫైల్ని సెట్ అప్ చేయండి</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: 1 నిమిషం క్రితం.}other{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: {NUM_MINS} నిమిషాల క్రితం.}}</translation> <translation id="4143243756087420366">Chrome పేరు మరియు చిత్రం</translation> <translation id="4147555960264124640">మీరు నిర్వహించబడే ఖాతాతో సైన్ ఇన్ చేస్తున్నారు. దీని నిర్వాహకునికి మీ Google Chrome ప్రొఫైల్పై నియంత్రణను అందిస్తున్నారు. మీ యాప్లు, బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు, ఇతర సెట్టింగ్ల వంటి మీ Chrome డేటా శాశ్వతంగా <ph name="USER_NAME" />కు అనుబంధించబడుతుంది. మీరు Google ఖాతాల డాష్బోర్డ్ ద్వారా ఈ డేటాను తొలగించవచ్చు. కానీ ఈ డేటాను మరో ఖాతాతో అనుబంధించలేరు. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">ఆర్కైవ్ను విస్తరించడంలో ఇన్స్టాలర్ విఫలమైంది. దయచేసి Google Chromeను మళ్లీ డౌన్లోడ్ చేయండి.</translation> <translation id="4191857738314598978">{0,plural, =1{ఒక రోజులోపు Chromeను తిరిగి ప్రారంభించండి}other{# రోజులలోపు Chromeను తిరిగి ప్రారంభించండి}}</translation> +<translation id="4205362703535890467">మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: నిన్న.</translation> <translation id="4205939740494406371">మీ పాస్వర్డ్లను Chrome చెక్ చేయలేకపోయింది. 24 గంటల తర్వాత మళ్లీ ట్రై చేయండి లేదా <ph name="BEGIN_LINK" />మీ Google ఖాతాలో పాస్వర్డ్లను చెక్ చేయండి<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome నుండి సైన్ అవుట్ చేయాలా?</translation> <translation id="4251615635259297716">మీ Chrome డేటాను ఈ ఖాతాకు జోడించాలా?</translation> @@ -141,6 +146,7 @@ <translation id="4754614261631455953">Google Chrome కెనరీ (mDNS-In)</translation> <translation id="4771048833395599659">ఈ ఫైల్ అపాయకరం కావచ్చు, కాబట్టి Chrome దీన్ని బ్లాక్ చేసింది.</translation> <translation id="479167709087336770">Google Searchలో ఉపయోగించే స్పెల్ చెకర్నే ఇది ఉపయోగిస్తుంది. మీరు బ్రౌజర్లో టైప్ చేసే టెక్స్ట్ను Googleకు పంపుతుంది. ఈ ఆప్షన్ను తర్వాత ఎప్పుడైనా మీరు సెట్టింగ్లలో మార్చవచ్చు.</translation> +<translation id="4831688036548685548">మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: ఒక క్షణం క్రితం.</translation> <translation id="4891791193823137474">Google Chromeను నేపథ్యంలో అమలు అయ్యేలా అనుమతించండి</translation> <translation id="4895437082222824641">కొత్త Chrome &ట్యాబ్లో లింక్ను తెరువు</translation> <translation id="4953650215774548573">Google Chromeను మీ డిఫాల్ట్ బ్రౌజర్గా సెట్ చేయండి</translation> @@ -154,6 +160,7 @@ <translation id="532046782124376502">హెచ్చరిక: Google Chrome మీ బ్రౌజింగ్ చరిత్రను రికార్డ్ చేయకుండా ఎక్స్టెన్షన్లను నివారించలేదు. ఈ ఎక్స్టెన్షన్ను అజ్ఞాత మోడ్లో నిలిపివేయడానికి, ఈ ఎంపికను రద్దు చేయండి.</translation> <translation id="5386244825306882791">ఇది మీరు Chromeను ప్రారంభించేటప్పుడు లేదా ఓమ్నిబాక్స్ నుండి వెతికేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation> <translation id="5394833366792865639">Chrome ట్యాబ్ను షేర్ చేయండి</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: 1 రోజు క్రితం.}other{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: {NUM_DAYS} రోజుల క్రితం.}}</translation> <translation id="5430073640787465221">మీ ప్రాధాన్యతల ఫైల్ పాడైంది లేదా చెల్లదు. Google Chrome మీ సెట్టింగ్లను తిరిగి పొందలేకపోయింది.</translation> <translation id="556024056938947818">Google Chrome పాస్వర్డ్లను చూపడానికి ప్రయత్నిస్తోంది.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -190,6 +197,7 @@ <translation id="6750954913813541382">స్పెల్లింగ్ తప్పులను సరిదిద్దడానికి, మీరు బ్రౌజర్లో టైప్ చేసే పదాలను Googleకు Chrome పంపుతుంది</translation> <translation id="677276454032249905">ఏదేమైనా Chrome నుండి నిష్క్రమించాలా?</translation> <translation id="683440813066116847">mDNS ట్రాఫిక్ను అనుమతించడానికి Google Chrome కెనరీ కోసం ఇన్బౌండ్ నియమం.</translation> +<translation id="6861451385429799394">హానికరమైన సాఫ్ట్వేర్ను Chrome చెక్ చేయడాన్ని <ph name="BEGIN_LINK" />మీ అడ్మినిస్ట్రేటర్<ph name="END_LINK" /> డిజేబుల్ చేశారు</translation> <translation id="6885412569789873916">Chrome బీటా యాప్లు</translation> <translation id="6943584222992551122">ఈ వ్యక్తి బ్రౌజింగ్ డేటా ఈ పరికరం నుండి తొలగించబడుతుంది. డేటాను పునరుద్ధరించడానికి, <ph name="USER_EMAIL" />గా Chromeకి సైన్ ఇన్ చేయండి.</translation> <translation id="6967962315388095737">mDNS ట్రాఫిక్ను అనుమతించడానికి Google Chrome బీటా కోసం ఇన్బౌండ్ నియమం.</translation> @@ -261,6 +269,7 @@ <translation id="8834965163890861871">పాస్వర్డ్లను ఎడిట్ చేయడానికి Google Chrome ప్రయత్నిస్తోంది. దీన్ని అనుమతించడానికి మీ Windows పాస్వర్డ్ను టైప్ చేయండి.</translation> <translation id="884296878221830158">ఇది మీరు Chromeను ప్రారంభించేటప్పుడు లేదా హోమ్ బటన్ను క్లిక్ చేసేటప్పుడు చూపబడే పేజీని కూడా నియంత్రిస్తుంది.</translation> <translation id="8862326446509486874">సిస్టమ్-స్థాయిలో ఇన్స్టాల్ చేయడానికి మీకు సరైన హక్కులు లేవు. నిర్వాహకుడి లాగా ఇన్స్టాలర్ను మళ్లీ రన్ చేయడానికి ప్రయత్నించండి.</translation> +<translation id="8907906903932240086">హానికరమైన సాఫ్ట్వేర్ కోసం Chrome మీ కంప్యూటర్ను చెక్ చేయగలదు</translation> <translation id="8914504000324227558">Chromeను పునఃప్రారంభించు</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> నుండి మీ Android ఫోన్కు నంబర్ను పంపడానికి, రెండు పరికరాలలోని Chromeకు సైన్ ఇన్ చేయండి.</translation> <translation id="8999208279178790196">{0,plural, =0{ఒక Chrome అప్డేట్ అందుబాటులో ఉంది}=1{ఒక Chrome అప్డేట్ అందుబాటులో ఉంది}other{ఒక Chrome అప్డేట్ # రోజులుగా అందుబాటులో ఉంది}}</translation> @@ -268,6 +277,7 @@ <translation id="9067395829937117663">Google Chromeకి Windows 7 లేదా అంతకంటే ఆధునికమైనది ఉండటం ఆవశ్యకం.</translation> <translation id="911206726377975832">మీ బ్రౌజింగ్ డేటాను కూడా తొలగించాలా?</translation> <translation id="9138603949443464873">మీ మార్పులను వర్తింపజేయడానికి, Chromeని పునఃప్రారంభించండి</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: 1 గంట క్రితం.}other{మీ కంప్యూటర్లో తెలిసిన హానికరమైన సాఫ్ట్వేర్ను Chrome కనుగొనలేదు. చివరగా చెక్ చేసినది: {NUM_HOURS} గంటల క్రితం.}}</translation> <translation id="919706545465235479">సింక్ను ప్రారంభించడానికి Chromeను అప్డేట్ చేయాలి</translation> <translation id="989369509083708165">మీ డిఫాల్ట్ బ్రౌజర్ Google Chrome</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb index 67b65823..80a947e 100644 --- a/chrome/app/resources/google_chrome_strings_tr.xtb +++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">Bilgisayarınızda zararlı yazılım var. Chrome, tarayıcınızın tekrar normal şekilde çalışmasını sağlamak için bunu kaldırabilir, ayarlarınızı geri yükleyebilir ve uzantıları devre dışı bırakabilir.</translation> <translation id="1065672644894730302">Tercihleriniz okunamıyor. Bazı özellikler kullanılamayabilir. Tercihlerde yapılan değişiklikler kaydedilmeyecektir.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> önceden Chrome kullanıyordu</translation> +<translation id="1088654056000736875">Chrome, bilgisayarınızdan zararlı yazılımı kaldırıyor...</translation> <translation id="1097330777386562916">Chrome'dan çıktığımda çerezleri ve site verilerini temizle</translation> <translation id="110877069173485804">Bu sizin Chrome'unuz</translation> <translation id="1125124144982679672">Chrome'u kim kullanıyor?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">İş için yaptığınız göz atma işlemleriyle kişisel göz atma işlemlerinizi birbirinden ayırmak amacıyla ya da bu cihazı kullanan farklı kişiler için Chrome'da farklı profiller kullanın</translation> <translation id="137466361146087520">Google Chrome Beta</translation> <translation id="1399397803214730675">Bu bilgisayarda Google Chrome'un daha yeni bir sürümü zaten var. Yazılım çalışmıyorsa, lütfen Google Chrome'un yüklemesini kaldırın ve tekrar deneyin.</translation> +<translation id="140541193409212341">Chrome, bilgisayarınızda zararlı yazılım olup olmadığını kontrol ederken bir hata oluştu</translation> <translation id="1434626383986940139">Chrome Canary Uygulamaları</translation> <translation id="1513277449617685876">Kişisel hesaptan ve <ph name="NEW_USER" /> hesabından yapılan göz atma işlemlerini birbirinden ayırmak için Chrome'da yeni profil oluşturun</translation> <translation id="1553358976309200471">Chrome'u güncelle</translation> @@ -55,6 +57,7 @@ <translation id="2429317896000329049">Senkronizasyon, alan adınızda kullanılamadığından Google Chrome, verilerinizi senkronize edemedi.</translation> <translation id="2467438592969358367">Google Chrome şifrelerinizi dışa aktarmak istiyor. Buna izin vermek için Windows şifrenizi yazın.</translation> <translation id="2485422356828889247">Yüklemeyi Kaldır</translation> +<translation id="252502352004572774">Chrome, bilgisayarınızda zararlı yazılım olup olmadığını kontrol ediyor...</translation> <translation id="2534507159460261402">Google Pay (Chrome'a kopyalandı)</translation> <translation id="2580411288591421699">Şu anda çalışmakta olan Google Chrome ile aynı sürüm yüklenemez. Lütfen Google Chrome'u kapatın ve tekrar deneyin.</translation> <translation id="2586406160782125153">Bu işlem, tarama verilerinizi bu cihazdan silecektir. Verilerinizi daha sonra geri almak için Chrome'da <ph name="USER_EMAIL" /> hesabıyla oturum açın.</translation> @@ -109,10 +112,12 @@ <translation id="4050175100176540509">Son sürümde güvenlikle ilgili önemli iyileştirmeler ve yeni özellikler mevcuttur.</translation> <translation id="4053720452172726777">Google Chrome'u özelleştirin ve kontrol edin</translation> <translation id="4110895483821904099">Yeni Chrome profilinizi oluşturun</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: 1 dakika önce.}other{Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: {NUM_MINS} dakika önce.}}</translation> <translation id="4143243756087420366">Chrome adı ve resmi</translation> <translation id="4147555960264124640">Yönetilen bir hesapla oturum açıyor ve hesabın yöneticisine Google Chrome profilinizi denetleme izni veriyorsunuz. Uygulamalarınız, yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız gibi Chrome verileriniz kalıcı olarak <ph name="USER_NAME" /> ile bağlantılandırılacaktır. Google Hesapları Hesap Özeti'ni kullanarak bu verileri silebilecek, ancak bu verileri başka bir hesapla ilişkilendiremeyeceksiniz.<ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Yükleyici arşivi açamadı. Lütfen Google Chrome'u yeniden indirin.</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome'u bir gün içinde yeniden başlatın}other{Chrome'u # gün içinde yeniden başlatın}}</translation> +<translation id="4205362703535890467">Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: Dün.</translation> <translation id="4205939740494406371">Chrome, şifrelerinizi kontrol edemiyor. 24 saat sonra tekrar deneyin veya <ph name="BEGIN_LINK" />şifreleri Google Hesabınızda kontrol edin<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome oturumu kapatılsın mı?</translation> <translation id="4251615635259297716">Chrome verileriniz bu hesaba bağlansın mı?</translation> @@ -141,6 +146,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Bu dosya tehlikeli olabileceği için Chrome tarafından engellendi.</translation> <translation id="479167709087336770">Bu işlev, Google Arama'da kullanılan yazım denetiminin aynısını kullanır. Tarayıcıda yazdığınız metin Google'a gönderilir. Bu davranışı istediğiniz zaman ayarlardan değiştirebilirsiniz.</translation> +<translation id="4831688036548685548">Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: Biraz önce.</translation> <translation id="4891791193823137474">Google Chrome'un arka planda çalışmasına izin ver</translation> <translation id="4895437082222824641">Bağlantıyı yeni Chrome &sekmesinde aç</translation> <translation id="4953650215774548573">Google Chrome'u varsayılan tarayıcım olarak ayarla</translation> @@ -156,6 +162,7 @@ <translation id="532046782124376502">Uyarı: Google Chrome, uzantıların göz atma geçmişinizi kaydetmesini önleyemez. Gizli modda bu uzantıyı devre dışı bırakmak için bu seçeneğin onay işaretini kaldırın.</translation> <translation id="5386244825306882791">Ayrıca, Chrome'u başlattığınızda veya Çok Amaçlı Adres Çubuğu'ndan arama yaptığınızda gösterilecek sayfayı da denetler.</translation> <translation id="5394833366792865639">Chrome sekmesi paylaşın</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: 1 gün önce.}other{Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: {NUM_DAYS} gün önce.}}</translation> <translation id="5430073640787465221">Tercih dosyanız bozuk veya geçersiz. Google Chrome, ayarlarınızı kurtaramıyor.</translation> <translation id="556024056938947818">Google Chrome şifreleri göstermeyi deniyor.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -192,6 +199,7 @@ <translation id="6750954913813541382">Yazım hatalarını düzeltmek için Chrome, tarayıcıda yazdığınız metni Google'a gönderir</translation> <translation id="677276454032249905">Yine de Chrome'dan çıkılsın mı?</translation> <translation id="683440813066116847">Google Chrome Canary'nin mDNS trafiğine izin vermeyi sağlayan gelen trafik kuralı.</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />Yöneticiniz<ph name="END_LINK" /> Chrome'un zararlı yazılım kontrolünü devre dışı bıraktı</translation> <translation id="6885412569789873916">Chrome Beta Uygulamaları</translation> <translation id="6943584222992551122">Bu kullanıcının göz atma verileri bu cihazdan silinecektir. Verileri kurtarmak için Chrome'da <ph name="USER_EMAIL" /> olarak oturum açın.</translation> <translation id="6967962315388095737">Google Chrome Beta'nın mDNS trafiğine izin vermeyi sağlayan gelen trafik kuralı.</translation> @@ -263,6 +271,7 @@ <translation id="8834965163890861871">Google Chrome şifreleri düzenlemeye çalışıyor. Buna izin vermek için Windows şifrenizi yazın.</translation> <translation id="884296878221830158">Ayrıca Chrome'u başlattığınızda veya Ana Sayfa düğmesini tıkladığınızda gösterilecek sayfayı da denetler.</translation> <translation id="8862326446509486874">Sistem düzeyinde yükleme için gerekli haklara sahip değilsiniz. Yükleyiciyi Yönetici olarak tekrar çalıştırmayı deneyin.</translation> +<translation id="8907906903932240086">Chrome, bilgisayarınızda zararlı yazılım olup olmadığını kontrol edebilir</translation> <translation id="8914504000324227558">Chrome'u Yeniden Başlat</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> sitesinden Android telefonunuza numara göndermek için iki cihazdan da Chrome'da oturum açın.</translation> <translation id="8999208279178790196">{0,plural, =0{Bir Chrome güncellemesi var}=1{Bir Chrome güncellemesi var}other{# gün önce kullanıma sunulmuş bir Chrome güncellemesi var}}</translation> @@ -270,6 +279,7 @@ <translation id="9067395829937117663">Google Chrome, Windows 7 veya daha sonraki bir sürümü gerektirir.</translation> <translation id="911206726377975832">Tarama verileriniz de silinsin mi?</translation> <translation id="9138603949443464873">Yaptığınız değişiklikleri uygulamak için Chrome'u yeniden başlatın</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: 1 saat önce.}other{Chrome, bilgisayarınızda bilinen zararlı yazılım bulamadı. Son kontrol: {NUM_HOURS} saat önce.}}</translation> <translation id="919706545465235479">Senkronizasyonu başlatmak için Chrome'u güncelleyin</translation> <translation id="989369509083708165">Google Chrome varsayılan tarayıcınız oldu</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_uz.xtb b/chrome/app/resources/google_chrome_strings_uz.xtb index ed111005..d1c2501 100644 --- a/chrome/app/resources/google_chrome_strings_uz.xtb +++ b/chrome/app/resources/google_chrome_strings_uz.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">Kompyuteringizda zararli dasturlar topildi. Chrome uni tozalab, sozlamalarni qayta tiklashi, kengaytmalarni oʻchirib qoʻyishi mumkin.</translation> <translation id="1065672644894730302">Sozlamalarni ko‘rib bo‘lmadi. Ba’zi funksiyalar mavjud emas va o‘zgartirilgan sozlamalar saqlanmaydi.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> hisobi avvallari Chrome’da ishlatilgan</translation> +<translation id="1088654056000736875">Chrome zararli dasturni kompyuteringizdan olib tashlamoqda...</translation> <translation id="1097330777386562916">Chrome yopilganda barcha cookie fayllari va sayt maʼlumotlari tozalanadi</translation> <translation id="110877069173485804">Bu Chrome sizniki</translation> <translation id="1125124144982679672">Chromeni kim ochdi?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">Internetni ish va shaxsiy maqsadlarda yoki bu qurilmadagi boshqa foydalanuvchilar kezishini ajratish uchun Chromeda turli profillardan foydalaning</translation> <translation id="137466361146087520">Google Chrome Beta</translation> <translation id="1399397803214730675">Bu kompyuterdagi Google Chrome brauzeri eskirgan, agar brauzer ishlamayotgan bo‘lsa, uni o‘chirib tashlang va qaytadan o‘rnating.</translation> +<translation id="140541193409212341">Chrome kompyuteringizni zararli dasturlar uchun tekshirayotganda xatolik yuz berdi</translation> <translation id="1434626383986940139">Chrome Canary ilovalari</translation> <translation id="1513277449617685876">Internetni <ph name="NEW_USER" /> bilan alohida kezish maqsadida Chromeda yangi profil oching</translation> <translation id="1553358976309200471">Chrome‘ni yangilash</translation> @@ -56,6 +58,7 @@ <translation id="2429317896000329049">Google Chrome domeningizda Sync xizmati yo‘qligi sababli ma’lumotlaringizni sinxronlay olmadi.</translation> <translation id="2467438592969358367">Google Chrome parollaringizni eksport qilmoqchi. Ruxsat berish uchun Windows platformasidagi parolingizni kiriting.</translation> <translation id="2485422356828889247">O‘chirib tashlash</translation> +<translation id="252502352004572774">Chrome kompyuteringizni zararli dasturlar uchun tekshirmoqda...</translation> <translation id="2534507159460261402">Google Pay (Chrome brauzeriga nusxalandi)</translation> <translation id="2580411288591421699">Hozir ishlab turgan versiyadagi Google Chrome brauzerini o‘rnatib bo‘lmaydi. Google Chrome brauzeringizni yoping va qaytadan urinib ko‘ring.</translation> <translation id="2586406160782125153">Bu qurilmadagi brauzer tarixini tozalaydi. Ma’lumotlaringizni keyinroq olish uchun Chrome brauzeriga <ph name="USER_EMAIL" /> sifatida kiring.</translation> @@ -110,10 +113,12 @@ <translation id="4050175100176540509">So‘nggi versiyada himoya devori yaxshilandi va yangi funksiyalar qo‘shildi.</translation> <translation id="4053720452172726777">Google Chrome’ni sozlash va boshqarish</translation> <translation id="4110895483821904099">Yangi Chrome profilini sozlang</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: 1 daqiqa oldin tekshirilgan.}other{Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: {NUM_MINS} daqiqa oldin tekshirilgan.}}</translation> <translation id="4143243756087420366">Chrome profili nomi va rasmi</translation> <translation id="4147555960264124640">Siz boshqaruvdagi hisobga kiryapsiz va uning administratoriga Google Chrome profilingizni boshqarishga ruxsat beryapsiz. Ilovalar, xatcho‘plar, brauzer tarixi, parollar va boshqa sozlamalar kabi barcha Chrome ma’lumotlaringiz <ph name="USER_NAME" /> hisobiga biriktiriladi. Siz bu ma’lumotlarni Google hisoblar shaxsiy kabinetidan o‘chirishingiz mumkin, lekin bu ma’lumotlarni boshqa hisob bilan bog‘lay olmaysiz. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Fayllarni arxivdan chiqarib bo‘lmadi. Google Chrome‘ni qayta yuklab oling.</translation> <translation id="4191857738314598978">{0,plural, =1{Chrome brauzerini 1 kun ichida qayta ishga tushiring}other{Chrome brauzerini # kun ichida qayta ishga tushiring}}</translation> +<translation id="4205362703535890467">Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: kecha tekshirilgan.</translation> <translation id="4205939740494406371">Chrome parollaringizni tekshira olmadi. 24 soatdan keyin qayta urining yoki <ph name="BEGIN_LINK" />Google hisobingizdagi parollarni tekshiring<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Chrome hisobidan chiqmoqchimisiz?</translation> <translation id="4251615635259297716">Chrome ma’lumotlari bu hisobga bog‘lansinmi?</translation> @@ -142,6 +147,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Bu fayl zararli bo‘lishi mumkin va u Chrome tomonidan bloklandi.</translation> <translation id="479167709087336770">Google qidiruvida ishlatiladigan imlo tekshiruvi vositasidan foydalanadi. Brauzerda kiritiladigan matn Google serverlariga yuboriladi. Buni istalgan vaqtda sozlamalar orqali oʻzgartirish mumkin.</translation> +<translation id="4831688036548685548">Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: hozirgina tekshirilgan.</translation> <translation id="4891791193823137474">Google Chrome fonda ishlashiga ruxsat</translation> <translation id="4895437082222824641">&Havolani yangi varaqda ochish</translation> <translation id="4953650215774548573">Google Chrome‘ni standart brauzer etib tayinlash</translation> @@ -157,6 +163,7 @@ <translation id="532046782124376502">Diqqat: Google Chrome kengaytmalar kezish tarixini yozib olishiga to‘sqinlik qilolmaydi. Bu kengaytmani inkognito rejimida o‘chirish uchun ushbu parametrdan belgini olib tashlang.</translation> <translation id="5386244825306882791">Bundan tashqari kengaytma Chrome boshlash sahifasini va omniboksdagi so‘rovlar uchun foydalaniladigan birlamchi qidiruv tizimini o‘zgartirdi.</translation> <translation id="5394833366792865639">Chrome sahifasini namoyish qilish</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: 1 kun oldin tekshirilgan.}other{Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: {NUM_DAYS} kun oldin tekshirilgan.}}</translation> <translation id="5430073640787465221">Sozlamalar fayli shikastlangan yoki yaroqsiz holatda. Google Chrome sozlamalaringizni qaytadan tiklay olmadi.</translation> @@ -195,6 +202,7 @@ <translation id="6750954913813541382">Imlo xatolarini tuzatish uchun Chrome brauzerida kiritiladigan matn Google serverlariga yuboriladi.</translation> <translation id="677276454032249905">Chrome baribir yopilsinmi?</translation> <translation id="683440813066116847">Google Chrome Canary‘ga kiruvchi trafikni mDNS protokoli orqali uzatishga ruxsat berish</translation> +<translation id="6861451385429799394">Chrome zararli dasturlarni aniqlash vositasi <ph name="BEGIN_LINK" />administrator<ph name="END_LINK" /> tomonidan faolsizlantirilgan</translation> <translation id="6885412569789873916">Chrome Beta ilovalari</translation> <translation id="6943584222992551122">Bu foydalanuvchi brauzerining tarixi ushbu qurilmadan butunlay tozalanadi. Axborotlarni tiklash uchun brauzerga <ph name="USER_EMAIL" /> sifatida kiring.</translation> <translation id="6967962315388095737">Google Chrome Beta mDNS trafigiga ruxsat berishiga oid kiruvchi qoida.</translation> @@ -266,6 +274,7 @@ <translation id="8834965163890861871">Google Chrome parollarni tahrirlashga urinmoqda. Ruxsat berish uchun Windows parolingizni kiriting.</translation> <translation id="884296878221830158">Bundan tashqari kengaytma Chrome ochilganida yoki Bosh sahifa tugmasi bosilganida qaysi sahifa ko‘rsatilishini nazorat qiladi.</translation> <translation id="8862326446509486874">Sizda tizim darajasida o‘rnatish uchun yetarli ruxsatlar yo‘q. O‘rnatish dasturini administrator nomidan qayta ishga tushiring.</translation> +<translation id="8907906903932240086">Chrome kompyuteringizni zararli dasturlarni aniqlash uchun tekshira oladi</translation> <translation id="8914504000324227558">Chrome’ni qayta ishga tushiring</translation> <translation id="8922193594870374009"><ph name="ORIGIN" /> orqali Android telefoningizga raqam yuborish uchun ikkala qurilmada Chrome hisobingizga kiring.</translation> <translation id="8999208279178790196">{0,plural, =0{Chrome uchun yangilanish mavjud}=1{Chrome uchun yangilanish mavjud}other{Chrome uchun yangilanish mavjud (# kun)}}</translation> @@ -273,6 +282,7 @@ <translation id="9067395829937117663">Google Chrome brauzeri ishlashi uchun kompyuterda Windows 7 yoki undan yangiroq versiyadagi operatsion tizim o‘rnatilgan bo‘lishi lozim.</translation> <translation id="911206726377975832">Brauzer faoliyati haqidagi ma’lumotlar ham tozalansinmi?</translation> <translation id="9138603949443464873">O‘zgarishlarni tatbi qilish uchun Chrome qayta ishga tushirilishi zarur</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: 1 soat oldin tekshirilgan.}other{Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: {NUM_HOURS} soat oldin tekshirilgan.}}</translation> <translation id="919706545465235479">Sinxronizatsiyani boshlash uchun Chrome brauzerini yangilang</translation> <translation id="989369509083708165">Qurilmangizdagi asosiy brauzer – Google Chrome.</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb index 57e6181..ddddc26 100644 --- a/chrome/app/resources/google_chrome_strings_vi.xtb +++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -6,6 +6,7 @@ <translation id="1051826050538111504">Máy tính của bạn có phần mềm độc hại. Chrome có thể xóa phần mềm này, khôi phục các tùy chọn cài đặt của bạn và tắt tiện ích để giúp trình duyệt hoạt động lại bình thường.</translation> <translation id="1065672644894730302">Không thể đọc tùy chọn của bạn. Một số tính năng có thể không khả dụng và các thay đổi đối với tùy chọn sẽ không được lưu.</translation> <translation id="1088300314857992706"><ph name="USER_EMAIL_ADDRESS" /> trước đó đã sử dụng Chrome</translation> +<translation id="1088654056000736875">Chrome đang xóa phần mềm gây hại khỏi máy tính của bạn...</translation> <translation id="1097330777386562916">Xóa cookie và dữ liệu trang web khi bạn thoát khỏi Chrome</translation> <translation id="110877069173485804">Đây là Chrome của bạn</translation> <translation id="1125124144982679672">Ai đang sử dụng Chrome?</translation> @@ -16,6 +17,7 @@ <translation id="1355000804395496115">Dùng nhiều hồ sơ trong Chrome để tách biệt giữa hoạt động duyệt web liên quan đến công việc và cá nhân, hoặc khi có nhiều người sử dụng thiết bị này</translation> <translation id="137466361146087520">Google Chrome Beta</translation> <translation id="1399397803214730675">Máy tính này đã có phiên bản Google Chrome mới hơn. Nếu phần mềm hiện không hoạt động, vui lòng gỡ cài đặt Google Chrome và thử lại.</translation> +<translation id="140541193409212341">Đã xảy ra lỗi khi Chrome kiểm tra máy tính của bạn để tìm phần mềm gây hại</translation> <translation id="1434626383986940139">Ứng dụng Chrome Canary</translation> <translation id="1513277449617685876">Để tách biệt giữa hoạt động duyệt web cá nhân và hoạt động duyệt web của <ph name="NEW_USER" />, hãy tạo một hồ sơ mới trong Chrome</translation> <translation id="1553358976309200471">Cập nhật Chrome</translation> @@ -57,6 +59,7 @@ <translation id="2429317896000329049">Google Chrome không thể đồng bộ hóa dữ liệu của bạn vì Đồng bộ hóa không khả dụng cho miền của bạn.</translation> <translation id="2467438592969358367">Google Chrome muốn xuất các mật khẩu của bạn. Hãy nhập mật khẩu Windows để cho phép thực hiện việc này.</translation> <translation id="2485422356828889247">Gỡ cài đặt</translation> +<translation id="252502352004572774">Chrome đang kiểm tra máy tính của bạn để tìm phần mềm gây hại...</translation> <translation id="2534507159460261402">Google Pay (đã sao chép vào Chrome)</translation> <translation id="2580411288591421699">Không thể cài đặt phiên bản Google Chrome giống với phiên bản hiện đang chạy. Vui lòng đóng Google Chrome và thử lại.</translation> <translation id="2586406160782125153">Thao tác này sẽ xóa dữ liệu duyệt web của bạn khỏi thiết bị này. Để truy xuất dữ liệu của bạn sau, hãy đăng nhập vào Chrome dưới dạng <ph name="USER_EMAIL" />.</translation> @@ -111,10 +114,12 @@ <translation id="4050175100176540509">Cải thiện bảo mật quan trọng và tính năng mới có trong phiên bản mới nhất.</translation> <translation id="4053720452172726777">Tùy chỉnh và điều khiển Google Chrome</translation> <translation id="4110895483821904099">Thiết lập hồ sơ Chrome mới</translation> +<translation id="4127976662406264741">{NUM_MINS,plural, =1{Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: 1 phút trước.}other{Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: {NUM_MINS} phút trước.}}</translation> <translation id="4143243756087420366">Tên và hình ảnh trên Chrome</translation> <translation id="4147555960264124640">Bạn đang đăng nhập bằng tài khoản được quản lý và cấp cho quản trị viên của tài khoản quyền kiểm soát cấu hình trên Google Chrome của bạn. Dữ liệu Chrome của bạn, chẳng hạn như ứng dụng, dấu trang, lịch sử, mật khẩu và các cài đặt khác sẽ vĩnh viễn được liên kết với <ph name="USER_NAME" />. Bạn có thể xóa dữ liệu này thông qua Trang tổng quan của tài khoản Google nhưng không thể liên kết dữ liệu này với tài khoản khác. <ph name="LEARN_MORE" /></translation> <translation id="4149882025268051530">Trình cài đặt không thể giải nén lưu trữ được. Vui lòng tải xuống lại Google Chrome.</translation> <translation id="4191857738314598978">{0,plural, =1{Khởi động lại Chrome trong vòng một ngày}other{Khởi động lại Chrome trong vòng # ngày}}</translation> +<translation id="4205362703535890467">Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: hôm qua.</translation> <translation id="4205939740494406371">Chrome không thể kiểm tra mật khẩu của bạn. Hãy thử lại sau 24 giờ hoặc <ph name="BEGIN_LINK" />kiểm tra các mật khẩu trong Tài khoản Google của bạn<ph name="END_LINK" />.</translation> <translation id="424864128008805179">Đăng xuất khỏi Chrome?</translation> <translation id="4251615635259297716">Bạn muốn liên kết dữ liệu Chrome của bạn với tài khoản này?</translation> @@ -143,6 +148,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Tệp này có thể nguy hiểm, do đó Chrome đã chặn tệp.</translation> <translation id="479167709087336770">Dịch vụ này sử dụng cùng một trình kiểm tra chính tả dùng trong Google Tìm kiếm. Thông tin bạn nhập vào trình duyệt sẽ được gửi tới Google. Bạn luôn có thể thay đổi hành động này trong phần cài đặt.</translation> +<translation id="4831688036548685548">Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: vài phút trước.</translation> <translation id="4891791193823137474">Để Google Chrome chạy trên nền</translation> <translation id="4895437082222824641">Mở liên kết trong thẻ mới của Chrome</translation> <translation id="4953650215774548573">Đặt Google Chrome làm trình duyệt mặc định của bạn</translation> @@ -158,6 +164,7 @@ <translation id="532046782124376502">Cảnh báo: Google Chrome không thể ngăn các tiện ích ghi lại lịch sử duyệt web của bạn. Để tắt tiện ích này trong chế độ ẩn danh, hãy bỏ chọn tùy chọn này.</translation> <translation id="5386244825306882791">Tiện ích này cũng điều khiển trang nào được hiển thị khi bạn khởi động Chrome hoặc tìm kiếm từ Thanh địa chỉ.</translation> <translation id="5394833366792865639">Chia sẻ một thẻ Chrome</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: 1 ngày trước.}other{Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: {NUM_DAYS} ngày trước.}}</translation> <translation id="5430073640787465221">Tệp tùy chọn của bạn bị hỏng hoặc không hợp lệ. Google Chrome không thể khôi phục cài đặt của bạn.</translation> <translation id="556024056938947818">Google Chrome đang cố gắng hiển thị mật khẩu.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation> @@ -194,6 +201,7 @@ <translation id="6750954913813541382">Để sửa lỗi chính tả, Chrome sẽ gửi văn bản mà bạn nhập vào trình duyệt này cho Google</translation> <translation id="677276454032249905">Bạn vẫn muốn thoát khỏi Chrome?</translation> <translation id="683440813066116847">Quy tắc kết nối để Google Chrome Canary cho phép lưu lượng truy cập mDNS.</translation> +<translation id="6861451385429799394"><ph name="BEGIN_LINK" />Quản trị viên của bạn<ph name="END_LINK" /> đã tắt tính năng kiểm tra phần mềm gây hại trên Chrome</translation> <translation id="6885412569789873916">Ứng dụng Chrome Beta</translation> <translation id="6943584222992551122">Dữ liệu duyệt web của người này sẽ bị xóa khỏi thiết bị này. Để khôi phục dữ liệu, hãy đăng nhập vào Chrome bằng <ph name="USER_EMAIL" />.</translation> <translation id="6967962315388095737">Quy tắc kết nối để Google Chrome Beta cho phép lưu lượng truy cập mDNS.</translation> @@ -265,6 +273,7 @@ <translation id="8834965163890861871">Google Chrome đang cố gắng chỉnh sửa mật khẩu. Hãy nhập mật khẩu Windows của bạn để cho phép việc này.</translation> <translation id="884296878221830158">Tiện ích này cũng điều khiển trang nào được hiển thị khi bạn khởi động Chrome hoặc nhấp vào nút Trang chủ.</translation> <translation id="8862326446509486874">Bạn không có quyền thích hợp để cài đặt cấp hệ thống. Thử chạy lại trình cài đặt với vai trò Quản trị viên.</translation> +<translation id="8907906903932240086">Chrome có thể kiểm tra máy tính của bạn để tìm phần mềm gây hại</translation> <translation id="8914504000324227558">Chạy lại Chrome</translation> <translation id="8922193594870374009">Để gửi số điện thoại từ <ph name="ORIGIN" /> đến điện thoại Android của bạn, hãy đăng nhập vào Chrome trên cả hai thiết bị.</translation> <translation id="8999208279178790196">{0,plural, =0{Đã có bản cập nhật Chrome}=1{Đã có bản cập nhật Chrome}other{Đã có bản cập nhật Chrome từ # ngày trước}}</translation> @@ -272,6 +281,7 @@ <translation id="9067395829937117663">Google Chrome yêu cầu Windows 7 trở lên.</translation> <translation id="911206726377975832">Bạn cũng muốn xóa dữ liệu duyệt web của mình?</translation> <translation id="9138603949443464873">Để áp dụng các mục thay đổi của bạn, hãy khởi động lại Chrome</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: 1 giờ trước.}other{Chrome không tìm thấy phần mềm gây hại đã biết trên máy tính của bạn. Lần kiểm tra gần đây nhất: {NUM_HOURS} giờ trước.}}</translation> <translation id="919706545465235479">Cập nhật Chrome để bắt đầu đồng bộ hóa</translation> <translation id="989369509083708165">Google Chrome là trình duyệt mặc định của bạn</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index e78f88b..c371d91 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -364,8 +364,11 @@ =1 {Found {COUNT} security issue} other {Found {COUNT} security issues}} </message> - <message name="IDS_SETTINGS_NO_WEAK_PASSWORDS_FOUND" desc="Description used only when user is signed out and full password check was not completed and no weak passwords found afther the password weakness check."> - No weak passwords found + <message name="IDS_SETTINGS_WEAK_PASSWORDS_COUNT" desc="Number of weak passwords present in the database. Displayed when the user is signed out and no compromised passwords exist"> + {COUNT, plural, + =0 {No weak passwords found} + =1 {Found {COUNT} weak password} + other {Found {COUNT} weak passwords}} </message> <message name="IDS_SETTINGS_CHECK_PASSWORDS_AGAIN" desc="Button to start bulk password check manually in passwords check section."> Check again @@ -2424,7 +2427,7 @@ Block sites from using fonts installed on your device </message> <message name="IDS_SETTINGS_SITE_SETTINGS_IDLE_DETECTION" desc="Label for the idle detection site settings."> - User presence + Your presence </message> <message name="IDS_SETTINGS_SITE_SETTINGS_IDLE_DETECTION_ASK" desc="The ask label for the idle detection site settings."> Ask when a site wants to know when you're present
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_NO_WEAK_PASSWORDS_FOUND.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_NO_WEAK_PASSWORDS_FOUND.png.sha1 deleted file mode 100644 index 9e0b2cd..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_NO_WEAK_PASSWORDS_FOUND.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f98266388839e9dc46d35d665233cd4be31b7d56 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_IDLE_DETECTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_IDLE_DETECTION.png.sha1 index 25101eb..d9285b8 100644 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_IDLE_DETECTION.png.sha1 +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_IDLE_DETECTION.png.sha1
@@ -1 +1 @@ -0ce373178d1c327e803b1b35917710e80f345950 \ No newline at end of file +5d7f0e0223b5dbd5b48a3b2ac26ba02857228c13 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_WEAK_PASSWORDS_COUNT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_WEAK_PASSWORDS_COUNT.png.sha1 new file mode 100644 index 0000000..374ce04 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_WEAK_PASSWORDS_COUNT.png.sha1
@@ -0,0 +1 @@ +8f393f395ae0dda9238b4f170c9d9940cd2a60a9 \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 0fc6632..4d3c4f7 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3394,14 +3394,14 @@ "enterprise/reporting/browser_report_generator_desktop.h", "enterprise/reporting/extension_info.cc", "enterprise/reporting/extension_info.h", - "enterprise/reporting/extension_request_policy_handler.cc", - "enterprise/reporting/extension_request_policy_handler.h", - "enterprise/reporting/notification/extension_request_notification.cc", - "enterprise/reporting/notification/extension_request_notification.h", - "enterprise/reporting/notification/extension_request_observer.cc", - "enterprise/reporting/notification/extension_request_observer.h", - "enterprise/reporting/notification/extension_request_observer_factory.cc", - "enterprise/reporting/notification/extension_request_observer_factory.h", + "enterprise/reporting/extension_request/extension_request_notification.cc", + "enterprise/reporting/extension_request/extension_request_notification.h", + "enterprise/reporting/extension_request/extension_request_observer.cc", + "enterprise/reporting/extension_request/extension_request_observer.h", + "enterprise/reporting/extension_request/extension_request_observer_factory.cc", + "enterprise/reporting/extension_request/extension_request_observer_factory.h", + "enterprise/reporting/extension_request/extension_request_policy_handler.cc", + "enterprise/reporting/extension_request/extension_request_policy_handler.h", "enterprise/reporting/prefs.cc", "enterprise/reporting/prefs.h", "enterprise/reporting/profile_report_generator_desktop.cc", @@ -4399,8 +4399,12 @@ "lacros/account_manager_facade_lacros.h", "lacros/account_manager_util.cc", "lacros/account_manager_util.h", + "lacros/feedback_util.cc", + "lacros/feedback_util.h", "lacros/lacros_chrome_service_delegate_impl.cc", "lacros/lacros_chrome_service_delegate_impl.h", + "lacros/system_logs/lacros_system_log_fetcher.cc", + "lacros/system_logs/lacros_system_log_fetcher.h", "metrics/enrollment_status.h", "metrics/lacros_metrics_provider.cc", "metrics/lacros_metrics_provider.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index be1717f..506f2cfa 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -2695,6 +2695,9 @@ FEATURE_VALUE_TYPE(display::features::kUseHDRTransferFunction)}, #endif // OS_CHROMEOS #if defined(OS_CHROMEOS) + {"dark-light-mode", flag_descriptions::kDarkLightTestName, + flag_descriptions::kDarkLightTestDescription, kOsCrOS, + FEATURE_VALUE_TYPE(ash::features::kDarkLightMode)}, {"screen-capture", flag_descriptions::kScreenCaptureTestName, flag_descriptions::kScreenCaptureTestDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kCaptureMode)}, @@ -2799,9 +2802,6 @@ {"shelf-app-scaling", flag_descriptions::kShelfAppScalingName, flag_descriptions::kShelfAppScalingDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kShelfAppScaling)}, - {"shelf-hotseat", flag_descriptions::kShelfHotseatName, - flag_descriptions::kShelfHotseatDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kShelfHotseat)}, {"shelf-hover-previews", flag_descriptions::kShelfHoverPreviewsName, flag_descriptions::kShelfHoverPreviewsDescription, kOsCrOS, SINGLE_VALUE_TYPE(chromeos::switches::kShelfHoverPreviews)}, @@ -5595,13 +5595,6 @@ flag_descriptions::kFontAccessAPIDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kFontAccess)}, -#if defined(OS_CHROMEOS) - {"enable-parental-controls-settings", - flag_descriptions::kEnableParentalControlsSettingsName, - flag_descriptions::kEnableParentalControlsSettingsDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kParentalControlsSettings)}, -#endif // defined(OS_CHROMEOS) - {"mouse-subframe-no-implicit-capture", flag_descriptions::kMouseSubframeNoImplicitCaptureName, flag_descriptions::kMouseSubframeNoImplicitCaptureDescription, kOsAll,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index f8784c7b..946ac508 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -924,6 +924,8 @@ "child_accounts/family_features.h", "child_accounts/family_user_app_metrics.cc", "child_accounts/family_user_app_metrics.h", + "child_accounts/family_user_chrome_activity_metrics.cc", + "child_accounts/family_user_chrome_activity_metrics.h", "child_accounts/family_user_metrics_service.cc", "child_accounts/family_user_metrics_service.h", "child_accounts/family_user_metrics_service_factory.cc", @@ -993,10 +995,13 @@ "crosapi/browser_loader.h", "crosapi/browser_manager.cc", "crosapi/browser_manager.h", + "crosapi/browser_manager_observer.h", "crosapi/browser_util.cc", "crosapi/browser_util.h", "crosapi/environment_provider.cc", "crosapi/environment_provider.h", + "crosapi/fake_browser_manager.cc", + "crosapi/fake_browser_manager.h", "crosapi/feedback_ash.cc", "crosapi/feedback_ash.h", "crosapi/keystore_service_ash.cc", @@ -2682,6 +2687,8 @@ "system/user_removal_manager.h", "system_logs/command_line_log_source.cc", "system_logs/command_line_log_source.h", + "system_logs/crosapi_system_log_source.cc", + "system_logs/crosapi_system_log_source.h", "system_logs/dbus_log_source.cc", "system_logs/dbus_log_source.h", "system_logs/debug_daemon_log_source.cc", @@ -3262,6 +3269,7 @@ "child_accounts/child_user_service_unittest.cc", "child_accounts/event_based_status_reporting_service_unittest.cc", "child_accounts/family_user_app_metrics_unittest.cc", + "child_accounts/family_user_chrome_activity_metrics_unittest.cc", "child_accounts/family_user_metrics_service_unittest.cc", "child_accounts/family_user_session_metrics_unittest.cc", "child_accounts/parent_access_code/authenticator_unittest.cc", @@ -3717,6 +3725,7 @@ "system/device_disabling_manager_unittest.cc", "system/procfs_util_unittest.cc", "system/user_removal_manager_unittest.cc", + "system_logs/crosapi_system_log_source_unittest.cc", "system_logs/shill_log_source_unittest.cc", "system_logs/single_debug_daemon_log_source_unittest.cc", "system_logs/single_log_file_log_source_unittest.cc",
diff --git a/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.cc b/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.cc new file mode 100644 index 0000000..80bd7870 --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.cc
@@ -0,0 +1,117 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h" + +#include "base/logging.h" +#include "base/metrics/histogram_functions.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limit_utils.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_types.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/common/pref_names.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/pref_service.h" +#include "ui/aura/window.h" + +namespace chromeos { + +namespace { + +constexpr base::TimeDelta kMinChromeDuration = base::TimeDelta::FromSeconds(1); +constexpr base::TimeDelta kMaxChromeDuration = base::TimeDelta::FromDays(1); +constexpr int kChromeDurationBuckets = 100; + +} // namespace + +// static +const char FamilyUserChromeActivityMetrics:: + kChromeBrowserEngagementDurationHistogramName[] = + "FamilyUser.ChromeBrowserEngagement.Duration"; + +// static +void FamilyUserChromeActivityMetrics::RegisterProfilePrefs( + PrefRegistrySimple* registry) { + registry->RegisterTimeDeltaPref( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration, + base::TimeDelta()); +} + +FamilyUserChromeActivityMetrics::FamilyUserChromeActivityMetrics( + Profile* profile) + : pref_service_(profile->GetPrefs()), app_service_wrapper_(profile) { + DCHECK(pref_service_); + app_service_wrapper_.AddObserver(this); +} + +FamilyUserChromeActivityMetrics::~FamilyUserChromeActivityMetrics() { + DCHECK_EQ(base::Time(), active_duration_start_); + app_service_wrapper_.RemoveObserver(this); +} + +void FamilyUserChromeActivityMetrics::OnNewDay() { + base::TimeDelta unreported_duration = pref_service_->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration); + if (unreported_duration <= base::TimeDelta()) + return; + base::UmaHistogramCustomTimes(kChromeBrowserEngagementDurationHistogramName, + unreported_duration, kMinChromeDuration, + kMaxChromeDuration, kChromeDurationBuckets); + pref_service_->ClearPref( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration); +} + +void FamilyUserChromeActivityMetrics::SetActiveSessionStartForTesting( + base::Time time) { + active_duration_start_ = time; +} + +void FamilyUserChromeActivityMetrics::OnAppActive(const app_time::AppId& app_id, + aura::Window* window, + base::Time timestamp) { + if (app_id != app_time::GetChromeAppId()) + return; + + if (active_browser_windows_.empty()) + UpdateUserEngagement(/*is_user_active=*/true); + + active_browser_windows_.insert(window); +} + +void FamilyUserChromeActivityMetrics::OnAppInactive( + const app_time::AppId& app_id, + aura::Window* window, + base::Time timestamp) { + if (app_id != app_time::GetChromeAppId()) + return; + + // OnAppInactive might get called for the same window multiple times. The + // |window| might have already been removed from |active_browser_windows_|. + if (!base::Contains(active_browser_windows_, window)) + return; + + active_browser_windows_.erase(window); + if (active_browser_windows_.empty()) + UpdateUserEngagement(/*is_user_active=*/false); +} + +void FamilyUserChromeActivityMetrics::UpdateUserEngagement( + bool is_user_active) { + base::Time now = base::Time::Now(); + if (is_user_active) { + active_duration_start_ = now; + } else { + if (now > active_duration_start_) { + base::TimeDelta unreported_duration = pref_service_->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration); + pref_service_->SetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration, + unreported_duration + now - active_duration_start_); + } + + active_duration_start_ = base::Time(); + } +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h b/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h new file mode 100644 index 0000000..67c86db --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h
@@ -0,0 +1,73 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_FAMILY_USER_CHROME_ACTIVITY_METRICS_H_ +#define CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_FAMILY_USER_CHROME_ACTIVITY_METRICS_H_ + +#include <set> + +#include "base/time/time.h" +#include "chrome/browser/chromeos/child_accounts/family_user_metrics_service.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_service_wrapper.h" + +class PrefRegistrySimple; +class PrefService; +class Profile; + +namespace aura { +class Window; +} + +namespace chromeos { +// This class records: FamilyUser.ChromeBrowserEngagement.Duration. It is the +// daily sum of user's active Chrome browser time in milliseconds. Recorded at +// the beginning of the first active Chrome OS session on a subsequent day. +class FamilyUserChromeActivityMetrics + : public app_time::AppServiceWrapper::EventListener, + public FamilyUserMetricsService::Observer { + public: + static const char kChromeBrowserEngagementDurationHistogramName[]; + + static void RegisterProfilePrefs(PrefRegistrySimple* registry); + + explicit FamilyUserChromeActivityMetrics(Profile* profile); + FamilyUserChromeActivityMetrics(const FamilyUserChromeActivityMetrics&) = + delete; + FamilyUserChromeActivityMetrics& operator=( + const FamilyUserChromeActivityMetrics&) = delete; + ~FamilyUserChromeActivityMetrics() override; + + // FamilyUserMetricsService::Observer: + void OnNewDay() override; + + void SetActiveSessionStartForTesting(base::Time time); + + private: + // AppServiceWrapper::EventListener: + void OnAppActive(const app_time::AppId& app_id, + aura::Window* window, + base::Time timestamp) override; + void OnAppInactive(const app_time::AppId& app_id, + aura::Window* window, + base::Time timestamp) override; + + // Called when user engagement of browser changes. Saves duration data to + // prefs or report to UMA. + void UpdateUserEngagement(bool is_user_active); + + PrefService* const pref_service_; + app_time::AppServiceWrapper app_service_wrapper_; + + // The time when the user becomes active. + base::Time active_duration_start_; + + // A set of active browser window instances. When the new Chrome browser + // window get created or activated, OnAppActive adds that window to the set. + // When the Chrome browser window get destroyed or deactivated, OnAppInactive + // might remove that window from the set. + std::set<aura::Window*> active_browser_windows_; +}; +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_FAMILY_USER_CHROME_ACTIVITY_METRICS_H_
diff --git a/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics_unittest.cc b/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics_unittest.cc new file mode 100644 index 0000000..7905c71 --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics_unittest.cc
@@ -0,0 +1,278 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h" + +#include <memory> +#include <vector> + +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "base/logging.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/time/time.h" +#include "chrome/browser/apps/app_service/app_service_proxy.h" +#include "chrome/browser/apps/app_service/app_service_proxy_factory.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limit_utils.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_time_test_utils.h" +#include "chrome/browser/chromeos/child_accounts/time_limits/app_types.h" +#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/test_extension_system.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/common/pref_names.h" +#include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "chrome/test/base/test_browser_window_aura.h" +#include "components/services/app_service/public/cpp/app_registry_cache.h" +#include "components/services/app_service/public/mojom/types.mojom.h" + +namespace chromeos { + +namespace { +constexpr char kExtensionNameChrome[] = "Chrome"; +constexpr char kExtensionAppUrl[] = "https://example.com/"; +constexpr base::TimeDelta kHalfHour = base::TimeDelta::FromMinutes(30); + +constexpr apps::InstanceState kActiveInstanceState = + static_cast<apps::InstanceState>( + apps::InstanceState::kStarted | apps::InstanceState::kRunning | + apps::InstanceState::kActive | apps::InstanceState::kVisible); +constexpr apps::InstanceState kInactiveInstanceState = + static_cast<apps::InstanceState>(apps::InstanceState::kStarted | + apps::InstanceState::kRunning); + +} // namespace + +class FamilyUserChromeActivityMetricsTest + : public ChromeRenderViewHostTestHarness { + public: + FamilyUserChromeActivityMetricsTest() + : ChromeRenderViewHostTestHarness( + base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} + + ~FamilyUserChromeActivityMetricsTest() override = default; + + void SetUp() override { + ChromeRenderViewHostTestHarness::SetUp(); + InitiateFamilyUserChromeActivityMetrics(); + + extensions::TestExtensionSystem* extension_system( + static_cast<extensions::TestExtensionSystem*>( + extensions::ExtensionSystem::Get(profile()))); + extension_service_ = extension_system->CreateExtensionService( + /*command_line=*/base::CommandLine::ForCurrentProcess(), + /*install_directory=*/base::FilePath(), /*autoupdate_enabled=*/false); + extension_service_->Init(); + + // Install Chrome. + scoped_refptr<extensions::Extension> chrome = app_time::CreateExtension( + extension_misc::kChromeAppId, kExtensionNameChrome, kExtensionAppUrl); + extension_service_->AddComponentExtension(chrome.get()); + + PushChromeApp(); + } + + void TearDown() override { + DestroyFamilyUserChromeActivityMetrics(); + ChromeRenderViewHostTestHarness::TearDown(); + } + + protected: + void DestroyFamilyUserChromeActivityMetrics() { + family_user_chrome_activity_metrics_.reset(); + } + + void InitiateFamilyUserChromeActivityMetrics() { + family_user_chrome_activity_metrics_ = + std::make_unique<FamilyUserChromeActivityMetrics>(profile()); + } + + void PushChromeApp() { + std::vector<apps::mojom::AppPtr> deltas; + auto app = apps::mojom::App::New(); + app->app_id = app_time::GetChromeAppId().app_id(); + app->app_type = app_time::GetChromeAppId().app_type(); + deltas.push_back(std::move(app)); + + apps::AppServiceProxy* proxy = + apps::AppServiceProxyFactory::GetForProfile(profile()); + proxy->AppRegistryCache().OnApps(std::move(deltas)); + } + + void SetActiveSessionStartTime(base::Time time) { + family_user_chrome_activity_metrics_->SetActiveSessionStartForTesting(time); + } + + void OnNewDay() { family_user_chrome_activity_metrics_->OnNewDay(); } + + void PushChromeAppInstance(aura::Window* window, apps::InstanceState state) { + std::unique_ptr<apps::Instance> instance = std::make_unique<apps::Instance>( + app_time::GetChromeAppId().app_id(), window); + instance->UpdateState(state, base::Time::Now()); + + std::vector<std::unique_ptr<apps::Instance>> deltas; + deltas.push_back(std::move(instance)); + + apps::AppServiceProxy* proxy = + apps::AppServiceProxyFactory::GetForProfile(profile()); + proxy->InstanceRegistry().OnInstances(deltas); + } + + std::unique_ptr<Browser> CreateBrowserWithAuraWindow() { + std::unique_ptr<aura::Window> window = std::make_unique<aura::Window>( + nullptr, aura::client::WINDOW_TYPE_NORMAL); + window->set_id(0); + window->Init(ui::LAYER_TEXTURED); + Browser::CreateParams params(profile(), true); + params.type = Browser::TYPE_NORMAL; + browser_window_ = + std::make_unique<TestBrowserWindowAura>(std::move(window)); + params.window = browser_window_.get(); + + return std::make_unique<Browser>(params); + } + + PrefService* pref_service() { return profile()->GetPrefs(); } + + private: + std::unique_ptr<FamilyUserChromeActivityMetrics> + family_user_chrome_activity_metrics_; + std::unique_ptr<TestBrowserWindowAura> browser_window_; + + extensions::ExtensionService* extension_service_ = nullptr; +}; + +TEST_F(FamilyUserChromeActivityMetricsTest, Basic) { + base::HistogramTester histogram_tester; + + BrowserList* active_browser_list = BrowserList::GetInstance(); + // Expect BrowserList is empty at the beginning. + EXPECT_EQ(0U, active_browser_list->size()); + std::unique_ptr<Browser> browser1 = CreateBrowserWithAuraWindow(); + + EXPECT_EQ(1U, active_browser_list->size()); + + // Set the app active. If the app is active, it should be started, running, + // and visible. + + PushChromeAppInstance(browser1->window()->GetNativeWindow(), + kActiveInstanceState); + task_environment()->FastForwardBy(kHalfHour); + + // Set the app running in the background. + PushChromeAppInstance(browser1->window()->GetNativeWindow(), + kInactiveInstanceState); + + EXPECT_EQ(kHalfHour, + pref_service()->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration)); + + // Test multiple browsers. + std::unique_ptr<Browser> browser2 = CreateBrowserWithAuraWindow(); + EXPECT_EQ(2U, active_browser_list->size()); + + PushChromeAppInstance(browser2->window()->GetNativeWindow(), + apps::InstanceState::kActive); + task_environment()->FastForwardBy(kHalfHour); + PushChromeAppInstance(browser2->window()->GetNativeWindow(), + apps::InstanceState::kDestroyed); + EXPECT_EQ(base::TimeDelta::FromHours(1), + pref_service()->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration)); + + // Test date change. + task_environment()->FastForwardBy(base::TimeDelta::FromDays(1)); + OnNewDay(); + + EXPECT_EQ(base::TimeDelta(), + pref_service()->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration)); + histogram_tester.ExpectTimeBucketCount( + FamilyUserChromeActivityMetrics:: + kChromeBrowserEngagementDurationHistogramName, + base::TimeDelta::FromHours(1), 1); +} + +TEST_F(FamilyUserChromeActivityMetricsTest, ClockBackward) { + base::HistogramTester histogram_tester; + + BrowserList* active_browser_list = BrowserList::GetInstance(); + EXPECT_EQ(0U, active_browser_list->size()); + std::unique_ptr<Browser> browser = CreateBrowserWithAuraWindow(); + + // Expect that |browser| is added to browser list. + EXPECT_EQ(1U, active_browser_list->size()); + + PushChromeAppInstance(browser->window()->GetNativeWindow(), + kActiveInstanceState); + + base::Time mock_session_start = base::Time::Now() + kHalfHour; + + // Mock a state that start time > end time. + SetActiveSessionStartTime(mock_session_start); + + PushChromeAppInstance(browser->window()->GetNativeWindow(), + kInactiveInstanceState); + + histogram_tester.ExpectTotalCount( + FamilyUserChromeActivityMetrics:: + kChromeBrowserEngagementDurationHistogramName, + 0); + EXPECT_EQ(base::TimeDelta(), + pref_service()->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration)); +} + +// Tests destroying FamilyUserChromeActivityMetrics. OnAppInactive() will be +// invoked while Chrome browser state changed to kDestroyed. +TEST_F(FamilyUserChromeActivityMetricsTest, + DestructionAndCreationOfFamilyUserChromeActivityMetrics) { + base::HistogramTester histogram_tester; + + BrowserList* active_browser_list = BrowserList::GetInstance(); + EXPECT_EQ(0U, active_browser_list->size()); + std::unique_ptr<Browser> browser = CreateBrowserWithAuraWindow(); + + // Expect that |browser| is added to browser list. + EXPECT_EQ(1U, active_browser_list->size()); + + PushChromeAppInstance(browser->window()->GetNativeWindow(), + kActiveInstanceState); + + task_environment()->FastForwardBy(kHalfHour); + + PushChromeAppInstance(browser->window()->GetNativeWindow(), + apps::InstanceState::kDestroyed); + browser.reset(); + EXPECT_EQ(0U, active_browser_list->size()); + DestroyFamilyUserChromeActivityMetrics(); + + histogram_tester.ExpectTotalCount( + FamilyUserChromeActivityMetrics:: + kChromeBrowserEngagementDurationHistogramName, + 0); + EXPECT_EQ(kHalfHour, + pref_service()->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration)); + + // Test restart. + InitiateFamilyUserChromeActivityMetrics(); + browser = CreateBrowserWithAuraWindow(); + PushChromeAppInstance(browser->window()->GetNativeWindow(), + kActiveInstanceState); + task_environment()->FastForwardBy(kHalfHour); + + // Set the app running background. + PushChromeAppInstance(browser->window()->GetNativeWindow(), + kInactiveInstanceState); + + histogram_tester.ExpectTotalCount( + FamilyUserChromeActivityMetrics:: + kChromeBrowserEngagementDurationHistogramName, + 0); + EXPECT_EQ(base::TimeDelta::FromHours(1), + pref_service()->GetTimeDelta( + prefs::kFamilyUserMetricsChromeBrowserEngagementDuration)); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/family_user_metrics_service.cc b/chrome/browser/chromeos/child_accounts/family_user_metrics_service.cc index 8d59708..2400893 100644 --- a/chrome/browser/chromeos/child_accounts/family_user_metrics_service.cc +++ b/chrome/browser/chromeos/child_accounts/family_user_metrics_service.cc
@@ -6,6 +6,7 @@ #include "base/logging.h" #include "chrome/browser/chromeos/child_accounts/family_user_app_metrics.h" +#include "chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h" #include "chrome/browser/chromeos/child_accounts/family_user_session_metrics.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" @@ -46,6 +47,8 @@ Profile* profile = Profile::FromBrowserContext(context); family_user_metrics_.push_back( std::make_unique<FamilyUserAppMetrics>(profile)); + family_user_metrics_.push_back( + std::make_unique<FamilyUserChromeActivityMetrics>(profile)); for (auto& family_user_metric : family_user_metrics_) AddObserver(family_user_metric.get());
diff --git a/chrome/browser/chromeos/crosapi/browser_manager.cc b/chrome/browser/chromeos/crosapi/browser_manager.cc index 83764de5..04a139f3 100644 --- a/chrome/browser/chromeos/crosapi/browser_manager.cc +++ b/chrome/browser/chromeos/crosapi/browser_manager.cc
@@ -56,6 +56,10 @@ // Pointer to the global instance of BrowserManager. BrowserManager* g_instance = nullptr; +// The min version of LacrosChromeService mojo interface that supports +// GetFeedbackData API. +uint32_t kGetFeedbackDataMinVersion = 6; + base::FilePath LacrosLogPath() { return browser_util::GetUserDataDir().Append("lacros.log"); } @@ -149,7 +153,8 @@ // Wait to query the flag until the user has entered the session. Enterprise // devices restart Chrome during login to apply flags. We don't want to run // the flag-off cleanup logic until we know we have the final flag state. - session_manager::SessionManager::Get()->AddObserver(this); + if (session_manager::SessionManager::Get()) + session_manager::SessionManager::Get()->AddObserver(this); std::string socket_path = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( @@ -164,7 +169,8 @@ BrowserManager::~BrowserManager() { // Unregister, just in case the manager is destroyed before // OnUserSessionStarted() is called. - session_manager::SessionManager::Get()->RemoveObserver(this); + if (session_manager::SessionManager::Get()) + session_manager::SessionManager::Get()->RemoveObserver(this); // Try to kill the lacros-chrome binary. if (lacros_process_.IsValid()) @@ -179,6 +185,10 @@ state_ != State::UNAVAILABLE; } +bool BrowserManager::IsRunning() const { + return state_ == State::RUNNING; +} + void BrowserManager::SetLoadCompleteCallback(LoadCompleteCallback callback) { load_complete_callback_ = std::move(callback); } @@ -213,6 +223,24 @@ lacros_chrome_service_->NewWindow(base::DoNothing()); } +bool BrowserManager::GetFeedbackDataSupported() const { + return lacros_chrome_service_version_ >= kGetFeedbackDataMinVersion; +} + +void BrowserManager::GetFeedbackData(GetFeedbackDataCallback callback) { + DCHECK(lacros_chrome_service_.is_connected()); + DCHECK(GetFeedbackDataSupported()); + lacros_chrome_service_->GetFeedbackData(std::move(callback)); +} + +void BrowserManager::AddObserver(BrowserManagerObserver* observer) { + observers_.AddObserver(observer); +} + +void BrowserManager::RemoveObserver(BrowserManagerObserver* observer) { + observers_.RemoveObserver(observer); +} + void BrowserManager::Start() { DCHECK_EQ(state_, State::STOPPED); DCHECK(!lacros_path_.empty()); @@ -305,6 +333,10 @@ base::BindOnce(&BrowserManager::OnAshChromeServiceReceiverReceived, weak_factory_.GetWeakPtr())); + lacros_chrome_service_.QueryVersion( + base::BindOnce(&BrowserManager::OnLacrosChromeServiceVersionReady, + weak_factory_.GetWeakPtr())); + // Create the lacros-chrome subprocess. base::RecordAction(base::UserMetricsAction("Lacros.Launch")); // If lacros_process_ already exists, because it does not call waitpid(2), @@ -346,6 +378,8 @@ base::BindOnce(&TerminateLacrosChrome, std::move(lacros_process_)), base::BindOnce(&BrowserManager::OnLacrosChromeTerminated, weak_factory_.GetWeakPtr())); + + NotifyMojoDisconnected(); } void BrowserManager::OnLacrosChromeTerminated() { @@ -403,4 +437,13 @@ } } +void BrowserManager::NotifyMojoDisconnected() { + for (auto& observer : observers_) + observer.OnMojoDisconnected(); +} + +void BrowserManager::OnLacrosChromeServiceVersionReady(uint32_t version) { + lacros_chrome_service_version_ = version; +} + } // namespace crosapi
diff --git a/chrome/browser/chromeos/crosapi/browser_manager.h b/chrome/browser/chromeos/crosapi/browser_manager.h index fb2318aa..b164bdd 100644 --- a/chrome/browser/chromeos/crosapi/browser_manager.h +++ b/chrome/browser/chromeos/crosapi/browser_manager.h
@@ -11,7 +11,9 @@ #include "base/files/file_path.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" +#include "base/observer_list.h" #include "base/process/process.h" +#include "chrome/browser/chromeos/crosapi/browser_manager_observer.h" #include "chrome/browser/chromeos/crosapi/environment_provider.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "components/session_manager/core/session_manager_observer.h" @@ -48,6 +50,10 @@ // call SetLoadCompleteCallback() to be notified when the download completes. bool IsReady() const; + // Returns true if Lacros is in running state. + // Virtual for testing. + virtual bool IsRunning() const; + // Sets a callback to be called when the binary download completes. The // download may not be successful. using LoadCompleteCallback = base::OnceCallback<void(bool success)>; @@ -68,11 +74,26 @@ // so should be avoided. void NewWindow(); + // Returns true if crosapi interface supports GetFeedbackData API. + bool GetFeedbackDataSupported() const; + + using GetFeedbackDataCallback = base::OnceCallback<void(base::Value)>; + // Gathers Lacros feedback data. + // Virtual for testing. + virtual void GetFeedbackData(GetFeedbackDataCallback callback); + + void AddObserver(BrowserManagerObserver* observer); + void RemoveObserver(BrowserManagerObserver* observer); + const std::string& lacros_version() const { return lacros_version_; } void set_lacros_version(const std::string& version) { lacros_version_ = version; } + protected: + // Notifies Mojo connection to lacros-chrome has been disconnected. + void NotifyMojoDisconnected(); + private: enum class State { // Lacros is not initialized yet. @@ -132,6 +153,9 @@ // Called on load completion. void OnLoadComplete(const base::FilePath& path); + // Callback of QueryVersion for LacrosChromeService. + void OnLacrosChromeServiceVersionReady(uint32_t version); + State state_ = State::NOT_INITIALIZED; // May be null in tests. @@ -148,6 +172,9 @@ // For example, "87.0.0.1 dev", "86.0.4240.38 beta". std::string lacros_version_; + // Version of LacrosChromeService mojo interface. + uint32_t lacros_chrome_service_version_ = 0; + // Called when the binary download completes. LoadCompleteCallback load_complete_callback_; @@ -170,6 +197,8 @@ // Used to pass ash-chrome specific flags/configurations to lacros-chrome. std::unique_ptr<EnvironmentProvider> environment_provider_; + base::ObserverList<BrowserManagerObserver> observers_; + base::WeakPtrFactory<BrowserManager> weak_factory_{this}; };
diff --git a/chrome/browser/chromeos/crosapi/browser_manager_observer.h b/chrome/browser/chromeos/crosapi/browser_manager_observer.h new file mode 100644 index 0000000..87fe7a97 --- /dev/null +++ b/chrome/browser/chromeos/crosapi/browser_manager_observer.h
@@ -0,0 +1,20 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_CROSAPI_BROWSER_MANAGER_OBSERVER_H_ +#define CHROME_BROWSER_CHROMEOS_CROSAPI_BROWSER_MANAGER_OBSERVER_H_ + +#include "base/observer_list_types.h" + +namespace crosapi { + +class BrowserManagerObserver : public base::CheckedObserver { + public: + // Invoked when the Mojo connection to lacros-chrome is disconnected. + virtual void OnMojoDisconnected() {} +}; + +} // namespace crosapi + +#endif // CHROME_BROWSER_CHROMEOS_CROSAPI_BROWSER_MANAGER_OBSERVER_H_
diff --git a/chrome/browser/chromeos/crosapi/fake_browser_manager.cc b/chrome/browser/chromeos/crosapi/fake_browser_manager.cc new file mode 100644 index 0000000..f45fa58 --- /dev/null +++ b/chrome/browser/chromeos/crosapi/fake_browser_manager.cc
@@ -0,0 +1,39 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/crosapi/fake_browser_manager.h" + +#include "chrome/browser/component_updater/cros_component_manager.h" + +namespace crosapi { + +FakeBrowserManager::FakeBrowserManager() + : BrowserManager( + scoped_refptr<component_updater::CrOSComponentManager>(nullptr)) {} + +FakeBrowserManager::~FakeBrowserManager() = default; + +void FakeBrowserManager::SetGetFeedbackDataResponse(base::Value response) { + feedback_response_ = std::move(response); +} + +void FakeBrowserManager::SignalMojoDisconnected() { + NotifyMojoDisconnected(); +} + +bool FakeBrowserManager::IsRunning() const { + return is_running_; +} + +void FakeBrowserManager::GetFeedbackData(GetFeedbackDataCallback callback) { + const base::DictionaryValue* sysinfo_entries; + feedback_response_.GetAsDictionary(&sysinfo_entries); + + // Run |callback| with the pre-set |feedback_responses_|, unless testing + // client requests waiting for crosapi mojo disconnected event being observed. + if (!wait_for_mojo_disconnect_) + std::move(callback).Run(std::move(feedback_response_)); +} + +} // namespace crosapi
diff --git a/chrome/browser/chromeos/crosapi/fake_browser_manager.h b/chrome/browser/chromeos/crosapi/fake_browser_manager.h new file mode 100644 index 0000000..252cded0 --- /dev/null +++ b/chrome/browser/chromeos/crosapi/fake_browser_manager.h
@@ -0,0 +1,51 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_CROSAPI_FAKE_BROWSER_MANAGER_H_ +#define CHROME_BROWSER_CHROMEOS_CROSAPI_FAKE_BROWSER_MANAGER_H_ + +#include "base/values.h" +#include "chrome/browser/chromeos/crosapi/browser_manager.h" + +namespace crosapi { + +// A fake implementation of BrowserManager, used for testing. +class FakeBrowserManager : public BrowserManager { + public: + FakeBrowserManager(); + FakeBrowserManager(const FakeBrowserManager&) = delete; + FakeBrowserManager& operator=(const FakeBrowserManager&) = delete; + + ~FakeBrowserManager() override; + + void set_is_running(bool value) { is_running_ = value; } + void set_wait_for_mojo_disconnect(bool value) { + wait_for_mojo_disconnect_ = value; + } + + // Set up response data to be sent for the callback of Fetch. + void SetGetFeedbackDataResponse(base::Value response); + + // Simulates crosapi mojo disconnection event observed. + void SignalMojoDisconnected(); + + // BrowserManager: + bool IsRunning() const override; + void GetFeedbackData(GetFeedbackDataCallback callback) override; + + private: + // State indicating Lacros is running or not. + bool is_running_ = false; + + // If this flag is set to true, simulate the case that mojo disconnect + // signal is received before the log data is fetched. + bool wait_for_mojo_disconnect_ = false; + + // Stores the response to be sent back for GetFeedbackData callback. + base::Value feedback_response_; +}; + +} // namespace crosapi + +#endif // CHROME_BROWSER_CHROMEOS_CROSAPI_FAKE_BROWSER_MANAGER_H_
diff --git a/chrome/browser/chromeos/crosapi/test_mojo_connection_manager_unittest.cc b/chrome/browser/chromeos/crosapi/test_mojo_connection_manager_unittest.cc index 30bd3e5..a346ba4 100644 --- a/chrome/browser/chromeos/crosapi/test_mojo_connection_manager_unittest.cc +++ b/chrome/browser/chromeos/crosapi/test_mojo_connection_manager_unittest.cc
@@ -54,6 +54,7 @@ } void NewWindow(NewWindowCallback callback) override {} + void GetFeedbackData(GetFeedbackDataCallback callback) override {} bool init_is_called() { return init_is_called_; }
diff --git a/chrome/browser/chromeos/policy/extension_install_event_log_manager_unittest.cc b/chrome/browser/chromeos/policy/extension_install_event_log_manager_unittest.cc index dc2a53d..3c6a898 100644 --- a/chrome/browser/chromeos/policy/extension_install_event_log_manager_unittest.cc +++ b/chrome/browser/chromeos/policy/extension_install_event_log_manager_unittest.cc
@@ -22,12 +22,12 @@ #include "base/values.h" #include "chrome/browser/chromeos/policy/extension_install_event_log.h" #include "chrome/browser/chromeos/policy/install_event_log_util.h" +#include "chrome/browser/policy/messaging_layer/public/mock_report_queue.h" +#include "chrome/browser/policy/messaging_layer/util/status.h" #include "chrome/browser/profiles/reporting_util.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/system/fake_statistics_provider.h" #include "components/arc/arc_prefs.h" -#include "components/policy/core/common/cloud/cloud_policy_client.h" -#include "components/policy/core/common/cloud/mock_cloud_policy_client.h" #include "components/policy/core/common/cloud/realtime_reporting_job_configuration.h" #include "components/policy/proto/device_management_backend.pb.h" #include "components/prefs/pref_service.h" @@ -38,9 +38,12 @@ using testing::_; using testing::AnyNumber; +using testing::DoAll; using testing::Invoke; +using testing::Matcher; using testing::Mock; using testing::Pointee; +using testing::Return; namespace em = enterprise_management; @@ -59,7 +62,6 @@ constexpr int kTotalSizeExpeditedUploadThreshold = 2048; constexpr int kMaxSizeExpeditedUploadThreshold = 512; -constexpr char kDMToken[] = "token"; constexpr const char* kExtensionIds[] = { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "cccccccccccccccccccccccccccccccc", "dddddddddddddddddddddddddddddddd", @@ -158,7 +160,7 @@ class ExtensionInstallEventLogManagerTest : public testing::Test { protected: ExtensionInstallEventLogManagerTest() - : uploader_(&cloud_policy_client_, /*profile=*/nullptr), + : uploader_(/*profile=*/nullptr), log_task_runner_(log_task_runner_wrapper_.test_task_runner()), log_file_path_(profile_.GetPath().Append(kLogFileName)), extension_ids_{std::begin(kExtensionIds), std::end(kExtensionIds)}, @@ -169,8 +171,9 @@ // testing::Test: void SetUp() override { - cloud_policy_client_.SetDMToken(kDMToken); - + auto mock_report_queue = std::make_unique<reporting::MockReportQueue>(); + mock_report_queue_ = mock_report_queue.get(); + uploader_.SetReportQueue(std::move(mock_report_queue)); event_.set_timestamp(0); event_.set_event_type(em::ExtensionInstallReportLogEvent::SUCCESS); @@ -181,9 +184,7 @@ // testing::Test: void TearDown() override { - Mock::VerifyAndClearExpectations(&cloud_policy_client_); - EXPECT_CALL(cloud_policy_client_, CancelExtensionInstallReportUpload()) - .Times(AnyNumber()); + Mock::VerifyAndClearExpectations(mock_report_queue_); manager_.reset(); FastForwardUntilNoTasksRemain(); @@ -238,17 +239,23 @@ } void ExpectUploadAndCaptureCallback( - CloudPolicyClient::StatusCallback* callback) { + reporting::MockReportQueue::EnqueueCallback* callback) { ClearEventsDict(); BuildReport(); - EXPECT_CALL(cloud_policy_client_, - UploadExtensionInstallReport_(MatchEvents(&events_value_), _)) - .WillOnce(MoveArg<1>(callback)); + EXPECT_CALL(*mock_report_queue_, + ValueEnqueue_(MatchEvents(&events_value_), _)) + .WillOnce( + Invoke([callback](const base::Value&, + reporting::MockReportQueue::EnqueueCallback cb) { + *callback = std::move(cb); + return reporting::Status::StatusOK(); + })); } - void ReportUploadSuccess(CloudPolicyClient::StatusCallback callback) { - std::move(callback).Run(true /* success */); + void ReportUploadSuccess( + reporting::MockReportQueue::EnqueueCallback callback) { + std::move(callback).Run(reporting::Status::StatusOK()); FlushNonDelayedTasks(); } @@ -256,11 +263,13 @@ ClearEventsDict(); BuildReport(); - EXPECT_CALL(cloud_policy_client_, - UploadExtensionInstallReport_(MatchEvents(&events_value_), _)) - .WillOnce(Invoke( - [](base::Value&, CloudPolicyClient::StatusCallback& callback) { - std::move(callback).Run(true /* success */); + EXPECT_CALL(*mock_report_queue_, + ValueEnqueue_(MatchEvents(&events_value_), _)) + .WillOnce( + Invoke([](const base::Value&, + reporting::MockReportQueue::EnqueueCallback callback) { + std::move(callback).Run(reporting::Status::StatusOK()); + return reporting::Status::StatusOK(); })); } @@ -304,7 +313,7 @@ extensions::QuotaService::ScopedDisablePurgeForTesting disable_purge_for_testing_; TestingProfile profile_; - MockCloudPolicyClient cloud_policy_client_; + reporting::MockReportQueue* mock_report_queue_; ExtensionInstallEventLogUploader uploader_; std::unique_ptr<base::ScopedMockTimeMessageLoopTaskRunner> scoped_main_task_runner_; @@ -341,17 +350,18 @@ events_[kExtensionIds[0]].push_back(event_); log.Add(kExtensionIds[0], event_); log.Store(); + EXPECT_TRUE(base::PathExists(log_file_path_)); CreateManager(); - base::DeleteFile(log_file_path_); + ASSERT_TRUE(base::DeleteFile(log_file_path_)); FastForwardTo(kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -376,12 +386,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -422,12 +432,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kUploadInterval - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(offset + kUploadInterval); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -452,12 +462,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kUploadInterval - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(offset + kUploadInterval); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -497,12 +507,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(offset + kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -532,12 +542,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(offset + kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -567,12 +577,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(offset + kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -595,12 +605,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); - CloudPolicyClient::StatusCallback upload_callback; + reporting::MockReportQueue::EnqueueCallback upload_callback; ExpectUploadAndCaptureCallback(&upload_callback); FastForwardTo(kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); EXPECT_FALSE(base::PathExists(log_file_path_)); @@ -609,12 +619,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(kExpeditedUploadDelay + kUploadInterval - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(kExpeditedUploadDelay + kUploadInterval); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -638,12 +648,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); - CloudPolicyClient::StatusCallback upload_callback; + reporting::MockReportQueue::EnqueueCallback upload_callback; ExpectUploadAndCaptureCallback(&upload_callback); FastForwardTo(kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); EXPECT_FALSE(base::PathExists(log_file_path_)); @@ -654,12 +664,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(kExpeditedUploadDelay + kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(kExpeditedUploadDelay + kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -688,13 +698,13 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kExpeditedUploadDelay - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); - CloudPolicyClient::StatusCallback upload_callback; + reporting::MockReportQueue::EnqueueCallback upload_callback; ExpectUploadAndCaptureCallback(&upload_callback); FastForwardTo(offset + kExpeditedUploadDelay); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); EXPECT_FALSE(base::PathExists(log_file_path_)); @@ -703,12 +713,12 @@ VerifyAndDeleteLogFile(); FastForwardTo(offset + kExpeditedUploadDelay + kUploadInterval - kOneMs); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); EXPECT_FALSE(base::PathExists(log_file_path_)); ExpectAndCompleteUpload(); FastForwardTo(offset + kExpeditedUploadDelay + kUploadInterval); - Mock::VerifyAndClearExpectations(&cloud_policy_client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); events_.clear(); VerifyAndDeleteLogFile(); @@ -723,7 +733,6 @@ AddLogEntry(0 /* extension_index */); - EXPECT_CALL(cloud_policy_client_, CancelExtensionInstallReportUpload()); manager_.reset(); FlushNonDelayedTasks(); VerifyAndDeleteLogFile(); @@ -752,7 +761,6 @@ AddLogEntry(0 /* extension_index */); - EXPECT_CALL(cloud_policy_client_, CancelExtensionInstallReportUpload()); manager_.reset(); FlushNonDelayedTasks(); VerifyLogFile();
diff --git a/chrome/browser/chromeos/policy/extension_install_event_log_uploader.cc b/chrome/browser/chromeos/policy/extension_install_event_log_uploader.cc index 9bc2011..93af1d5 100644 --- a/chrome/browser/chromeos/policy/extension_install_event_log_uploader.cc +++ b/chrome/browser/chromeos/policy/extension_install_event_log_uploader.cc
@@ -4,11 +4,15 @@ #include "chrome/browser/chromeos/policy/extension_install_event_log_uploader.h" +#include <atomic> + #include "base/bind.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/chromeos/policy/install_event_log_util.h" +#include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/reporting_util.h" #include "components/policy/core/common/cloud/realtime_reporting_job_configuration.h" #include "components/policy/proto/device_management_backend.pb.h" @@ -16,17 +20,68 @@ namespace em = enterprise_management; namespace policy { +namespace { + +base::RepeatingCallback<::reporting::StatusOr< + std::unique_ptr<::reporting::ReportQueueConfiguration>>()> +CreateReportQueueConfigGetter(Profile* profile) { + auto dm_token = GetDMToken(profile, /*only_affiliated=*/false); + return base::BindRepeating( + [](DMToken dm_token) { + return ::reporting::ReportQueueConfiguration::Create( + dm_token, ::reporting::Destination::UPLOAD_EVENTS, + ::reporting::Priority::SLOW_BATCH, base::BindRepeating([]() { + return ::reporting::Status::StatusOK(); + })); + }, + dm_token); +} + +} // namespace + +class ExtensionInstallEventLogUploader::ReportQueueBuilderLeaderTracker + : public base::RefCountedThreadSafe<ReportQueueBuilderLeaderTracker> { + public: + static scoped_refptr<ReportQueueBuilderLeaderTracker> Create() { + return base::WrapRefCounted(new ReportQueueBuilderLeaderTracker()); + } + + ::reporting::StatusOr<base::OnceCallback<void()>> RequestLeaderPromotion() { + bool expected = false; + if (!has_promoted_leader_.compare_exchange_strong(expected, true)) { + return ::reporting::Status(::reporting::error::RESOURCE_EXHAUSTED, + "Only one leader is allowed at a time."); + } + return base::BindOnce(&ReportQueueBuilderLeaderTracker::ReleaseLeader, + this); + } + + private: + friend class base::RefCountedThreadSafe<ReportQueueBuilderLeaderTracker>; + + ReportQueueBuilderLeaderTracker(); + virtual ~ReportQueueBuilderLeaderTracker(); + + void ReleaseLeader() { + bool expected = true; + DCHECK(has_promoted_leader_.compare_exchange_strong(expected, false)) + << "Leader wasn't set"; + } + + std::atomic<bool> has_promoted_leader_{false}; +}; ExtensionInstallEventLogUploader::Delegate::~Delegate() {} ExtensionInstallEventLogUploader::ExtensionInstallEventLogUploader( - CloudPolicyClient* client, Profile* profile) - : InstallEventLogUploaderBase(client, profile) {} + : InstallEventLogUploaderBase(profile), + leader_tracker_(ReportQueueBuilderLeaderTracker::Create()), + report_queue_builder_task_runner_( + base::ThreadPool::CreateSequencedTaskRunner({})), + get_report_queue_config_cb_(CreateReportQueueConfigGetter(profile)) {} -ExtensionInstallEventLogUploader::~ExtensionInstallEventLogUploader() { - CancelClientUpload(); -} +ExtensionInstallEventLogUploader::~ExtensionInstallEventLogUploader() = default; void ExtensionInstallEventLogUploader::SetDelegate(Delegate* delegate) { if (delegate_) @@ -34,9 +89,108 @@ delegate_ = delegate; } +void ExtensionInstallEventLogUploader::SetReportQueue( + std::unique_ptr<::reporting::ReportQueue> report_queue) { + if (report_queue_ == nullptr) { + report_queue_ = std::move(report_queue); + } +} + +void ExtensionInstallEventLogUploader::SetBuildReportQueueConfigurationForTests( + const std::string& dm_token) { + get_report_queue_config_cb_ = base::BindRepeating( + [](const std::string& dm_token) { + return ::reporting::ReportQueueConfiguration::Create( + DMToken::CreateValidTokenForTesting(dm_token), + ::reporting::Destination::UPLOAD_EVENTS, + ::reporting::Priority::SLOW_BATCH, base::BindRepeating([]() { + return ::reporting::Status::StatusOK(); + })); + }, + dm_token); +} + +ExtensionInstallEventLogUploader::ReportQueueBuilderLeaderTracker:: + ReportQueueBuilderLeaderTracker() = default; +ExtensionInstallEventLogUploader::ReportQueueBuilderLeaderTracker:: + ~ReportQueueBuilderLeaderTracker() = default; + +ExtensionInstallEventLogUploader::ReportQueueBuilder::ReportQueueBuilder( + base::OnceCallback<void(std::unique_ptr<::reporting::ReportQueue>, + base::OnceCallback<void()>)> set_report_queue_cb, + base::RepeatingCallback<::reporting::StatusOr< + std::unique_ptr<::reporting::ReportQueueConfiguration>>()> + get_report_queue_config_cb, + scoped_refptr<ReportQueueBuilderLeaderTracker> leader_tracker, + base::OnceCallback<void(bool)> completion_cb, + scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner) + : ::reporting::TaskRunnerContext<bool>(std::move(completion_cb), + sequenced_task_runner), + set_report_queue_cb_(std::move(set_report_queue_cb)), + get_report_queue_config_cb_(std::move(get_report_queue_config_cb)), + leader_tracker_(leader_tracker) {} + +ExtensionInstallEventLogUploader::ReportQueueBuilder::~ReportQueueBuilder() = + default; + +void ExtensionInstallEventLogUploader::ReportQueueBuilder::OnStart() { + auto promo_result = leader_tracker_->RequestLeaderPromotion(); + if (!promo_result.ok()) { + // There is already a ReportQueueBuilder building a ReportQueue - go ahead + // and exit. + Complete(); + return; + } + + release_leader_cb_ = std::move(promo_result.ValueOrDie()); + BuildReportQueue(); +} + +void ExtensionInstallEventLogUploader::ReportQueueBuilder::BuildReportQueue() { + auto report_queue_config_result = get_report_queue_config_cb_.Run(); + if (!report_queue_config_result.ok()) { + Complete(); + return; + } + ::reporting::ReportingClient::CreateReportQueue( + std::move(report_queue_config_result.ValueOrDie()), + base::BindOnce(&ReportQueueBuilder::OnReportQueueResult, + base::Unretained(this))); +} + +void ExtensionInstallEventLogUploader::ReportQueueBuilder::OnReportQueueResult( + ::reporting::StatusOr<std::unique_ptr<::reporting::ReportQueue>> + report_queue_result) { + if (!report_queue_result.ok()) { + Complete(); + return; + } + Schedule(&ReportQueueBuilder::SetReportQueue, base::Unretained(this), + std::move(report_queue_result.ValueOrDie())); +} + +void ExtensionInstallEventLogUploader::ReportQueueBuilder::SetReportQueue( + std::unique_ptr<::reporting::ReportQueue> report_queue) { + DCHECK(report_queue); + std::move(set_report_queue_cb_) + .Run(std::move(report_queue), + base::BindOnce(&ReportQueueBuilder::Complete, + base::Unretained(this))); +} + +void ExtensionInstallEventLogUploader::ReportQueueBuilder::Complete() { + Schedule(&ReportQueueBuilder::ReleaseLeader, base::Unretained(this)); +} + +void ExtensionInstallEventLogUploader::ReportQueueBuilder::ReleaseLeader() { + if (release_leader_cb_) { + std::move(release_leader_cb_).Run(); + } + Response(true); +} + void ExtensionInstallEventLogUploader::CancelClientUpload() { weak_factory_.InvalidateWeakPtrs(); - client_->CancelExtensionInstallReportUpload(); } void ExtensionInstallEventLogUploader::StartSerialization() { @@ -63,18 +217,78 @@ void ExtensionInstallEventLogUploader::OnSerialized( const em::ExtensionInstallReportRequest* report) { - base::Value context = reporting::GetContext(profile_); - base::Value event_list = ConvertExtensionProtoToValue(report, context); + // If report_queue_ hasn't been set, start a ReportQueueBuilder and call + // OnUploadDone(false). The upload will be attempted again in the future. + // If another ReportQueueBuilder starts while the previous one is running, it + // will exit early because the first ReportQueueBuilder will acquire leader + // role from ReportQueueBuilderLeaderTracker. + // If the ReportQueueBuilder fails to build a ReportQueue, it will release the + // leader and the next ReportQueueBuilder will acquire the leader role. + // If a ReportQueueBuilder sets the report_queue_ after it has been checked + // here, a new ReportQueueBuilder will spawn, but will be unable to set the + // report_queue_. + if (report_queue_ == nullptr) { + auto set_report_queue_cb = base::BindOnce( + [](base::WeakPtr<ExtensionInstallEventLogUploader> uploader, + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + std::unique_ptr<::reporting::ReportQueue> report_queue, + base::OnceCallback<void()> on_set_cb) { + auto call_uploader_with_report_queue_cb = base::BindOnce( + [](base::WeakPtr<ExtensionInstallEventLogUploader> uploader, + std::unique_ptr<::reporting::ReportQueue> report_queue, + base::OnceCallback<void()> on_set_cb) { + uploader->SetReportQueue(std::move(report_queue)); + std::move(on_set_cb); + }, + std::move(uploader), std::move(report_queue), + std::move(on_set_cb)); + task_runner->PostTask(FROM_HERE, + std::move(call_uploader_with_report_queue_cb)); + }, + weak_factory_.GetWeakPtr(), base::ThreadTaskRunnerHandle::Get()); + + auto completion_cb = base::BindOnce([](bool success) { + LOG_IF(WARNING, !success) << "ReportQueueBuilder was unsuccessful"; + }); + + ::reporting::Start<ReportQueueBuilder>( + std::move(set_report_queue_cb), get_report_queue_config_cb_, + leader_tracker_, std::move(completion_cb), + report_queue_builder_task_runner_); + + OnUploadDone(false); + return; + } + EnqueueReport(*report); +} + +void ExtensionInstallEventLogUploader::EnqueueReport( + const em::ExtensionInstallReportRequest& report) { + base::Value context = ::reporting::GetContext(profile_); + base::Value event_list = ConvertExtensionProtoToValue(&report, context); base::Value value_report = RealtimeReportingJobConfiguration::BuildReport( std::move(event_list), std::move(context)); - // base::Unretained() is safe here as the destructor cancels any pending - // upload, after which the |client_| is guaranteed to not call the callback. - client_->UploadExtensionInstallReport( - std::move(value_report), - base::BindOnce(&ExtensionInstallEventLogUploader::OnUploadDone, - base::Unretained(this))); + // Uploader must be called on the correct thread, in order to achieve that we + // pass the appropriate task_runner along with the call. + auto on_enqueue_done_cb = base::BindOnce( + [](base::WeakPtr<ExtensionInstallEventLogUploader> uploader, + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + ::reporting::Status status) { + auto call_uploader_with_status = base::BindOnce( + [](base::WeakPtr<ExtensionInstallEventLogUploader> uploader, + const ::reporting::Status& status) { + uploader->OnUploadDone(status.ok()); + }, + uploader, status); + + task_runner->PostTask(FROM_HERE, std::move(call_uploader_with_status)); + }, + weak_factory_.GetWeakPtr(), base::ThreadTaskRunnerHandle::Get()); + + report_queue_->Enqueue(std::move(value_report), + std::move(on_enqueue_done_cb)); } } // namespace policy
diff --git a/chrome/browser/chromeos/policy/extension_install_event_log_uploader.h b/chrome/browser/chromeos/policy/extension_install_event_log_uploader.h index 407d39ca..fc2906e 100644 --- a/chrome/browser/chromeos/policy/extension_install_event_log_uploader.h +++ b/chrome/browser/chromeos/policy/extension_install_event_log_uploader.h
@@ -5,9 +5,16 @@ #ifndef CHROME_BROWSER_CHROMEOS_POLICY_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ #define CHROME_BROWSER_CHROMEOS_POLICY_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ +#include <memory> + #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/chromeos/policy/install_event_log_uploader_base.h" +#include "chrome/browser/policy/messaging_layer/public/report_client.h" +#include "chrome/browser/policy/messaging_layer/public/report_queue.h" +#include "chrome/browser/policy/messaging_layer/util/status.h" +#include "chrome/browser/policy/messaging_layer/util/statusor.h" +#include "chrome/browser/policy/messaging_layer/util/task_runner_context.h" namespace enterprise_management { class ExtensionInstallReportRequest; @@ -17,8 +24,6 @@ namespace policy { -class CloudPolicyClient; - // Adapter between the system that captures and stores extension install event // logs and the policy system which uploads them to the management server. class ExtensionInstallEventLogUploader : public InstallEventLogUploaderBase { @@ -45,8 +50,7 @@ virtual ~Delegate(); }; - // |client| must outlive |this|. - ExtensionInstallEventLogUploader(CloudPolicyClient* client, Profile* profile); + explicit ExtensionInstallEventLogUploader(Profile* profile); ~ExtensionInstallEventLogUploader() override; // Sets the delegate. The delegate must either outlive |this| or be explicitly @@ -54,7 +58,81 @@ // delegate cancels the pending log upload, if any. void SetDelegate(Delegate* delegate); + // Sets the report queue if it is not already set. + void SetReportQueue(std::unique_ptr<reporting::ReportQueue> report_queue); + + // Meant to be used in tests for creating the ReportQueueConfiguration. + void SetBuildReportQueueConfigurationForTests(const std::string& dm_token); + private: + // Ensures that only one ReportQueueBuilder is working at one time. + class ReportQueueBuilderLeaderTracker; + + // ReportQueueBuilder builds a ReportQueue and uses |set_report_queue_cb| + // to set it in the ExtensionInstallEventLogUploader. ReportQueueBuilder + // ensures that only one ReportQueue is built for ExtensionInstallLogUploader. + class ReportQueueBuilder : public reporting::TaskRunnerContext<bool> { + public: + using SetReportQueueCallback = + base::OnceCallback<void(std::unique_ptr<reporting::ReportQueue>, + base::OnceCallback<void()>)>; + + using GetReportQueueConfigCallback = + base::RepeatingCallback<reporting::StatusOr< + std::unique_ptr<reporting::ReportQueueConfiguration>>()>; + + ReportQueueBuilder( + SetReportQueueCallback set_report_queue_cb, + GetReportQueueConfigCallback get_report_queue_config_cb, + scoped_refptr<ReportQueueBuilderLeaderTracker> leader_tracker, + base::OnceCallback<void(bool)> completion_cb, + scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner); + + private: + ~ReportQueueBuilder() override; + + // |OnStart| requests leadership promotion from the provided + // |leader_tracker|. If there is already a leader, |OnStart| will exit. + // Otherwise it will call |BuildReportQueue|. + void OnStart() override; + + // |BuildReportQueue| will get the |ReportQueueConfiguration| from the + // |get_report_queue_config_cb_| and call ReportClient::CreateReportQueue to + // generate a ReportQueue. Sets OnReportQueueResult as the completion + // callback for |CreateReportQueue|. + void BuildReportQueue(); + + // |OnReportQueueResult| will evaluate |report_queue_result|. If it is not + // an OK status, it exits the builder with a |Complete| call. On an OK + // status it |Schedule|s SetReportQueue. + void OnReportQueueResult( + reporting::StatusOr<std::unique_ptr<reporting::ReportQueue>> + report_queue_result); + + // SetReportQueue will call |set_report_queue_cb_| with the provided + // |report_queue|. + void SetReportQueue(std::unique_ptr<reporting::ReportQueue> report_queue); + + // |Schedules| |ReleaseLeader|. + void Complete(); + + // Releases the leader lock if it is held, and then calls |Response|. + void ReleaseLeader(); + + // Callback for setting the ReportQueue in the calling + // |ExtensionInstallEventLogUploader|. + SetReportQueueCallback set_report_queue_cb_; + + // Callback for creating the |ReportQueueConfiguration|. + GetReportQueueConfigCallback get_report_queue_config_cb_; + + // |leader_tracker_| is used to ensure that only one ReportQueueBuilder is + // active at a time. + scoped_refptr<ReportQueueBuilderLeaderTracker> leader_tracker_; + + base::OnceCallback<void()> release_leader_cb_; + }; + // InstallEventLogUploaderBase: void CheckDelegateSet() override; void PostTaskForStartSerialization() override; @@ -67,9 +145,31 @@ void OnSerialized( const enterprise_management::ExtensionInstallReportRequest* report); + // Enqueues the report for upload. + void EnqueueReport( + const enterprise_management::ExtensionInstallReportRequest& report); + + // Handles the status of the report enqueue. + void OnEnqueueDone(reporting::Status status); + // The delegate that provides serialized logs to be uploaded. Delegate* delegate_ = nullptr; + // ReportQueueBuilderLeaderTracker for building the ReportQueue, passed to + // each ReportQueueBuilder in order to track which is the leader. + scoped_refptr<ReportQueueBuilderLeaderTracker> leader_tracker_; + + // SequencedTaskRunenr for building the ReportQueue. + scoped_refptr<base::SequencedTaskRunner> report_queue_builder_task_runner_; + + // Callback to generate a ReportQueueConfiguration. + base::RepeatingCallback<reporting::StatusOr< + std::unique_ptr<reporting::ReportQueueConfiguration>>()> + get_report_queue_config_cb_; + + // ReportQueue for uploading events. + std::unique_ptr<reporting::ReportQueue> report_queue_; + // Weak pointer factory for invalidating callbacks passed to the delegate and // scheduled retries when the upload request is canceled or |this| is // destroyed.
diff --git a/chrome/browser/chromeos/policy/extension_install_event_log_uploader_unittest.cc b/chrome/browser/chromeos/policy/extension_install_event_log_uploader_unittest.cc index 179b71f0..7f4988f5 100644 --- a/chrome/browser/chromeos/policy/extension_install_event_log_uploader_unittest.cc +++ b/chrome/browser/chromeos/policy/extension_install_event_log_uploader_unittest.cc
@@ -17,15 +17,19 @@ #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/chromeos/policy/install_event_log_util.h" +#include "chrome/browser/policy/messaging_layer/public/mock_report_queue.h" +#include "chrome/browser/policy/messaging_layer/util/status.h" #include "chrome/browser/profiles/reporting_util.h" #include "chromeos/system/fake_statistics_provider.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" #include "components/policy/core/common/cloud/realtime_reporting_job_configuration.h" #include "components/policy/proto/device_management_backend.pb.h" +#include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using testing::_; +using testing::DoAll; using testing::Invoke; using testing::Mock; using testing::WithArgs; @@ -39,10 +43,9 @@ constexpr base::TimeDelta kMinRetryBackoff = base::TimeDelta::FromSeconds(10); constexpr base::TimeDelta kMaxRetryBackoff = base::TimeDelta::FromDays(1); -static const char kDmToken[] = "token"; static const char kExtensionId[] = "abcdefghabcdefghabcdefghabcdefgh"; -MATCHER_P(MatchValue, expected, "matches base::Value") { +MATCHER_P(MatchEvents, expected, "contains events") { std::string arg_serialized_string; JSONStringValueSerializer arg_serializer(&arg_serialized_string); if (!arg_serializer.Serialize(arg)) @@ -57,6 +60,57 @@ return arg_serialized_string == expected_serialized_string; } +class TestCallbackWaiter { + public: + TestCallbackWaiter() : run_loop_(std::make_unique<base::RunLoop>()) {} + + virtual void Signal() { run_loop_->Quit(); } + virtual void Wait() { run_loop_->Run(); } + + protected: + std::unique_ptr<base::RunLoop> run_loop_; +}; + +class TestCallbackWaiterWithCounter : public TestCallbackWaiter { + public: + explicit TestCallbackWaiterWithCounter(size_t counter_limit) + : counter_limit_(counter_limit) { + DCHECK_GE(counter_limit, 0u); + } + + void Signal() override { + const size_t old_count = counter_limit_.fetch_sub(1); + DCHECK_GE(old_count, 0u); + if (old_count > 1) { + return; + } + run_loop_->Quit(); + } + + void Wait() override { + if (counter_limit_ == 0) { + return; + } + run_loop_->Run(); + } + + void Reset() { + counter_limit_ = 0; + run_loop_.reset(); + run_loop_ = std::make_unique<base::RunLoop>(); + } + + void WaitAndReset() { + Wait(); + Reset(); + } + + void IncreaseCounterLimit() { counter_limit_++; } + + private: + std::atomic<size_t> counter_limit_; +}; + class MockExtensionInstallEventLogUploaderDelegate : public ExtensionInstallEventLogUploader::Delegate { public: @@ -78,41 +132,41 @@ protected: ExtensionInstallEventLogUploaderTest() = default; + void SetUp() override { CreateUploader(); } + void TearDown() override { - Mock::VerifyAndClearExpectations(&client_); - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); + Mock::VerifyAndClearExpectations(mock_report_queue_); + Mock::VerifyAndClearExpectations(&delegate_); uploader_.reset(); } - void RegisterClient() { - client_.dm_token_ = kDmToken; - client_.NotifyRegistrationStateChanged(); - } - - void UnregisterClient() { - client_.dm_token_.clear(); - client_.NotifyRegistrationStateChanged(); - } - void CreateUploader() { uploader_ = std::make_unique<ExtensionInstallEventLogUploader>( - &client_, /*profile=*/nullptr); + /*profile=*/nullptr); uploader_->SetDelegate(&delegate_); + + auto mock_report_queue = std::make_unique<reporting::MockReportQueue>(); + mock_report_queue_ = mock_report_queue.get(); + uploader_->SetReportQueue(std::move(mock_report_queue)); } void CompleteSerialize() { + waiter_.IncreaseCounterLimit(); EXPECT_CALL(delegate_, SerializeExtensionLogForUpload_(_)) .WillOnce(WithArgs<0>( Invoke([=](ExtensionInstallEventLogUploader::Delegate:: ExtensionLogSerializationCallback& callback) { std::move(callback).Run(&log_); + waiter_.Signal(); }))); } void CaptureSerialize(ExtensionInstallEventLogUploader::Delegate:: ExtensionLogSerializationCallback* callback) { + waiter_.IncreaseCounterLimit(); EXPECT_CALL(delegate_, SerializeExtensionLogForUpload_(_)) - .WillOnce(MoveArg<0>(callback)); + .WillOnce( + DoAll(MoveArg<0>(callback), Invoke([=]() { waiter_.Signal(); }))); } void ClearReportDict() { @@ -129,24 +183,42 @@ value_report_ = RealtimeReportingJobConfiguration::BuildReport( ConvertExtensionProtoToValue(&log_, context), std::move(context)); - EXPECT_CALL(client_, - UploadExtensionInstallReport_(MatchValue(&value_report_), _)) - .WillOnce(WithArgs<1>( - Invoke([=](CloudPolicyClient::StatusCallback& callback) { - std::move(callback).Run(success); - }))); + waiter_.IncreaseCounterLimit(); + + EXPECT_CALL(*mock_report_queue_, + ValueEnqueue_(MatchEvents(&value_report_), _)) + .WillOnce( + Invoke([=](const base::Value&, + reporting::MockReportQueue::EnqueueCallback callback) { + reporting::Status status = + success ? reporting::Status::StatusOK() + : reporting::Status(reporting::error::INTERNAL, + "Failing for tests"); + std::move(callback).Run(status); + waiter_.Signal(); + + // In the real ReportEnqueue::ValueEnqueue call this status return + // would indicate the that storage module is unavailable. From + // ExtensionInstallEventLogUploader, it follows the same execution + // path of failing UploadDone. + return reporting::Status::StatusOK(); + })); } - void CaptureUpload(CloudPolicyClient::StatusCallback* callback) { + void CaptureUpload(reporting::MockReportQueue::EnqueueCallback* callback) { ClearReportDict(); base::Value context = reporting::GetContext(/*profile=*/nullptr); value_report_ = RealtimeReportingJobConfiguration::BuildReport( ConvertExtensionProtoToValue(&log_, context), std::move(context)); - CloudPolicyClient::StatusCallback status_callback; - EXPECT_CALL(client_, - UploadExtensionInstallReport_(MatchValue(&value_report_), _)) - .WillOnce(MoveArg<1>(callback)); + EXPECT_CALL(*mock_report_queue_, + ValueEnqueue_(MatchEvents(&value_report_), _)) + .WillOnce( + Invoke([callback](const base::Value&, + reporting::MockReportQueue::EnqueueCallback cb) { + *callback = std::move(cb); + return reporting::Status::StatusOK(); + })); } void CompleteSerializeAndUpload(bool success) { @@ -155,33 +227,55 @@ } void CompleteSerializeAndCaptureUpload( - CloudPolicyClient::StatusCallback* callback) { + reporting::MockReportQueue::EnqueueCallback* callback) { CompleteSerialize(); CaptureUpload(callback); } - base::test::SingleThreadTaskEnvironment task_environment_{ + void ExpectExtensionLogUploadSuccess() { + waiter_.IncreaseCounterLimit(); + EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()) + .WillOnce(Invoke([=]() { waiter_.Signal(); })); + } + + // Setup retry by serializing event, but failing to upload. + void SetupForRetry() { + CompleteSerializeAndUpload(false /* success */); + EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); + uploader_->RequestUpload(); + waiter_.WaitAndReset(); + Mock::VerifyAndClearExpectations(&delegate_); + Mock::VerifyAndClearExpectations(mock_report_queue_); + + // A task is enqueued with zero delay and needs to be processed. + base::TimeDelta zero_delay = base::TimeDelta::FromSeconds(0); + + // Expect and throwaway task. + EXPECT_EQ(task_environment_.NextMainThreadPendingTaskDelay(), zero_delay); + task_environment_.FastForwardBy(zero_delay); + } + + content::BrowserTaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; em::ExtensionInstallReportRequest log_; base::Value value_report_{base::Value::Type::DICTIONARY}; - MockCloudPolicyClient client_; + reporting::MockReportQueue* mock_report_queue_; MockExtensionInstallEventLogUploaderDelegate delegate_; std::unique_ptr<ExtensionInstallEventLogUploader> uploader_; chromeos::system::ScopedFakeStatisticsProvider scoped_fake_statistics_provider_; + TestCallbackWaiterWithCounter waiter_{0}; }; // Make a log upload request. Have serialization and log upload succeed. Verify // that the delegate is notified of the success. TEST_F(ExtensionInstallEventLogUploaderTest, RequestSerializeAndUpload) { - RegisterClient(); - CreateUploader(); - CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); + ExpectExtensionLogUploadSuccess(); uploader_->RequestUpload(); + waiter_.Wait(); } // Make a log upload request. Have serialization succeed and log upload begin. @@ -189,21 +283,20 @@ // delegate is notified of the first request's success and no serialization is // started for the second request. TEST_F(ExtensionInstallEventLogUploaderTest, RequestSerializeRequestAndUpload) { - RegisterClient(); - CreateUploader(); - - CloudPolicyClient::StatusCallback status_callback; - CompleteSerializeAndCaptureUpload(&status_callback); + reporting::MockReportQueue::EnqueueCallback upload_callback; + CompleteSerializeAndCaptureUpload(&upload_callback); uploader_->RequestUpload(); + waiter_.WaitAndReset(); Mock::VerifyAndClearExpectations(&delegate_); EXPECT_CALL(delegate_, SerializeExtensionLogForUpload_(_)).Times(0); uploader_->RequestUpload(); Mock::VerifyAndClearExpectations(&delegate_); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); + ExpectExtensionLogUploadSuccess(); EXPECT_CALL(delegate_, SerializeExtensionLogForUpload_(_)).Times(0); - std::move(status_callback).Run(true); + std::move(upload_callback).Run(reporting::Status::StatusOK()); + waiter_.Wait(); } // Make a log upload request. Have serialization begin. Make a second upload @@ -211,13 +304,11 @@ // Then, have the first request's serialization and upload succeed. Verify that // the delegate is notified of the first request's success. TEST_F(ExtensionInstallEventLogUploaderTest, RequestRequestSerializeAndUpload) { - RegisterClient(); - CreateUploader(); - ExtensionInstallEventLogUploader::Delegate::ExtensionLogSerializationCallback serialization_callback; CaptureSerialize(&serialization_callback); uploader_->RequestUpload(); + waiter_.WaitAndReset(); Mock::VerifyAndClearExpectations(&delegate_); EXPECT_CALL(delegate_, SerializeExtensionLogForUpload_(_)).Times(0); @@ -225,44 +316,38 @@ Mock::VerifyAndClearExpectations(&delegate_); CompleteUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); + ExpectExtensionLogUploadSuccess(); std::move(serialization_callback).Run(&log_); + waiter_.Wait(); } // Make a log upload request. Have serialization begin. Cancel the request. Have // the serialization succeed. Verify that the serialization result is ignored // and no upload is started. TEST_F(ExtensionInstallEventLogUploaderTest, RequestCancelAndSerialize) { - RegisterClient(); - CreateUploader(); - ExtensionInstallEventLogUploader::Delegate::ExtensionLogSerializationCallback serialization_callback; CaptureSerialize(&serialization_callback); uploader_->RequestUpload(); + waiter_.WaitAndReset(); Mock::VerifyAndClearExpectations(&delegate_); - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); uploader_->CancelUpload(); - Mock::VerifyAndClearExpectations(&client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); - EXPECT_CALL(client_, UploadExtensionInstallReport_(_, _)).Times(0); + EXPECT_CALL(*mock_report_queue_, ValueEnqueue_(_, _)).Times(0); EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); std::move(serialization_callback).Run(&log_); } // Make a log upload request. Have serialization succeed and log upload begin. -// Cancel the request. Verify that the upload is canceled in the client. +// Cancel the request. TEST_F(ExtensionInstallEventLogUploaderTest, RequestSerializeAndCancel) { - RegisterClient(); - CreateUploader(); - - CloudPolicyClient::StatusCallback status_callback; - CompleteSerializeAndCaptureUpload(&status_callback); + reporting::MockReportQueue::EnqueueCallback upload_callback; + CompleteSerializeAndCaptureUpload(&upload_callback); uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); uploader_->CancelUpload(); } @@ -274,14 +359,7 @@ // serialization succeed but log upload fail again. Verify that the backoff has // returned to the minimum. TEST_F(ExtensionInstallEventLogUploaderTest, Retry) { - RegisterClient(); - CreateUploader(); - - CompleteSerializeAndUpload(false /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); - uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&delegate_); - Mock::VerifyAndClearExpectations(&client_); + SetupForRetry(); const base::TimeDelta min_delay = kMinRetryBackoff; const base::TimeDelta max_delay = kMaxRetryBackoff; @@ -289,187 +367,44 @@ base::TimeDelta expected_delay = min_delay; int max_delay_count = 0; while (max_delay_count < 2) { - EXPECT_EQ(expected_delay, - task_environment_.NextMainThreadPendingTaskDelay()); + // Make sure next upload attempt is scheduled correctly. + EXPECT_EQ(task_environment_.NextMainThreadPendingTaskDelay(), + expected_delay); + // Setup expectations for upload attempt. CompleteSerializeAndUpload(false /* success */); EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); + + // FastForward until upload attempts are complete. task_environment_.FastForwardBy(expected_delay); - Mock::VerifyAndClearExpectations(&delegate_); - Mock::VerifyAndClearExpectations(&client_); + waiter_.WaitAndReset(); if (expected_delay == max_delay) { ++max_delay_count; } + expected_delay = std::min(expected_delay * 2, max_delay); } + EXPECT_EQ(task_environment_.NextMainThreadPendingTaskDelay(), expected_delay); - EXPECT_EQ(expected_delay, task_environment_.NextMainThreadPendingTaskDelay()); - + // Allow Upload to succeed. log_.add_extension_install_reports()->set_extension_id(kExtensionId); CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); + ExpectExtensionLogUploadSuccess(); + task_environment_.FastForwardBy(expected_delay); + waiter_.WaitAndReset(); Mock::VerifyAndClearExpectations(&delegate_); - Mock::VerifyAndClearExpectations(&client_); + Mock::VerifyAndClearExpectations(mock_report_queue_); - CompleteSerializeAndUpload(false /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); - uploader_->RequestUpload(); - - EXPECT_EQ(min_delay, task_environment_.NextMainThreadPendingTaskDelay()); -} - -// Create the uploader using a client that is not registered with the server -// yet. Register the client with the server. Make a log upload request. Have -// serialization and log upload succeed. Verify that the delegate is notified of -// the success. -TEST_F(ExtensionInstallEventLogUploaderTest, - RegisterRequestSerializeAndUpload) { - CreateUploader(); - RegisterClient(); - - CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); - uploader_->RequestUpload(); -} - -// Create the uploader using a client that is not registered with the server -// yet. Make a log upload request. Verify that serialization is not started. -// Then, register the client with the server. Verify that serialization is -// started. Have serialization and log upload succeed. Verify that the delegate -// is notified of the success. -TEST_F(ExtensionInstallEventLogUploaderTest, - RequestRegisterSerializeAndUpload) { - CreateUploader(); - - EXPECT_CALL(delegate_, SerializeExtensionLogForUpload_(_)).Times(0); - uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&delegate_); - - CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); - RegisterClient(); -} - -// Make a log upload request. Have serialization succeed and log upload begin. -// Unregister the client from the server. Register the client with the server. -// Verify that a new serialization is started. Then, have serialization and log -// upload succeed. Verify that the delegate is notified of the success. -TEST_F(ExtensionInstallEventLogUploaderTest, - RequestSerializeUnregisterRegisterAndUpload) { - RegisterClient(); - CreateUploader(); - - CloudPolicyClient::StatusCallback status_callback; - CompleteSerializeAndCaptureUpload(&status_callback); - uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&delegate_); - Mock::VerifyAndClearExpectations(&client_); - - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); - UnregisterClient(); - Mock::VerifyAndClearExpectations(&client_); - - log_.add_extension_install_reports()->set_extension_id(kExtensionId); - CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); - RegisterClient(); -} - -// Make a log upload request. Have serialization begin. Unregister the client -// from the server. Have serialization succeed. Verify that the serialization -// result is ignored and no upload is started. Then, register the client with -// the server. Verify that a new serialization is started. Then, have -// serialization and log upload succeed. Verify that the delegate is notified of -// the success. -TEST_F(ExtensionInstallEventLogUploaderTest, - RequestUnregisterSerializeRegisterAndUpload) { - RegisterClient(); - CreateUploader(); - - ExtensionInstallEventLogUploader::Delegate::ExtensionLogSerializationCallback - serialization_callback; - CaptureSerialize(&serialization_callback); - uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&delegate_); - - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); - UnregisterClient(); - Mock::VerifyAndClearExpectations(&client_); - - EXPECT_CALL(client_, UploadExtensionInstallReport_(_, _)).Times(0); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); - std::move(serialization_callback).Run(&log_); - Mock::VerifyAndClearExpectations(&delegate_); - Mock::VerifyAndClearExpectations(&client_); - - log_.add_extension_install_reports()->set_extension_id(kExtensionId); - CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); - RegisterClient(); -} - -// Make a log upload request. Have serialization begin. Unregister the client -// from the server. Register the client with the server. Verify that a second -// serialization is requested. Then, have the first serialization succeed. -// Verify that he serialization result is ignored and no upload is started. -// Then, have the second serialization succeed. Verify that an upload is -// started. Then, have the upload succeed. Verify that the delegate is notified -// of the success. -TEST_F(ExtensionInstallEventLogUploaderTest, - RequestUnregisterRegisterSerializeAndUpload) { - RegisterClient(); - CreateUploader(); - - ExtensionInstallEventLogUploader::Delegate::ExtensionLogSerializationCallback - serialization_callback_1; - CaptureSerialize(&serialization_callback_1); - uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&delegate_); - - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); - UnregisterClient(); - Mock::VerifyAndClearExpectations(&client_); - - ExtensionInstallEventLogUploader::Delegate::ExtensionLogSerializationCallback - serialization_callback_2; - CaptureSerialize(&serialization_callback_2); - RegisterClient(); - - EXPECT_CALL(client_, UploadExtensionInstallReport_(_, _)).Times(0); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()).Times(0); - std::move(serialization_callback_1).Run(&log_); - Mock::VerifyAndClearExpectations(&delegate_); - Mock::VerifyAndClearExpectations(&client_); - - log_.add_extension_install_reports()->set_extension_id(kExtensionId); - CompleteUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); - std::move(serialization_callback_2).Run(&log_); -} - -// Make a log upload request. Have serialization succeed and log upload begin. -// Remove the delegate. Verify that the upload is canceled in the client. -TEST_F(ExtensionInstallEventLogUploaderTest, RequestAndRemoveDelegate) { - RegisterClient(); - CreateUploader(); - - CloudPolicyClient::StatusCallback status_callback; - CompleteSerializeAndCaptureUpload(&status_callback); - uploader_->RequestUpload(); - Mock::VerifyAndClearExpectations(&client_); - - EXPECT_CALL(client_, CancelExtensionInstallReportUpload()); - uploader_->SetDelegate(nullptr); + // Ensure upload fails and retry delay happens again. + SetupForRetry(); + EXPECT_EQ(task_environment_.NextMainThreadPendingTaskDelay(), min_delay); } // When there is more than one identical event in the log, ensure that only one // of those duplicate events is in the created report. TEST_F(ExtensionInstallEventLogUploaderTest, DuplicateEvents) { - RegisterClient(); - CreateUploader(); - em::ExtensionInstallReport* report = log_.add_extension_install_reports(); report->set_extension_id(kExtensionId); @@ -488,8 +423,9 @@ ev3->set_timestamp(1000); CompleteSerializeAndUpload(true /* success */); - EXPECT_CALL(delegate_, OnExtensionLogUploadSuccess()); + ExpectExtensionLogUploadSuccess(); uploader_->RequestUpload(); + waiter_.Wait(); EXPECT_EQ(2u, value_report_
diff --git a/chrome/browser/chromeos/policy/install_event_log_uploader_base.cc b/chrome/browser/chromeos/policy/install_event_log_uploader_base.cc index 62501a6..8f2dd1dd 100644 --- a/chrome/browser/chromeos/policy/install_event_log_uploader_base.cc +++ b/chrome/browser/chromeos/policy/install_event_log_uploader_base.cc
@@ -29,8 +29,14 @@ client_->AddObserver(this); } +InstallEventLogUploaderBase::InstallEventLogUploaderBase(Profile* profile) + : client_(nullptr), + profile_(profile), + retry_backoff_ms_(kMinRetryBackoffMs) {} + InstallEventLogUploaderBase::~InstallEventLogUploaderBase() { - client_->RemoveObserver(this); + if (client_) + client_->RemoveObserver(this); } void InstallEventLogUploaderBase::RequestUpload() { @@ -39,8 +45,12 @@ return; upload_requested_ = true; - if (client_->is_registered()) + + // If the client is set - ensure that it is also registered. + // Otherwise start Serialization. + if ((client_ && client_->is_registered()) || !client_) { StartSerialization(); + } } void InstallEventLogUploaderBase::CancelUpload() { @@ -51,6 +61,7 @@ void InstallEventLogUploaderBase::OnRegistrationStateChanged( CloudPolicyClient* client) { + DCHECK(client_); if (!upload_requested_) return;
diff --git a/chrome/browser/chromeos/policy/install_event_log_uploader_base.h b/chrome/browser/chromeos/policy/install_event_log_uploader_base.h index 7a569c57..7779ad9 100644 --- a/chrome/browser/chromeos/policy/install_event_log_uploader_base.h +++ b/chrome/browser/chromeos/policy/install_event_log_uploader_base.h
@@ -21,6 +21,17 @@ public: // |client| must outlive |this|. InstallEventLogUploaderBase(CloudPolicyClient* client, Profile* profile); + + // Will construct a non-CloudPolicyClient::Observer version of + // InstallEventLogUploaderBase. + // TODO(crbug.com/1078512) This exists to support the move to using + // reporting::ReportQueue, which owns its own CloudPolicyClient. Once + // ArcInstallEventLogUploader is ready to move to using + // reporting::ReportQueue, we can likely do a small refactor removing all + // references to CloudPolicyClient from InstallEventLogUploaderBase and its + // children. + explicit InstallEventLogUploaderBase(Profile* profile); + ~InstallEventLogUploaderBase() override; // Requests log upload. If there is no pending upload yet, asks the delegate
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc index 69d6413..d2cf529 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -271,7 +271,7 @@ app_install_event_log_uploader_ = std::make_unique<ArcAppInstallEventLogUploader>(client(), profile_); extension_install_event_log_uploader_ = - std::make_unique<ExtensionInstallEventLogUploader>(client(), profile_); + std::make_unique<ExtensionInstallEventLogUploader>(profile_); // Initializes an instance of DlpRulesManager to be responsible for the rules // of the data leak prevention policy.
diff --git a/chrome/browser/chromeos/scanning/lorgnette_scanner_manager.cc b/chrome/browser/chromeos/scanning/lorgnette_scanner_manager.cc index 311ee59..a07507c 100644 --- a/chrome/browser/chromeos/scanning/lorgnette_scanner_manager.cc +++ b/chrome/browser/chromeos/scanning/lorgnette_scanner_manager.cc
@@ -178,9 +178,9 @@ } const bool is_usb_scanner = protocol == ScanProtocol::kLegacyUsb; - const std::string base_name = base::StringPrintf( - "%s %s%s", lorgnette_scanner.manufacturer().c_str(), - lorgnette_scanner.model().c_str(), is_usb_scanner ? " (USB)" : ""); + const std::string base_name = + base::StringPrintf("%s%s", lorgnette_scanner.model().c_str(), + is_usb_scanner ? " (USB)" : ""); const std::string display_name = CreateUniqueDisplayName(base_name); Scanner scanner;
diff --git a/chrome/browser/chromeos/scanning/lorgnette_scanner_manager_unittest.cc b/chrome/browser/chromeos/scanning/lorgnette_scanner_manager_unittest.cc index e6e1d8e..4b11035e 100644 --- a/chrome/browser/chromeos/scanning/lorgnette_scanner_manager_unittest.cc +++ b/chrome/browser/chromeos/scanning/lorgnette_scanner_manager_unittest.cc
@@ -259,8 +259,7 @@ GetScannerNames(); WaitForResult(); const auto& scanner = response.scanners()[0]; - std::string scanner_name = scanner.manufacturer() + " " + scanner.model(); - EXPECT_THAT(scanner_names(), ElementsAreArray({scanner_name})); + EXPECT_THAT(scanner_names(), ElementsAreArray({scanner.model()})); } // Test that two detected scanners with the same IP address are deduplicated and @@ -286,8 +285,7 @@ GetScannerNames(); WaitForResult(); auto& scanner = response.scanners()[0]; - std::string scanner_name = scanner.manufacturer() + " " + scanner.model(); - EXPECT_THAT(scanner_names(), ElementsAreArray({scanner_name})); + EXPECT_THAT(scanner_names(), ElementsAreArray({scanner.model()})); } // Test that detecting a lorgnette USB scanner results in a scanner name ending @@ -299,8 +297,7 @@ GetScannerNames(); WaitForResult(); auto& scanner = response.scanners()[0]; - std::string scanner_name = - scanner.manufacturer() + " " + scanner.model() + " (USB)"; + const std::string scanner_name = scanner.model() + " (USB)"; EXPECT_THAT(scanner_names(), ElementsAreArray({scanner_name})); }
diff --git a/chrome/browser/chromeos/system_logs/crosapi_system_log_source.cc b/chrome/browser/chromeos/system_logs/crosapi_system_log_source.cc new file mode 100644 index 0000000..f641e9d --- /dev/null +++ b/chrome/browser/chromeos/system_logs/crosapi_system_log_source.cc
@@ -0,0 +1,70 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/system_logs/crosapi_system_log_source.h" + +#include "base/bind.h" +#include "chrome/browser/chromeos/crosapi/browser_manager.h" + +namespace system_logs { + +namespace { +constexpr char kLacrosLogEntryPrefix[] = "Lacros "; +} // namespace + +CrosapiSystemLogSource::CrosapiSystemLogSource() + : SystemLogsSource("LacrosSystemLog") { + crosapi::BrowserManager::Get()->AddObserver(this); +} + +CrosapiSystemLogSource::~CrosapiSystemLogSource() { + crosapi::BrowserManager::Get()->RemoveObserver(this); +} + +void CrosapiSystemLogSource::Fetch(SysLogsSourceCallback callback) { + DCHECK(callback_.is_null()); + DCHECK(!callback.is_null()); + + if (crosapi::BrowserManager::Get()->IsRunning()) { + callback_ = std::move(callback); + crosapi::BrowserManager::Get()->GetFeedbackData( + base::BindOnce(&CrosapiSystemLogSource::OnGetFeedbackData, + weak_ptr_factory_.GetWeakPtr())); + } else { + // Fetch is called right after the data source is added to the + // SystemLogsFetcher when Lacros is running, it is unlikely Lacros will + // be terminated before Fetch is called. But it does not hurt to check + // again and handle the case for playing safely. + std::move(callback).Run(std::make_unique<SystemLogsResponse>()); + } +} + +void CrosapiSystemLogSource::OnGetFeedbackData(base::Value system_infos) { + auto response = std::make_unique<SystemLogsResponse>(); + DCHECK(system_infos.is_dict()); + const base::DictionaryValue* sysinfo_dict; + if (system_infos.GetAsDictionary(&sysinfo_dict)) { + for (const auto& item : sysinfo_dict->DictItems()) { + std::string log_entry_key = kLacrosLogEntryPrefix + item.first; + std::string log_entry_value; + if (item.second.GetAsString(&log_entry_value)) { + response->emplace(log_entry_key, log_entry_value); + } else { + LOG(ERROR) << "Failed to retrieve the content for log entry: " + << log_entry_key; + } + } + } + std::move(callback_).Run(std::move(response)); +} + +void CrosapiSystemLogSource::OnMojoDisconnected() { + if (callback_.is_null()) + return; + + // Run callback_ with empty response. + std::move(callback_).Run(std::make_unique<SystemLogsResponse>()); +} + +} // namespace system_logs
diff --git a/chrome/browser/chromeos/system_logs/crosapi_system_log_source.h b/chrome/browser/chromeos/system_logs/crosapi_system_log_source.h new file mode 100644 index 0000000..8e0b8ef --- /dev/null +++ b/chrome/browser/chromeos/system_logs/crosapi_system_log_source.h
@@ -0,0 +1,40 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_CROSAPI_SYSTEM_LOG_SOURCE_H_ +#define CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_CROSAPI_SYSTEM_LOG_SOURCE_H_ + +#include "base/memory/weak_ptr.h" +#include "base/values.h" +#include "chrome/browser/chromeos/crosapi/browser_manager_observer.h" +#include "components/feedback/system_logs/system_logs_source.h" + +namespace system_logs { + +// Gathers Lacros system information log data via crosapi calls. +class CrosapiSystemLogSource : public SystemLogsSource, + public crosapi::BrowserManagerObserver { + public: + CrosapiSystemLogSource(); + ~CrosapiSystemLogSource() override; + CrosapiSystemLogSource(const CrosapiSystemLogSource&) = delete; + CrosapiSystemLogSource& operator=(const CrosapiSystemLogSource&) = delete; + + // SystemLogsSource + void Fetch(SysLogsSourceCallback request) override; + + private: + // Callback for getting lacros feedback data. + void OnGetFeedbackData(base::Value system_infos); + + // crosapi::BrowserManagerObserver + void OnMojoDisconnected() override; + + SysLogsSourceCallback callback_; + base::WeakPtrFactory<CrosapiSystemLogSource> weak_ptr_factory_{this}; +}; + +} // namespace system_logs + +#endif // CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_CROSAPI_SYSTEM_LOG_SOURCE_H_
diff --git a/chrome/browser/chromeos/system_logs/crosapi_system_log_source_unittest.cc b/chrome/browser/chromeos/system_logs/crosapi_system_log_source_unittest.cc new file mode 100644 index 0000000..d2494dee --- /dev/null +++ b/chrome/browser/chromeos/system_logs/crosapi_system_log_source_unittest.cc
@@ -0,0 +1,142 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/system_logs/crosapi_system_log_source.h" + +#include "base/bind.h" +#include "base/macros.h" +#include "base/run_loop.h" +#include "chrome/browser/chromeos/crosapi/fake_browser_manager.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace system_logs { + +class CrosapiSystemLogSourceTest : public ::testing::Test { + public: + CrosapiSystemLogSourceTest() + : browser_manager_(std::make_unique<crosapi::FakeBrowserManager>()) {} + CrosapiSystemLogSourceTest(const CrosapiSystemLogSourceTest&) = delete; + CrosapiSystemLogSourceTest& operator=(const CrosapiSystemLogSourceTest&) = + delete; + ~CrosapiSystemLogSourceTest() override = default; + + void SetUp() override { + // Set Lacros in running state by default. + browser_manager_->set_is_running(true); + } + + protected: + SysLogsSourceCallback fetch_callback() { + return base::BindOnce(&CrosapiSystemLogSourceTest::OnFetchComplete, + base::Unretained(this)); + } + + void SetupBrowserManagerResponse(base::Value response) { + browser_manager_->SetGetFeedbackDataResponse(std::move(response)); + } + + void SignalMojoDisconnected() { browser_manager_->SignalMojoDisconnected(); } + + void SetLacrosNotRunning() { browser_manager_->set_is_running(false); } + + void SetWaitForMojoDisconnect() { + browser_manager_->set_wait_for_mojo_disconnect(true); + } + + void OnFetchComplete(std::unique_ptr<SystemLogsResponse> response) { + ++num_callback_calls_; + response_ = *response; + } + + int num_callback_calls() const { return num_callback_calls_; } + const SystemLogsResponse& response() const { return response_; } + + private: + // Creates the necessary browser threads. + content::BrowserTaskEnvironment task_environment_; + + std::unique_ptr<crosapi::FakeBrowserManager> browser_manager_; + + // Used to verify that OnGetFeedbackData was called the correct number of + // times. + int num_callback_calls_ = 0; + + // Stores results from the log source passed into fetch_callback(). + SystemLogsResponse response_; +}; + +TEST_F(CrosapiSystemLogSourceTest, OnFeedbackData) { + // Set up FakeBrowserManager to send log data with 1 log entry for + // the log source. + base::Value system_log_entries(base::Value::Type::DICTIONARY); + system_log_entries.SetStringKey("testing log key", "testing log content"); + SetupBrowserManagerResponse(std::move(system_log_entries)); + + // Fetch log data and wait until fetch_callback() is called. + CrosapiSystemLogSource source; + source.Fetch(fetch_callback()); + base::RunLoop().RunUntilIdle(); + + // Verify fetch_callback() has been called. + EXPECT_EQ(1, num_callback_calls()); + ASSERT_EQ(1U, response().size()); + + // Verify CrosapiSystemLogSource::OnGetFeedbackData processed log data + // correctly. The Lacros log entry in the response() should have "Lacros " + // prefix in log entry key. + EXPECT_EQ("Lacros testing log key", response().begin()->first); + EXPECT_EQ("testing log content", response().begin()->second); + + // Simulate the mojo disconnection event received after fetch_callback() runs. + SignalMojoDisconnected(); + + // Verify fetch_callback() has not been called again. + EXPECT_EQ(1, num_callback_calls()); +} + +TEST_F(CrosapiSystemLogSourceTest, FetchWhenLacrosNotRunning) { + // Set up FakeBrowserManager with Lacros not running. + SetLacrosNotRunning(); + + // Fetch log data and wait until fetch_callback() is called. + CrosapiSystemLogSource source; + source.Fetch(fetch_callback()); + base::RunLoop().RunUntilIdle(); + + // Verify fetch_callback() has been called with empty response. + EXPECT_EQ(1, num_callback_calls()); + ASSERT_EQ(0U, response().size()); + + SignalMojoDisconnected(); + + // Verify fetch_callback() has not been called again. + EXPECT_EQ(1, num_callback_calls()); +} + +TEST_F(CrosapiSystemLogSourceTest, OnMojoDisconnectedBeforeLogFetched) { + // Set up FakeBrowserManager to wait for crosapi mojo disconnected event + // before sending log data back, so that we can simulate the case + // that crosapi connection will be disconnected before the log data + // is fetched, i.e. before OnGetFeedbackData is called. + SetWaitForMojoDisconnect(); + + // Fetch log data. + CrosapiSystemLogSource source; + source.Fetch(fetch_callback()); + base::RunLoop().RunUntilIdle(); + + // Verify fetch_callback() is not called. + EXPECT_EQ(0, num_callback_calls()); + ASSERT_EQ(0U, response().size()); + + // Simulate the mojo disconnection event received by FakeBrowserManager. + SignalMojoDisconnected(); + + // Verify fetch_callback() is called with empty response. + EXPECT_EQ(1, num_callback_calls()); + ASSERT_EQ(0U, response().size()); +} + +} // namespace system_logs
diff --git a/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.cc b/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.cc index c0a283b..909fe13a 100644 --- a/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.cc +++ b/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.h" +#include <vector> + #include "base/files/file_path.h" #include "base/system/sys_info.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" @@ -24,6 +26,7 @@ #include "content/public/browser/web_ui_data_source.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h" #include "ui/gfx/native_widget_types.h" +#include "url/gurl.h" namespace { @@ -36,15 +39,15 @@ void ChromeCameraAppUIDelegate::CameraAppDialog::ShowIntent( const std::string& queries, gfx::NativeWindow parent) { - CameraAppDialog* dialog = - new CameraAppDialog(chromeos::kChromeUICameraAppMainURL + queries); + std::string url = chromeos::kChromeUICameraAppMainURL + queries; + CameraAppDialog* dialog = new CameraAppDialog(url); dialog->ShowSystemDialog(parent); } ChromeCameraAppUIDelegate::CameraAppDialog::CameraAppDialog( const std::string& url) - : chromeos::SystemWebDialogDelegate(GURL(url), /*title=*/base::string16()) { -} + : chromeos::SystemWebDialogDelegate(GURL(url), + /*title=*/base::string16()) {} ChromeCameraAppUIDelegate::CameraAppDialog::~CameraAppDialog() {}
diff --git a/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.h b/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.h index 0241e53..29286c3 100644 --- a/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.h +++ b/chrome/browser/chromeos/web_applications/chrome_camera_app_ui_delegate.h
@@ -10,6 +10,8 @@ #include "content/public/browser/media_stream_request.h" #include "content/public/browser/web_ui.h" +class GURL; + namespace content { struct MediaStreamRequest; class RenderFrameHost;
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_notification.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc similarity index 97% rename from chrome/browser/enterprise/reporting/notification/extension_request_notification.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc index 0b85f84..9237130 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_notification.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/notification/extension_request_notification.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_notification.h" #include <memory>
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_notification.h b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.h similarity index 85% rename from chrome/browser/enterprise/reporting/notification/extension_request_notification.h rename to chrome/browser/enterprise/reporting/extension_request/extension_request_notification.h index 0381260..1c23b450 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_notification.h +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_NOTIFICATION_H_ -#define CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_NOTIFICATION_H_ +#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_NOTIFICATION_H_ +#define CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_NOTIFICATION_H_ #include "ui/message_center/public/cpp/notification_delegate.h" @@ -57,4 +57,4 @@ } // namespace enterprise_reporting -#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_NOTIFICATION_H_ +#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_NOTIFICATION_H_
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_notification_unittest.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification_unittest.cc similarity index 97% rename from chrome/browser/enterprise/reporting/notification/extension_request_notification_unittest.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_notification_unittest.cc index ebf312f..fe22c062 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_notification_unittest.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/notification/extension_request_notification.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_notification.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_observer.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer.cc similarity index 98% rename from chrome/browser/enterprise/reporting/notification/extension_request_observer.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_observer.cc index 8e8eee58..d96638d 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_observer.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h" #include "base/metrics/histogram_functions.h" #include "chrome/browser/browser_process.h"
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_observer.h b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h similarity index 82% rename from chrome/browser/enterprise/reporting/notification/extension_request_observer.h rename to chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h index 1b7a0130..03ed43c8 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_observer.h +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_OBSERVER_H_ -#define CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_OBSERVER_H_ +#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_OBSERVER_H_ +#define CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_OBSERVER_H_ -#include "chrome/browser/enterprise/reporting/notification/extension_request_notification.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_notification.h" #include "chrome/browser/extensions/extension_management.h" class Profile; @@ -55,4 +55,4 @@ } // namespace enterprise_reporting -#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_OBSERVER_H_ +#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_OBSERVER_H_
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.cc similarity index 91% rename from chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.cc index 75023f80..bc0c7ea 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.cc
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h" #include "chrome/browser/profiles/profile_manager.h" namespace enterprise_reporting { @@ -13,7 +13,6 @@ ExtensionRequestObserverFactory::ExtensionRequestObserverFactory( Profile* profile) : profile_(profile) { - if (profile) { OnProfileAdded(profile); } else {
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.h b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.h similarity index 86% rename from chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.h rename to chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.h index f38239b..8af65145 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.h +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_OBSERVER_FACTORY_H_ -#define CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_OBSERVER_FACTORY_H_ +#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_OBSERVER_FACTORY_H_ +#define CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_OBSERVER_FACTORY_H_ #include <map> @@ -51,4 +51,4 @@ } // namespace enterprise_reporting -#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_NOTIFICATION_EXTENSION_REQUEST_OBSERVER_FACTORY_H_ +#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_OBSERVER_FACTORY_H_
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_observer_factory_unittest.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory_unittest.cc similarity index 96% rename from chrome/browser/enterprise/reporting/notification/extension_request_observer_factory_unittest.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory_unittest.cc index ffccd45..6b4a8eb 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_observer_factory_unittest.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory_unittest.cc
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.h" -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/enterprise/reporting/notification/extension_request_observer_unittest.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc similarity index 98% rename from chrome/browser/enterprise/reporting/notification/extension_request_observer_unittest.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc index 5eb6f90..7db69d3 100644 --- a/chrome/browser/enterprise/reporting/notification/extension_request_observer_unittest.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer.h" #include "base/json/json_reader.h" #include "base/test/metrics/histogram_tester.h"
diff --git a/chrome/browser/enterprise/reporting/extension_request_policy_handler.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.cc similarity index 92% rename from chrome/browser/enterprise/reporting/extension_request_policy_handler.cc rename to chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.cc index 3746fcca..e5d3e78 100644 --- a/chrome/browser/enterprise/reporting/extension_request_policy_handler.cc +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/enterprise/reporting/extension_request_policy_handler.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.h" #include "base/values.h" #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/enterprise/reporting/extension_request_policy_handler.h b/chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.h similarity index 78% rename from chrome/browser/enterprise/reporting/extension_request_policy_handler.h rename to chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.h index a286f64..28a0e65 100644 --- a/chrome/browser/enterprise/reporting/extension_request_policy_handler.h +++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_POLICY_HANDLER_H_ -#define CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_POLICY_HANDLER_H_ +#ifndef CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_POLICY_HANDLER_H_ +#define CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_POLICY_HANDLER_H_ #include "components/policy/core/browser/configuration_policy_handler.h" @@ -25,4 +25,4 @@ } // namespace enterprise_reporting -#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_POLICY_HANDLER_H_ +#endif // CHROME_BROWSER_ENTERPRISE_REPORTING_EXTENSION_REQUEST_EXTENSION_REQUEST_POLICY_HANDLER_H_
diff --git a/chrome/browser/enterprise/reporting/report_scheduler_desktop.h b/chrome/browser/enterprise/reporting/report_scheduler_desktop.h index 953af22..f1489f14 100644 --- a/chrome/browser/enterprise/reporting/report_scheduler_desktop.h +++ b/chrome/browser/enterprise/reporting/report_scheduler_desktop.h
@@ -7,7 +7,7 @@ #include "components/enterprise/browser/reporting/report_scheduler.h" -#include "chrome/browser/enterprise/reporting/notification/extension_request_observer_factory.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_observer_factory.h" #include "chrome/browser/upgrade_detector/build_state_observer.h" class Profile;
diff --git a/chrome/browser/extensions/external_registry_loader_win.cc b/chrome/browser/extensions/external_registry_loader_win.cc index 080294a0..c35cd24 100644 --- a/chrome/browser/extensions/external_registry_loader_win.cc +++ b/chrome/browser/extensions/external_registry_loader_win.cc
@@ -8,6 +8,7 @@ #include <utility> #include "base/bind.h" +#include "base/callback.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/files/scoped_file.h"
diff --git a/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc b/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc index be17b088..01d72fc4 100644 --- a/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc +++ b/chrome/browser/feedback/system_logs/chrome_system_logs_fetcher.cc
@@ -15,8 +15,10 @@ #include "components/feedback/system_logs/system_logs_fetcher.h" #if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/crosapi/browser_manager.h" #include "chrome/browser/chromeos/crosapi/browser_util.h" #include "chrome/browser/chromeos/system_logs/command_line_log_source.h" +#include "chrome/browser/chromeos/system_logs/crosapi_system_log_source.h" #include "chrome/browser/chromeos/system_logs/dbus_log_source.h" #include "chrome/browser/chromeos/system_logs/debug_daemon_log_source.h" #include "chrome/browser/chromeos/system_logs/device_event_log_source.h" @@ -64,6 +66,14 @@ fetcher->AddSource(std::make_unique<NetworkHealthSource>(scrub_data)); fetcher->AddSource(std::make_unique<ShillLogSource>(scrub_data)); fetcher->AddSource(std::make_unique<UiHierarchyLogSource>(scrub_data)); + + // Add CrosapiSystemLogSource to get lacros system information log data + // if Lacros is running and the crosapi version supports the Lacros remote + // data source. + if (crosapi::BrowserManager::Get()->IsRunning() && + crosapi::BrowserManager::Get()->GetFeedbackDataSupported()) { + fetcher->AddSource(std::make_unique<CrosapiSystemLogSource>()); + } #endif #if BUILDFLAG(IS_LACROS)
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 0f65939..a598c1b 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -742,6 +742,11 @@ "expiry_milestone": 78 }, { + "name": "dark-light-mode", + "owners": [ "minch", "tclaiborne" ], + "expiry_milestone": 90 + }, + { "name": "darken-websites-checkbox-in-themes-setting", "owners": [ "lazzzis@google.com", "twellington" ], "expiry_milestone": 92 @@ -1919,13 +1924,6 @@ "expiry_milestone": -1 }, { - "name": "enable-parental-controls-settings", - "owners": [ "danan", "michaelpg" ], - // This flag is used to enable parental controls options in ChromeOS - // settings. - "expiry_milestone": 79 - }, - { "name": "enable-persistent-downloads", "owners": [ "ewannpv", "gambard", "bling-flags" ], "expiry_milestone": 87 @@ -4200,11 +4198,6 @@ "expiry_milestone": 85 }, { - "name": "shelf-hotseat", - "owners": [ "manucornet", "mmourgos", "newcomer" ], - "expiry_milestone": 82 - }, - { "name": "shelf-hover-previews", "owners": [ "manucornet" ], "expiry_milestone": 84
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 2c58e50..4213c5fa 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -371,6 +371,11 @@ const char kClientStorageAccessContextAuditingDescription[] = "Record the first-party contexts in which client-side storage was accessed"; +const char kDarkLightTestName[] = "Dark/light mode of system UI"; +const char kDarkLightTestDescription[] = + "Enables the dark/light mode of system UI, which includes shelf, launcher, " + "system tray etc."; + const char kDecodeJpeg420ImagesToYUVName[] = "YUV decoding for JPEG"; const char kDecodeJpeg420ImagesToYUVDescription[] = "Decode and render 4:2:0 formatted jpeg images from YUV instead of RGB." @@ -2087,13 +2092,6 @@ "Configures how long after a device was last active that it is eligible " "for use in sharing features."; -const char kShelfHotseatName[] = "Enable a modular design for the shelf."; -const char kShelfHotseatDescription[] = - "Shows a modular design for the shelf where the apps are shown separately " - "in a 'hotseat' interface when in tablet mode, and where various pieces " - "are separate and behave independently. Also reduces the size of the" - "shelf and its app when in laptop mode."; - const char kShelfHoverPreviewsName[] = "Show previews of running apps when hovering over the shelf."; const char kShelfHoverPreviewsDescription[] = @@ -3989,11 +3987,6 @@ const char kEnablePalmSuppressionDescription[] = "If enabled, suppresses touch when a stylus is on a touchscreen."; -const char kEnableParentalControlsSettingsName[] = - "Enable Parental controls settings"; -const char kEnableParentalControlsSettingsDescription[] = - "Enable Parental Control options in settings."; - const char kEnablePlayStoreSearchName[] = "Enable Play Store search"; const char kEnablePlayStoreSearchDescription[] = "Enable Play Store search in launcher.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 17baa696..ef852e6 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -224,6 +224,9 @@ extern const char kConditionalTabStripAndroidName[]; extern const char kConditionalTabStripAndroidDescription[]; +extern const char kDarkLightTestName[]; +extern const char kDarkLightTestDescription[]; + extern const char kDecodeJpeg420ImagesToYUVName[]; extern const char kDecodeJpeg420ImagesToYUVDescription[]; @@ -1204,9 +1207,6 @@ extern const char kSharingDeviceExpirationName[]; extern const char kSharingDeviceExpirationDescription[]; -extern const char kShelfHotseatName[]; -extern const char kShelfHotseatDescription[]; - extern const char kShelfHoverPreviewsName[]; extern const char kShelfHoverPreviewsDescription[];
diff --git a/chrome/browser/lacros/feedback_util.cc b/chrome/browser/lacros/feedback_util.cc new file mode 100644 index 0000000..e8d39f1 --- /dev/null +++ b/chrome/browser/lacros/feedback_util.cc
@@ -0,0 +1,26 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/lacros/feedback_util.h" + +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/signin/identity_manager_factory.h" +#include "components/signin/public/identity_manager/identity_manager.h" + +namespace feedback_util { + +std::string GetSignedInUserEmail() { + Profile* profile = ProfileManager::GetLastUsedProfileAllowedByPolicy(); + DCHECK(profile) << "No last used profile is found."; + + auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); + if (!identity_manager) + return std::string(); + // Browser sync consent is not required to use feedback. + return identity_manager + ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + .email; +} + +} // namespace feedback_util
diff --git a/chrome/browser/lacros/feedback_util.h b/chrome/browser/lacros/feedback_util.h new file mode 100644 index 0000000..f222dd7 --- /dev/null +++ b/chrome/browser/lacros/feedback_util.h
@@ -0,0 +1,17 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_LACROS_FEEDBACK_UTIL_H_ +#define CHROME_BROWSER_LACROS_FEEDBACK_UTIL_H_ + +#include <string> + +namespace feedback_util { + +// Returns the email of the signed-in user. +std::string GetSignedInUserEmail(); + +} // namespace feedback_util + +#endif // CHROME_BROWSER_LACROS_FEEDBACK_UTIL_H_
diff --git a/chrome/browser/lacros/lacros_chrome_service_delegate_impl.cc b/chrome/browser/lacros/lacros_chrome_service_delegate_impl.cc index 982d230ea..324021ba 100644 --- a/chrome/browser/lacros/lacros_chrome_service_delegate_impl.cc +++ b/chrome/browser/lacros/lacros_chrome_service_delegate_impl.cc
@@ -5,10 +5,15 @@ #include "chrome/browser/lacros/lacros_chrome_service_delegate_impl.h" #include "base/logging.h" +#include "chrome/browser/lacros/feedback_util.h" +#include "chrome/browser/lacros/system_logs/lacros_system_log_fetcher.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/common/channel_info.h" +#include "components/feedback/feedback_report.h" +#include "components/feedback/system_logs/system_logs_fetcher.h" +#include "google_apis/gaia/gaia_auth_util.h" LacrosChromeServiceDelegateImpl::LacrosChromeServiceDelegateImpl() = default; @@ -24,3 +29,46 @@ std::string LacrosChromeServiceDelegateImpl::GetChromeVersion() { return chrome::GetVersionString(); } + +void LacrosChromeServiceDelegateImpl::GetFeedbackData( + GetFeedbackDataCallback callback) { + DCHECK(!callback.is_null()); + DCHECK(get_feedback_data_callback_.is_null()); + get_feedback_data_callback_ = std::move(callback); + + // Self-deleting object. + system_logs::SystemLogsFetcher* fetcher = + system_logs::BuildLacrosSystemLogsFetcher(/*scrub_data=*/true); + fetcher->Fetch( + base::BindOnce(&LacrosChromeServiceDelegateImpl::OnSystemInformationReady, + weak_ptr_factory_.GetWeakPtr())); +} + +void LacrosChromeServiceDelegateImpl::OnSystemInformationReady( + std::unique_ptr<system_logs::SystemLogsResponse> sys_info) { + base::Value system_log_entries(base::Value::Type::DICTIONARY); + if (sys_info) { + std::string user_email = feedback_util::GetSignedInUserEmail(); + const bool google_email = gaia::IsGoogleInternalAccountEmail(user_email); + + for (auto& it : *sys_info) { + // TODO(crbug.com/1138703): This code is duplicated with the logic in + // feedback_private_api.cc, refactor to remove the duplicated code. + // We only send the list of all the crash report IDs if the user has a + // @google.com email. We strip this here so that the system information + // view properly reflects what we will be uploading to the server. It is + // also stripped later on in the feedback processing for other code paths + // that don't go through this. + if (it.first == feedback::FeedbackReport::kAllCrashReportIdsKey && + !google_email) { + continue; + } + + system_log_entries.SetStringKey(std::move(it.first), + std::move(it.second)); + } + + DCHECK(!get_feedback_data_callback_.is_null()); + std::move(get_feedback_data_callback_).Run(std::move(system_log_entries)); + } +}
diff --git a/chrome/browser/lacros/lacros_chrome_service_delegate_impl.h b/chrome/browser/lacros/lacros_chrome_service_delegate_impl.h index bb1bb7c3..8e4a57a 100644 --- a/chrome/browser/lacros/lacros_chrome_service_delegate_impl.h +++ b/chrome/browser/lacros/lacros_chrome_service_delegate_impl.h
@@ -5,7 +5,9 @@ #ifndef CHROME_BROWSER_LACROS_LACROS_CHROME_SERVICE_DELEGATE_IMPL_H_ #define CHROME_BROWSER_LACROS_LACROS_CHROME_SERVICE_DELEGATE_IMPL_H_ +#include "base/memory/weak_ptr.h" #include "chromeos/lacros/lacros_chrome_service_delegate.h" +#include "components/feedback/system_logs/system_logs_source.h" // Chrome implementation of LacrosChromeServiceDelegate. class LacrosChromeServiceDelegateImpl @@ -21,6 +23,14 @@ // chromeos::LacrosChromeServiceDelegate: void NewWindow() override; std::string GetChromeVersion() override; + void GetFeedbackData(GetFeedbackDataCallback callback) override; + + private: + void OnSystemInformationReady( + std::unique_ptr<system_logs::SystemLogsResponse> sys_info); + + GetFeedbackDataCallback get_feedback_data_callback_; + base::WeakPtrFactory<LacrosChromeServiceDelegateImpl> weak_ptr_factory_{this}; }; #endif // CHROME_BROWSER_LACROS_LACROS_CHROME_SERVICE_DELEGATE_IMPL_H_
diff --git a/chrome/browser/lacros/system_logs/lacros_system_log_fetcher.cc b/chrome/browser/lacros/system_logs/lacros_system_log_fetcher.cc new file mode 100644 index 0000000..49c836c --- /dev/null +++ b/chrome/browser/lacros/system_logs/lacros_system_log_fetcher.cc
@@ -0,0 +1,26 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/lacros/system_logs/lacros_system_log_fetcher.h" + +#include "chrome/browser/feedback/system_logs/log_sources/chrome_internal_log_source.h" +#include "chrome/browser/feedback/system_logs/log_sources/crash_ids_source.h" +#include "chrome/browser/feedback/system_logs/log_sources/memory_details_log_source.h" +#include "chrome/common/extensions/extension_constants.h" +#include "components/feedback/system_logs/system_logs_fetcher.h" + +namespace system_logs { + +SystemLogsFetcher* BuildLacrosSystemLogsFetcher(bool scrub_data) { + SystemLogsFetcher* fetcher = new SystemLogsFetcher( + scrub_data, extension_misc::kBuiltInFirstPartyExtensionIds); + + fetcher->AddSource(std::make_unique<ChromeInternalLogSource>()); + fetcher->AddSource(std::make_unique<CrashIdsSource>()); + fetcher->AddSource(std::make_unique<MemoryDetailsLogSource>()); + + return fetcher; +} + +} // namespace system_logs
diff --git a/chrome/browser/lacros/system_logs/lacros_system_log_fetcher.h b/chrome/browser/lacros/system_logs/lacros_system_log_fetcher.h new file mode 100644 index 0000000..c74ccc9 --- /dev/null +++ b/chrome/browser/lacros/system_logs/lacros_system_log_fetcher.h
@@ -0,0 +1,20 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_LACROS_SYSTEM_LOGS_LACROS_SYSTEM_LOG_FETCHER_H_ +#define CHROME_BROWSER_LACROS_SYSTEM_LOGS_LACROS_SYSTEM_LOG_FETCHER_H_ + +namespace system_logs { + +class SystemLogsFetcher; + +// Creates a SystemLogsFetcher to aggregate the scrubbed lacros logs for sending +// with unified feedback reports. If |scrub_data| is true then the logs are +// scrubbed of PII. +// The fetcher deletes itself once it finishes fetching data. +SystemLogsFetcher* BuildLacrosSystemLogsFetcher(bool scrub_data); + +} // namespace system_logs + +#endif // CHROME_BROWSER_LACROS_SYSTEM_LOGS_LACROS_SYSTEM_LOG_FETCHER_H_
diff --git a/chrome/browser/lookalikes/lookalike_url_navigation_throttle.cc b/chrome/browser/lookalikes/lookalike_url_navigation_throttle.cc index 67dad49..4f9db24d 100644 --- a/chrome/browser/lookalikes/lookalike_url_navigation_throttle.cc +++ b/chrome/browser/lookalikes/lookalike_url_navigation_throttle.cc
@@ -217,9 +217,6 @@ IsLookalikeUrl(last_url, engaged_sites, &last_match_type, &last_suggested_url); - if (!first_is_lookalike && !last_is_lookalike) { - return content::NavigationThrottle::PROCEED; - } // If the first URL is a lookalike, but we ended up on the suggested site // anyway, don't warn. @@ -228,6 +225,12 @@ first_is_lookalike = false; } + if (!first_is_lookalike && !last_is_lookalike) { + return content::NavigationThrottle::PROCEED; + } + // IMPORTANT: Do not modify first_is_lookalike or last_is_lookalike beyond + // this line. See crbug.com/1138138 for an example bug. + // source_id corresponds to last_url, even when first_url is what triggered. // TODO(crbug.com/1133598): disambiguate first_- vs. last_urls. ukm::SourceId source_id = ukm::ConvertToSourceId( @@ -235,15 +238,19 @@ if (first_is_lookalike && ShouldBlockLookalikeUrlNavigation(first_match_type)) { + RecordUMAFromMatchType(first_match_type); return ShowInterstitial(first_suggested_url, first_url, source_id, first_match_type); } if (last_is_lookalike && ShouldBlockLookalikeUrlNavigation(last_match_type)) { + RecordUMAFromMatchType(last_match_type); return ShowInterstitial(last_suggested_url, last_url, source_id, last_match_type); } + RecordUMAFromMatchType(first_is_lookalike ? first_match_type + : last_match_type); // Interstitial normally records UKM, but still record when it's not shown. RecordUkmForLookalikeUrlBlockingPage( source_id, first_is_lookalike ? first_match_type : last_match_type, @@ -313,8 +320,6 @@ &matched_domain, match_type)) { DCHECK(!matched_domain.empty()); - RecordUMAFromMatchType(*match_type); - // matched_domain can be a top domain or an engaged domain. Simply use its // eTLD+1 as the suggested domain. // 1. If matched_domain is a top domain: Top domain list already contains @@ -344,7 +349,6 @@ if (ShouldBlockBySpoofCheckResult(navigated_domain)) { *match_type = LookalikeUrlMatchType::kFailedSpoofChecks; *suggested_url = GURL(); - RecordUMAFromMatchType(*match_type); return true; }
diff --git a/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc b/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc index 33015343..11d5c763 100644 --- a/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc +++ b/chrome/browser/lookalikes/lookalike_url_navigation_throttle_browsertest.cc
@@ -497,6 +497,39 @@ LookalikeUrlMatchType::kTargetEmbedding); } +// Same as TargetEmbedding_TopDomain_Match, but has a redirect where the first +// and last URLs are both target embedding matches. Should only record +// metrics for the first URL. Regression test for crbug.com/1136296. +IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest, + TargetEmbedding_TopDomain_Redirect_Match) { + const GURL kNavigatedUrl = GetLongRedirect("google.com-test.com", "site.com", + "youtube.com-test.com"); + // UKM will record the final URL of the redirect: + const GURL kLastUrl = GetURL("youtube.com-test.com"); + const GURL kExpectedSuggestedUrl = GetURLWithoutPath("google.com"); + SetEngagementScore(browser(), kNavigatedUrl, kLowEngagement); + + // |TestMetricsRecordedAndInterstitialShown| assumes everything should be + // recorded if target embedding is not disabled. But only for target embedding + // checks, if TargetEmbedding is not explicitly enabled, it should be treated + // just like it is disabled. So we make sure an interstitial is not shown if + // target embedding is not enabled. And defer to + // |TestMetricsRecordedAndInterstitialShown| otherwise. + if (!target_embedding_enabled()) { + base::HistogramTester histograms; + TestInterstitialNotShown(browser(), kNavigatedUrl); + histograms.ExpectTotalCount(lookalikes::kHistogramName, 1); + histograms.ExpectBucketCount( + lookalikes::kHistogramName, + NavigationSuggestionEvent::kMatchTargetEmbedding, 1); + } else { + TestMetricsRecordedAndInterstitialShown( + browser(), kNavigatedUrl, kExpectedSuggestedUrl, + NavigationSuggestionEvent::kMatchTargetEmbedding); + } + CheckUkm({kLastUrl}, "MatchType", LookalikeUrlMatchType::kTargetEmbedding); +} + // Target embedding should not trigger on allowlisted embedder domains. IN_PROC_BROWSER_TEST_P(LookalikeUrlNavigationThrottleBrowserTest, TargetEmbedding_EmbedderAllowlist) {
diff --git a/chrome/browser/nearby_sharing/instantmessaging/constants.h b/chrome/browser/nearby_sharing/instantmessaging/constants.h index 326cfd5..7eb4ca07 100644 --- a/chrome/browser/nearby_sharing/instantmessaging/constants.h +++ b/chrome/browser/nearby_sharing/instantmessaging/constants.h
@@ -5,21 +5,11 @@ #ifndef CHROME_BROWSER_NEARBY_SHARING_INSTANTMESSAGING_CONSTANTS_H_ #define CHROME_BROWSER_NEARBY_SHARING_INSTANTMESSAGING_CONSTANTS_H_ -#if defined(NDEBUG) -const char kInstantMessagingReceiveMessageAPI[] = - "https://tachyon-playground-autopush-grpc.sandbox.googleapis.com/v1/" - "messages:receiveExpress"; - -const char kInstantMessagingSendMessageAPI[] = - "https://tachyon-playground-autopush-grpc.sandbox.googleapis.com/v1/" - "message:sendExpress"; -#else const char kInstantMessagingReceiveMessageAPI[] = "https://instantmessaging-pa.googleapis.com/v1/messages:receiveExpress"; const char kInstantMessagingSendMessageAPI[] = "https://instantmessaging-pa.googleapis.com/v1/message:sendExpress"; -#endif // defined(NDEBUG) // Template for optional OAuth2 authorization HTTP header. const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s";
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h index e9f387d..1b70c495 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h +++ b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h
@@ -5,8 +5,6 @@ #ifndef CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_MAC_UNNOTIFICATION_H_ #define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_MAC_UNNOTIFICATION_H_ -#import <Foundation/Foundation.h> - #include <memory> #include <string> @@ -53,6 +51,8 @@ // Request permission to send notifications void RequestPermission(); + // Create default categories for banners and alerts + void CreateDefaultCategories(); private: // Cocoa class that receives callbacks from the UNUserNotificationCenter. @@ -64,9 +64,6 @@ // An object that keeps temp files alive long enough for macOS to pick up. NotificationImageRetainer image_retainer_; - - // An object that carries the categories for the notifications - base::scoped_nsobject<NSMutableSet> categories_; }; #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_MAC_UNNOTIFICATION_H_
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm index 09e6500..e3813a0 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm +++ b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm
@@ -19,13 +19,19 @@ #import "chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/browser_task_traits.h" -#include "third_party/blink/public/common/notifications/notification_constants.h" #include "ui/base/l10n/l10n_util_mac.h" #include "ui/message_center/public/cpp/notification.h" @class UNMutableNotificationContent; @class UNUserNotificationCenter; +namespace { + +NSString* const kCloseAndSettingsCategory = @"CLOSE_AND_SETTINGS"; +NSString* const kCloseCategory = @"CLOSE"; + +} // namespace + // A Cocoa class that represents the delegate of UNUserNotificationCenter and // can forward commands to C++. API_AVAILABLE(macosx(10.14)) @@ -43,12 +49,12 @@ NotificationPlatformBridgeMacUNNotification( UNUserNotificationCenter* notification_center) : delegate_([UNNotificationCenterDelegate alloc]), - notification_center_([notification_center retain]), - categories_([[NSMutableSet alloc] init]) { + notification_center_([notification_center retain]) { [notification_center_ setDelegate:delegate_.get()]; // TODO(crbug/1129366): Determine when to request permission NotificationPlatformBridgeMacUNNotification::RequestPermission(); + NotificationPlatformBridgeMacUNNotification::CreateDefaultCategories(); } NotificationPlatformBridgeMacUNNotification:: @@ -62,12 +68,8 @@ Profile* profile, const message_center::Notification& notification, std::unique_ptr<NotificationCommon::Metadata> metadata) { - base::scoped_nsobject<UNNotificationBuilder> builder([[UNNotificationBuilder - alloc] - initWithCloseLabel:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_CLOSE) - optionsLabel:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_MORE) - settingsLabel:l10n_util::GetNSString( - IDS_NOTIFICATION_BUTTON_SETTINGS)]); + base::scoped_nsobject<UNNotificationBuilder> builder( + [[UNNotificationBuilder alloc] init]); base::string16 context_message = notification.items().empty() @@ -95,18 +97,6 @@ [builder setIconPath:base::SysUTF8ToNSString(path.value())]; } - [builder setShowSettingsButton:notification.should_show_settings_button()]; - const std::vector<message_center::ButtonInfo>& buttons = - notification.buttons(); - if (!buttons.empty()) { - DCHECK_LE(buttons.size(), blink::kNotificationMaxActions); - NSString* buttonOne = base::SysUTF16ToNSString(buttons[0].title); - NSString* buttonTwo = nullptr; - if (buttons.size() > 1) - buttonTwo = base::SysUTF16ToNSString(buttons[1].title); - [builder setButtons:buttonOne secondaryButton:buttonTwo]; - } - [builder setOrigin:base::SysUTF8ToNSString(notification.origin_url().spec())]; [builder setNotificationId:base::SysUTF8ToNSString(notification.id())]; [builder setProfileId:base::SysUTF8ToNSString(GetProfileId(profile))]; @@ -118,14 +108,15 @@ setNotificationType:[NSNumber numberWithInteger:static_cast<NSInteger>( notification_type)]]; - UNNotificationCategory* category = [builder buildCategory]; - [categories_ addObject:category]; - // TODO(crbug/1138470): Determine when to remove UNNotificationCategory so - // that they do not accumulate during browser lifetime - [notification_center_ setNotificationCategories:categories_]; - UNMutableNotificationContent* content = [builder buildUserNotification]; + // TODO(crbug/1136061): Add support for complex categories and move setting + // the categories to the place that will be building the complex categories + if (notification.should_show_settings_button()) + [content setCategoryIdentifier:kCloseAndSettingsCategory]; + else + [content setCategoryIdentifier:kCloseCategory]; + UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:base::SysUTF8ToNSString(notification.id()) content:content @@ -226,6 +217,38 @@ }]; } +void NotificationPlatformBridgeMacUNNotification::CreateDefaultCategories() { + UNNotificationAction* closeButton = [UNNotificationAction + actionWithIdentifier:notification_constants::kNotificationCloseButtonTag + title:l10n_util::GetNSString(IDS_NOTIFICATION_BUTTON_CLOSE) + options:UNNotificationActionOptionNone]; + + UNNotificationAction* settingsButton = [UNNotificationAction + actionWithIdentifier:notification_constants:: + kNotificationSettingsButtonTag + title:l10n_util::GetNSString( + IDS_NOTIFICATION_BUTTON_SETTINGS) + options:UNNotificationActionOptionForeground]; + + // The actions in categories are ordered by LIFO. So having closeButton at the + // end ensures that it is always the button on top. + UNNotificationCategory* closeAndSettingsCategory = [UNNotificationCategory + categoryWithIdentifier:kCloseAndSettingsCategory + actions:@[ settingsButton, closeButton ] + intentIdentifiers:@[] + options:UNNotificationCategoryOptionCustomDismissAction]; + + UNNotificationCategory* closeCategory = [UNNotificationCategory + categoryWithIdentifier:kCloseCategory + actions:@[ closeButton ] + intentIdentifiers:@[] + options:UNNotificationCategoryOptionCustomDismissAction]; + + [notification_center_ + setNotificationCategories:[NSSet setWithObjects:closeAndSettingsCategory, + closeCategory, nil]]; +} + // ///////////////////////////////////////////////////////////////////////////// @implementation UNNotificationCenterDelegate
diff --git a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java index d2b15195..5c548c4 100644 --- a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java +++ b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java
@@ -144,7 +144,7 @@ } private void showUpgradeToast() { - if (mTab == null) return; + if (mTab == null || mTab.isHidden()) return; Toast.makeText(mTab.getContext(), R.string.paint_preview_startup_auto_upgrade_toast, Toast.LENGTH_SHORT)
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index 74bdfab..d9bf526 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -106,7 +106,7 @@ #include "chrome/browser/download/download_dir_policy_handler.h" #include "chrome/browser/enterprise/connectors/connectors_prefs.h" #include "chrome/browser/enterprise/connectors/enterprise_connectors_policy_handler.h" -#include "chrome/browser/enterprise/reporting/extension_request_policy_handler.h" +#include "chrome/browser/enterprise/reporting/extension_request/extension_request_policy_handler.h" #include "chrome/browser/media/kaleidoscope/kaleidoscope_prefs.h" #include "chrome/browser/media/router/media_router_feature.h" #include "chrome/browser/policy/local_sync_policy_handler.h"
diff --git a/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.cc b/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.cc index 04ba15e..e84a7ae87 100644 --- a/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.cc +++ b/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.cc
@@ -34,12 +34,18 @@ using UploaderLeaderTracker = AppInstallReportHandler::UploaderLeaderTracker; +UploaderLeaderTracker::UploaderLeaderTracker(policy::CloudPolicyClient* client) + : client_(client) {} + +UploaderLeaderTracker::~UploaderLeaderTracker() = default; + // static -scoped_refptr<UploaderLeaderTracker> UploaderLeaderTracker::Create() { - return base::WrapRefCounted(new UploaderLeaderTracker()); +scoped_refptr<UploaderLeaderTracker> UploaderLeaderTracker::Create( + policy::CloudPolicyClient* client) { + return base::WrapRefCounted(new UploaderLeaderTracker(client)); } -StatusOr<AppInstallReportHandler::ReleaseLeaderCallback> +StatusOr<std::unique_ptr<UploaderLeaderTracker::LeaderLock>> UploaderLeaderTracker::RequestLeaderPromotion() { if (has_promoted_app_install_event_uploader_) { return Status(error::RESOURCE_EXHAUSTED, @@ -47,26 +53,39 @@ } has_promoted_app_install_event_uploader_ = true; - return base::BindOnce(&UploaderLeaderTracker::ReleaseLeader, - base::Unretained(this)); + + return std::make_unique<LeaderLock>( + base::BindOnce(&UploaderLeaderTracker::ReleaseLeader, + base::Unretained(this)), + client_); } void UploaderLeaderTracker::ReleaseLeader() { has_promoted_app_install_event_uploader_ = false; } +UploaderLeaderTracker::LeaderLock::LeaderLock( + UploaderLeaderTracker::ReleaseLeaderCallback release_cb, + policy::CloudPolicyClient* client) + : client_(std::move(client)), + release_leader_callback_(std::move(release_cb)) {} + +UploaderLeaderTracker::LeaderLock::~LeaderLock() { + if (release_leader_callback_) { + std::move(release_leader_callback_).Run(); + } +} + AppInstallReportUploader::AppInstallReportUploader( base::Value report, scoped_refptr<SharedQueue<base::Value>> report_queue, scoped_refptr<UploaderLeaderTracker> leader_tracker, - policy::CloudPolicyClient* client, ClientCallback client_cb, scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner) : TaskRunnerContext<bool>(std::move(client_cb), sequenced_task_runner), report_(std::move(report)), report_queue_(report_queue), - leader_tracker_(leader_tracker), - client_(client) {} + leader_tracker_(leader_tracker) {} AppInstallReportUploader::~AppInstallReportUploader() = default; @@ -88,7 +107,7 @@ return; } - release_leader_cb_ = std::move(promo_result.ValueOrDie()); + leader_lock_ = std::move(promo_result.ValueOrDie()); ScheduleNextPop(); } @@ -101,7 +120,7 @@ void AppInstallReportUploader::OnPopResult(StatusOr<base::Value> pop_result) { if (!pop_result.ok()) { // There are no more records to process - exit. - std::move(release_leader_cb_).Run(); + leader_lock_.reset(); Complete(); return; } @@ -120,7 +139,7 @@ client->UploadExtensionInstallReport(std::move(record), std::move(cb)); }, - client_, std::move(record), std::move(cb))); + leader_lock_->client(), std::move(record), std::move(cb))); } void AppInstallReportUploader::OnUploadComplete(bool success) { @@ -139,7 +158,7 @@ policy::CloudPolicyClient* client) : RecordHandler(client), report_queue_(SharedQueue<base::Value>::Create()), - leader_tracker_(UploaderLeaderTracker::Create()), + leader_tracker_(UploaderLeaderTracker::Create(client)), sequenced_task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})) {} AppInstallReportHandler::~AppInstallReportHandler() = default; @@ -155,8 +174,8 @@ // Start an uploader in case any previous uploader has finished running before // this record was posted. Start<AppInstallReportUploader>(std::move(report), report_queue_, - leader_tracker_, GetClient(), - std::move(client_cb), sequenced_task_runner_); + leader_tracker_, std::move(client_cb), + sequenced_task_runner_); return Status::StatusOK(); } @@ -189,11 +208,4 @@ return std::move(report_result.value()); } -Status AppInstallReportHandler::ValidateClientState() const { - if (!GetClient()->is_registered()) { - return Status(error::UNAVAILABLE, "DmServer is currently unavailable"); - } - return Status::StatusOK(); -} - } // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.h b/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.h index 2bcfd12da..61c3c3a 100644 --- a/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.h +++ b/chrome/browser/policy/messaging_layer/upload/app_install_report_handler.h
@@ -36,16 +36,30 @@ // and false indicates failure. using ClientCallback = base::OnceCallback<void(bool status)>; - using ReleaseLeaderCallback = base::OnceCallback<void()>; - using RequestLeaderPromotionCallback = - base::OnceCallback<StatusOr<ReleaseLeaderCallback>()>; // Tracking the leader needs to outlive |AppInstallReportHandler| so it needs // to be wrapped in a scoped_refptr. class UploaderLeaderTracker : public base::RefCountedThreadSafe<UploaderLeaderTracker> { public: - static scoped_refptr<UploaderLeaderTracker> Create(); + using ReleaseLeaderCallback = base::OnceCallback<void()>; + + // Holds the lock on the leader, releases it upon destruction. + class LeaderLock { + public: + LeaderLock(ReleaseLeaderCallback release_cb, + policy::CloudPolicyClient* client); + virtual ~LeaderLock(); + + policy::CloudPolicyClient* client() { return client_; } + + private: + policy::CloudPolicyClient* client_; + ReleaseLeaderCallback release_leader_callback_; + }; + + static scoped_refptr<UploaderLeaderTracker> Create( + policy::CloudPolicyClient* cloud_policy_client); // If there is currently no leader // (|has_promoted_app_install_event_uploader_| is false), then the StatusOr @@ -53,23 +67,29 @@ // leader an error::RESOURCE_EXHAUSTED is returned (which should be the // common case). This will be called on sequence from inside the // |AppInstallReportUploader| and so needs no additional protection. - StatusOr<ReleaseLeaderCallback> RequestLeaderPromotion(); + StatusOr<std::unique_ptr<LeaderLock>> RequestLeaderPromotion(); + + private: + friend class base::RefCountedThreadSafe<UploaderLeaderTracker>; + + explicit UploaderLeaderTracker(policy::CloudPolicyClient* client); + virtual ~UploaderLeaderTracker(); // Once a AppInstallEventUploader leader drains the queue of reports, it // will release its leadership and return, allowing a new // AppInstallEventUploader to take leadership and upload events. void ReleaseLeader(); - private: - friend class base::RefCountedThreadSafe<UploaderLeaderTracker>; - virtual ~UploaderLeaderTracker() = default; - - UploaderLeaderTracker() = default; + // CloudPolicyClient allows calls to the reporting server. + policy::CloudPolicyClient* client_; // Flag indicates whether a leader has been promoted. bool has_promoted_app_install_event_uploader_{false}; }; + using RequestLeaderPromotionCallback = + base::OnceCallback<StatusOr<UploaderLeaderTracker::LeaderLock>()>; + // AppInstallReportUploader handles enqueuing events on the |report_queue_|, // and uploading those events with the |client_|. class AppInstallReportUploader : public TaskRunnerContext<bool> { @@ -78,7 +98,6 @@ base::Value report, scoped_refptr<SharedQueue<base::Value>> report_queue, scoped_refptr<UploaderLeaderTracker> leader_tracker, - policy::CloudPolicyClient* client, ClientCallback client_cb, scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner); @@ -127,9 +146,7 @@ base::Value report_; scoped_refptr<SharedQueue<base::Value>> report_queue_; scoped_refptr<UploaderLeaderTracker> leader_tracker_; - ReleaseLeaderCallback release_leader_cb_; - - policy::CloudPolicyClient* const client_; + std::unique_ptr<UploaderLeaderTracker::LeaderLock> leader_lock_; }; explicit AppInstallReportHandler(policy::CloudPolicyClient* client); @@ -150,9 +167,6 @@ // Convert record into base::Value for upload (override for subclass). virtual StatusOr<base::Value> ConvertRecord(const Record& record) const; - // Helper method. Validates CloudPolicyClient state. - Status ValidateClientState() const; - scoped_refptr<SharedQueue<base::Value>> report_queue_; scoped_refptr<UploaderLeaderTracker> leader_tracker_; scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_;
diff --git a/chrome/browser/policy/messaging_layer/upload/app_install_report_handler_unittest.cc b/chrome/browser/policy/messaging_layer/upload/app_install_report_handler_unittest.cc index 7c872c4..7365795 100644 --- a/chrome/browser/policy/messaging_layer/upload/app_install_report_handler_unittest.cc +++ b/chrome/browser/policy/messaging_layer/upload/app_install_report_handler_unittest.cc
@@ -63,17 +63,17 @@ class AppInstallReportHandlerTest : public testing::Test { public: - AppInstallReportHandlerTest() = default; - - void SetUp() override { - client_.SetDMToken( - policy::DMToken::CreateValidTokenForTesting("FAKE_DM_TOKEN").value()); - } + AppInstallReportHandlerTest() + : client_(std::make_unique<policy::MockCloudPolicyClient>()) {} protected: - content::BrowserTaskEnvironment task_envrionment_; + void SetUp() override { + client_->SetDMToken( + policy::DMToken::CreateValidTokenForTesting("FAKE_DM_TOKEN").value()); + } + content::BrowserTaskEnvironment task_environment_; - policy::MockCloudPolicyClient client_; + std::unique_ptr<policy::MockCloudPolicyClient> client_; }; class TestRecord : public Record { @@ -97,7 +97,7 @@ TEST_F(AppInstallReportHandlerTest, AcceptsValidRecord) { TestCallbackWaiter waiter; TestRecord test_record; - EXPECT_CALL(client_, + EXPECT_CALL(*client_, UploadExtensionInstallReport_(MatchValue(test_record.data()), _)) .WillOnce(WithArgs<1>( Invoke([&waiter](AppInstallReportHandler::ClientCallback& callback) { @@ -105,15 +105,15 @@ waiter.Signal(); }))); - AppInstallReportHandler handler(&client_); + AppInstallReportHandler handler(client_.get()); Status handle_status = handler.HandleRecord(test_record); EXPECT_OK(handle_status); waiter.Wait(); } TEST_F(AppInstallReportHandlerTest, DeniesInvalidDestination) { - EXPECT_CALL(client_, UploadExtensionInstallReport_(_, _)).Times(0); - AppInstallReportHandler handler(&client_); + EXPECT_CALL(*client_, UploadExtensionInstallReport_(_, _)).Times(0); + AppInstallReportHandler handler(client_.get()); TestRecord test_record; test_record.set_destination(Destination::MEET_DEVICE_TELEMETRY); @@ -124,8 +124,8 @@ } TEST_F(AppInstallReportHandlerTest, DeniesInvalidData) { - EXPECT_CALL(client_, UploadExtensionInstallReport_(_, _)).Times(0); - AppInstallReportHandler handler(&client_); + EXPECT_CALL(*client_, UploadExtensionInstallReport_(_, _)).Times(0); + AppInstallReportHandler handler(client_.get()); TestRecord test_record; test_record.set_data("BAD_DATA"); @@ -138,7 +138,7 @@ TestCallbackWaiter waiter; TestRecord test_record; - EXPECT_CALL(client_, + EXPECT_CALL(*client_, UploadExtensionInstallReport_(MatchValue(test_record.data()), _)) .WillOnce(WithArgs<1>( Invoke([&waiter](AppInstallReportHandler::ClientCallback& callback) { @@ -146,7 +146,7 @@ waiter.Signal(); }))); - AppInstallReportHandler handler(&client_); + AppInstallReportHandler handler(client_.get()); Status handle_status = handler.HandleRecord(test_record); EXPECT_OK(handle_status); waiter.Wait(); @@ -173,7 +173,7 @@ TestCallbackWaiterWithCounter waiter{kExpectedCallTimes}; TestRecord test_record; - EXPECT_CALL(client_, + EXPECT_CALL(*client_, UploadExtensionInstallReport_(MatchValue(test_record.data()), _)) .WillRepeatedly(WithArgs<1>( Invoke([&waiter](AppInstallReportHandler::ClientCallback& callback) { @@ -181,7 +181,7 @@ waiter.Signal(); }))); - AppInstallReportHandler handler(&client_); + AppInstallReportHandler handler(client_.get()); for (int i = 0; i < kExpectedCallTimes; i++) { Status handle_status = handler.HandleRecord(test_record);
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc index 5f77c43..b2c26ec 100644 --- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc +++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.cc
@@ -88,11 +88,10 @@ }; } // namespace -DmServerUploadService::RecordHandler::RecordHandler(CloudPolicyClient* client) +DmServerUploadService::RecordHandler::RecordHandler( + policy::CloudPolicyClient* client) : client_(client) {} -DmServerUploadService::RecordHandler::~RecordHandler() = default; - DmServerUploader::DmServerUploader( std::unique_ptr<std::vector<EncryptedRecord>> records, scoped_refptr<SharedVector<std::unique_ptr<RecordHandler>>> handlers, @@ -349,9 +348,8 @@ ReportSuccessfulUploadCallback upload_cb) : client_(std::move(client)), upload_cb_(upload_cb), - sequenced_task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})), - record_handlers_(SharedVector<std::unique_ptr<RecordHandler>>::Create()) { -} + record_handlers_(SharedVector<std::unique_ptr<RecordHandler>>::Create()), + sequenced_task_runner_(base::ThreadPool::CreateSequencedTaskRunner({})) {} DmServerUploadService::~DmServerUploadService() { if (client_) {
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h index 4ced54fb..8d54bec 100644 --- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h +++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service.h
@@ -52,7 +52,7 @@ class RecordHandler { public: explicit RecordHandler(policy::CloudPolicyClient* client); - virtual ~RecordHandler(); + virtual ~RecordHandler() = default; virtual Status HandleRecord(Record record) = 0; @@ -91,8 +91,8 @@ void IsHandlerVectorEmptyCheck(bool handler_is_empty); // ProcessRecords verifies that the records provided are parseable and sets - // the |Record|s up for handling by the |RecordHandler|s. On completion, - // ProcessRecords |Schedule|s |HandleRecords|. + // the |Record|s up for handling by the |RecordHandlers|s. On + // completion, ProcessRecords |Schedule|s |HandleRecords|. void ProcessRecords(); // HandleRecords sends the records to the |record_handlers_|, allowing them @@ -125,7 +125,7 @@ SequencingInformation sequencing_information); std::unique_ptr<std::vector<EncryptedRecord>> encrypted_records_; - const scoped_refptr<SharedVector<std::unique_ptr<RecordHandler>>> handlers_; + scoped_refptr<SharedVector<std::unique_ptr<RecordHandler>>> handlers_; // generation_id_ will be set to the generation of the first record in // encrypted_records_. @@ -173,9 +173,9 @@ std::unique_ptr<policy::CloudPolicyClient> client_; ReportSuccessfulUploadCallback upload_cb_; - scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; - scoped_refptr<SharedVector<std::unique_ptr<RecordHandler>>> record_handlers_; + + scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_; }; } // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc index 9e17656..79a3a0f8 100644 --- a/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc +++ b/chrome/browser/policy/messaging_layer/upload/dm_server_upload_service_unittest.cc
@@ -116,9 +116,7 @@ class TestRecordHandler : public DmServerUploadService::RecordHandler { public: - explicit TestRecordHandler(policy::CloudPolicyClient* client) - : RecordHandler(client) {} - + TestRecordHandler() : RecordHandler(/*client=*/nullptr) {} ~TestRecordHandler() override = default; MOCK_METHOD(Status, HandleRecord, (Record)); @@ -132,8 +130,7 @@ DmServerUploadService::RecordHandler>>::Create()) {} void SetUp() override { - std::unique_ptr<TestRecordHandler> handler_ptr( - new TestRecordHandler(&client_)); + std::unique_ptr<TestRecordHandler> handler_ptr(new TestRecordHandler()); handler_ = handler_ptr.get(); handlers_->PushBack(std::move(handler_ptr), base::DoNothing()); records_ = std::make_unique<std::vector<EncryptedRecord>>(); @@ -153,9 +150,6 @@ std::unique_ptr<std::vector<EncryptedRecord>> records_; const base::TimeDelta kMaxDelay_ = base::TimeDelta::FromSeconds(1); - - private: - policy::MockCloudPolicyClient client_; }; TEST_F(DmServerUploaderTest, ProcessesRecord) {
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 531c0668..51814700 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -258,6 +258,7 @@ #include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/bluetooth/debug_logs_manager.h" #include "chrome/browser/chromeos/cert_provisioning/cert_provisioning_common.h" +#include "chrome/browser/chromeos/child_accounts/family_user_chrome_activity_metrics.h" #include "chrome/browser/chromeos/child_accounts/family_user_metrics_service.h" #include "chrome/browser/chromeos/child_accounts/family_user_session_metrics.h" #include "chrome/browser/chromeos/child_accounts/parent_access_code/parent_access_service.h" @@ -398,7 +399,6 @@ #include "chrome/browser/media/kaleidoscope/kaleidoscope_prefs.h" #endif - namespace { // Deprecated 9/2019 @@ -918,6 +918,7 @@ chromeos::ClientAppMetadataProviderService::RegisterProfilePrefs(registry); chromeos::CupsPrintersManager::RegisterProfilePrefs(registry); chromeos::device_sync::RegisterProfilePrefs(registry); + chromeos::FamilyUserChromeActivityMetrics::RegisterProfilePrefs(registry); chromeos::FamilyUserMetricsService::RegisterProfilePrefs(registry); chromeos::FamilyUserSessionMetrics::RegisterProfilePrefs(registry); chromeos::first_run::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb index 6d704c8..af82ea7 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ar.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">البحث</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">أخضر فاتح</translation> +<translation id="141454040365657399">رأس الصفحة</translation> <translation id="1417889266572670458">أزرق داكن</translation> <translation id="1431911867058218151">برقوقي</translation> <translation id="1439316808600711881">rgn</translation> @@ -349,6 +350,7 @@ <translation id="3549141990712742152">قص <ph name="TEXT" />.</translation> <translation id="3549680091535286226">النقر بإصبعين لإيقاف الكلام مؤقتًا</translation> <translation id="3564729643041517261">نمط العرض الحالي هو "جنبًا إلى جنب".</translation> +<translation id="3573145950452451508">تذييل الصفحة</translation> <translation id="3587482841069643663">الكل</translation> <translation id="3589661172894441357">مسرد مصطلحات</translation> <translation id="3591784666823501596">أزرق ملكي</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb index a9b7914f..d0d2917 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_fr.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Rechercher</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Vert clair</translation> +<translation id="141454040365657399">En-tête de page</translation> <translation id="1417889266572670458">Bleu marine</translation> <translation id="1431911867058218151">Prune</translation> <translation id="1439316808600711881">région</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152">couper "<ph name="TEXT" />".</translation> <translation id="3549680091535286226">Appuyez avec deux doigts pour désactiver temporairement la description vocale</translation> <translation id="3564729643041517261">Le style d'affichage actuel est "côte à côte"</translation> +<translation id="3573145950452451508">Pied de page</translation> <translation id="3587482841069643663">Tous</translation> <translation id="3589661172894441357">Glossaire</translation> <translation id="3591784666823501596">Bleu royal</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb index ebc3998..ec1e879 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gl.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Buscar</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Verde claro</translation> +<translation id="141454040365657399">Cabeceira da páxina</translation> <translation id="1417889266572670458">Mariña</translation> <translation id="1431911867058218151">Ameixa</translation> <translation id="1439316808600711881">rgn</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152">cortar <ph name="TEXT" />.</translation> <translation id="3549680091535286226">Toca con 2 dedos para deter a voz temporalmente</translation> <translation id="3564729643041517261">Estilo de pantalla actual: en paralelo</translation> +<translation id="3573145950452451508">Pé de páxina</translation> <translation id="3587482841069643663">Todos</translation> <translation id="3589661172894441357">Glosario</translation> <translation id="3591784666823501596">Azul real</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb index 3cc6c92..a264c8e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_id.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Telusuri</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Hijau Muda</translation> +<translation id="141454040365657399">Header halaman</translation> <translation id="1417889266572670458">Navy</translation> <translation id="1431911867058218151">Plum</translation> <translation id="1439316808600711881">rgn</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152">memotong <ph name="TEXT" />.</translation> <translation id="3549680091535286226">Ketuk dengan 2 jari untuk menghentikan ucapan untuk sementara</translation> <translation id="3564729643041517261">Gaya tampilan saat ini adalah berdampingan</translation> +<translation id="3573145950452451508">Footer halaman</translation> <translation id="3587482841069643663">Semua</translation> <translation id="3589661172894441357">Glosarium</translation> <translation id="3591784666823501596">Royal Blue</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb index 11eb1892..8310f5a 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
@@ -19,7 +19,7 @@ <translation id="1087788677726983142">הסתרת מסננים של אירועים בסטרימינג</translation> <translation id="1088402100970133699">אין פריט קודם ברשימה</translation> <translation id="1114836634143403764">הצעה</translation> -<translation id="1120743664840974483">{"א": "אלף", "ב": "בועז", "ג": "גימל", "ד": "דוד", "ה": "הגר", "ו": "וו", "ז": "זאב", "ח": "חוה", "ט": "טיח", "י": "יונה","כ": "כרמל", "ל": "לאה", "מ": "משה", "נ": "נשר", "ס": "סמך","ע": "עין", "פ": "פסל", "צ": "ציפור", "ק": "קורח", "ר": "רות", "ש": "שמיר", "ת": "תלם"}</translation> +<translation id="1120743664840974483">{"א": "אלף", "ב": "בועז", "ג": "גימל", "ד": "דוד", "ה": "הגר", "ו": "וו", "ז": "זאב", "ח": "חווה", "ט": "טיח", "י": "יונה","כ": "כרמל", "ל": "לאה", "מ": "משה", "נ": "נשר", "ס": "סמך","ע": "עין", "פ": "פסל", "צ": "ציפור", "ק": "קורח", "ר": "רות", "ש": "שמיר", "ת": "תלם"}</translation> <translation id="1120938014254001895">החלקה מעלה עם שתי אצבעות</translation> <translation id="1126928665165112660">לא נטוי</translation> <translation id="113582498867142724">אוסף <ph name="TAG" /> עם <ph name="NUM" /> פריטים</translation> @@ -829,7 +829,7 @@ <translation id="7505149250476994901">יש לומר "גדולה" אחרי האות</translation> <translation id="7518543783849163354">כדי להפסיק באופן זמני את המשוב בדיבור של ChromeVox, הקש על Control.</translation> <translation id="7533226154149229506">צהוב מטה-זהב בהיר</translation> -<translation id="7543255924852002459">תווית מחיקה</translation> +<translation id="7543255924852002459">מחיקת תווית</translation> <translation id="7552432549459840808">מקשי קיצור מועילים ב-Chrome</translation> <translation id="7569983096843329377">שחור</translation> <translation id="7579911500627256166">נקודה <ph name="DOT" /></translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb index bbdbe99..eb7a5ff7 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kn.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Search</translation> <translation id="1396114365388024581">ಟ್ಯಾಬ್ ಪಟ್ಟಿ</translation> <translation id="1405567553485452995">ತಿಳಿ ಹಸಿರು</translation> +<translation id="141454040365657399">ಪುಟದ ಶಿರೋಲೇಖ</translation> <translation id="1417889266572670458">ಕಡುನೀಲಿ</translation> <translation id="1431911867058218151">ಪ್ಲಮ್</translation> <translation id="1439316808600711881">rgn</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152"><ph name="TEXT" /> ಅನ್ನು ಕತ್ತರಿಸಿ.</translation> <translation id="3549680091535286226">ತಾತ್ಕಾಲಿಕವಾಗಿ ಮಾತನ್ನು ನಿಲ್ಲಿಸಲು 2 ಬೆರಳುಗಳ ಮೂಲಕ ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="3564729643041517261">ಪ್ರಸ್ತುತ ಡಿಸ್ಪ್ಲೇ ಶೈಲಿ ಅಕ್ಕ ಪಕ್ಕ ಆಗಿದೆ</translation> +<translation id="3573145950452451508">ಪುಟದ ಅಡಿಲೇಖ</translation> <translation id="3587482841069643663">ಎಲ್ಲ</translation> <translation id="3589661172894441357">ಪದಕೋಶ</translation> <translation id="3591784666823501596">ಕಡು ನೀಲಿ</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb index d384c5e0..a583f50 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ne.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">खोज्नुहोस्</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">हल्का हरियो</translation> +<translation id="141454040365657399">पेज हेडर</translation> <translation id="1417889266572670458">गाढा निलो</translation> <translation id="1431911867058218151">प्लम</translation> <translation id="1439316808600711881">आरजीएन</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152"><ph name="TEXT" />काट्नुहोस्।</translation> <translation id="3549680091535286226">केही समयका लागि वाक् सुविधालाई रोक्न दुई औँलाले ट्याप गर्नुहोस्</translation> <translation id="3564729643041517261">हालको प्रदर्शनको प्रकार पाठहरूलाई सँगसँगै राखिएको छ</translation> +<translation id="3573145950452451508">पेज फुटर</translation> <translation id="3587482841069643663">सबै</translation> <translation id="3589661172894441357">शब्दावली</translation> <translation id="3591784666823501596">रोयल निलो</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb index 573a66b..9aa8a9db 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ru.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Поиск</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Светло-зеленый</translation> +<translation id="141454040365657399">Заголовок страницы</translation> <translation id="1417889266572670458">Военно-морской синий</translation> <translation id="1431911867058218151">Сливовый</translation> <translation id="1439316808600711881">rgn</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152">вырезать <ph name="TEXT" />.</translation> <translation id="3549680091535286226">Чтобы приостановить озвучивание текста, коснитесь экрана двумя пальцами.</translation> <translation id="3564729643041517261">Текущий стиль дисплея: параллельный</translation> +<translation id="3573145950452451508">Нижний колонтитул страницы</translation> <translation id="3587482841069643663">Все</translation> <translation id="3589661172894441357">Словарь</translation> <translation id="3591784666823501596">Королевский синий</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb index 28e7f16..85b890c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_te.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">సెర్చ్</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">లేత ఆకుపచ్చ రంగు</translation> +<translation id="141454040365657399">పేజీ హెడర్</translation> <translation id="1417889266572670458">నేవీ నీలం రంగు</translation> <translation id="1431911867058218151">రేగు పండు రంగు</translation> <translation id="1439316808600711881">rgn</translation> @@ -349,6 +350,7 @@ <translation id="3549141990712742152"><ph name="TEXT" />ని కత్తిరించండి.</translation> <translation id="3549680091535286226">తాత్కాలికంగా ప్రసంగాన్ని ఆపడం కోసం 2 వేళ్లతో నొక్కండి</translation> <translation id="3564729643041517261">ప్రస్తుత ప్రదర్శన శైలి పక్కపక్కకు ఉంది</translation> +<translation id="3573145950452451508">పేజీ ఫుటర్</translation> <translation id="3587482841069643663">మొత్తం</translation> <translation id="3589661172894441357">పదకోశం</translation> <translation id="3591784666823501596">దివ్యమైన నీలం రంగు</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb index 92b91f2..2733d0e 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_tr.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Ara</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Açık Yeşil</translation> +<translation id="141454040365657399">Sayfa üstbilgisi</translation> <translation id="1417889266572670458">Lacivert</translation> <translation id="1431911867058218151">Erik Rengi</translation> <translation id="1439316808600711881">rgn</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152"><ph name="TEXT" />metnini kes.</translation> <translation id="3549680091535286226">Konuşmayı geçici olarak durdurmak için 2 parmağınızla dokunun</translation> <translation id="3564729643041517261">Mevcut görüntüleme stili yan yanadır</translation> +<translation id="3573145950452451508">Sayfa alt bilgisi</translation> <translation id="3587482841069643663">Tümü</translation> <translation id="3589661172894441357">Terimler sözlüğü</translation> <translation id="3591784666823501596">Kraliyet Mavisi</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb index bb25120..38f149c 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_uz.xtb
@@ -67,6 +67,7 @@ <translation id="1383876407941801731">Qidiruv</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Och yashil</translation> +<translation id="141454040365657399">Sahifa sarlavhasi</translation> <translation id="1417889266572670458">Toʻq koʻk</translation> <translation id="1431911867058218151">Och binafsha</translation> <translation id="1439316808600711881">rgn</translation> @@ -347,6 +348,7 @@ <translation id="3549141990712742152">kesib olish: <ph name="TEXT" />.</translation> <translation id="3549680091535286226">Ovozni vaqtincha jimlatish uchun ikki barmoq bilan bosing</translation> <translation id="3564729643041517261">Joriy ekran – yonma-yon uslubida</translation> +<translation id="3573145950452451508">Sahifa kolontituli</translation> <translation id="3587482841069643663">Barchasi</translation> <translation id="3589661172894441357">Lug‘at</translation> <translation id="3591784666823501596">Koʻkimtir</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb index f55f849..89685bb 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_vi.xtb
@@ -68,6 +68,7 @@ <translation id="1383876407941801731">Tìm kiếm</translation> <translation id="1396114365388024581">tablst</translation> <translation id="1405567553485452995">Xanh lục nhạt</translation> +<translation id="141454040365657399">Tiêu đề trang</translation> <translation id="1417889266572670458">Màu xanh hải quân</translation> <translation id="1431911867058218151">Màu mận chín</translation> <translation id="1439316808600711881">rgn</translation> @@ -348,6 +349,7 @@ <translation id="3549141990712742152">cắt <ph name="TEXT" />.</translation> <translation id="3549680091535286226">Nhấn bằng 2 ngón tay để tạm thời dừng lời nói</translation> <translation id="3564729643041517261">Kiểu hiển thị hiện tại là song song</translation> +<translation id="3573145950452451508">Chân trang</translation> <translation id="3587482841069643663">Tất cả</translation> <translation id="3589661172894441357">Bảng thuật ngữ</translation> <translation id="3591784666823501596">Màu xanh hoàng gia</translation>
diff --git a/chrome/browser/resources/feedback/css/feedback.css b/chrome/browser/resources/feedback/css/feedback.css index 8c48895..597b2bd 100644 --- a/chrome/browser/resources/feedback/css/feedback.css +++ b/chrome/browser/resources/feedback/css/feedback.css
@@ -49,6 +49,10 @@ margin: 20px; } +.content #free-form-text { + margin-top: 0; /* the content frame already gives enough margin. */ +} + .content #description-text { border-color: #c8c8c8; box-sizing: border-box;
diff --git a/chrome/browser/resources/feedback/html/default.html b/chrome/browser/resources/feedback/html/default.html index 9c7fc73..af9683f 100644 --- a/chrome/browser/resources/feedback/html/default.html +++ b/chrome/browser/resources/feedback/html/default.html
@@ -31,9 +31,11 @@ </div> <div id="content-pane" class="content"> <p id="free-form-text" i18n-content="freeFormText"></p> - <textarea id="description-text" aria-labelledby="free-form-text"></textarea> - <div id="description-empty-error" class="description-empty-notification" - role="alert" i18n-content="noDescription" hidden></div> + <textarea id="description-text" aria-labelledby="free-form-text" + aria-required="true"> + </textarea> + <p id="description-empty-error" class="description-empty-notification" + i18n-content="noDescription" aria-hidden="true" hidden></p> <div> <p id="additional-info-label" i18n-content="additionalInfo"><p> </div>
diff --git a/chrome/browser/resources/feedback/js/feedback.js b/chrome/browser/resources/feedback/js/feedback.js index 0d625b73..48008f1 100644 --- a/chrome/browser/resources/feedback/js/feedback.js +++ b/chrome/browser/resources/feedback/js/feedback.js
@@ -182,6 +182,36 @@ } /** + * Updates the description-text box based on whether it was valid. + * If invalid, indicate an error to the user. If valid, remove indication of the + * error. + */ +function updateDescription(wasValid) { + // Set visibility of the alert text for users who don't use a screen + // reader. + $('description-empty-error').hidden = wasValid; + + // Change the textarea's aria-labelled by to ensure the screen reader does + // (or doesn't) read the error, as appropriate. + // If it does read the error, it should do so _before_ it reads the normal + // description. + const description = $('description-text'); + description.setAttribute( + 'aria-labelledby', + (wasValid ? '' : 'description-empty-error ') + 'free-form-text'); + // Indicate whether input is valid. + description.setAttribute('aria-invalid', !wasValid); + if (!wasValid) { + // Return focus to field so user can correct error. + description.focus(); + } + + // We may have added or removed a line of text, so make sure the app window + // is the right size. + resizeAppWindow(); +} + +/** * Sends the report; after the report is sent, we need to be redirected to * the landing page, but we shouldn't be able to navigate back, hence * we open the landing page in a new tab and sendReport closes this tab. @@ -189,20 +219,13 @@ */ function sendReport() { if ($('description-text').value.length == 0) { - // Don't need to re-hide this or reset the aria label in the non-empty case - // because the report will always be sent if we get past this if statement. - $('description-empty-error').hidden = false; - - // Return focus to the textarea but first change its aria-labelledby so that - // the screen reader reads the error first when describing it. - const description = $('description-text'); - description.setAttribute('aria-labelledby', 'description-empty-error'); - description.focus(); - - // We added a line of text, so make sure the app window is big enough. - resizeAppWindow(); + updateDescription(false); return false; } + // This isn't strictly necessary, since if we get past this point we'll + // succeed, but for future-compatibility (and in case we later add more + // failure cases after this), re-hide the alert and reset the aria label. + updateDescription(true); // Prevent double clicking from sending additional reports. $('send-report-button').disabled = true;
diff --git a/chrome/browser/resources/net_internals/events_view.js b/chrome/browser/resources/net_internals/events_view.js index 85ce8116..3fac0d8 100644 --- a/chrome/browser/resources/net_internals/events_view.js +++ b/chrome/browser/resources/net_internals/events_view.js
@@ -36,7 +36,7 @@ EventsView.TAB_NAME = 'Events'; EventsView.TAB_HASH = '#events'; - // IDs for special HTML elements in dns_view.html + // ID for special HTML element in events_view.html EventsView.MAIN_BOX_ID = 'events-view-tab-content'; cr.addSingletonGetter(EventsView); @@ -46,31 +46,21 @@ __proto__: superClass.prototype, /** - * Called when something is dragged over the drop target. - * - * Returns false to cancel default browser behavior when a single file is - * being dragged. When this happens, we may not receive a list of files for - * security reasons, which is why we allow the |files| array to be empty. + * Prevent default browser behavior when a file is dragged over the page to + * allow our onDrop() handler to handle the drop. */ onDrag(event) { - // NOTE: Use Array.prototype.indexOf here is necessary while WebKit - // decides which type of data structure dataTransfer.types will be - // (currently between DOMStringList and Array). These have different APIs - // so assuming one type or the other was breaking things. See - // http://crbug.com/115433. TODO(dbeam): Remove when standardized more. - const indexOf = Array.prototype.indexOf; - return indexOf.call(event.dataTransfer.types, 'Files') == -1 || - event.dataTransfer.files.length > 1; + if (event.dataTransfer.types.includes('Files')) { + event.preventDefault(); + } }, /** - * Called when something is dropped onto the drop target. If it's a single - * file, redirect to the events tab to show the depreciation message. + * If a single file is dropped, redirect to the events tab to show the + * deprecation message. */ onDrop(event) { - const indexOf = Array.prototype.indexOf; - if (indexOf.call(event.dataTransfer.types, 'Files') == -1 || - event.dataTransfer.files.length != 1) { + if (event.dataTransfer.files.length !== 1) { return; } event.preventDefault();
diff --git a/chrome/browser/resources/settings/autofill_page/password_check.html b/chrome/browser/resources/settings/autofill_page/password_check.html index 24e1716..ded38a97 100644 --- a/chrome/browser/resources/settings/autofill_page/password_check.html +++ b/chrome/browser/resources/settings/autofill_page/password_check.html
@@ -67,8 +67,10 @@ <div class="cr-row first two-line" id="securityCheckHeader"> <!-- If the password check concluded, show only a status Icon. --> <template is="dom-if" if="[[!isCheckInProgress_(status)]]"> - <iron-icon class$="[[getStatusIconClass_(status, leakedPasswords, weakPasswords)]]" - icon="[[getStatusIcon_(status, leakedPasswords, weakPasswords)]]"> + <iron-icon class$="[[getStatusIconClass_(status, isSignedOut_, + leakedPasswords, weakPasswords)]]" + icon="[[getStatusIcon_(status, isSignedOut_, leakedPasswords, + weakPasswords)]]"> </iron-icon> </template> @@ -88,7 +90,8 @@ </div> <div class="secondary" id="subtitle" hidden$="[[!showsPasswordsCount_(status, leakedPasswords, weakPasswords)]]"> - [[getPasswordsCount_(status, insecurePasswordsCount, compromisedPasswordsCount)]] + [[getPasswordsCount_(status, insecurePasswordsCount, + compromisedPasswordsCount, weakPasswordsCount)]] </div> </div> <cr-button id="controlPasswordCheckButton"
diff --git a/chrome/browser/resources/settings/autofill_page/password_check.js b/chrome/browser/resources/settings/autofill_page/password_check.js index 7bf2414..04a911e 100644 --- a/chrome/browser/resources/settings/autofill_page/password_check.js +++ b/chrome/browser/resources/settings/autofill_page/password_check.js
@@ -673,22 +673,20 @@ }, /** - * Returns count of insecure credentials, if |passwordsWeaknessCheckEnabled| - * is true, otherwise, returns count of compromised credentials. + * Returns a localized and pluralized string of the passwords count, depending + * on whether the weak check feature is enabled, whether the user is signed in + * and whether other compromised passwords exist. * @return {string} * @private */ getPasswordsCount_() { - if (this.passwordsWeaknessCheckEnabled) { - if (this.isSignedOut_ && - this.leakedPasswords.length + this.weakPasswords.length === 0) { - return this.i18n('noWeakPasswords'); - } else { - return this.insecurePasswordsCount; - } - } else { + if (!this.passwordsWeaknessCheckEnabled) { return this.compromisedPasswordsCount; } + + return this.isSignedOut_ && this.leakedPasswords.length === 0 ? + this.weakPasswordsCount : + this.insecurePasswordsCount; }, /**
diff --git a/chrome/browser/resources/settings/autofill_page/password_check_behavior.js b/chrome/browser/resources/settings/autofill_page/password_check_behavior.js index 4a596bf..d9eb411 100644 --- a/chrome/browser/resources/settings/autofill_page/password_check_behavior.js +++ b/chrome/browser/resources/settings/autofill_page/password_check_behavior.js
@@ -25,6 +25,11 @@ compromisedPasswordsCount: String, /** + * The number of weak passwords as a formatted string. + */ + weakPasswordsCount: String, + + /** * The number of insecure passwords as a formatted string. */ insecurePasswordsCount: String, @@ -101,33 +106,15 @@ this.status = status; this.isInitialStatus = false; }; + this.leakedCredentialsListener_ = compromisedCredentials => { this.updateCompromisedPasswordList(compromisedCredentials); - - PluralStringProxyImpl.getInstance() - .getPluralString('compromisedPasswords', this.leakedPasswords.length) - .then(count => { - this.compromisedPasswordsCount = count; - }); - PluralStringProxyImpl.getInstance() - .getPluralString( - 'insecurePasswords', - this.leakedPasswords.length + this.weakPasswords.length) - .then(count => { - this.insecurePasswordsCount = count; - }); + this.fetchPluralizedStrings_(); }; this.weakCredentialsListener_ = weakCredentials => { this.weakPasswords = weakCredentials; - - PluralStringProxyImpl.getInstance() - .getPluralString( - 'insecurePasswords', - this.leakedPasswords.length + this.weakPasswords.length) - .then(count => { - this.insecurePasswordsCount = count; - }); + this.fetchPluralizedStrings_(); }; this.passwordManager = PasswordManagerImpl.getInstance(); @@ -160,6 +147,26 @@ }, /** + * Helper that fetches pluralized strings corresponding to the number of + * compromised, weak and insecure credentials. + * @private + */ + fetchPluralizedStrings_() { + const proxy = PluralStringProxyImpl.getInstance(); + const compromised = this.leakedPasswords.length; + const weak = this.weakPasswords.length; + + proxy.getPluralString('compromisedPasswords', compromised) + .then(count => this.compromisedPasswordsCount = count); + + proxy.getPluralString('weakPasswords', weak) + .then(count => this.weakPasswordsCount = count); + + proxy.getPluralString('insecurePasswords', compromised + weak) + .then(count => this.insecurePasswordsCount = count); + }, + + /** * Function to update compromised credentials in a proper way. New entities * should appear in the bottom. * @param {!Array<!PasswordManagerProxy.InsecureCredential>} newList
diff --git a/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.html b/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.html index 44776d0e..d7d6a0b 100644 --- a/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.html +++ b/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.html
@@ -1,11 +1,17 @@ + <!-- We have to include the shared settings style in order to properly --> + <!-- style the contained link in the dialog. --> + <style include="settings-shared"></style> <cr-dialog id="dialog" close-text="$i18n{close}" ignore-popstate ignore-enter-key> <div slot="title"> $i18n{removeCompromisedPasswordConfirmationTitle} </div> <div slot="body"> - <span id="description"> - [[getRemovePasswordDescription_(item.formattedOrigin)]] + <span id="link" hidden="[[!hasSecureChangePasswordUrl_(item)]]" + inner-h-t-m-l="[[getRemovePasswordDescriptionHtml_(item)]]"> + </span> + <span id="text" hidden="[[hasSecureChangePasswordUrl_(item)]]"> + [[getRemovePasswordDescriptionText_(item)]] </span> </div> <div slot="button-container">
diff --git a/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.js b/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.js index c1060e2..dddbc64 100644 --- a/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.js +++ b/chrome/browser/resources/settings/autofill_page/password_remove_confirmation_dialog.js
@@ -52,12 +52,43 @@ }, /** - * @return {string} * @private + * @return {boolean} */ - getRemovePasswordDescription_() { + hasSecureChangePasswordUrl_() { + const url = this.item.changePasswordUrl; + return !!url && (url.startsWith('https://') || url.startsWith('chrome://')); + }, + + /** + * Returns the remove password description with a linkified change password + * URL. Requires the change password URL to be present and secure. + * @private + * @return {string} + */ + getRemovePasswordDescriptionHtml_() { + if (!this.hasSecureChangePasswordUrl_()) { + return ''; + } + + const url = assert(this.item.changePasswordUrl); + const origin = this.item.formattedOrigin; + return this.i18nAdvanced( + 'removeCompromisedPasswordConfirmationDescription', { + substitutions: + [origin, `<a href='${url}' target='_blank'>${origin}</a>`], + }); + }, + + /** + * Returns the remove password description as a plain text. + * Used when the change password URL is not present or insecure. + * @private + * @return {string} + */ + getRemovePasswordDescriptionText_() { + const origin = this.item.formattedOrigin; return this.i18n( - 'removeCompromisedPasswordConfirmationDescription', - this.item.formattedOrigin, this.item.formattedOrigin); - } + 'removeCompromisedPasswordConfirmationDescription', origin, origin); + }, });
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js index 390f56d..841cfec 100644 --- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js +++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_feature_behavior.js
@@ -138,9 +138,8 @@ case settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS: case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION: return 'os-settings:multidevice-better-together-suite'; - // TODO(cvandermerwe): Use real Wifi Sync asset. case settings.MultiDeviceFeature.WIFI_SYNC: - return 'os-settings:multidevice-wifi'; + return 'os-settings:multidevice-wifi-sync'; default: return ''; }
diff --git a/chrome/browser/resources/settings/chromeos/os_icons.html b/chrome/browser/resources/settings/chromeos/os_icons.html index 1f47ba26..2971493 100644 --- a/chrome/browser/resources/settings/chromeos/os_icons.html +++ b/chrome/browser/resources/settings/chromeos/os_icons.html
@@ -26,12 +26,12 @@ <!-- MultiDevice Settings UI --> <g id="multidevice-better-together-suite" viewBox="0 0 24 24"><path d="M17,1.01 L7,1 C5.9,1 5,1.9 5,3 L5,21 C5,22.1 5.9,23 7,23 L17,23 C18.1,23 19,22.1 19,21 L19,3 C19,1.9 18.1,1.01 17,1.01 Z M17,21 L7,21 L7,20 L17,20 L17,21 Z M17,18 L7,18 L7,6 L17,6 L17,18 Z M7,4 L7,3 L17,3 L17,4 L7,4 Z"></path></g> + <g id="multidevice-wifi-sync" viewBox="0 0 24 24" transform="translate(1.000000, 3.000000)" fill-rule="nonzero"> + <path d="M17,13 C17,13.5522847 16.5522847,14 16,14 L13,14 C12.4477153,14 12,13.5522847 12,13 L12,7 C12,6.44771525 12.4477153,6 13,6 L16,6 C16.5522847,6 17,6.44771525 17,7 L17,13 Z M13,12.5 L13,13 L16,13 L16,12.5 L13,12.5 Z M16,7 L13,7 L13,7.5 L16,7.5 L16,7 Z M13,11.5 L16,11.5 L16,8.5 L13,8.5 L13,11.5 Z"></path> + <path d="M17.1681,2.62915 C17.5337,2.88721 17.6103,3.40882 17.3327,3.76542 L16.594,4.71403 C16.0864,4.57451 15.5519,4.5 14.9999983,4.5 C11.6863,4.5 8.99999832,7.1863 8.99999832,10.5 C8.99999832,11.5774 9.284,12.5886 9.7812,13.4626 L9.5901,13.708 C9.2867,14.0975 8.71102,14.0975 8.40763,13.7072 L0.66733,3.76542 C0.38972,3.40882 0.46633,2.88721 0.83192,2.62915 C2.09858,1.7353 5.03466,0 8.99999832,0 C12.9661,0 15.9014,1.7353 17.1681,2.62915 Z" ></path> + </g> <g id="multidevice-smart-lock" viewBox="0 0 24 24"><path d="M18,9 L17,9 L17,7 C17,4.24 14.76,2 12,2 C9.24,2 7,4.24 7,7 L7,9 L6,9 C4.9,9 4,9.9 4,11 L4,21 C4,22.1 4.9,23 6,23 L18,23 C19.1,23 20,22.1 20,21 L20,11 C20,9.9 19.1,9 18,9 Z M9,7 C9,5.34 10.34,4 12,4 C13.66,4 15,5.34 15,7 L15,9 L9,9 L9,7 Z M18,21 L6,21 L6,11 L18,11 L18,21 Z M12,18 C13.1,18 14,17.1 14,16 C14,14.9 13.1,14 12,14 C10.9,14 10,14.9 10,16 C10,17.1 10.9,18 12,18 Z"></path></g> <g id="multidevice-messages" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 2H3.66667C2.75 2 2.00833 2.75 2.00833 3.66667L2 17.5L5 15H16C16.9167 15 18 14.4167 18 13.5V3.5C18 2.58333 16.9167 2 16 2ZM16 13H4V4H16V13ZM5 9H11V11H5V9ZM5 6H15V8H5V6Z"></path></g> - <g id="multidevice-wifi" viewBox="0 0 24 24"> - <path d="M10.01 17.99L20 5.46C19.613 5.164 15.765 2 10 2 4.227 2 .387 5.165 0 5.46l9.99 12.53.01.01.01-.01z" fill-opacity=".3"></path> - <path d="M2.942 9.143l7.05 8.85L10 18l.008-.008 7.05-8.85C16.7 8.867 14.008 6.668 10 6.668s-6.7 2.2-7.058 2.476z"></path> - </g> <g id="nearby-share" viewBox="0 0 24 24"> <path fill-rule="evenodd" clip-rule="evenodd" d="M2.71638 8.86876C2.24237 9.31907 2.23052 10.0656 2.69268 10.5396L3.88956 11.7839L5.53674 10.0775L4.38727 8.89246C3.93696 8.41845 3.19039 8.4066 2.71638 8.86876ZM16.2612 15.7533L17.2566 14.7342L18.9157 13.0396L21.345 10.5511C21.5701 10.3141 21.6768 10.0178 21.6768 9.72155C21.6768 9.41344 21.5583 9.10534 21.3213 8.86833C20.8591 8.41802 20.1007 8.41802 19.6504 8.89203L17.2566 11.345L15.5976 13.0396L14.5666 14.0943C13.8911 14.7935 12.9905 15.1727 12.0188 15.1727C11.1537 15.1727 10.3479 14.8646 9.70802 14.2957L8.06083 15.9903C9.15105 16.9857 10.5375 17.5427 12.0188 17.5427C13.6304 17.5427 15.1354 16.9146 16.2612 15.7533Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M12.0188 8.53696C10.4072 8.53696 8.90219 9.16502 7.77641 10.3263L4.06729 14.1303L2.69266 15.5404C2.24235 16.0026 2.24235 16.761 2.71636 17.2113C3.17852 17.6616 3.93694 17.6616 4.38725 17.1876L6.78099 14.7346L8.44003 13.04L9.471 11.9854C10.1465 11.2862 11.0471 10.907 12.0188 10.907C12.8839 10.907 13.6778 11.2151 14.3296 11.7839L15.9768 10.0893C14.8866 9.09392 13.5001 8.53696 12.0188 8.53696ZM21.6768 16.3699C21.6768 16.0737 21.5701 15.7656 21.345 15.5404L20.1599 14.3199L18.5127 16.0263L19.6504 17.1995C20.1007 17.6735 20.8472 17.6853 21.3213 17.2232C21.5583 16.9862 21.6768 16.6781 21.6768 16.3699Z"></path>
diff --git a/chrome/browser/share/BUILD.gn b/chrome/browser/share/BUILD.gn index 331fc7d..a6bd40aa 100644 --- a/chrome/browser/share/BUILD.gn +++ b/chrome/browser/share/BUILD.gn
@@ -11,6 +11,7 @@ "bitmap_download_request.cc", "features.cc", "features.h", + "link_to_text_metrics_bridge.cc", "qr_code_generation_request.cc", "qr_code_generation_request.h", ] @@ -19,6 +20,7 @@ "//chrome/browser/share/android:jni_headers", "//chrome/services/qrcode_generator/public/cpp", "//chrome/services/qrcode_generator/public/mojom", + "//components/shared_highlighting/core/common", "//content/public/browser", "//skia", "//ui/gfx",
diff --git a/chrome/browser/share/DEPS b/chrome/browser/share/DEPS index 8010860..be66cce 100644 --- a/chrome/browser/share/DEPS +++ b/chrome/browser/share/DEPS
@@ -22,6 +22,7 @@ "+components/browser_ui/share/android", "+components/browser_ui/android/bottomsheet", "+components/infobars/android", + "+components/shared_highlighting/core/common", "+content/public/android/java/src/org/chromium/content_public/browser/RenderWidgetHostView.java", "+content/public/android/java/src/org/chromium/content_public/browser/WebContents.java", ]
diff --git a/chrome/browser/share/android/BUILD.gn b/chrome/browser/share/android/BUILD.gn index f54e0f0..7bbeda9 100644 --- a/chrome/browser/share/android/BUILD.gn +++ b/chrome/browser/share/android/BUILD.gn
@@ -35,6 +35,7 @@ generate_jni("jni_headers") { sources = [ "java/src/org/chromium/chrome/browser/share/BitmapDownloadRequest.java", + "java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java", "java/src/org/chromium/chrome/browser/share/qrcode/QRCodeGenerationRequest.java", "java/src/org/chromium/chrome/browser/share/send_tab_to_self/NotificationManager.java", "java/src/org/chromium/chrome/browser/share/send_tab_to_self/SendTabToSelfAndroidBridge.java",
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java index 81eec08..274cea4 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java
@@ -110,18 +110,21 @@ // Discard results if tab is not on foreground anymore. @Override public void onHidden(Tab tab, @TabHidingType int type) { + LinkToTextMetricsBridge.logGenerateErrorTabHidden(); cleanup(); } // Discard results if tab content is changed by typing new URL in omnibox. @Override public void onUpdateUrl(Tab tab, String url) { + LinkToTextMetricsBridge.logGenerateErrorOmniboxNavigation(); cleanup(); } // Discard results if tab content crashes. @Override public void onCrash(Tab tab) { + LinkToTextMetricsBridge.logGenerateErrorTabCrash(); cleanup(); }
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java new file mode 100644 index 0000000..3457136 --- /dev/null +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java
@@ -0,0 +1,31 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.share.link_to_text; + +import org.chromium.base.annotations.NativeMethods; + +/** + * A Java API for recording Link to Text metrics. + */ +public class LinkToTextMetricsBridge { + public static void logGenerateErrorTabHidden() { + LinkToTextMetricsBridgeJni.get().logGenerateErrorTabHidden(); + } + + public static void logGenerateErrorOmniboxNavigation() { + LinkToTextMetricsBridgeJni.get().logGenerateErrorOmniboxNavigation(); + } + + public static void logGenerateErrorTabCrash() { + LinkToTextMetricsBridgeJni.get().logGenerateErrorTabCrash(); + } + + @NativeMethods + interface Natives { + void logGenerateErrorTabHidden(); + void logGenerateErrorOmniboxNavigation(); + void logGenerateErrorTabCrash(); + } +}
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java index 22b8119..afe60a96 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetCoordinator.java
@@ -6,7 +6,6 @@ import android.app.Activity; import android.content.res.Configuration; -import android.graphics.Bitmap; import android.view.View; import androidx.annotation.VisibleForTesting; @@ -58,12 +57,11 @@ private Activity mActivity; private ActivityLifecycleDispatcher mLifecycleDispatcher; private ChromeProvidedSharingOptionsProvider mChromeProvidedSharingOptionsProvider; + private ShareParams mShareParams; private ShareSheetBottomSheetContent mBottomSheet; private WindowAndroid mWindowAndroid; private final BottomSheetObserver mBottomSheetObserver; private final LargeIconBridge mIconBridge; - private String mUrl; - private Bitmap mIconForPreview; /** * Constructs a new ShareSheetCoordinator. @@ -105,6 +103,12 @@ } protected void destroy() { + if (mShareParams != null) { + ShareParams.TargetChosenCallback callback = mShareParams.getCallback(); + if (callback != null) { + callback.onCancel(); + } + } if (mWindowAndroid != null) { mWindowAndroid.removeActivityStateObserver(this); mWindowAndroid = null; @@ -118,6 +122,7 @@ // TODO(crbug/1022172): Should be package-protected once modularization is complete. public void showShareSheet( ShareParams params, ChromeShareExtras chromeShareExtras, long shareStartTime) { + mShareParams = params; mActivity = params.getWindow().getActivity().get(); if (mActivity == null) return;
diff --git a/chrome/browser/share/android/java_sources.gni b/chrome/browser/share/android/java_sources.gni index 00f7a02b..8c7ba34 100644 --- a/chrome/browser/share/android/java_sources.gni +++ b/chrome/browser/share/android/java_sources.gni
@@ -8,6 +8,7 @@ "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/BitmapDownloadRequest.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/clipboard/ClipboardImageFileProvider.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java", + "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QRCodeGenerationRequest.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeCoordinator.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeDialog.java",
diff --git a/chrome/browser/share/link_to_text_metrics_bridge.cc b/chrome/browser/share/link_to_text_metrics_bridge.cc new file mode 100644 index 0000000..dc3019ee --- /dev/null +++ b/chrome/browser/share/link_to_text_metrics_bridge.cc
@@ -0,0 +1,21 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <jni.h> + +#include "chrome/browser/share/android/jni_headers/LinkToTextMetricsBridge_jni.h" +#include "components/shared_highlighting/core/common/shared_highlighting_metrics.h" + +static void JNI_LinkToTextMetricsBridge_LogGenerateErrorTabHidden(JNIEnv* env) { + shared_highlighting::LogGenerateErrorTabHidden(); +} + +static void JNI_LinkToTextMetricsBridge_LogGenerateErrorOmniboxNavigation( + JNIEnv* env) { + shared_highlighting::LogGenerateErrorOmniboxNavigation(); +} + +static void JNI_LinkToTextMetricsBridge_LogGenerateErrorTabCrash(JNIEnv* env) { + shared_highlighting::LogGenerateErrorTabCrash(); +}
diff --git a/chrome/browser/signin/force_signin_verifier.cc b/chrome/browser/signin/force_signin_verifier.cc index 11b9bb1..8ba8d51 100644 --- a/chrome/browser/signin/force_signin_verifier.cc +++ b/chrome/browser/signin/force_signin_verifier.cc
@@ -31,13 +31,6 @@ } // namespace -const char kForceSigninVerificationMetricsName[] = - "Signin.ForceSigninVerificationRequest"; -const char kForceSigninVerificationSuccessTimeMetricsName[] = - "Signin.ForceSigninVerificationTime.Success"; -const char kForceSigninVerificationFailureTimeMetricsName[] = - "Signin.ForceSigninVerificationTime.Failure"; - ForceSigninVerifier::ForceSigninVerifier( signin::IdentityManager* identity_manager) : has_token_verified_(false), @@ -45,8 +38,7 @@ creation_time_(base::TimeTicks::Now()), identity_manager_(identity_manager) { content::GetNetworkConnectionTracker()->AddNetworkConnectionObserver(this); - UMA_HISTOGRAM_BOOLEAN(kForceSigninVerificationMetricsName, - ShouldSendRequest()); + // Most of time (~94%), sign-in token can be verified with server. SendRequest(); } @@ -59,8 +51,9 @@ signin::AccessTokenInfo token_info) { if (error.state() != GoogleServiceAuthError::NONE) { if (error.IsPersistentError()) { - UMA_HISTOGRAM_MEDIUM_TIMES(kForceSigninVerificationFailureTimeMetricsName, - base::TimeTicks::Now() - creation_time_); + // Based on the obsolete UMA Signin.ForceSigninVerificationTime.Failure, + // about 7% verifications are failed. Most of them are finished within + // 113ms but some of them (<3%) could take longer than 3 minutes. has_token_verified_ = true; CloseAllBrowserWindows(); content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver( @@ -77,8 +70,9 @@ return; } - UMA_HISTOGRAM_MEDIUM_TIMES(kForceSigninVerificationSuccessTimeMetricsName, - base::TimeTicks::Now() - creation_time_); + // Based on the obsolete UMA Signin.ForceSigninVerificationTime.Success, about + // 93% verifications are succeeded. Most of them are finished ~1 second but + // some of them (<3%) could take longer than 3 minutes. has_token_verified_ = true; content::GetNetworkConnectionTracker()->RemoveNetworkConnectionObserver(this); Cancel();
diff --git a/chrome/browser/signin/force_signin_verifier.h b/chrome/browser/signin/force_signin_verifier.h index 08676fa7..6afd3762 100644 --- a/chrome/browser/signin/force_signin_verifier.h +++ b/chrome/browser/signin/force_signin_verifier.h
@@ -21,10 +21,6 @@ struct AccessTokenInfo; } // namespace signin -extern const char kForceSigninVerificationMetricsName[]; -extern const char kForceSigninVerificationSuccessTimeMetricsName[]; -extern const char kForceSigninVerificationFailureTimeMetricsName[]; - // ForceSigninVerifier will verify profile's auth token when profile is loaded // into memory by the first time via gaia server. It will retry on any transient // error.
diff --git a/chrome/browser/signin/force_signin_verifier_unittest.cc b/chrome/browser/signin/force_signin_verifier_unittest.cc index 10d890a6..3528d68 100644 --- a/chrome/browser/signin/force_signin_verifier_unittest.cc +++ b/chrome/browser/signin/force_signin_verifier_unittest.cc
@@ -5,7 +5,6 @@ #include "chrome/browser/signin/force_signin_verifier.h" #include "base/run_loop.h" -#include "base/test/metrics/histogram_tester.h" #include "base/test/task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "components/signin/public/identity_manager/identity_test_environment.h" @@ -151,7 +150,6 @@ const AccountInfo account_info = identity_test_env.MakePrimaryAccountAvailable("email@test.com"); - base::HistogramTester histogram_tester; ForceSigninVerifierWithAccessToInternalsForTesting verifier( identity_test_env.identity_manager()); @@ -167,11 +165,6 @@ ASSERT_TRUE(verifier.HasTokenBeenVerified()); ASSERT_FALSE(verifier.IsDelayTaskPosted()); ASSERT_EQ(0, verifier.FailureCount()); - histogram_tester.ExpectBucketCount(kForceSigninVerificationMetricsName, 1, 1); - histogram_tester.ExpectTotalCount( - kForceSigninVerificationSuccessTimeMetricsName, 1); - histogram_tester.ExpectTotalCount( - kForceSigninVerificationFailureTimeMetricsName, 0); } TEST(ForceSigninVerifierTest, OnGetTokenPersistentFailure) { @@ -180,7 +173,6 @@ const AccountInfo account_info = identity_test_env.MakePrimaryAccountAvailable("email@test.com"); - base::HistogramTester histogram_tester; ForceSigninVerifierWithAccessToInternalsForTesting verifier( identity_test_env.identity_manager()); @@ -197,11 +189,6 @@ ASSERT_TRUE(verifier.HasTokenBeenVerified()); ASSERT_FALSE(verifier.IsDelayTaskPosted()); ASSERT_EQ(0, verifier.FailureCount()); - histogram_tester.ExpectBucketCount(kForceSigninVerificationMetricsName, 1, 1); - histogram_tester.ExpectTotalCount( - kForceSigninVerificationSuccessTimeMetricsName, 0); - histogram_tester.ExpectTotalCount( - kForceSigninVerificationFailureTimeMetricsName, 1); } TEST(ForceSigninVerifierTest, OnGetTokenTransientFailure) { @@ -210,7 +197,6 @@ const AccountInfo account_info = identity_test_env.MakePrimaryAccountAvailable("email@test.com"); - base::HistogramTester histogram_tester; ForceSigninVerifierWithAccessToInternalsForTesting verifier( identity_test_env.identity_manager()); @@ -226,11 +212,6 @@ ASSERT_FALSE(verifier.HasTokenBeenVerified()); ASSERT_TRUE(verifier.IsDelayTaskPosted()); ASSERT_EQ(1, verifier.FailureCount()); - histogram_tester.ExpectBucketCount(kForceSigninVerificationMetricsName, 1, 1); - histogram_tester.ExpectTotalCount( - kForceSigninVerificationSuccessTimeMetricsName, 0); - histogram_tester.ExpectTotalCount( - kForceSigninVerificationFailureTimeMetricsName, 0); } TEST(ForceSigninVerifierTest, OnLostConnection) {
diff --git a/chrome/browser/themes/theme_helper_win.cc b/chrome/browser/themes/theme_helper_win.cc index fba8e40..2f75df22 100644 --- a/chrome/browser/themes/theme_helper_win.cc +++ b/chrome/browser/themes/theme_helper_win.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/themes/theme_helper_win.h" #include "base/bind.h" +#include "base/callback.h" #include "base/win/windows_version.h" #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/win/titlebar_config.h" @@ -291,6 +292,7 @@ // Watch for future changes. if (!dwm_key_->StartWatching(base::BindOnce(&ThemeHelperWin::OnDwmKeyUpdated, - base::Unretained(this)))) + base::Unretained(this)))) { dwm_key_.reset(); + } }
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb index 3cfbca99..2bfc6c7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Skermskoot</translation> <translation id="1111673857033749125">Boekmerke wat op jou ander toestelle gestoor is, sal hier verskyn.</translation> <translation id="1113597929977215864">Wys vereenvoudigde aansig</translation> +<translation id="1123070903960493543">Hoe jy interaksie met Chrome het, instellings wat jy gekies het, besonderhede van Chrome-omvalle</translation> <translation id="1126809382673880764">Beskerm jou nie teen gevaarlike webwerwe, aflaaie en uitbreidings nie. Jy sal steeds Veiligblaai-beskerming kry, indien beskikbaar, in ander Google-dienste, soos Gmail en Search.</translation> <translation id="1129510026454351943">Besonderhede: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 aflaai hangende.}other{# aflaaie hangende.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Kan nie <ph name="CONTENT_TYPE" /> deel nie</translation> <translation id="1477626028522505441">Kon <ph name="FILE_NAME" /> weens bedienerkwessies nie aflaai nie.</translation> <translation id="1506061864768559482">Soekenjin</translation> +<translation id="151267239139452619">Voeg by Aflaaie</translation> <translation id="1513352483775369820">Boekmerke en webgeskiedenis</translation> <translation id="1513858653616922153">Vee wagwoord uit</translation> <translation id="1521774566618522728">Aktief vandag</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> gestoor</translation> <translation id="213279576345780926">Het <ph name="TAB_TITLE" /> toegemaak</translation> <translation id="2139186145475833000">Voeg by tuisskerm</translation> +<translation id="214888715418183969">Kies wat jy gemaklik voel om met Chrome te deel. Die maatstawwe wat jy deel, sal gebruik word om te help om Chrome se kenmerke, werkverrigting en stabiliteit te verbeter.</translation> <translation id="2154484045852737596">Wysig kaart</translation> <translation id="2154710561487035718">Kopieer URL</translation> <translation id="2156074688469523661">Oorblywende werwe (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR-kode</translation> <translation id="218608176142494674">Deling</translation> <translation id="2195339740518523951">Kry Chrome se sterkste beskerming</translation> +<translation id="2200113223741723867">Bestuur deling van gebruikdata</translation> <translation id="2227444325776770048">Gaan voort as <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinkronisering en Google-dienste</translation> <translation id="2239812875700136898">Beheer jou berigte vanaf die "Opsies vir Ontdek"-knoppie</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Hierdie instelling is gedeaktiveer omdat ouerkontroles aan is</translation> <translation id="3771694256347217732">Google se diensbepalings</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Skakel Bluetooth aan<ph name="END_LINK" /> om saambinding moontlik te maak</translation> +<translation id="3773856050682458546">Basiese data plus inligting oor die webwerwe wat jy besoek en programme wat jy gebruik</translation> <translation id="3775705724665058594">Stuur na jou toestelle toe</translation> <translation id="3778956594442850293">By tuisskerm gevoeg</translation> <translation id="3789841737615482174">Installeer</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Bestuur</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> aflaaie is uitgevee</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> as 'n sekuriteitsleutel</translation> <translation id="3856096718352044181">Bevestig dat dit 'n geldige verskaffer is of probeer later weer</translation> <translation id="3861633093716975811">Gewilde video's</translation> <translation id="3892148308691398805">Kopieer teks</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Sien kitssoekresultate in hierdie paneel</translation> <translation id="4000212216660919741">Vanlyn tuisblad</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# uur}other{# uur}}</translation> +<translation id="4045764304651014138">Gebruiksdata</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Voeg by:</translation> <translation id="4060598801229743805">Opsies is naby die bokant van die skerm beskikbaar</translation> <translation id="4062305924942672200">Regsinligting</translation> <translation id="4084682180776658562">Boekmerk</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Laat toe</translation> <translation id="5040262127954254034">Privaatheid</translation> <translation id="5087580092889165836">Voeg kaart by</translation> +<translation id="5091249083535528968">Uitgebreide datagebruik</translation> <translation id="509429900233858213">'n Fout het voorgekom.</translation> <translation id="510275257476243843">1 uur oor</translation> <translation id="5123685120097942451">Incognito-oortjie</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Deel skakel</translation> <translation id="5836192821815272682">Laai tans Chrome-opdatering af …</translation> <translation id="5853623416121554550">laat wag</translation> +<translation id="5854512288214985237">Geen statistieke of omvalverslae word na Google toe gestuur nie</translation> <translation id="5854790677617711513">Ouer as 30 dae</translation> <translation id="5855546874025048181">Verfyn: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome kan nie Bluetooth-aansluitprop aanskakel nie</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Meld af en skakel sinkronisering af</translation> <translation id="6312687380483398334">Webprogramme (stil)</translation> <translation id="6316139424528454185">Steun nie Android-weergawe nie</translation> +<translation id="6321526113093607004">Voeg by Boekmerke</translation> <translation id="6324034347079777476">Android-stelsel se sinkronisering is gedeaktiveer</translation> <translation id="6333140779060797560">Deel via <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Enkriptering</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> op <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Wysig boekmerk</translation> <translation id="6406506848690869874">Sinkronisering</translation> +<translation id="6410404864818553978">Basiese gebruiksdata</translation> <translation id="6410883413783534063">Maak oortjies oop om verskillende bladsye op dieselfde tyd te besoek</translation> <translation id="6412673304250309937">Vergelyk URL'e met 'n lys onveilige werwe wat in Chrome geberg word. As 'n werf probeer om jou wagwoord te steel, of wanneer jy 'n skadelike lêer aflaai, sal Chrome dalk ook URL'e, insluitend stukkies bladsyinhoud, na Veiligblaai toe stuur.</translation> <translation id="641643625718530986">Druk tans uit …</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Aanvanklike sinkroniseringopstelling is nie voltooi nie. Sinkronisering is af.</translation> <translation id="7022756207310403729">Maak in blaaier oop</translation> <translation id="702463548815491781">Aanbeveel wanneer TalkBack of Skakelaartoegang aan is</translation> +<translation id="7027549951530753705">Teruggestel op <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Wagwoorde</translation> <translation id="703523980599857277">Verander tuisblad</translation> <translation id="7054588988317389591">Kry prentbeskrywings?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> en nog webwerwe</translation> <translation id="8327155640814342956">Maak oop om Chrome op te dateer vir die beste blaai-ervaring</translation> <translation id="8349013245300336738">Rangskik volgens hoeveelheid data gebruik</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> aflaaie is teruggestel</translation> <translation id="8364299278605033898">Sien gewilde webwerwe</translation> <translation id="8368027906805972958">Onbekende of ongesteunde toestel (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> is gereed.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Meld weer aan …</translation> <translation id="9155898266292537608">Jy kan ook soek met 'n vinnige tik op 'n woord</translation> <translation id="9169507124922466868">Navigasiegeskiedenis is half oopgemaak</translation> +<translation id="9191031968346938109">Voeg by …</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{1 minuut gelede nagegaan}other{# minute gelede nagegaan}}</translation> <translation id="9204836675896933765">1 lêer oor</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Fout: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Tik wagfrase in</translation> <translation id="95817756606698420">Chrome kan <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> gebruik om soektogte in China uit te voer. Jy kan dit in <ph name="BEGIN_LINK" />Instellings<ph name="END_LINK" /> verander.</translation> +<translation id="962979164594783469">Installeer hierdie program</translation> <translation id="968900484120156207">Bladsye wat jy besoek, verskyn hier</translation> <translation id="970715775301869095"><ph name="MINUTES" /> minute oor</translation> <translation id="974555521953189084">Voer jou wagfrase in om sinkronisering te begin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb index 52228bd..91ad638 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">የማያ ገጽ ቀረጻ</translation> <translation id="1111673857033749125">በሌሎች መሣሪያዎችዎ ላይ የተቀመጡ ዕልባቶችዎ እዚህ ብቅ ይላሉ።</translation> <translation id="1113597929977215864">የተቃለለ እይታን አሳይ</translation> +<translation id="1123070903960493543">ከChrome፣ ከመረጧቸው ቅንብሮች፣ የChrome ብልሽቶች ዝርዝሮች ጋር እንዴት እንደሚገናኙ</translation> <translation id="1126809382673880764">እርስዎን አደገኛ ከሆኑ የድር ጣቢያዎች፣ ማውረዶች እና ቅጥያዎች አይጠብቀዎትም። አሁንም የሚገኝ በሆነበት ጊዜ እንደ Gmail እና ፍለጋ ባሉ ሌሎች የGoogle አገልግሎቶች ላይ የጥንቃቄ አሰሳ ጥበቃን ያገኛሉ።</translation> <translation id="1129510026454351943">ዝርዝሮች፦ <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ውርድን በመጠባበቅ ላይ}one{# ውርዶችን በመጠባበቅ ላይ}other{# ውርዶችን በመጠባበቅ ላይ}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> ን ማጋራት አይቻልም</translation> <translation id="1477626028522505441">በአገልጋይ ችግሮች ምክንያት <ph name="FILE_NAME" />ን ማውረድ አልተሳካም።</translation> <translation id="1506061864768559482">የፍለጋ ፕሮግራም</translation> +<translation id="151267239139452619">ወደ ውርዶች ያክሉ</translation> <translation id="1513352483775369820">ዕልባቶች እና የድር ታሪክ</translation> <translation id="1513858653616922153">የይለፍ ቃል ሰርዝ</translation> <translation id="1521774566618522728">ገባሪ ዛሬ</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> ተቀምጧል</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ተዘግቷል</translation> <translation id="2139186145475833000">ወደ መነሻ ማያ ገጽ አክል</translation> +<translation id="214888715418183969">ለChrome ለማጋራት የሚመችዎትን ይምረጡ። የሚያጋሯቸው መለኪያዎች የChromeን ባህሪዎች፣ አፈፃፀም እና መረጋጋትን ለማሻሻል ጥቅም ላይ ይውላሉ።</translation> <translation id="2154484045852737596">ካርትን ያርትዑ</translation> <translation id="2154710561487035718">URL ቅዳ</translation> <translation id="2156074688469523661">ቀሪ ጣቢያዎች (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">የQR ኮድ</translation> <translation id="218608176142494674">ማጋራት</translation> <translation id="2195339740518523951">የChromeን በጣም ጠንካራ ደህንነት ያግኙ</translation> +<translation id="2200113223741723867">የአጠቃቀም ውሂብ ማጋራትን ያስተዳድሩ</translation> <translation id="2227444325776770048">እንደ <ph name="USER_FULL_NAME" /> ሆነው ይቀጥሉ</translation> <translation id="2234876718134438132">ማመሳሰል እና የGoogle አገልግሎቶች</translation> <translation id="2239812875700136898">ከአማራጮች ለምርምር አዝራሩ ሆነው የእርስዎን ዘገባዎች ይቆጣጠሩ</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">የወላጅ መቆጣጠሪያዎች ስለበሩ ይህ ቅንብር ተሰናክሏል</translation> <translation id="3771694256347217732">የGoogle የአገልግሎት ውል</translation> <translation id="3773755127849930740">ማጣመርን ለመፍቀድ <ph name="BEGIN_LINK" />ብሉቱዝን ያብሩ<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">ስለሚጎበኟቸው ድር ጣቢያዎች እና ስለሚጠቀሙባቸው መተግበሪያዎች መሰረታዊ ውሂብ እና መረጃ</translation> <translation id="3775705724665058594">ወደ መሣሪያዎችዎ ይላኩ</translation> <translation id="3778956594442850293">ወደ የመነሻ ገጽ ታክሏል</translation> <translation id="3789841737615482174">ጫን </translation> <translation id="3810838688059735925">ቪዲዮ</translation> <translation id="3810973564298564668">አቀናብር</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> የሚወርዱ ተሰርዘዋል</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> እንደ የደህንነት ቁልፍ</translation> <translation id="3856096718352044181">ይህ ልክ የሆነ አገልግሎት አቅራቢ መሆኑን እባክዎ ያረጋግጡ ወይም ቆይተው እንደገና ይሞክሩ</translation> <translation id="3861633093716975811">ታዋቂ ቪዲዮዎች</translation> <translation id="3892148308691398805">ጽሑፍ ቅዳ</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">በዚህ ፓነል ውስጥ ቅጽበታዊ የፍለጋ ውጤቶችን ይመልከቱ</translation> <translation id="4000212216660919741">ከመስመር ውጭ መነሻ</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ሰዓ}one{# ሰዓቶች}other{# ሰዓቶች}}</translation> +<translation id="4045764304651014138">የአጠቃቀም ውሂብ</translation> <translation id="4056223980640387499">ቀይ ቡናማ</translation> +<translation id="4057643060762047384">አክል ወደ፦</translation> <translation id="4060598801229743805">አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ</translation> <translation id="4062305924942672200">የህግ መረጃ</translation> <translation id="4084682180776658562">ዕልባት</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">ፍቀድ</translation> <translation id="5040262127954254034">ግላዊነት</translation> <translation id="5087580092889165836">ካርድ አክል</translation> +<translation id="5091249083535528968">የተራዘመ የአጠቃቀም ውሂብ</translation> <translation id="509429900233858213">ስህተት አጋጥሟል።</translation> <translation id="510275257476243843">1 ሰዓት ይቀራል</translation> <translation id="5123685120097942451">ማንነት የማያሳውቅ ትር</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">አገናኝ አጋራ</translation> <translation id="5836192821815272682">Chrome ዝማኔን በማውረድ ላይ…</translation> <translation id="5853623416121554550">ባለበት ቆሟል</translation> +<translation id="5854512288214985237">ወደ Google ምንም ስታትስቲክስ ወይም የብልሽት ሪፖርቶች አይላኩም</translation> <translation id="5854790677617711513">ከ30 ቀናት በላይ የቆየ</translation> <translation id="5855546874025048181">አጣራ፦ <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome የብሉቱዝ አስማሚውን ማብራት አልቻለም</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">ዘግተው ይውጡ እና ስምረትን ያጥፉ</translation> <translation id="6312687380483398334">የድር መተግበሪያዎች (ጸጥታ)</translation> <translation id="6316139424528454185">የAndroid ስሪቱ አይደገፍም</translation> +<translation id="6321526113093607004">ወደ ዕልባቶች አክል</translation> <translation id="6324034347079777476">የAndroid ሥርዓት ስምረት ተሰናክሏል</translation> <translation id="6333140779060797560">በ<ph name="APPLICATION" /> በኩል ያጋሩ</translation> <translation id="6337234675334993532">ምስጠራ</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> በ<ph name="VIOLATED_URL" /> ላይ</translation> <translation id="6404511346730675251">ዕልባት አርትዕ</translation> <translation id="6406506848690869874">አመሳስል</translation> +<translation id="6410404864818553978">መሰረታዊ የአጠቃቀም ውሂብ</translation> <translation id="6410883413783534063">በተመሳሳይ ጊዜ የተለያዩ ገጾችን ለመጎብኘት ትሮችን ይክፈቱ</translation> <translation id="6412673304250309937">በChrome ላይ የተከማቹ ድህንነታቸው ያልተጠበቁ ጣቢያዎች ዝርዝር ጋር ዩአርኤሎችን ይፈትሻል። አንድ ጣቢያ የእርስዎን የይለፍ ቃል ለመስረቅ ከሞከረ ወይም ጎጂ ፋይል ካወረደ Chrome እንዲሁም የገጽ ይዘትን ክፍሎችም ጨምሮ ዩአርኤሎችን ወደ የጥንቃቄ አሰሳ መላክ ሊልክ ይችላል።</translation> <translation id="641643625718530986">አትም…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">የመጀመሪያው የስምረት ውቅረት አላለቀም። ስምረት ጠፍቷል።</translation> <translation id="7022756207310403729">በአሳሽ ውስጥ ክፈት</translation> <translation id="702463548815491781">TalkBack ወይም መዳረሻ ቀይር ሲበሩ የሚመከር</translation> +<translation id="7027549951530753705">ወደነበረበት የተመለሰው በ<ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">የይለፍ ቃላት</translation> <translation id="703523980599857277">መነሻ ገጹን ይቀይሩ</translation> <translation id="7054588988317389591">የምስል መግለጫዎችን ያግኙ?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> እና ተጨማሪ ጣቢያዎች</translation> <translation id="8327155640814342956">ለምርጥ የአሰሳ ተሞክሮ ለማግኘት Chromeን ለማዘመን ይክፈቱ</translation> <translation id="8349013245300336738">ጥቅም ላይ በዋለው የውሂብ መጠን ደርድር</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> ውርዶች ወደነበሩበት ተመልሰዋል</translation> <translation id="8364299278605033898">ታዋቂ ድር ጣቢያዎችን ይመልከቱ</translation> <translation id="8368027906805972958">ያልታወቀ ወይም የማይደገፍ መሣሪያ (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> ዝግጁ ነው።</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">እንደገና ይግቡ</translation> <translation id="9155898266292537608">እንዲሁም አንድ ቃል ላይ በፍጥነት መታ በማድረግ ፍለጋ ማድረግ ይችላሉ</translation> <translation id="9169507124922466868">የዳሰሳ ታሪክ በግማሽ ተከፍቷል</translation> +<translation id="9191031968346938109">አክል ወደ…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{ከ1 ደቂቃ በፊት ተፈትሿል}one{ከ# ደቂቃዎች በፊት ተፈትሿል}other{ከ# ደቂቃዎች በፊት ተፈትሿል}}</translation> <translation id="9204836675896933765">1 ፋይል ቀርቷል</translation> <translation id="9206873250291191720">አ</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">ስህተት፦ <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">የይለፍ ሐረግ ያስገቡ</translation> <translation id="95817756606698420">Chrome በቻይና ውስጥ <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" />ን ለፍለጋ መጠቀም ይችላል። ይህን በ<ph name="BEGIN_LINK" />ቅንብሮች<ph name="END_LINK" /> ውስጥ መጠቀም ይችላሉ።</translation> +<translation id="962979164594783469">ይህን መተግበሪያ ይጫኑ</translation> <translation id="968900484120156207">እርስዎ የሚጎበኟቸው ገጾች እዚህ ላይ ብቅ ይላሉ</translation> <translation id="970715775301869095"><ph name="MINUTES" /> ደቂቃዎች ይቀራሉ</translation> <translation id="974555521953189084">ስምረትን ለመጀመር የይለፍ ሐረግዎን ያስገቡ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb index eb7a731c..0674409b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">الآن</translation> <translation id="2175927920773552910">رمز الاستجابة السريعة</translation> <translation id="218608176142494674">المشاركة</translation> +<translation id="2195339740518523951">الحصول على أعلى مستوى من الحماية في متصفِّح Chrome</translation> <translation id="2227444325776770048">المتابعة باسم <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">خدمات Google والمزامنة</translation> <translation id="2239812875700136898">يمكنك التحكُّم بقصصك عبر زر "خيارات الاقتراحات".</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">قد تستخدم Google سجلّك لتخصيص البحث وخدمات Google الأخرى.</translation> <translation id="2898264748040935573">تعديل كلمة المرور المخزنة</translation> <translation id="2900528713135656174">إنشاء حدث</translation> +<translation id="2901411048554510387">عرض اقتراحات لموقع <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">قائمة بالأجهزة التي يمكن مشاركة علامة تبويب معها، مفتوحة على طول الشاشة.</translation> <translation id="2905036901251765993">للمشاركة مع المستخدمين القريبين، اسمح لهم بمسح رمز الاستجابة السريعة ضوئيًا</translation> <translation id="2909615210195135082">النظام الأساسي لإشعارات Google</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">نقل إلى...</translation> <translation id="4411535500181276704">الوضع البسيط</translation> <translation id="4415276339145661267">إدارة حسابك على Google</translation> +<translation id="4427306783828095590">يؤدي تفعيل إعداد "الحماية المُحسَّنة" إلى حظر التصيّد الاحتيالي والبرامج الضارّة.</translation> <translation id="4440958355523780886">صفحة بسيطة تقدِّمها Google. يُرجى النقر لتحميل الصفحة الأصلية.</translation> <translation id="4452411734226507615">إغلاق علامة التبويب <ph name="TAB_TITLE" /></translation> <translation id="4452548195519783679">أُضيفَت إشارة مرجعية إلى <ph name="FOLDER_NAME" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb index 64f401a..40566ad 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -802,6 +802,7 @@ <translation id="6783942555455976443">পরে দেখার জন্য এই পৃষ্ঠা সেভ করে রাখুন ও রিমাইন্ডার পান</translation> <translation id="6811034713472274749">পৃষ্ঠাটি এখন দেখতে পাবেন</translation> <translation id="6820686453637990663">CVC</translation> +<translation id="6824899148643461612"><ph name="TAB_TITLE" />, ট্যাব বেছে নেওয়া হয়েছে</translation> <translation id="6845325883481699275">Chrome-এর নিরাপত্তা উন্নত করতে সাহায্য করুন</translation> <translation id="6846298663435243399">লোড হচ্ছে...</translation> <translation id="6850409657436465440">ডাউনলোডটি এখনও চলছে</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb index 8e12226..ac23e8b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Snimanje ekrana</translation> <translation id="1111673857033749125">Oznake koje sačuvate na drugim uređajima će se pojaviti ovdje.</translation> <translation id="1113597929977215864">Prikaži pojednostavljeni prikaz</translation> +<translation id="1123070903960493543">Kako ostvarujete interakciju s Chromeom, odabrane postavke, detalji o padovima Chromea</translation> <translation id="1126809382673880764">Ne štiti vas od opasnih web lokacija, preuzimanja i ekstenzija. I dalje ćete dobijati zaštitu Sigurno pregledanje, tamo gdje je dostupna, na drugim Googleovim uslugama kao što su Gmail i Pretraživanje.</translation> <translation id="1129510026454351943">Detalji: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Čeka se jedno preuzimanje.}one{Čeka se # preuzimanje.}few{Čekaju se # preuzimanja.}other{Čeka se # preuzimanja.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nije moguće podijeliti sadržaj <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Preuzimanje fajla <ph name="FILE_NAME" /> nije uspjelo zbog problema sa serverom.</translation> <translation id="1506061864768559482">Pretraživač</translation> +<translation id="151267239139452619">Dodaj u Preuzimanja</translation> <translation id="1513352483775369820">Oznake i web historija</translation> <translation id="1513858653616922153">Izbriši lozinku</translation> <translation id="1521774566618522728">Aktivan danas</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Sačuvano je <ph name="DATA" /></translation> <translation id="213279576345780926">Zatvorena je kartica <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj na početni ekran</translation> +<translation id="214888715418183969">Odaberite šta vam odgovara da dijelite s Chromeom. Pokazatelji koje dijelite će se koristiti da se poboljšaju funkcije, rad i stabilnost Chromea.</translation> <translation id="2154484045852737596">Uredi karticu</translation> <translation id="2154710561487035718">Kopiranje URL-a</translation> <translation id="2156074688469523661">Preostale web lokacije (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR kôd</translation> <translation id="218608176142494674">Dijeljenje</translation> <translation id="2195339740518523951">Odaberite maksimalnu sigurnost koju nudi Chrome</translation> +<translation id="2200113223741723867">Upravljajte dijeljenjem podataka o korištenju</translation> <translation id="2227444325776770048">Nastavite kao <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinhronizacija i Googleove usluge</translation> <translation id="2239812875700136898">Kontrolirajte priče pomoću dugmeta Opcije za Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Ova postavka je onemogućena jer je uključen roditeljski nadzor</translation> <translation id="3771694256347217732">Googleovi Uslovi korištenja usluge</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Uključite Bluetooth<ph name="END_LINK" /> da omogućite uparivanje</translation> +<translation id="3773856050682458546">Osnovni podaci te informacije o web lokacijama koje posjećujete i aplikacijama koje koristite</translation> <translation id="3775705724665058594">Pošaljite na svoje uređaje</translation> <translation id="3778956594442850293">Dodano na Početni ekran</translation> <translation id="3789841737615482174">Instaliraj</translation> <translation id="3810838688059735925">Videozapis</translation> <translation id="3810973564298564668">Upravljaj</translation> <translation id="3819178904835489326">Broj izbrisanih preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> kao sigurnosni ključ</translation> <translation id="3856096718352044181">Potvrdite da je ovo važeći pružalac usluga ili pokušajte ponovo kasnije</translation> <translation id="3861633093716975811">Popularni videozapisi</translation> <translation id="3892148308691398805">Kopiraj tekst</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Vidite rezultate instant pretraživanja u ovom panelu</translation> <translation id="4000212216660919741">Početna stranica van mreže</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}few{# h}other{# h}}</translation> +<translation id="4045764304651014138">Podaci o korištenju</translation> <translation id="4056223980640387499">Sepija</translation> +<translation id="4057643060762047384">Dodaj u:</translation> <translation id="4060598801229743805">Opcije su dostupne pri vrhu zaslona</translation> <translation id="4062305924942672200">Pravne informacije</translation> <translation id="4084682180776658562">Oznaka</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Dozvoli</translation> <translation id="5040262127954254034">Privatnost</translation> <translation id="5087580092889165836">Dodaj karticu</translation> +<translation id="5091249083535528968">Prošireni podaci o korištenju</translation> <translation id="509429900233858213">Došlo je do greške.</translation> <translation id="510275257476243843">Još 1 sat</translation> <translation id="5123685120097942451">Anonimna kartica</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Dijeli link</translation> <translation id="5836192821815272682">Preuzimanje ažuriranja Chromea…</translation> <translation id="5853623416121554550">pauzirano</translation> +<translation id="5854512288214985237">Statistika i izvještaji o padovima aplikacije se ne šalju Googleu</translation> <translation id="5854790677617711513">Starije od 30 dana</translation> <translation id="5855546874025048181">Preciziranje: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ne može uključiti Bluetooth adapter</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Odjavite se i isključite sinhronizaciju</translation> <translation id="6312687380483398334">Web aplikacije (tiho)</translation> <translation id="6316139424528454185">Verzija Androida nije podržana</translation> +<translation id="6321526113093607004">Dodaj u Oznake</translation> <translation id="6324034347079777476">Sinhronizacija Android sistema je onemogućena</translation> <translation id="6333140779060797560">Dijeli pomoću aplikacije <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Enkripcija</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> na <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Uredite oznaku</translation> <translation id="6406506848690869874">Sinhronizacija</translation> +<translation id="6410404864818553978">Osnovni podaci o korištenju</translation> <translation id="6410883413783534063">Otvorite kartice da istovremeno posjetite različite stranice</translation> <translation id="6412673304250309937">Provjerava URL-ove s listom nesigurnih web lokacija pohranjenih u Chromeu. Ako web lokacija pokuša ukrasti vašu lozinku, ili kada preuzimate štetan fajl, Chrome može slati i URL-ove, uključujući dijelove sadržaja stranice, u Sigurno pregledanje.</translation> <translation id="641643625718530986">Štampaj…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Početno postavljanje sinhroniziranja nije završeno. Sinhroniziranje je isključeno.</translation> <translation id="7022756207310403729">Otvori u pregledniku</translation> <translation id="702463548815491781">Preporučeno kada je uključena funkcija TalkBack ili prekidač za pristup.</translation> +<translation id="7027549951530753705">Vraćeno: <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Lozinke</translation> <translation id="703523980599857277">Promijeni početnu stranicu</translation> <translation id="7054588988317389591">Preuzeti opise slika?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> i još web lokacija</translation> <translation id="8327155640814342956">Za najbolje iskustvo pregledanja, otvorite da ažurirate Chrome</translation> <translation id="8349013245300336738">Poredaj po količini korištenih podataka</translation> +<translation id="835847953965672673">Broj vraćenih preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="8364299278605033898">Pogledajte popularne web lokacije</translation> <translation id="8368027906805972958">Nepoznat ili nepodržan uređaj (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Jezik <ph name="LANG" /> je spreman.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Prijavi se ponovo</translation> <translation id="9155898266292537608">Također možete pretraživati brzim dodirom riječi</translation> <translation id="9169507124922466868">Historija navigacije je napola otvorena</translation> +<translation id="9191031968346938109">Dodaj u…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Provjereno prije 1 minutu}one{Provjereno prije # minutu}few{Provjereno prije # minute}other{Provjereno prije # minuta}}</translation> <translation id="9204836675896933765">Ostao je još 1 fajl</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Greška: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Unesite pristupni izraz</translation> <translation id="95817756606698420">Chrome može koristiti <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> za pretraživanje u Kini. To možete promijeniti u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalirajte ovu aplikaciju</translation> <translation id="968900484120156207">Stranice koje posjetite će se pojaviti ovdje</translation> <translation id="970715775301869095">Ostalo je još <ph name="MINUTES" /> min</translation> <translation id="974555521953189084">Unesite pristupni izraz da počnete sinhronizaciju</translation>
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 b4463d32..2f7750d1 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
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Captura de pantalla</translation> <translation id="1111673857033749125">Les adreces d'interès desades als altres dispositius es mostraran aquí.</translation> <translation id="1113597929977215864">Mostra la visualització simplificada</translation> +<translation id="1123070903960493543">Com interacciones amb Chrome, les opcions de configuració que has seleccionat i detalls sobre els bloquejos de Chrome</translation> <translation id="1126809382673880764">No et protegeix contra baixades, extensions ni llocs web perillosos. Continuaràs obtenint protecció mitjançant Navegació segura, sempre que estigui disponible, en altres serveis de Google, com ara Gmail i la Cerca.</translation> <translation id="1129510026454351943">Detalls: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Hi ha 1 baixada pendent.}other{Hi ha # baixades pendents.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">No es pot compartir <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">No s'ha pogut baixar <ph name="FILE_NAME" /> a causa de problemes amb el servidor.</translation> <translation id="1506061864768559482">Motor de cerca</translation> +<translation id="151267239139452619">Afegeix a Baixades</translation> <translation id="1513352483775369820">Adreces interès i historial web</translation> <translation id="1513858653616922153">Suprimeix la contrasenya</translation> <translation id="1521774566618522728">Actiu avui</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Dades estalviades: <ph name="DATA" /></translation> <translation id="213279576345780926">Pestanya <ph name="TAB_TITLE" /> tancada</translation> <translation id="2139186145475833000">Afegeix a pantalla d'inici</translation> +<translation id="214888715418183969">Tria quina informació vols compartir amb Chrome. Les mètriques que comparteixis s'utilitzaran per ajudar a millorar les funcions, el rendiment i l'estabilitat de Chrome.</translation> <translation id="2154484045852737596">Edita la targeta</translation> <translation id="2154710561487035718">Copia l'URL</translation> <translation id="2156074688469523661">Llocs restants (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Codi QR</translation> <translation id="218608176142494674">Compartició</translation> <translation id="2195339740518523951">Obtén la seguretat més efectiva de Chrome</translation> +<translation id="2200113223741723867">Gestiona la compartició de les dades d'ús</translation> <translation id="2227444325776770048">Continua com a <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sincronització i serveis de Google</translation> <translation id="2239812875700136898">Controla les teves històries amb el botó Opcions per a Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Aquesta opció de configuració està desactivada perquè els controls parentals estan activats</translation> <translation id="3771694256347217732">Condicions del servei de Google</translation> <translation id="3773755127849930740">Per permetre la vinculació, <ph name="BEGIN_LINK" />activa el Bluetooth<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">Dades bàsiques i informació sobre els llocs web que visites i les aplicacions que utilitzes</translation> <translation id="3775705724665058594">Envia als teus dispositius</translation> <translation id="3778956594442850293">S'ha afegit a la pantalla d'inici</translation> <translation id="3789841737615482174">Instal·la</translation> <translation id="3810838688059735925">Vídeo</translation> <translation id="3810973564298564668">Gestiona</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> baixades suprimides</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> com a clau de seguretat</translation> <translation id="3856096718352044181">Verifica que aquest és un proveïdor vàlid o torna-ho a provar més tard</translation> <translation id="3861633093716975811">Vídeos populars</translation> <translation id="3892148308691398805">Copia el text</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Consulta els resultats de la cerca instantània en aquest tauler</translation> <translation id="4000212216660919741">Pàgina d'inici sense connexió</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation> +<translation id="4045764304651014138">Dades d'ús</translation> <translation id="4056223980640387499">Sèpia</translation> +<translation id="4057643060762047384">Afegeix a:</translation> <translation id="4060598801229743805">Hi ha opcions disponibles a prop de la part superior de la pantalla</translation> <translation id="4062305924942672200">Informació legal</translation> <translation id="4084682180776658562">Adreça d'interès</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Permet</translation> <translation id="5040262127954254034">Privadesa</translation> <translation id="5087580092889165836">Afegeix una targeta</translation> +<translation id="5091249083535528968">Dades d'ús ampliades</translation> <translation id="509429900233858213">S'ha produït un error.</translation> <translation id="510275257476243843">Queda 1 hora</translation> <translation id="5123685120097942451">Pestanya d'incògnit</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Comparteix l'enllaç</translation> <translation id="5836192821815272682">S'està baixant l'actualització de Chrome…</translation> <translation id="5853623416121554550">en pausa</translation> +<translation id="5854512288214985237">No s'envien informes d'error ni estadístiques a Google</translation> <translation id="5854790677617711513">Anterior a 30 dies</translation> <translation id="5855546874025048181">Defineix millor: "<ph name="REFINE_TEXT" />"</translation> <translation id="5858741533101922242">Chrome no pot activar l'adaptador Bluetooth</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Tanca la sessió i desactiva la sincronització</translation> <translation id="6312687380483398334">Aplicacions web (en mode silenciós)</translation> <translation id="6316139424528454185">Versió d'Android no admesa</translation> +<translation id="6321526113093607004">Afegeix a Adreces d'interès</translation> <translation id="6324034347079777476">La sincronització del sistema Android està desactivada</translation> <translation id="6333140779060797560">Comparteix mitjançant <ph name="APPLICATION" />.</translation> <translation id="6337234675334993532">Encriptació</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> a <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Edita l'adreça d'interès</translation> <translation id="6406506848690869874">Sincronització</translation> +<translation id="6410404864818553978">Dades d'ús bàsiques</translation> <translation id="6410883413783534063">Obre pestanyes per visitar diverses pàgines al mateix temps</translation> <translation id="6412673304250309937">Compara els URL amb una llista de llocs web no segurs emmagatzemada a Chrome. Si un lloc web prova de robar-te la contrasenya o si baixes un fitxer maliciós, és possible que Chrome també n'enviï els URL, inclosos fragments de contingut de les pàgines, a Navegació segura.</translation> <translation id="641643625718530986">Imprimeix…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">La configuració de la sincronització inicial no ha finalitzat. La sincronització està desactivada.</translation> <translation id="7022756207310403729">Obre al navegador</translation> <translation id="702463548815491781">Es recomana quan TalkBack o l'accés amb interruptors estan activats</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> s'ha restaurat</translation> <translation id="7029809446516969842">Contrasenyes</translation> <translation id="703523980599857277">Canvia la pàgina d'inici</translation> <translation id="7054588988317389591">Vols obtenir descripcions de les imatges?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> i més llocs web</translation> <translation id="8327155640814342956">Per gaudir de la millor experiència de navegació, obre Chrome per actualitzar-lo</translation> <translation id="8349013245300336738">Ordena per quantitat de dades utilitzades</translation> +<translation id="835847953965672673">S'han restaurat <ph name="NUMBER_OF_DOWNLOADS" /> baixades</translation> <translation id="8364299278605033898">Mostra llocs web populars</translation> <translation id="8368027906805972958">Dispositiu desconegut o no admès (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> ja està a punt.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Torna a iniciar la sessió</translation> <translation id="9155898266292537608">També pots fer un toc ràpid en una paraula per fer cerques</translation> <translation id="9169507124922466868">L'historial de navegació està obert fins a la meitat</translation> +<translation id="9191031968346938109">Afegeix a…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{S'ha comprovat fa 1 minut}other{S'ha comprovat fa # minuts}}</translation> <translation id="9204836675896933765">Queda 1 fitxer</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Introduïu la frase de contrasenya</translation> <translation id="95817756606698420">Chrome pot utilitzar <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> per fer cerques a la Xina. Per canviar-ho, ves a <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instal·la aquesta aplicació</translation> <translation id="968900484120156207">Les pàgines que visitis es mostraran aquí</translation> <translation id="970715775301869095">Queden <ph name="MINUTES" /> minuts</translation> <translation id="974555521953189084">Introdueix la teva frase de contrasenya per iniciar la sincronització</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index ff7ba051..52ba08c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -234,7 +234,7 @@ <translation id="2723001399770238859">Audio</translation> <translation id="2728754400939377704">Nach Website sortieren</translation> <translation id="2744248271121720757">Tippen Sie auf ein Wort, um eine Sofortsuche zu starten oder weitere Aktionen anzuzeigen</translation> -<translation id="2760989362628427051">Dunkles Design verwenden, wenn beim Gerät das dunkle Design oder der Stromsparmodus aktiviert ist</translation> +<translation id="2760989362628427051">Dunkles Design verwenden, wenn beim Gerät das dunkle Design oder der Energiesparmodus aktiviert ist</translation> <translation id="2762000892062317888">gerade eben</translation> <translation id="2776236159752647997">Weitere Einstellungen in Verbindung mit Datenschutz, Sicherheit und der Erhebung von Daten finden Sie unter <ph name="BEGIN_LINK" />Google-Dienste<ph name="END_LINK" /></translation> <translation id="2777555524387840389"><ph name="SECONDS" /> Sekunden übrig</translation> @@ -903,7 +903,7 @@ <translation id="756809126120519699">Gelöschte Chrome-Daten</translation> <translation id="7577900504646297215">Interessen verwalten</translation> <translation id="757855969265046257">{FILES,plural, =1{<ph name="FILES_DOWNLOADED_ONE" /> Datei heruntergeladen}other{<ph name="FILES_DOWNLOADED_MANY" /> Dateien heruntergeladen}}</translation> -<translation id="7588219262685291874">Dunkles Design verwenden, wenn Stromsparmodus des Geräts aktiviert ist</translation> +<translation id="7588219262685291874">Dunkles Design verwenden, wenn Energiesparmodus des Geräts aktiviert ist</translation> <translation id="7593557518625677601">Einstellungen öffnen und Systemsynchr. aktivieren, um Chrome-Synchr. zu starten</translation> <translation id="7596558890252710462">Betriebssystem</translation> <translation id="7605594153474022051">Synchronisierung funktioniert nicht</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 24baad0f..42375b56 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Λήψη οθόνης</translation> <translation id="1111673857033749125">Οι σελιδοδείκτες που είναι αποθηκευμένοι σε άλλες συσκευές θα εμφανίζονται εδώ.</translation> <translation id="1113597929977215864">Εμφάνιση απλοποιημένης προβολής</translation> +<translation id="1123070903960493543">Ο τρόπος με τον οποίο αλληλεπιδράτε με το Chrome, οι ρυθμίσεις που έχετε επιλέξει, οι λεπτομέρειες για τα σφάλματα του Chrome.</translation> <translation id="1126809382673880764">Δεν σας προστατεύει από επικίνδυνους ιστοτόπους, λήψεις και επεκτάσεις. Θα εξακολουθείτε να λαμβάνετε προστασία από την Ασφαλή περιήγηση, όπου είναι διαθέσιμη, σε άλλες Υπηρεσίες Google, όπως το Gmail και η Αναζήτηση.</translation> <translation id="1129510026454351943">Λεπτομέρειες: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 λήψη σε εκκρεμότητα.}other{# λήψεις σε εκκρεμότητα.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Δεν είναι δυνατή η κοινοποίηση <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Η λήψη του αρχείου <ph name="FILE_NAME" /> απέτυχε λόγω προβλημάτων στον διακομιστή.</translation> <translation id="1506061864768559482">Μηχανή αναζήτησης</translation> +<translation id="151267239139452619">Προσθήκη στις λήψεις</translation> <translation id="1513352483775369820">Σελιδοδείκτες και ιστορικό ιστού</translation> <translation id="1513858653616922153">Διαγραφή κωδικού πρόσβασης</translation> <translation id="1521774566618522728">Ενεργή σήμερα</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Αποθηκεύτηκαν <ph name="DATA" /></translation> <translation id="213279576345780926">Η καρτέλα <ph name="TAB_TITLE" /> έκλεισε</translation> <translation id="2139186145475833000">Προσθήκη στην αρχική οθόνη</translation> +<translation id="214888715418183969">Επιλέξτε τα δεδομένα που νιώθετε άνετα να κοινοποιείτε στο Chrome. Οι μετρήσεις που θα κοινοποιήσετε θα χρησιμοποιηθούν για τη βελτίωση των λειτουργιών, της απόδοσης και της σταθερότητας του Chrome.</translation> <translation id="2154484045852737596">Επεξεργασία κάρτας</translation> <translation id="2154710561487035718">Αντιγραφή διεύθυνσης URL</translation> <translation id="2156074688469523661">Ιστότοποι που απομένουν (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Κωδικός QR</translation> <translation id="218608176142494674">Κοινοποίηση</translation> <translation id="2195339740518523951">Λάβετε την ισχυρότερη ασφάλεια του Chrome</translation> +<translation id="2200113223741723867">Διαχείριση κοινοποίησης δεδομένων χρήσης</translation> <translation id="2227444325776770048">Συνέχεια ως <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Συγχρονισμός και υπηρ. Google</translation> <translation id="2239812875700136898">Ελέγξτε τις ιστορίες σας από το κουμπί Επιλογές για Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Αυτή η ρύθμιση είναι απενεργοποιημένη επειδή είναι ενεργοποιημένοι οι γονικοί έλεγχοι.</translation> <translation id="3771694256347217732">Όροι Παροχής Υπηρεσιών της Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Ενεργοποιήστε το Bluetooth<ph name="END_LINK" />, για να επιτρέψετε τη σύζευξη</translation> +<translation id="3773856050682458546">Τα βασικά δεδομένα και οι πληροφορίες σχετικά με τους ιστοτόπους που επισκέπτεστε και τις εφαρμογές που χρησιμοποιείτε.</translation> <translation id="3775705724665058594">Αποστολή στις συσκευές σας</translation> <translation id="3778956594442850293">Προστέθηκε στην αρχική οθόνη</translation> <translation id="3789841737615482174">Εγκατάσταση</translation> <translation id="3810838688059735925">Βίντεο</translation> <translation id="3810973564298564668">Διαχείριση</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> λήψεις διαγράφηκαν</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> ως κλειδί ασφαλείας</translation> <translation id="3856096718352044181">Βεβαιωθείτε ότι πρόκειται για έγκυρο πάροχο ή δοκιμάστε ξανά αργότερα</translation> <translation id="3861633093716975811">Δημοφιλή βίντεο</translation> <translation id="3892148308691398805">Αντιγραφή κειμένου</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Προβολή αποτελεσμάτων αναζήτησης Instant σε αυτό το πλαίσιο</translation> <translation id="4000212216660919741">Η αρχική σελίδα είναι εκτός σύνδεσης</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ω.}other{# ω.}}</translation> +<translation id="4045764304651014138">Δεδομένα χρήσης</translation> <translation id="4056223980640387499">Σέπια</translation> +<translation id="4057643060762047384">Προσθήκη σε:</translation> <translation id="4060598801229743805">Διαθέσιμες επιλογές κοντά στην κορυφή της οθόνης</translation> <translation id="4062305924942672200">Νομικές πληροφορίες</translation> <translation id="4084682180776658562">Σελιδοδείκτης</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Επιτρέπεται</translation> <translation id="5040262127954254034">Απόρρητο</translation> <translation id="5087580092889165836">Προσθήκη κάρτας</translation> +<translation id="5091249083535528968">Εκτεταμένα δεδομένα χρήσης</translation> <translation id="509429900233858213">Παρουσιάστηκε σφάλμα.</translation> <translation id="510275257476243843">Απομένει 1 ώρα</translation> <translation id="5123685120097942451">Καρτέλα ανώνυμης περιήγησης</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Κοινοποίηση συνδέσμου</translation> <translation id="5836192821815272682">Λήψη Ενημέρωσης Chrome…</translation> <translation id="5853623416121554550">σε παύση</translation> +<translation id="5854512288214985237">Δεν αποστέλλονται στατιστικά στοιχεία ή αναφορές σφαλμάτων στην Google.</translation> <translation id="5854790677617711513">Παλαιότερο από 30 ημέρες</translation> <translation id="5855546874025048181">Συγκεκριμενοποίηση: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Το Chrome δεν είναι δυνατό να ενεργοποιήσει τον προσαρμογέα Bluetooth</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Αποσύνδεση και απενεργοποίηση συγχρονισμού</translation> <translation id="6312687380483398334">Εφαρμογές ιστού (αθόρυβα)</translation> <translation id="6316139424528454185">Μη υποστηρ. έκδοση Android</translation> +<translation id="6321526113093607004">Προσθήκη στους σελιδοδείκτες</translation> <translation id="6324034347079777476">Ο συγχρονισμός συστήματος Android απενεργοποιήθηκε</translation> <translation id="6333140779060797560">Μοιραστείτε μέσω <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Κρυπτογράφηση</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Επεξεργασία σελιδοδείκτη</translation> <translation id="6406506848690869874">Συγχρονισμός</translation> +<translation id="6410404864818553978">Βασικά δεδομένα χρήσης</translation> <translation id="6410883413783534063">Ανοίξτε καρτέλες για να επισκεφτείτε διαφορετικές σελίδες ταυτόχρονα.</translation> <translation id="6412673304250309937">Ελέγχει αν τα URL περιλαμβάνονται στην λίστα μη ασφαλών ιστοτόπων που είναι αποθηκευμένη στο Chrome. Εάν ένας ιστότοπος προσπαθήσει να κλέψει τον κωδικό σας ή όταν κάνετε λήψη ενός επιβλαβούς αρχείου, το Chrome μπορεί επίσης να στείλει URL, καθώς και τμήματα του περιεχομένου της σελίδας, στην Ασφαλή περιήγηση.</translation> <translation id="641643625718530986">Εκτύπωση…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Η αρχική ρύθμιση του συγχρονισμού δεν τελείωσε. Ο συγχρονισμός είναι απενεργοποιημένος.</translation> <translation id="7022756207310403729">Άνοιγμα σε πρόγρ. περιήγησης</translation> <translation id="702463548815491781">Συνιστάται όταν έχει ενεργοποιηθεί το TalkBack ή η πρόσβαση με διακόπτη</translation> +<translation id="7027549951530753705">Έγινε επαναφορά του στοιχείου <ph name="ITEM_TITLE" />.</translation> <translation id="7029809446516969842">Κωδ. πρόσβασης</translation> <translation id="703523980599857277">Αλλαγή αρχικής σελίδας</translation> <translation id="7054588988317389591">Λήψη περιγραφών εικόνων;</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> και άλλους ιστοτόπους</translation> <translation id="8327155640814342956">Για την καλύτερη δυνατή εμπειρία περιήγησης, ανοίξτε το Chrome για να το ενημερώσετε</translation> <translation id="8349013245300336738">Ταξινόμηση κατά όγκο δεδομένων που χρησιμοποιήθηκαν</translation> +<translation id="835847953965672673">Έγινε επαναφορά <ph name="NUMBER_OF_DOWNLOADS" /> λήψεων.</translation> <translation id="8364299278605033898">Δείτε δημοφιλείς ιστοτόπους</translation> <translation id="8368027906805972958">Άγνωστη ή μη υποστηριζόμενη συσκευή (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Η γλώσσα <ph name="LANG" /> είναι έτοιμη.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Συνδεθείτε ξανά</translation> <translation id="9155898266292537608">Επίσης, μπορείτε να κάνετε αναζήτηση με ένα γρήγορο πάτημα σε μια λέξη</translation> <translation id="9169507124922466868">Το ιστορικό πλοήγησης έχει ανοίξει κατά το ήμισυ</translation> +<translation id="9191031968346938109">Προσθήκη σε…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Ελέγχθηκε πριν από ένα λεπτό}other{Ελέγχθηκε πριν από # λεπτά}}</translation> <translation id="9204836675896933765">1 αρχείο απομένει</translation> <translation id="9206873250291191720">Α</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Σφάλμα: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Εισαγωγή φράσης πρόσβασης</translation> <translation id="95817756606698420">Το Chrome μπορεί να χρησιμοποιήσει το <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> για την αναζήτηση στην Κίνα. Μπορείτε να αλλάξετε αυτήν την επιλογή στις <ph name="BEGIN_LINK" />Ρυθμίσεις<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Εγκατάσταση αυτής της εφαρμογής</translation> <translation id="968900484120156207">Εδώ εμφανίζονται οι σελίδες που επισκέπτεστε</translation> <translation id="970715775301869095">Απομένουν <ph name="MINUTES" /> λεπτά</translation> <translation id="974555521953189084">Εισαγάγετε τη φράση πρόσβασης για να ξεκινήσετε τον συγχρονισμό.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb index 49785d3..8d14f0f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Screen Capture</translation> <translation id="1111673857033749125">Bookmarks saved on your other devices will appear here.</translation> <translation id="1113597929977215864">Show simplified view</translation> +<translation id="1123070903960493543">How you interact with Chrome, settings that you’ve selected, details of Chrome crashes</translation> <translation id="1126809382673880764">Does not protect you against dangerous websites, downloads and extensions. You’ll still get Safe Browsing protection, where available, in other Google services, like Gmail and Search.</translation> <translation id="1129510026454351943">Details: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download pending.}other{# downloads pending.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Can't share <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> download failed due to server issues.</translation> <translation id="1506061864768559482">Search engine</translation> +<translation id="151267239139452619">Add to downloads</translation> <translation id="1513352483775369820">Bookmarks and web history</translation> <translation id="1513858653616922153">Delete password</translation> <translation id="1521774566618522728">Active today</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> saved</translation> <translation id="213279576345780926">Closed <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Add to Home screen</translation> +<translation id="214888715418183969">Choose what you’re comfortable sharing with Chrome. The metrics that you share will be used to help improve Chrome’s features, performance and stability.</translation> <translation id="2154484045852737596">Edit card</translation> <translation id="2154710561487035718">Copy URL</translation> <translation id="2156074688469523661">Remaining sites (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR code</translation> <translation id="218608176142494674">Sharing</translation> <translation id="2195339740518523951">Get Chrome’s strongest security</translation> +<translation id="2200113223741723867">Manage usage data sharing</translation> <translation id="2227444325776770048">Continue as <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sync and Google services</translation> <translation id="2239812875700136898">Control your stories from the 'Options for Discover' button</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">This setting is disabled because parental controls are on</translation> <translation id="3771694256347217732">Google Terms of Service</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Turn on Bluetooth<ph name="END_LINK" /> to allow pairing</translation> +<translation id="3773856050682458546">Basic data plus information about the websites that you visit and apps that you use</translation> <translation id="3775705724665058594">Send to your devices</translation> <translation id="3778956594442850293">Added to Home screen</translation> <translation id="3789841737615482174">Install</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Manage</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads deleted</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> as a security key</translation> <translation id="3856096718352044181">Please verify that this is a valid provider or try again later</translation> <translation id="3861633093716975811">Popular videos</translation> <translation id="3892148308691398805">Copy text</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">See instant search results in this panel</translation> <translation id="4000212216660919741">Offline Home</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# hr}other{# hrs}}</translation> +<translation id="4045764304651014138">Usage data</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Add to:</translation> <translation id="4060598801229743805">Options available near the top of the screen</translation> <translation id="4062305924942672200">Legal information</translation> <translation id="4084682180776658562">Bookmark</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Allow</translation> <translation id="5040262127954254034">Privacy</translation> <translation id="5087580092889165836">Add card</translation> +<translation id="5091249083535528968">Extended usage data</translation> <translation id="509429900233858213">An error occurred.</translation> <translation id="510275257476243843">1 hour left</translation> <translation id="5123685120097942451">Incognito tab</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Share link</translation> <translation id="5836192821815272682">Downloading Chrome Update…</translation> <translation id="5853623416121554550">paused</translation> +<translation id="5854512288214985237">No statistics or crash reports are sent to Google</translation> <translation id="5854790677617711513">Older than 30 days</translation> <translation id="5855546874025048181">Refine: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome is unable to turn on Bluetooth adaptor</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Sign out and turn off sync</translation> <translation id="6312687380483398334">Web apps (quiet)</translation> <translation id="6316139424528454185">Android version is unsupported</translation> +<translation id="6321526113093607004">Add to Bookmarks</translation> <translation id="6324034347079777476">Android system sync disabled</translation> <translation id="6333140779060797560">Share via <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Encryption</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> on <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Edit bookmark</translation> <translation id="6406506848690869874">Sync</translation> +<translation id="6410404864818553978">Basic usage data</translation> <translation id="6410883413783534063">Open tabs to visit different pages at the same time</translation> <translation id="6412673304250309937">Checks URLs with a list of unsafe sites stored in Chrome. If a site tries to steal your password, or when you download a harmful file, Chrome may also send URLs, including bits of page content, to Safe Browsing.</translation> <translation id="641643625718530986">Print…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Initial sync setup was not finished. Sync is off.</translation> <translation id="7022756207310403729">Open in browser</translation> <translation id="702463548815491781">Recommended when TalkBack or Switch Access are on</translation> +<translation id="7027549951530753705">Restored <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Passwords</translation> <translation id="703523980599857277">Change home page</translation> <translation id="7054588988317389591">Get image descriptions?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> and more sites</translation> <translation id="8327155640814342956">For the best browsing experience, open to update Chrome</translation> <translation id="8349013245300336738">Sort by amount of data used</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> downloads restored</translation> <translation id="8364299278605033898">See popular websites</translation> <translation id="8368027906805972958">Unknown or unsupported device (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> is ready.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Sign in again</translation> <translation id="9155898266292537608">You can also search with a quick tap on a word</translation> <translation id="9169507124922466868">Navigation history is half-opened</translation> +<translation id="9191031968346938109">Add to…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Checked 1 minute ago}other{Checked # minutes ago}}</translation> <translation id="9204836675896933765">1 file left</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Error: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Enter passphrase</translation> <translation id="95817756606698420">Chrome can use <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> for search in China. You can change this in <ph name="BEGIN_LINK" />Settings<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Install this app</translation> <translation id="968900484120156207">Pages that you visit appear here</translation> <translation id="970715775301869095"><ph name="MINUTES" /> mins left</translation> <translation id="974555521953189084">Enter your passphrase to start sync</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb index f79c72a..1fb7f32 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">گرفتن عکس از صفحه</translation> <translation id="1111673857033749125">نشانکهای ذخیرهشده در سایر دستگاههای شما در اینجا نشان داده میشوند.</translation> <translation id="1113597929977215864">نمایش نمای سادهشده</translation> +<translation id="1123070903960493543">نحوه تعامل شما با Chrome، تنظیماتی که انتخاب کردهاید، جزئیات خرابیهای Chrome</translation> <translation id="1126809382673880764">دربرابر وبسایتها، بارگیریها، و افزونههای خطرناک از شما محافظت نمیکند. درصورت موجود بودن، همچنان ویژگی حفاظتی «مرور ایمن» را در سرویسهای دیگر Google مثل Gmail و «جستجو» دریافت میکنید.</translation> <translation id="1129510026454351943">جزئیات: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{۱ بارگیری در انتظار است.}one{# بارگیری در انتظار است.}other{# بارگیری در انتظار است.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> همرسانی نشد</translation> <translation id="1477626028522505441">بهدلیل مشکلاتی در سرور، بارگیری <ph name="FILE_NAME" /> انجام نشد.</translation> <translation id="1506061864768559482">موتور جستجو</translation> +<translation id="151267239139452619">افزودن به بارگیریها</translation> <translation id="1513352483775369820">نشانکها و سابقه وب</translation> <translation id="1513858653616922153">حذف گذرواژه</translation> <translation id="1521774566618522728">امروز فعال بود</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> صرفهجویی شد</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> بسته شد</translation> <translation id="2139186145475833000">افزودن به صفحه اصلی</translation> +<translation id="214888715418183969">انتخاب کنید میخواهید چه چیزهایی با Chrome همرسانی شود. از سنجههایی که همرسانی میکنید برای کمک به بهبود ویژگیها، عملکرد، و پایداری Chrome استفاده خواهد شد.</translation> <translation id="2154484045852737596">ویرایش کارت</translation> <translation id="2154710561487035718">کپی نشانی وب</translation> <translation id="2156074688469523661">سایتهای باقیمانده (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">رمزینه پاسخسریع</translation> <translation id="218608176142494674">همرسانی</translation> <translation id="2195339740518523951">بهرهمندی از بالاترین سطح امنیت در Chrome</translation> +<translation id="2200113223741723867">مدیریت همرسانی دادههای استفاده</translation> <translation id="2227444325776770048">ادامه دادن بهعنوان <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">همگامسازی و سرویسهای Google</translation> <translation id="2239812875700136898">کنترل داستانها از دکمه «گزینههای یافتهها»</translation> @@ -205,7 +209,7 @@ <translation id="2497852260688568942">سرپرستتان همگامسازی را غیرفعال کرده است</translation> <translation id="250020030759455918">وضعیت ورود به سیستم <ph name="SITE_NAME" />، دادههای محصول مرور، و دادههای سایت را در Chrome خواهید دید</translation> <translation id="2512164632052122970">زبانهای محتوا</translation> -<translation id="2513403576141822879">برای تنظیمات بیشتر مرتبط با حریم خصوصی، امنیت و جمعآوری دادهها، <ph name="BEGIN_LINK" />همگامسازی و سرویسهای Google<ph name="END_LINK" /> را ببینید</translation> +<translation id="2513403576141822879">برای تنظیمات بیشتر مرتبط با حریمخصوصی، امنیت و جمعآوری دادهها، <ph name="BEGIN_LINK" />همگامسازی و سرویسهای Google<ph name="END_LINK" /> را ببینید</translation> <translation id="2517472476991765520">اسکن</translation> <translation id="2518590038762162553">در «حالت ساده»، Chrome صفحهها را سریعتر بار میکند و تا ۶۰ درصد مصرف داده را کاهش میدهد. برای بهینهسازی صفحاتی که بازدید میکنید، Chrome ترافیک وب شما را به Google ارسال میکند. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> <translation id="2523184218357549926">نشانی وب صفحههایی را که بازدید میکنید برای Google ارسال میکند</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">این تنظیم غیرفعال است زیرا کنترلهای والدین روشن است</translation> <translation id="3771694256347217732">شرایط خدمات Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />بلوتوث را روشن کنید<ph name="END_LINK" /> تا مرتبطسازی امکانپذیر شود</translation> +<translation id="3773856050682458546">دادههای اصلی بهعلاوه اطلاعاتی درباره وبسایتهایی که بازدید میکنید و برنامههایی که استفاده میکنید</translation> <translation id="3775705724665058594">ارسال به دستگاههایتان</translation> <translation id="3778956594442850293">به صفحه اصلی اضافه شد</translation> <translation id="3789841737615482174">نصب</translation> <translation id="3810838688059735925">فیلم</translation> <translation id="3810973564298564668">مدیریت</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> بارگیری حذف شد</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> بهعنوان کلید امنیتی</translation> <translation id="3856096718352044181">لطفاً تأیید کنید این ارائهدهندهْ معتبر است یا بعداً دوباره امتحان کنید</translation> <translation id="3861633093716975811">ویدیوهای پرطرفدار</translation> <translation id="3892148308691398805">کپی کردن نوشتار</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">نتایج جستجوی فوری را در این پانل مشاهده کنید</translation> <translation id="4000212216660919741">صفحه اصلیِ آفلاین</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ساعت}one{# ساعت}other{# ساعت}}</translation> +<translation id="4045764304651014138">دادههای استفاده</translation> <translation id="4056223980640387499">سپیا</translation> +<translation id="4057643060762047384">افزودن به:</translation> <translation id="4060598801229743805">گزینههایی در نزدیکی بالای صفحه دردسترس هستند</translation> <translation id="4062305924942672200">اطلاعات حقوقی</translation> <translation id="4084682180776658562">نشانک</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">اجازه دادن</translation> <translation id="5040262127954254034">حریمخصوصی</translation> <translation id="5087580092889165836">افزودن کارت</translation> +<translation id="5091249083535528968">دادههای استفاده گسترده</translation> <translation id="509429900233858213">خطایی روی داد.</translation> <translation id="510275257476243843">۱ ساعت باقیمانده است</translation> <translation id="5123685120097942451">برگه ناشناس</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">اشتراکگذاری پیوند</translation> <translation id="5836192821815272682">درحال بارگیری بهروزرسانی Chrome…</translation> <translation id="5853623416121554550">مکث</translation> +<translation id="5854512288214985237">هیچ گزارش خرابی یا آماری به Google ارسال نمیشود</translation> <translation id="5854790677617711513">قدیمیتر از ۳۰ روز</translation> <translation id="5855546874025048181">پالایش: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome قادر به روشن کردن آداپتور بلوتوث نیست</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">خروج از سیستم و خاموش کردن همگامسازی</translation> <translation id="6312687380483398334">برنامههای وب (بیصدا)</translation> <translation id="6316139424528454185">نسخه Android پشتیبانی نمیشود</translation> +<translation id="6321526113093607004">افزودن به نشانکها</translation> <translation id="6324034347079777476">همگامسازی سیستم Android غیرفعال شد</translation> <translation id="6333140779060797560">اشتراکگذاری از طریق <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">رمزگذاری</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> در <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">ویرایش نشانک</translation> <translation id="6406506848690869874">همگامسازی</translation> +<translation id="6410404864818553978">دادههای استفاده اصلی</translation> <translation id="6410883413783534063">برای بازدید همزمان از صفحههای مختلف، چند برگه باز کنید</translation> <translation id="6412673304250309937">نشانیهای وب را با فهرست سایتهای ناامنی که در Chrome ذخیره شده است مقایسه میکند. اگر سایتی تلاش کند گذرواژه شما را بهسرقت ببرد، یا وقتی فایل مخربی بارگیری میکنید، Chrome ممکن است نشانیهای وب را نیز به همراه بخشهای کوچکی از محتوای صفحه، به «مرور ایمن» ارسال کند.</translation> <translation id="641643625718530986">چاپ...</translation> @@ -788,7 +800,7 @@ <translation id="6659594942844771486">برگه</translation> <translation id="6663079968236414793">پیوند به نوشتار</translation> <translation id="666731172850799929">باز کردن در <ph name="APP_NAME" /></translation> -<translation id="666981079809192359">اخطار حریم خصوصی Chrome</translation> +<translation id="666981079809192359">اخطار حریمخصوصی Chrome</translation> <translation id="6671495933530132209">کپی تصویر</translation> <translation id="6676840375528380067">دادههای Chrome شما از این دستگاه پاک شود؟</translation> <translation id="6691888250440401212">۱. <ph name="APP_NAME" /> را انتخاب کنید\n۲. روی «تنظیم بهعنوان پیشفرض» ضربه بزنید</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">راهاندازی اولیه همگامسازی کامل نشد. همگامسازی خاموش است.</translation> <translation id="7022756207310403729">بازکردن در مرورگر</translation> <translation id="702463548815491781">توصیه در زمانیکه TalkBack یا «دسترسی کلیدی» روشن است</translation> +<translation id="7027549951530753705">تاریخ بازیابی <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">گذرواژهها</translation> <translation id="703523980599857277">تغییر صفحه اصلی</translation> <translation id="7054588988317389591">توضیحات تصویر دریافت شود؟</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> و سایتهای دیگر</translation> <translation id="8327155640814342956">برای بهترین تجربه مرور، Chrome را بهروزرسانی کنید</translation> <translation id="8349013245300336738">بهترتیب مقدار داده استفادهشده</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> بارگیری بازیابی شد</translation> <translation id="8364299278605033898">مشاهده وبسایتهای پرطرفدار</translation> <translation id="8368027906805972958">دستگاه ناشناس یا پشتیبانینشده (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> آماده است.</translation> @@ -1100,7 +1114,7 @@ <translation id="9028914725102941583">برای اشتراکگذاری بین دستگاهها، «همگامسازی» را روشن کنید</translation> <translation id="9040142327097499898">اعلانها مجاز هستند. مکان برای این دستگاه خاموش است.</translation> <translation id="9041669420854607037">{FILE_COUNT,plural, =1{# ویدیو}one{# ویدیو}other{# ویدیو}}</translation> -<translation id="9042893549633094279">حریم خصوصی و امنیت</translation> +<translation id="9042893549633094279">حریمخصوصی و امنیت</translation> <translation id="9050666287014529139">عبارت عبور</translation> <translation id="9063523880881406963">خاموش کردن درخواست سایت رایانهای</translation> <translation id="9065203028668620118">ویرایش</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">ورود مجدد به سیستم</translation> <translation id="9155898266292537608">میتوانید با ضربهای سریع روی کلمه نیز جستجو کنید</translation> <translation id="9169507124922466868">سابقه «پیمایش» نیمهباز است</translation> +<translation id="9191031968346938109">افزودن به…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{آخرین بررسی: ۱ دقیقه قبل}one{آخرین بررسی: # دقیقه قبل}other{آخرین بررسی: # دقیقه قبل}}</translation> <translation id="9204836675896933765">۱ فایل باقی مانده است</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">خطا: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">عبارت ورود را وارد کنید</translation> <translation id="95817756606698420">Chrome میتواند از <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> برای جستجو در چین استفاده کند. در <ph name="BEGIN_LINK" />تنظیمات<ph name="END_LINK" /> میتوانید این را تغییر دهید.</translation> +<translation id="962979164594783469">نصب این برنامه</translation> <translation id="968900484120156207">صفحاتی را که بازدید کردهاید، اینجا نمایش داده میشوند</translation> <translation id="970715775301869095"><ph name="MINUTES" /> دقیقه باقیمانده است</translation> <translation id="974555521953189084">برای شروع همگامسازی، عبارت عبورتان را وارد کنید</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 2feaee2e..e003f357 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Maintenant</translation> <translation id="2175927920773552910">Code QR</translation> <translation id="218608176142494674">Partage</translation> +<translation id="2195339740518523951">Renforcer la sécurité de Chrome</translation> <translation id="2227444325776770048">Continuer en tant que <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Services Google/Synchronisation</translation> <translation id="2239812875700136898">Contrôlez vos articles à l'aide du bouton Options pour Discover</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google peut utiliser votre historique pour personnaliser la recherche et d'autres services Google</translation> <translation id="2898264748040935573">Modifier le mot de passe enregistré</translation> <translation id="2900528713135656174">Créer un événement</translation> +<translation id="2901411048554510387">Afficher des suggestions pour <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">La liste des appareils avec lesquels vous pouvez partager un onglet est ouverte à hauteur maximale.</translation> <translation id="2905036901251765993">Pour partager avec des personnes à proximité, laissez-les scanner ce code QR</translation> <translation id="2909615210195135082">Plate-forme de notifications Google</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Déplacer vers…</translation> <translation id="4411535500181276704">Mode simplifié</translation> <translation id="4415276339145661267">Gérer votre compte Google</translation> +<translation id="4427306783828095590">La protection renforcée assure une meilleure protection contre l'hameçonnage et les logiciels malveillants</translation> <translation id="4440958355523780886">Page simplifiée fournie par Google. Appuyez pour charger la page d'origine.</translation> <translation id="4452411734226507615">Fermer l'onglet <ph name="TAB_TITLE" /></translation> <translation id="4452548195519783679">Ajouté aux favoris dans "<ph name="FOLDER_NAME" />"</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index cc7d79c..1b8c33148 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Agora</translation> <translation id="2175927920773552910">Código QR</translation> <translation id="218608176142494674">Uso compartido</translation> +<translation id="2195339740518523951">Goza da máxima seguranza de Chrome</translation> <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Servizos de Google e sincronización</translation> <translation id="2239812875700136898">Fai clic no botón Opcións de Discover e controla as túas historias</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google pode utilizar o teu historial para personalizar a Busca e outros servizos de Google</translation> <translation id="2898264748040935573">Edita o contrasinal almacenado</translation> <translation id="2900528713135656174">Crear evento</translation> +<translation id="2901411048554510387">Mostrando suxestións para <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">A lista de dispositivos cos que compartir unha pestana está aberta a pantalla completa.</translation> <translation id="2905036901251765993">Para compartir contido coas persoas que estean preto, deixa que escaneen este código QR</translation> <translation id="2909615210195135082">Plataforma de notificacións de Google</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Mover a…</translation> <translation id="4411535500181276704">Modo básico</translation> <translation id="4415276339145661267">Xestionar a túa Conta de Google</translation> +<translation id="4427306783828095590">A protección mellorada é máis eficaz á hora de bloquear o phishing e o software malicioso</translation> <translation id="4440958355523780886">Páxina en modo básico ofrecida por Google. Toca para cargar a orixinal.</translation> <translation id="4452411734226507615">Pecha a pestana <ph name="TAB_TITLE" /></translation> <translation id="4452548195519783679">Marcador engadido a <ph name="FOLDER_NAME" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index 50a722a..53928cea 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Snimka zaslona</translation> <translation id="1111673857033749125">Ovdje će se prikazivati oznake koje ste spremili na drugim uređajima.</translation> <translation id="1113597929977215864">Prikaži pojednostavljeni prikaz</translation> +<translation id="1123070903960493543">Način na koji komunicirate s Chromeom, postavke koje ste odabrali, pojedinosti o padovima Chromea</translation> <translation id="1126809382673880764">Ne štiti vas od opasnih web-lokacija, preuzimanja i proširenja. Na drugim Googleovim uslugama, kao što su Gmail i Pretraživanje, i dalje ste zaštićeni Sigurnim pregledavanjem, ako je dostupno.</translation> <translation id="1129510026454351943">Pojedinosti: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 preuzimanje na čekanju.}one{# preuzimanje na čekanju.}few{# preuzimanja na čekanju.}other{# preuzimanja na čekanju.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nije moguće dijeliti <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspjelo zbog poteškoća s poslužiteljem.</translation> <translation id="1506061864768559482">Tražilica</translation> +<translation id="151267239139452619">Dodati u preuzimanja</translation> <translation id="1513352483775369820">Oznake i Google povijest</translation> <translation id="1513858653616922153">Izbriši zaporku</translation> <translation id="1521774566618522728">Aktivan danas</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> spremljeno</translation> <translation id="213279576345780926">Zatvorena je kartica <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj na početni zaslon</translation> +<translation id="214888715418183969">Odaberite ono što želite dijeliti s Chromeom. Mjerni podaci koje podijelite upotrijebit će se za poboljšanje značajki, izvedbe i stabilnosti Chromea.</translation> <translation id="2154484045852737596">Uredite karticu</translation> <translation id="2154710561487035718">Kopiraj URL</translation> <translation id="2156074688469523661">Preostale web-lokacije (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR kôd</translation> <translation id="218608176142494674">Dijeljenje</translation> <translation id="2195339740518523951">Odaberite najsnažniju Chromeovu zaštitu sigurnosti</translation> +<translation id="2200113223741723867">Upravljajte dijeljenjem podataka o upotrebi</translation> <translation id="2227444325776770048">Nastavite kao <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinkronizacija i Googleove usluge</translation> <translation id="2239812875700136898">Člancima možete upravljati pomoću gumba Opcije za Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Ta je postavka onemogućena jer je uključen roditeljski nadzor</translation> <translation id="3771694256347217732">Googleovi uvjeti pružanja usluge</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Uključite Bluetooth<ph name="END_LINK" /> da biste omogućili uparivanje</translation> +<translation id="3773856050682458546">Osnovni podaci i podaci o web-lokacijama koje posjećujete i aplikacijama koje upotrebljavate</translation> <translation id="3775705724665058594">Pošaljite na svoje uređaje</translation> <translation id="3778956594442850293">Dodano na početni zaslon</translation> <translation id="3789841737615482174">Instaliraj</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Upravljaj</translation> <translation id="3819178904835489326">Izbrisano preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> ima sigurnosni ključ</translation> <translation id="3856096718352044181">Potvrdite da je to valjani davatelj ili pokušajte ponovo kasnije</translation> <translation id="3861633093716975811">Popularni videozapisi</translation> <translation id="3892148308691398805">Kopiranje teksta</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Na ovoj ploči pogledajte instant rezultate pretraživanja</translation> <translation id="4000212216660919741">Početna stranica offline</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}few{# h}other{# h}}</translation> +<translation id="4045764304651014138">Podaci o upotrebi</translation> <translation id="4056223980640387499">Sepija</translation> +<translation id="4057643060762047384">Dodaj u:</translation> <translation id="4060598801229743805">Opcije su dostupne pri vrhu zaslona</translation> <translation id="4062305924942672200">Pravne informacije</translation> <translation id="4084682180776658562">Oznaka</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Dopusti</translation> <translation id="5040262127954254034">Privatnost</translation> <translation id="5087580092889165836">Dodaj karticu</translation> +<translation id="5091249083535528968">Prošireni podaci o upotrebi</translation> <translation id="509429900233858213">Došlo je do pogreške.</translation> <translation id="510275257476243843">Još 1 sat</translation> <translation id="5123685120097942451">Anonimna kartica</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Dijeli vezu</translation> <translation id="5836192821815272682">Preuzimanje ažuriranja Chromea…</translation> <translation id="5853623416121554550">pauzirano</translation> +<translation id="5854512288214985237">Googleu nisu poslani statistički podaci ili izvješća o padu programa</translation> <translation id="5854790677617711513">Starije od 30 dana</translation> <translation id="5855546874025048181">Suzi pretraživanje: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ne može uključiti Bluetooth adapter</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Odjava i isključivanje sinkronizacije</translation> <translation id="6312687380483398334">Web-aplikacije (tiho)</translation> <translation id="6316139424528454185">Verzija Androida nije podržana</translation> +<translation id="6321526113093607004">Dodaj u Oznake</translation> <translation id="6324034347079777476">Sinkronizacija sustava Android onemogućena</translation> <translation id="6333140779060797560">Dijeljenje putem aplikacije <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Enkripcija</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Uredi oznaku</translation> <translation id="6406506848690869874">Sinkronizacija</translation> +<translation id="6410404864818553978">Osnovni podaci o upotrebi</translation> <translation id="6410883413783534063">Otvorite kartice da biste istovremeno posjetili različite stranice</translation> <translation id="6412673304250309937">Provjerava URL-ove s popisom nesigurnih web-lokacija pohranjenih u Chromeu. Ako neka web-lokacija pokuša ukrasti vašu zaporku ili ako preuzmete štetnu datoteku, Chrome također može poslati URL-ove, uključujući dijelove sadržaja web-stranice, Sigurnom pregledavanju.</translation> <translation id="641643625718530986">Ispis…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Početno postavljanje sinkronizacije nije dovršeno. Sinkronizacija je isključena.</translation> <translation id="7022756207310403729">Otvori u pregledniku</translation> <translation id="702463548815491781">Preporučuje se kada su uključeni TalkBack ili prekidač za pristup</translation> +<translation id="7027549951530753705">Vraćeno: <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Zaporke</translation> <translation id="703523980599857277">Promijeni početnu stranicu</translation> <translation id="7054588988317389591">Primati opise slike?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> i druge web-lokacije</translation> <translation id="8327155640814342956">Za najbolji doživljaj pregledavanja otvorite Chrome da bi se ažurirao</translation> <translation id="8349013245300336738">Poredaj po količini potrošenih podataka</translation> +<translation id="835847953965672673">Vraćen je sljedeći broj preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="8364299278605033898">Pogledajte popularne web-lokacije</translation> <translation id="8368027906805972958">Nepoznati ili nepodržani uređaj (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> je spreman.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Prijavite se ponovno</translation> <translation id="9155898266292537608">Možete i kratko dodirnuti riječ da biste je pretražili</translation> <translation id="9169507124922466868">Povijest navigacije je poluotvorena</translation> +<translation id="9191031968346938109">Dodaj u…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Provjera je izvršena prije 1 minute}one{Provjera je izvršena prije # minute}few{Provjera je izvršena prije # minute}other{Provjera je izvršena prije # minuta}}</translation> <translation id="9204836675896933765">Preostala je 1 datoteka</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Pogreška: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Unesite zaporku</translation> <translation id="95817756606698420">Chrome za pretraživanje u Kini može upotrebljavati <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" />. To možete promijeniti u <ph name="BEGIN_LINK" />postavkama<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalirajte ovu aplikaciju</translation> <translation id="968900484120156207">Ovdje se prikazuju stranice koje posjećujete</translation> <translation id="970715775301869095">Preostalo minuta: <ph name="MINUTES" /></translation> <translation id="974555521953189084">Unesite šifru da biste pokrenuli sinkronizaciju</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb index 2bf9de53..1aa8b5e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Képernyőrögzítés</translation> <translation id="1111673857033749125">A más eszközökön mentett könyvjelzők itt jelennek meg.</translation> <translation id="1113597929977215864">Egyszerűsített nézet megjelenítése</translation> +<translation id="1123070903960493543">A Chrome használata, a kiválasztott beállítások, a Chrome-összeomlásokkal kapcsolatos adatok</translation> <translation id="1126809382673880764">Nem védi meg Önt a veszélyes webhelyek, letöltések vagy bővítmények ellen. Ahol lehetséges (más Google-szolgáltatásokban, például a Gmailben és a Keresőben) továbbra is megkapja a Biztonságos Böngészés által nyújtott védelmet.</translation> <translation id="1129510026454351943">Részletek: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 letöltés függőben.}other{# letöltés függőben.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nem sikerült a(z) <ph name="CONTENT_TYPE" /> megosztása</translation> <translation id="1477626028522505441">A következő fájl letöltése szerverproblémák miatt nem sikerült: <ph name="FILE_NAME" />.</translation> <translation id="1506061864768559482">Keresőmotor</translation> +<translation id="151267239139452619">Hozzáadás a letöltésekhez</translation> <translation id="1513352483775369820">Könyvjelzők és webes előzmények</translation> <translation id="1513858653616922153">Jelszó törlése</translation> <translation id="1521774566618522728">Ma volt aktív</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> megtakarítva</translation> <translation id="213279576345780926">Bezárva: <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Kezdőképernyőre</translation> +<translation id="214888715418183969">Válassza ki, hogy mit osztana meg szívesen a Chrome-mal. A megosztott mutatókat a Chrome funkcióinak, teljesítményének és stabilitásának fejlesztésére használjuk majd.</translation> <translation id="2154484045852737596">Kártya szerkesztése</translation> <translation id="2154710561487035718">URL másolása</translation> <translation id="2156074688469523661">A többi webhely (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR-kód</translation> <translation id="218608176142494674">Megosztás</translation> <translation id="2195339740518523951">Állítsa be a Chrome legerősebb védelmét</translation> +<translation id="2200113223741723867">Használati adatok megosztásának kezelése</translation> <translation id="2227444325776770048">Folytatás mint <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Szinkronizálás és Google</translation> <translation id="2239812875700136898">Hírek kezelése „A Discover beállításai” gombbal</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Ez a beállítás le van tiltva, mert be van kapcsolva a szülői felügyelet</translation> <translation id="3771694256347217732">Google Általános Szerződési Feltételek</translation> <translation id="3773755127849930740">A párosítás engedélyezéséhez <ph name="BEGIN_LINK" />kapcsolja be a Bluetooth funkciót<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">Alapvető adatok az Ön által felkeresett webhelyekkel és az Ön által használt alkalmazásokkal kapcsolatos adatokkal kiegészülve</translation> <translation id="3775705724665058594">Küldés a saját eszközökre</translation> <translation id="3778956594442850293">Hozzáadva a kezdőképernyőhöz</translation> <translation id="3789841737615482174">Telepítés</translation> <translation id="3810838688059735925">Videó</translation> <translation id="3810973564298564668">Szerkesztés</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> letöltés törölve</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> használata biztonsági kulcsként</translation> <translation id="3856096718352044181">Ellenőrizze a szolgáltató érvényességét, vagy próbálkozzon újra.</translation> <translation id="3861633093716975811">Népszerű videók</translation> <translation id="3892148308691398805">Szöveg másolása</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Azonnali keresési találatok megtekintése ezen a panelen</translation> <translation id="4000212216660919741">Offline kezdőlap</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# órája}other{# órája}}</translation> +<translation id="4045764304651014138">Használati adatok</translation> <translation id="4056223980640387499">Szépia</translation> +<translation id="4057643060762047384">Hozzáadás a következőhöz:</translation> <translation id="4060598801229743805">A lehetőségek a képernyő tetején találhatók</translation> <translation id="4062305924942672200">Jogi információk</translation> <translation id="4084682180776658562">Könyvjelző</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Engedélyezés</translation> <translation id="5040262127954254034">Adatvédelem</translation> <translation id="5087580092889165836">Kártya hozzáadása</translation> +<translation id="5091249083535528968">Bővített használati adatok</translation> <translation id="509429900233858213">Hiba történt.</translation> <translation id="510275257476243843">1 óra van hátra</translation> <translation id="5123685120097942451">Inkognitó lap</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Link megosztása</translation> <translation id="5836192821815272682">A Chrome frissítésének letöltése…</translation> <translation id="5853623416121554550">szüneteltetve</translation> +<translation id="5854512288214985237">A rendszer nem küld statisztikákat és hibajelentéseket a Google-nak</translation> <translation id="5854790677617711513">30 napnál régebbi</translation> <translation id="5855546874025048181">Pontosítás: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">A Chrome nem tudja bekapcsolni a Bluetooth-adaptert</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Kijelentkezés, és a szinkronizálás kikapcsolása</translation> <translation id="6312687380483398334">Webalkalmazások (csendes)</translation> <translation id="6316139424528454185">Nem támogatott Android-verzió</translation> +<translation id="6321526113093607004">Hozzáadás a könyvjelzőkhöz</translation> <translation id="6324034347079777476">Az Android rendszer szinkronizálása letiltva</translation> <translation id="6333140779060797560">Megosztás a következőn keresztül: <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Titkosítás</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" />, <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Könyvjelző szerkesztése</translation> <translation id="6406506848690869874">Szinkronizálás</translation> +<translation id="6410404864818553978">Alapvető használati adatok</translation> <translation id="6410883413783534063">Lapok megnyitásával egyszerre több oldalt is felkereshet.</translation> <translation id="6412673304250309937">Ellenőrzi az URL-eket a Chrome-ban a nem biztonságos webhelyekről tárolt lista alapján. Ha egy webhely megpróbálja ellopni az Ön jelszavát, illetve ha Ön ártalmas fájlt tölt le, akkor a Chrome elküldheti az URL-eket is (az oldaltartalmak részleteivel együtt) a Biztonságos Böngészésnek.</translation> <translation id="641643625718530986">Nyomtatás…</translation> @@ -826,13 +838,14 @@ <translation id="6955535239952325894">Ez a beállítás a felügyelt böngészőkben le van tiltva.</translation> <translation id="6963766334940102469">Könyvjelzők törlése</translation> <translation id="6979737339423435258">Mindenkori</translation> -<translation id="6981982820502123353">Kisegítő opciók</translation> +<translation id="6981982820502123353">Kisegítő lehetőségek</translation> <translation id="6989267951144302301">A letöltés sikertelen</translation> <translation id="6990079615885386641">Alkalmazás beszerzése a Google Play Áruházból: <ph name="APP_ACTION" /></translation> <translation id="6995899638241819463">Figyelmeztetés, ha jelszavai adatvédelmi incidens során nyilvánosságra kerülnek</translation> <translation id="7015203776128479407">A szinkronizálás kezdeti beállítása nem fejeződött be. A szinkronizálás ki van kapcsolva.</translation> <translation id="7022756207310403729">Megnyitás böngészőben</translation> <translation id="702463548815491781">Ajánlott, amikor a TalkBack vagy a Kapcsolóalapú hozzáférés be van kapcsolva</translation> +<translation id="7027549951530753705">Visszaállítás dátuma: <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Jelszavak</translation> <translation id="703523980599857277">Kezdőlap módosítása</translation> <translation id="7054588988317389591">Lekéri a képleírásokat?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> és további webhelyek</translation> <translation id="8327155640814342956">Nyissa meg a Chrome-ot, és frissítsen a legjobb böngészési élmény érdekében</translation> <translation id="8349013245300336738">Rendezés a felhasznált adatmennyiség szerint</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> letöltés visszaállítva</translation> <translation id="8364299278605033898">Tekintse meg a népszerű webhelyeket</translation> <translation id="8368027906805972958">Ismeretlen vagy nem támogatott eszköz (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">A(z) <ph name="LANG" /> készen áll.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Jelentkezzen be újra</translation> <translation id="9155898266292537608">Úgy is végrehajthat keresést, hogy gyorsan rákoppint valamelyik szóra</translation> <translation id="9169507124922466868">Félmagasságban megnyitott navigációs előzmények</translation> +<translation id="9191031968346938109">Hozzáadás…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{1 perce ellenőrizve}other{# perce ellenőrizve}}</translation> <translation id="9204836675896933765">1 fájl maradt</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Hiba: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Összetett jelszó megadása</translation> <translation id="95817756606698420">A Chrome igénybe veheti a <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> keresőszolgáltatást, hogy Kínában kereshessen. Ezt a <ph name="BEGIN_LINK" />Beállításokban<ph name="END_LINK" /> módosíthatja.</translation> +<translation id="962979164594783469">Alkalmazás telepítése</translation> <translation id="968900484120156207">Itt jelennek meg a felkeresett oldalak</translation> <translation id="970715775301869095"><ph name="MINUTES" /> perc van hátra</translation> <translation id="974555521953189084">A szinkronizálás megkezdéséhez adja meg összetett jelszavát</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb index c0c9781..b704146 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Sekarang</translation> <translation id="2175927920773552910">Kode QR</translation> <translation id="218608176142494674">Berbagi</translation> +<translation id="2195339740518523951">Dapatkan keamanan terkuat Chrome</translation> <translation id="2227444325776770048">Lanjutkan sebagai <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinkronisasi dan layanan Google</translation> <translation id="2239812875700136898">Kontrol artikel Anda dengan tombol Opsi untuk Discover</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google dapat menggunakan histori Anda untuk mempersonalisasi Penelusuran dan layanan Google lainnya</translation> <translation id="2898264748040935573">Edit sandi yang disimpan</translation> <translation id="2900528713135656174">Buat acara</translation> +<translation id="2901411048554510387">Menampilkan saran untuk <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">Daftar perangkat yang dapat digunakan untuk berbagi tab terbuka dalam layar penuh.</translation> <translation id="2905036901251765993">Untuk berbagi dengan orang-orang di sekitar, izinkan mereka memindai kode QR ini</translation> <translation id="2909615210195135082">Platform Notifikasi Google</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Pindahkan ke…</translation> <translation id="4411535500181276704">Mode Ringan</translation> <translation id="4415276339145661267">Kelola Akun Google Anda</translation> +<translation id="4427306783828095590">Perlindungan yang disempurnakan akan memblokir phishing dan malware dengan lebih optimal</translation> <translation id="4440958355523780886">Halaman ringan yang ditampilkan oleh Google. Ketuk untuk memuat halaman asli.</translation> <translation id="4452411734226507615">Tutup tab <ph name="TAB_TITLE" /></translation> <translation id="4452548195519783679">Dibookmark ke <ph name="FOLDER_NAME" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb index 513568f..f602991 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Skjámyndataka</translation> <translation id="1111673857033749125">Bókamerki vistuð í öðrum tækjum munu birtast hér.</translation> <translation id="1113597929977215864">Sýna einfaldað yfirlit</translation> +<translation id="1123070903960493543">Samskipti þín við Chrome, stillingar sem þú velur, upplýsingar um hrun Chrome</translation> <translation id="1126809382673880764">Ver þig ekki gegn hættulegum vefsvæðum, niðurhali eða viðbótum. Þú munt áfram geta notað örugga vefskoðun, þar sem hún er í boði, í annarri þjónustu Google á borð við Gmail og leit.</translation> <translation id="1129510026454351943">Upplýsingar: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 skrá bíður niðurhals.}one{# skrá bíður niðurhals.}other{# skrár bíða niðurhals.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Ekki er hægt að deila <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Niðurhal á <ph name="FILE_NAME" /> mistókst vegna vandamála á netþjóni.</translation> <translation id="1506061864768559482">Leitarvél</translation> +<translation id="151267239139452619">Bæta við niðurhal</translation> <translation id="1513352483775369820">Bókamerki og vefferill</translation> <translation id="1513858653616922153">Eyða aðgangsorði</translation> <translation id="1521774566618522728">Virkt í dag</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> spöruð</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> lokað</translation> <translation id="2139186145475833000">Setja á heimaskjá</translation> +<translation id="214888715418183969">Veldu hverju þú vilt deila með Chrome. Mæligildin sem þú deilir verða notuð til að bæta eiginleika, afköst og stöðugleika Chrome.</translation> <translation id="2154484045852737596">Breyta korti</translation> <translation id="2154710561487035718">Afrita vefslóð</translation> <translation id="2156074688469523661">Eftirstandandi vefsvæði (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR-kóði</translation> <translation id="218608176142494674">Deiling</translation> <translation id="2195339740518523951">Fá mesta öryggi Chrome</translation> +<translation id="2200113223741723867">Stjórna deilingu notkunargagna</translation> <translation id="2227444325776770048">Halda áfram sem <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Samstilling og þjónusta Google</translation> <translation id="2239812875700136898">Stjórnaðu fréttunum þínum með hnappinum Valkostir fyrir Tillögur</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Þar sem kveikt er á barnalæsingu er slökkt á þessari stillingu</translation> <translation id="3771694256347217732">Þjónustuskilmálar Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Kveiktu á Bluetooth<ph name="END_LINK" /> til að leyfa pörun</translation> +<translation id="3773856050682458546">Grunngögn auk upplýsinga um vefsvæði sem þú opnar og forrit sem þú notar</translation> <translation id="3775705724665058594">Senda í tækin þín</translation> <translation id="3778956594442850293">Bætt við heimaskjá</translation> <translation id="3789841737615482174">Setja upp</translation> <translation id="3810838688059735925">Myndskeið</translation> <translation id="3810973564298564668">Stjórna</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> niðurhölum eytt</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> sem öryggislykill</translation> <translation id="3856096718352044181">Gakktu úr skugga um að þetta sé staðfest veita eða reyndu aftur síðar</translation> <translation id="3861633093716975811">Vinsæl myndskeið</translation> <translation id="3892148308691398805">Afrita texta</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Sjá niðurstöður flýtileitar á þessu svæði</translation> <translation id="4000212216660919741">Ónettengt</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# klst.}one{# klst.}other{# klst.}}</translation> +<translation id="4045764304651014138">Notkunargögn</translation> <translation id="4056223980640387499">Brúnn blær</translation> +<translation id="4057643060762047384">Bæta við:</translation> <translation id="4060598801229743805">Valkosti er að finna ofarlega á skjánum</translation> <translation id="4062305924942672200">Lagalegar upplýsingar</translation> <translation id="4084682180776658562">Bókamerki</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Leyfa</translation> <translation id="5040262127954254034">Persónuvernd</translation> <translation id="5087580092889165836">Bæta við korti</translation> +<translation id="5091249083535528968">Ítarleg notkunargögn</translation> <translation id="509429900233858213">Villa kom upp.</translation> <translation id="510275257476243843">Ein klst. eftir</translation> <translation id="5123685120097942451">Huliðsflipi</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Deila tengli</translation> <translation id="5836192821815272682">Sækir Chrome uppfærslu…</translation> <translation id="5853623416121554550">hlé</translation> +<translation id="5854512288214985237">Engin mæligildi eða hrunskýrslur eru sendar til Google</translation> <translation id="5854790677617711513">Eldra en 30 dagar</translation> <translation id="5855546874025048181">Þrengja: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome getur ekki kveikt á Bluetooth-millistykki</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Skrá út og slökkva á samstillingu</translation> <translation id="6312687380483398334">Vefforrit (þögult)</translation> <translation id="6316139424528454185">Android útgáfa ekki studd</translation> +<translation id="6321526113093607004">Bæta við bókamerki</translation> <translation id="6324034347079777476">Slökkt á samstillingu Android kerfis</translation> <translation id="6333140779060797560">Deila í gegnum <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Dulkóðun</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> á <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Breyta bókamerki</translation> <translation id="6406506848690869874">Samstilling</translation> +<translation id="6410404864818553978">Grunnnotkunargögn</translation> <translation id="6410883413783534063">Opnaðu flipa til að skoða mismunandi síður samtímis</translation> <translation id="6412673304250309937">Ber vefslóðir saman við lista yfir óörugg vefsvæði sem er vistaður í Chrome. Ef vefsvæði reynir að stela aðgangsorðinu þínu, eða ef þú sækir skaðlega skrá, gæti Chrome einnig sent vefslóðir í Örugga vefskoðun, þar á meðal hluta af innihaldi síðna.</translation> <translation id="641643625718530986">Prenta...</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Fyrstu uppsetningu samstillingar var ekki lokið. Slökkt er á samstillingu.</translation> <translation id="7022756207310403729">Opna í vafra</translation> <translation id="702463548815491781">Mælt með þegar kveikt er á TalkBack eða rofaaðgangi</translation> +<translation id="7027549951530753705">Endurheimti <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Aðgangsorð</translation> <translation id="703523980599857277">Breyta heimasíðu</translation> <translation id="7054588988317389591">Fá myndlýsingar?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> og fleiri vefsvæði</translation> <translation id="8327155640814342956">Til að hámarka upplifunina skaltu opna til að uppfæra Chrome</translation> <translation id="8349013245300336738">Raða eftir gagnanotkun</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> niðurhöl endurheimt</translation> <translation id="8364299278605033898">Sjáðu vinsæl vefsvæði</translation> <translation id="8368027906805972958">Óþekkt eða óstutt tæki (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> er tilbúið.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Skrá inn aftur</translation> <translation id="9155898266292537608">Þú getur einnig leitað með því að ýta á orð</translation> <translation id="9169507124922466868">Ferill er hálfopinn</translation> +<translation id="9191031968346938109">Bæta við…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Athugað fyrir 1 mínútu}one{Athugað fyrir # mínútu}other{Athugað fyrir # mínútum}}</translation> <translation id="9204836675896933765">Ein skrá eftir</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Villa: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Sláðu inn aðgangsorð</translation> <translation id="95817756606698420">Chrome getur notast við <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> fyrir leit í Kína. Þú getur breytt þessu í <ph name="BEGIN_LINK" />stillingunum<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Setja þetta forrit upp</translation> <translation id="968900484120156207">Síður sem þú heimsækir birtast hér</translation> <translation id="970715775301869095"><ph name="MINUTES" /> mín. eftir</translation> <translation id="974555521953189084">Sláðu inn aðgangsorðið til að hefja samstillingu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb index 952046e..a1a97b606 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -166,6 +166,7 @@ <translation id="2169830938017475061">ಈಗ</translation> <translation id="2175927920773552910">QR ಕೋಡ್</translation> <translation id="218608176142494674">ಹಂಚಿಕೆ</translation> +<translation id="2195339740518523951">Chrome ನ ಪ್ರಬಲ ಭದ್ರತೆಯನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ನಂತೆ ಮುಂದುವರಿಸಿ</translation> <translation id="2234876718134438132">ಸಿಂಕ್ ಮತ್ತು Google ಸೇವೆಗಳು</translation> <translation id="2239812875700136898">ಡಿಸ್ಕವರ್ಗಾಗಿ ಆಯ್ಕೆಗಳ ಬಟನ್ನಿಂದ ನಿಮ್ಮ ಕಥೆಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ</translation> @@ -257,6 +258,7 @@ <translation id="2893180576842394309">ಹುಡುಕಾಟ ಮತ್ತು ಇತರ Google ಸೇವೆಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸಲು ನಿಮ್ಮ ಇತಿಹಾಸವನ್ನು Google ಬಳಸಬಹುದು.</translation> <translation id="2898264748040935573">ಸಂಗ್ರಹಿಸಿರುವ ಪಾಸ್ವರ್ಡ್ ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="2900528713135656174">ಈವೆಂಟ್ ರಚಿಸು</translation> +<translation id="2901411048554510387"><ph name="WEBSITE_TITLE" /> ಗಾಗಿ ಸಲಹೆಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="2904414404539560095">ಟ್ಯಾಬ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಬೇಕಾದ ಸಾಧನಗಳ ಪಟ್ಟಿಯನ್ನು ಪೂರ್ಣ ಎತ್ತರದಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation> <translation id="2905036901251765993">ಸಮೀಪದ ಜನರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು, ಅವರು ಈ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲಿ</translation> <translation id="2909615210195135082">Google ಅಧಿಸೂಚನೆಗಳು ಪ್ಲ್ಯಾಟ್ಫಾರ್ಮ್</translation> @@ -443,6 +445,7 @@ <translation id="4405224443901389797">ಇದಕ್ಕೆ ಸರಿಸಿ…</translation> <translation id="4411535500181276704">ಲೈಟ್ ಮೋಡ್</translation> <translation id="4415276339145661267">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation> +<translation id="4427306783828095590">ಫಿಶಿಂಗ್ ಮತ್ತು ಮಾಲ್ವೇರ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲು ವರ್ಧಿತ ಸುರಕ್ಷತೆ ಹೆಚ್ಚಿನ ಸಹಾಯ ಮಾಡುತ್ತದೆ</translation> <translation id="4440958355523780886">ಪುಟದ ಲೈಟ್ ಆವೃತ್ತಿಯನ್ನು Google ಒದಗಿಸಿದೆ. ಮೂಲ ಆವೃತ್ತಿಯನ್ನು ಲೋಡ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ಟ್ಯಾಬ್ ಮುಚ್ಚಿ</translation> <translation id="4452548195519783679"><ph name="FOLDER_NAME" /> ಗೆ ಬುಕ್ಮಾರ್ಕ್ ಮಾಡಲಾಗಿದೆ</translation> @@ -800,6 +803,7 @@ <translation id="6783942555455976443">ನಂತರದ ಬಳಕೆಗಾಗಿ ಈ ಪುಟವನ್ನು ಉಳಿಸಿ ಮತ್ತು ಜ್ಞಾಪನೆಯನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="6811034713472274749">ವೀಕ್ಷಿಸಲು ಪುಟ ಸಿದ್ಧವಾಗಿದೆ</translation> <translation id="6820686453637990663">CVC</translation> +<translation id="6824899148643461612"><ph name="TAB_TITLE" /> ಟ್ಯಾಬ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation> <translation id="6845325883481699275">Chrome ಭದ್ರತೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation> <translation id="6846298663435243399">ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> <translation id="6850409657436465440">ನಿಮ್ಮ ಡೌನ್ಲೋಡ್ ಇನ್ನೂ ಪ್ರಗತಿಯಲ್ಲಿದೆ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index e61f6d3bc..57d9dec 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -1046,7 +1046,7 @@ <translation id="8559990750235505898">Башка тилдердеги барактарды которуу сунушталсын</translation> <translation id="8560602726703398413">Окуу тизмеңизди кыстармалардан табыңыз</translation> <translation id="8561196567344536112">1. Жөндөөлөргө өтүңүз\n2. “Серепчи колдонмосун” таптаңыз\n3. <ph name="APP_NAME" /> колдонмосун тандаңыз</translation> -<translation id="8562452229998620586">Сакталган сырсөздөр бул жерден көрүнөт.</translation> +<translation id="8562452229998620586">Сакталган сырсөздөр бул жерде көрүнөт.</translation> <translation id="8569404424186215731"><ph name="DATE" /> бери</translation> <translation id="8571213806525832805">Акыркы 4 апта</translation> <translation id="8572344201470131220">Сүрөт көчүрүлдү</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index 05ae51f..33a93cd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Ekrano fiksavimas</translation> <translation id="1111673857033749125">Čia bus rodomos kituose įrenginiuose išsaugotos žymės.</translation> <translation id="1113597929977215864">Rodyti supaprastintą rodinį</translation> +<translation id="1123070903960493543">Kaip sąveikaujate su „Chrome“, jūsų pasirinkti nustatymai, išsami „Chrome“ strigčių informacija</translation> <translation id="1126809382673880764">Neapsaugo jūsų nuo pavojingų svetainių, atsisiuntimų ir plėtinių. Kai yra galimybė, vis tiek gausite saugaus naršymo pranešimus kitose „Google“ paslaugose, pvz., „Gmail“ ir paieškoje.</translation> <translation id="1129510026454351943">Išsami informacija: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Laukiama 1 atsisiuntimo.}one{Laukiama # atsisiuntimo.}few{Laukiama # atsisiuntimų.}many{Laukiama # atsisiuntimo.}other{Laukiama # atsisiuntimų.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nepavyko bendrinti turinio: <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Nepavyko atsisiųsti „<ph name="FILE_NAME" />“ dėl serverio problemų.</translation> <translation id="1506061864768559482">Paieškos variklis</translation> +<translation id="151267239139452619">Pridėti prie atsisiuntimų</translation> <translation id="1513352483775369820">Žymių ir žiniatinklio istorija</translation> <translation id="1513858653616922153">Ištrinti slaptažodį</translation> <translation id="1521774566618522728">Aktyvus šiandien</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Išsaugota: <ph name="DATA" /></translation> <translation id="213279576345780926">„<ph name="TAB_TITLE" />“ uždaryta</translation> <translation id="2139186145475833000">Pridėti prie pagr. ekrano</translation> +<translation id="214888715418183969">Pasirinkite, ką norėtumėte bendrinti su „Chrome“. Jūsų bendrinama metrika bus naudojama „Chrome“ funkcijoms, našumui ir stabilumui tobulinti.</translation> <translation id="2154484045852737596">Kortelės informacijos redagavimas</translation> <translation id="2154710561487035718">Kopijuoti URL adresą</translation> <translation id="2156074688469523661">Likusios svetainės (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR kodas</translation> <translation id="218608176142494674">Bendrinimas</translation> <translation id="2195339740518523951">Gaukite patikimiausią „Chrome“ apsaugą</translation> +<translation id="2200113223741723867">Tvarkyti naudojimo duomenų bendrinimą</translation> <translation id="2227444325776770048">Tęsti kaip <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinchron. ir „Google“ paslaugos</translation> <translation id="2239812875700136898">Valdykite pasakojimus naudodami mygtuką „Discover“ parinktys“</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Šis nustatymas išjungtas, nes įjungta tėvų kontrolė</translation> <translation id="3771694256347217732">„Google“ paslaugų teikimo sąlygos</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Įjunkite „Bluetooth“<ph name="END_LINK" />, kad būtų leidžiama susieti</translation> +<translation id="3773856050682458546">Pagrindiniai duomenys ir informacija apie lankomas svetaines ir naudojamas programas</translation> <translation id="3775705724665058594">Išsiųsta į jūsų įrenginius</translation> <translation id="3778956594442850293">Pridėta prie pagrindinio ekrano</translation> <translation id="3789841737615482174">Įdiegti</translation> <translation id="3810838688059735925">Vaizdo</translation> <translation id="3810973564298564668">Valdyti</translation> <translation id="3819178904835489326">Ištrinta atsisiuntimų: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">„Google <ph name="APP_NAME" />“ kaip saugos raktas</translation> <translation id="3856096718352044181">Patvirtinkite, kad tai yra tinkamas paslaugų teikėjas, arba vėliau bandykite dar kartą</translation> <translation id="3861633093716975811">Populiarūs vaizdo įrašai</translation> <translation id="3892148308691398805">Kopijuoti tekstą</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Žiūrėkite tiesioginius paieškos rezultatus šiame skydelyje</translation> <translation id="4000212216660919741">„Home“ neprisijungus</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# val.}one{# val.}few{# val.}many{# val.}other{# val.}}</translation> +<translation id="4045764304651014138">Naudojimo duomenys</translation> <translation id="4056223980640387499">Sepija</translation> +<translation id="4057643060762047384">Pridėti prie:</translation> <translation id="4060598801229743805">Parinktys pasiekiamos netoli ekrano viršaus</translation> <translation id="4062305924942672200">Teisinė informacija</translation> <translation id="4084682180776658562">Žymė</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Leisti</translation> <translation id="5040262127954254034">Privatumas</translation> <translation id="5087580092889165836">Pridėti kortelę</translation> +<translation id="5091249083535528968">Išplėstiniai naudojimo duomenys</translation> <translation id="509429900233858213">Įvyko klaida.</translation> <translation id="510275257476243843">Liko 1 val.</translation> <translation id="5123685120097942451">Inkognito skirtukas</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Bendrinti nuorodą</translation> <translation id="5836192821815272682">Atsisiunčiamas „Chrome“ naujinys…</translation> <translation id="5853623416121554550">pristabdyta</translation> +<translation id="5854512288214985237">Statistika ar strigčių ataskaitos „Google“ nesiunčiamos</translation> <translation id="5854790677617711513">Senesni nei 30 dienų</translation> <translation id="5855546874025048181">Patikslinti: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">„Chrome“ nepavyksta įjungti „Bluetooth“ adapterio</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Atsijungti ir išjungti sinchronizavimą</translation> <translation id="6312687380483398334">Žiniatinklio programos (nutildyta)</translation> <translation id="6316139424528454185">„Android“ versija nepalaikoma</translation> +<translation id="6321526113093607004">Pridėti prie žymių</translation> <translation id="6324034347079777476">„Android“ sistemos sinchronizavimas išjungtas</translation> <translation id="6333140779060797560">Bendrinti per „<ph name="APPLICATION" />“</translation> <translation id="6337234675334993532">Šifruotė</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Redaguoti žymę</translation> <translation id="6406506848690869874">Sinchronizavimas</translation> +<translation id="6410404864818553978">Pagrindiniai naudojimo duomenys</translation> <translation id="6410883413783534063">Atidarykite skirtukus ir vienu metu lankykitės skirtinguose puslapiuose</translation> <translation id="6412673304250309937">Tikrinami URL pagal nesaugių svetainių sąrašą, saugomą naršyklėje „Chrome“. Jei svetainė bando pavogti slaptažodį ar atsisiuntėte žalingą failą, „Chrome“ taip pat gali siųsti URL, įskaitant puslapio turinio dalis, Saugaus naršymo funkcijai.</translation> <translation id="641643625718530986">Spausdinti…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Pradinis sinchronizavimo nustatymas nebaigtas. Sinchronizavimas išjungtas.</translation> <translation id="7022756207310403729">Atidaryti naršyklėje</translation> <translation id="702463548815491781">Rekomenduojama, kai įjungta „TalkBack“ arba prieiga jungikliu</translation> +<translation id="7027549951530753705">Atkurta „<ph name="ITEM_TITLE" />“</translation> <translation id="7029809446516969842">Slaptažodžiai</translation> <translation id="703523980599857277">Keisti pagrindinį puslapį</translation> <translation id="7054588988317389591">Gauti vaizdų aprašus?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> ir daugiau svetainių</translation> <translation id="8327155640814342956">Kad būtų teikiamos geriausios naršymo funkcijos, atidarykite ir atnaujinkite „Chrome“</translation> <translation id="8349013245300336738">Rūšiuoti pagal naudojamų duomenų kiekį</translation> +<translation id="835847953965672673">Atkurta atsisiuntimų: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="8364299278605033898">Žr. populiarias svetaines</translation> <translation id="8368027906805972958">Nežinomas arba nepalaikomas įrenginys (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> paruošta.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Prisijungti dar kartą</translation> <translation id="9155898266292537608">Taip pat galite ieškoti greitai paliesdami žodį</translation> <translation id="9169507124922466868">Naršymo istorija atidaryta puse aukščio</translation> +<translation id="9191031968346938109">Pridėti prie…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Tikrinta prieš 1 minutę}one{Tikrinta prieš # minutę}few{Tikrinta prieš # minutes}many{Tikrinta prieš # minutės}other{Tikrinta prieš # minučių}}</translation> <translation id="9204836675896933765">Liko failų: 1</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Klaida: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Įvesti slaptafrazę</translation> <translation id="95817756606698420">„Chrome“ gali naudoti <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" />, kai paieškos atliekamos Kinijoje. Šį nustatymą galite pakeisti skiltyje <ph name="BEGIN_LINK" />„Nustatymai“<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Įdiegti šią programą</translation> <translation id="968900484120156207">Jūsų aplankomi puslapiai rodomi čia</translation> <translation id="970715775301869095">Liko <ph name="MINUTES" /> min.</translation> <translation id="974555521953189084">Įveskite slaptafrazę, kad pradėtumėte sinchronizavimą</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb index f839b12..ca2b125 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Ekrāna tveršana</translation> <translation id="1111673857033749125">Šeit būs redzamas grāmatzīmes, kuras esat saglabājis citās ierīcēs.</translation> <translation id="1113597929977215864">Rādīt vienkāršoto skatu</translation> +<translation id="1123070903960493543">Jūsu mijiedarbība ar Chrome, atlasītie iestatījumi un detalizēta informācija par Chrome avārijām</translation> <translation id="1126809382673880764">Netiek nodrošināta aizsardzība pret bīstamām vietnēm, lejupielādēm un paplašinājumiem. Jūs joprojām saņemsiet drošas pārlūkošanas aizsardzību, ja tā ir pieejama, citos Google pakalpojumos, piemēram, Gmail un Meklēšana.</translation> <translation id="1129510026454351943">Informācija: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 neapstiprināta lejupielāde.}zero{# neapstiprinātu lejupielāžu.}one{# neapstiprināta lejupielāde.}other{# neapstiprinātas lejupielādes.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nevar kopīgot: <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Neizdevās lejupielādēt failu <ph name="FILE_NAME" />, jo radās servera problēmas.</translation> <translation id="1506061864768559482">Meklētājprogramma</translation> +<translation id="151267239139452619">Pievienot lapai Lejupielādes</translation> <translation id="1513352483775369820">Grāmatzīmes un tīmekļa vēsture</translation> <translation id="1513858653616922153">Dzēst paroli</translation> <translation id="1521774566618522728">Aktīvs šodien</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Ietaupījums: <ph name="DATA" /></translation> <translation id="213279576345780926">Tika aizvērta cilne <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Pievienot sākuma ekrānam</translation> +<translation id="214888715418183969">Izvēlieties, kādu informāciju jums nav iebildumu kopīgot ar Chrome. Jūsu kopīgotie rādītāji tiks izmantoti, lai uzlabotu Chrome funkcijas, veiktspēju un stabilitāti.</translation> <translation id="2154484045852737596">Kartes informācijas rediģēšana</translation> <translation id="2154710561487035718">Kopēt URL</translation> <translation id="2156074688469523661">Pārējās vietnes (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR kods</translation> <translation id="218608176142494674">Kopīgošana</translation> <translation id="2195339740518523951">Visaugstākais Chrome drošības līmenis</translation> +<translation id="2200113223741723867">Pārvaldīt lietojuma datu kopīgošanu</translation> <translation id="2227444325776770048">Turpināt kā: <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinhronizēšana un Google pakalp.</translation> <translation id="2239812875700136898">Pārvaldiet ziņas, izmantojot opciju pogu lapā Discover.</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Šis iestatījums ir atspējots, jo ir ieslēgta vecāku kontrole</translation> <translation id="3771694256347217732">Google pakalpojumu sniegšanas noteikumi</translation> <translation id="3773755127849930740">Lai atļautu savienošanu pārī, <ph name="BEGIN_LINK" />ieslēdziet Bluetooth<ph name="END_LINK" />.</translation> +<translation id="3773856050682458546">Gan pamatdati, gan informācija par jūsu apmeklētajām vietnēm un izmantotajām lietotnēm</translation> <translation id="3775705724665058594">Sūtīšana uz jūsu ierīcēm</translation> <translation id="3778956594442850293">Pievienots sākuma ekrānam</translation> <translation id="3789841737615482174">Instalēt</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Pārvaldīt</translation> <translation id="3819178904835489326">Izdzēsti <ph name="NUMBER_OF_DOWNLOADS" /> lejupielādētie vienumi</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> kā drošības atslēga</translation> <translation id="3856096718352044181">Pārbaudiet, vai pakalpojumu sniedzējs ir derīgs, vai arī vēlāk mēģiniet vēlreiz</translation> <translation id="3861633093716975811">Populāri videoklipi</translation> <translation id="3892148308691398805">Kopēt tekstu</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Skatīt tūlītējus meklēšanas rezultātus šajā panelī</translation> <translation id="4000212216660919741">Bezsaistes sākums</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}zero{# h}one{# h}other{# h}}</translation> +<translation id="4045764304651014138">Lietojuma dati</translation> <translation id="4056223980640387499">Sēpija</translation> +<translation id="4057643060762047384">Pievienot šo lapu…</translation> <translation id="4060598801229743805">Opcijas, kas pieejamas ekrāna augšdaļā</translation> <translation id="4062305924942672200">Juridiskā informācija</translation> <translation id="4084682180776658562">Grāmatzīme</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Atļaut</translation> <translation id="5040262127954254034">Konfidencialitāte</translation> <translation id="5087580092889165836">Pievienot karti</translation> +<translation id="5091249083535528968">Detalizēti lietojuma dati</translation> <translation id="509429900233858213">Radās kļūda.</translation> <translation id="510275257476243843">Atlikusi 1 h</translation> <translation id="5123685120097942451">Inkognito cilne</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Kopīgot saiti</translation> <translation id="5836192821815272682">Lejupielādē Chrome atjauninājumu…</translation> <translation id="5853623416121554550">apturēta</translation> +<translation id="5854512288214985237">Uzņēmumam Google netiek sūtīta statistika un avāriju pārskati</translation> <translation id="5854790677617711513">Vecāki par 30 dienām</translation> <translation id="5855546874025048181">Precizēt: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome nevar ieslēgt Bluetooth adapteri.</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Izrakstīties un izslēgt sinhronizēšanu</translation> <translation id="6312687380483398334">Tīmekļa lietotnes (bez skaņas)</translation> <translation id="6316139424528454185">Neatbalstīta Android versija</translation> +<translation id="6321526113093607004">Pievienot grāmatzīmēm</translation> <translation id="6324034347079777476">Android sistēmas sinhronizācija atspējota</translation> <translation id="6333140779060797560">Kopīgot, izmantojot <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Šifrēšana</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609">Kļūda <ph name="ERROR_CODE" /> vietnē <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Rediģēt grāmatzīmi</translation> <translation id="6406506848690869874">Sinhronizācija</translation> +<translation id="6410404864818553978">Lietojuma pamatdati</translation> <translation id="6410883413783534063">Atveriet cilnes, lai vienlaikus apmeklētu vairākas lapas</translation> <translation id="6412673304250309937">Vietrāži URL tiek pārbaudīti, salīdzinot ar nedrošu vietņu sarakstu, kas glabājas pārlūkprogrammā Chrome. Ja kādā vietnē tiek mēģināts nozagt jūsu paroli vai ja jūs lejupielādējat kaitīgu failu, Chrome var nosūtīt attiecīgo URL un lapas satura fragmentus uz funkciju Droša pārlūkošana.</translation> <translation id="641643625718530986">Drukāt...</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Sākotnējā sinhronizācijas iestatīšana netika pabeigta. Sinhronizācija ir izslēgta.</translation> <translation id="7022756207310403729">Atvērt pārlūkā</translation> <translation id="702463548815491781">Ieteicams, ja ir ieslēgta lietotne TalkBack vai slēdžu piekļuves funkcija.</translation> +<translation id="7027549951530753705">Atjaunots vienums <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Paroles</translation> <translation id="703523980599857277">Mainīt sākumlapu</translation> <translation id="7054588988317389591">Vai vēlaties iespējot attēlu aprakstus?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> un citas vietnes</translation> <translation id="8327155640814342956">Atveriet, lai uzlabotu pārlūkošanas ērtības, atjauninot pārlūku Chrome</translation> <translation id="8349013245300336738">Kārtot pēc izmantoto datu apjoma</translation> +<translation id="835847953965672673">Lejupielādes atjaunotas, skaits: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="8364299278605033898">Skatīt populāras vietnes</translation> <translation id="8368027906805972958">Nezināma vai neatbalstīta ierīce (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Valoda <ph name="LANG" /> ir sagatavota.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Pierakstieties vēlreiz</translation> <translation id="9155898266292537608">Varat arī meklēt, ātri pieskaroties vārdam</translation> <translation id="9169507124922466868">Navigācijas vēsture ir atvērta līdz pusei.</translation> +<translation id="9191031968346938109">Pievienot šo lapu…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Pārbaudīts: pirms 1 minūtes}zero{Pārbaudīts: pirms # minūtēm}one{Pārbaudīts: pirms # minūtes}other{Pārbaudīts: pirms # minūtēm}}</translation> <translation id="9204836675896933765">Atlicis 1 fails</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Kļūda: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Ievadiet ieejas frāzi</translation> <translation id="95817756606698420">Pārlūkā Chrome var izmantot meklētājprogrammu <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" />, lai veiktu meklēšanu Ķīnā. Varat to mainīt sadaļā <ph name="BEGIN_LINK" />Iestatījumi<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalēt šo lietotni</translation> <translation id="968900484120156207">Šeit tiek rādītas jūsu apmeklētās lapas</translation> <translation id="970715775301869095">Atlikušas <ph name="MINUTES" /> min</translation> <translation id="974555521953189084">Lai sāktu sinhronizēšanu, ievadiet ieejas frāzi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb index 4acd324..746aaf58 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Screen Capture</translation> <translation id="1111673857033749125">Обележувачите зачувани на другите уреди ќе се појават тука.</translation> <translation id="1113597929977215864">Прикажи поедноставен приказ</translation> +<translation id="1123070903960493543">Каква е вашата интеракција со Chrome, поставките што сте ги избрале, детали за падовите на Chrome</translation> <translation id="1126809382673880764">Не ве заштитува од опасни веб-сајтови, преземања и екстензии. Сѐ уште ќе имате заштита со „Безбедно прелистување“, каде што е достапно, во другите услуги на Google, како Gmail и „Пребарување“.</translation> <translation id="1129510026454351943">Детали: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 преземање чека на ред.}one{# преземање чека на ред.}other{# преземања чекаат на ред.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Не може да се сподели <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Преземањето на <ph name="FILE_NAME" /> не успеа поради проблеми со серверот.</translation> <translation id="1506061864768559482">Пребарувач</translation> +<translation id="151267239139452619">Додај во „Преземања“</translation> <translation id="1513352483775369820">Обележувачи и веб-историја</translation> <translation id="1513858653616922153">Избриши ја лозинката</translation> <translation id="1521774566618522728">Активен денес</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Зачувани: <ph name="DATA" /></translation> <translation id="213279576345780926">Се затвори <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Додај на почетен екран</translation> +<translation id="214888715418183969">Изберете какви податоци за користењето сакате да споделувате со Chrome. Метриката што ја споделувате ќе се користи за подобрување на функциите, изведбата и стабилноста на Chrome.</translation> <translation id="2154484045852737596">Уредете ја картичката</translation> <translation id="2154710561487035718">Копирај URL</translation> <translation id="2156074688469523661">Останати сајтови (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR-код</translation> <translation id="218608176142494674">Се споделува</translation> <translation id="2195339740518523951">Добијте ја најсилната безбедност на Chrome</translation> +<translation id="2200113223741723867">Управувајте со споделувањето податоци за користењето</translation> <translation id="2227444325776770048">Продолжи како <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Синхронизација и услуги на Google</translation> <translation id="2239812875700136898">Контролирајте ги сториите од копчето „Опции за Discover“</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Поставкава е оневозможена бидејќи се вклучени родителските контроли</translation> <translation id="3771694256347217732">Услови за користење на Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Вклучете Bluetooth<ph name="END_LINK" /> за да овозможите спарување</translation> +<translation id="3773856050682458546">Основни податоци плус информации за веб-сајтовите што ги посетувате и апликациите што ги користите</translation> <translation id="3775705724665058594">Испратете до вашите уреди</translation> <translation id="3778956594442850293">Додадено на почетен екран</translation> <translation id="3789841737615482174">Инсталирај</translation> <translation id="3810838688059735925">Видео</translation> <translation id="3810973564298564668">Управувај</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> преземања се избришани</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> како безбедносен клуч</translation> <translation id="3856096718352044181">Потврдете дека ова е вистински давател на услуги или обидете се повторно подоцна</translation> <translation id="3861633093716975811">Популарни видеа</translation> <translation id="3892148308691398805">Копирај текст</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Гледајте инстант резултати од пребарување на таблава</translation> <translation id="4000212216660919741">Офлајн</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ч.}one{# ч.}other{# ч.}}</translation> +<translation id="4045764304651014138">Податоци за користењето</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Додај во:</translation> <translation id="4060598801229743805">Достапни се опции речиси на врвот на екранот</translation> <translation id="4062305924942672200">Правни информации</translation> <translation id="4084682180776658562">Обележувач</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Дозволи</translation> <translation id="5040262127954254034">Приватност</translation> <translation id="5087580092889165836">Додај картичка</translation> +<translation id="5091249083535528968">Проширени податоци за користењето</translation> <translation id="509429900233858213">Настана грешка.</translation> <translation id="510275257476243843">Остана 1 час</translation> <translation id="5123685120097942451">Картичка инкогнито</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Сподели го линкот</translation> <translation id="5836192821815272682">Се презема ажурирање на Chrome…</translation> <translation id="5853623416121554550">паузирано</translation> +<translation id="5854512288214985237">Не се испраќа ниту статистика ниту извештаи за падовите до Google</translation> <translation id="5854790677617711513">Постари од 30 дена</translation> <translation id="5855546874025048181">Рафинирајте: „<ph name="REFINE_TEXT" />“</translation> <translation id="5858741533101922242">Chrome не може да го вклучи Bluetooth адаптерот</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Одјавете се и исклучете ја синхронизацијата</translation> <translation id="6312687380483398334">Веб-апликации (тивки)</translation> <translation id="6316139424528454185">Верзијата на Android не е поддржана</translation> +<translation id="6321526113093607004">Додај во „Обележувачи“</translation> <translation id="6324034347079777476">Синхронизацијата на системот Android е оневозможена</translation> <translation id="6333140779060797560">Сподели преку <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Шифрирање</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> на <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Измени обележувач</translation> <translation id="6406506848690869874">Синхронизација</translation> +<translation id="6410404864818553978">Основни податоци за користењето</translation> <translation id="6410883413783534063">Отворете картички за да посетувате различни страници во исто време</translation> <translation id="6412673304250309937">Ги проверува URL-адресите во список со небезбедни сајтови меморирани во Chrome. Ако некој сајт се обиде да ви ја украде лозинката или кога ќе преземете штетна датотека, Chrome може да испрати и URL-адреси, вклучувајќи и делови од содржините на страницата, во „Безбедно прелистување“.</translation> <translation id="641643625718530986">Печати...</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Првичното поставување на синхронизацијата не беше завршено. Синхронизацијата е исклучена.</translation> <translation id="7022756207310403729">Отвори во прелистувач</translation> <translation id="702463548815491781">Препорачано при вклучен TalkBack или „Пристап со прекинувачи“</translation> +<translation id="7027549951530753705">Преземањето на <ph name="ITEM_TITLE" /> е вратено</translation> <translation id="7029809446516969842">Лозинки</translation> <translation id="703523980599857277">Промени ја почетната страница</translation> <translation id="7054588988317389591">Сакате ли да добивате описи на слики?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> и други сајтови</translation> <translation id="8327155640814342956">За најдобро искуство при прелистувањето, отворете го за да го ажурирате Chrome</translation> <translation id="8349013245300336738">Подреди по количина на искористен сообраќај</translation> +<translation id="835847953965672673">Вратени се <ph name="NUMBER_OF_DOWNLOADS" /> преземања</translation> <translation id="8364299278605033898">Разгледајте ги популарните веб-сајтови</translation> <translation id="8368027906805972958">Непознат или неподдржан уред (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> е подготвен.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Најави се повторно</translation> <translation id="9155898266292537608">Може да пребарувате и со брзо допирање збор</translation> <translation id="9169507124922466868">Историјата на навигација е отворена до половина екран</translation> +<translation id="9191031968346938109">Додај во…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Проверено пред 1 минута}one{Проверено пред # минута}other{Проверено пред # минути}}</translation> <translation id="9204836675896933765">Преостанува 1 датотека</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Грешка: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Внеси пристапна фраза</translation> <translation id="95817756606698420">Chrome може да го користи <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> за пребарување во Кина. Тоа може да го промените во <ph name="BEGIN_LINK" />Поставки<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Инсталирајте ја апликацијава</translation> <translation id="968900484120156207">Страниците што ги посетувате се појавуваат тука</translation> <translation id="970715775301869095">Останаа <ph name="MINUTES" /> минути</translation> <translation id="974555521953189084">Внесете ја лозинката за да започнете со синхронизација</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb index 3ffe2b1..958aa60 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">സ്ക്രീൻ ക്യാപ്ചർ</translation> <translation id="1111673857033749125">നിങ്ങളുടെ മറ്റ് ഉപകരണങ്ങളിൽ സംരക്ഷിച്ച ബുക്ക്മാർക്കുകൾ ഇവിടെ ദൃശ്യമാകും.</translation> <translation id="1113597929977215864">ലളിതവൽക്കരിച്ച കാഴ്ച കാണിക്കുക</translation> +<translation id="1123070903960493543">നിങ്ങൾ Chrome-മായി ഇടപഴകുന്ന രീതി, തിരഞ്ഞെടുത്ത ക്രമീകരണം, Chrome ക്രാഷായതിന്റെ വിശദാംശങ്ങൾ എന്നിവ</translation> <translation id="1126809382673880764">അപകടകരമായ വെബ്സൈറ്റുകൾ ഡൗൺലോഡുകൾ, വിപുലീകരണങ്ങൾ എന്നിവയിൽ നിന്ന് നിങ്ങളെ പരിരക്ഷിക്കില്ല. Gmail, Search പോലുള്ള മറ്റ് Google സേവനങ്ങളിൽ ഉള്ള സുരക്ഷിത ബ്രൗസിംഗ് പരിരക്ഷ നിങ്ങൾക്ക് തുടർന്നും ലഭിക്കും.</translation> <translation id="1129510026454351943">വിശദാംശങ്ങള്: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{ഒരു ഡൗൺലോഡ് ശേഷിക്കുന്നു.}other{# ഡൗൺലോഡുകൾ ശേഷിക്കുന്നു.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> പങ്കിടാനാവുന്നില്ല</translation> <translation id="1477626028522505441">സെർവർ പ്രശ്നങ്ങൾ കാരണം <ph name="FILE_NAME" /> ഡൗൺലോഡ് ചെയ്യാനായില്ല.</translation> <translation id="1506061864768559482">തിരയൽ യന്ത്രം</translation> +<translation id="151267239139452619">ഡൗൺലോഡുകളിൽ ചേർക്കുക</translation> <translation id="1513352483775369820">ബുക്ക്മാർക്കുകളും വെബ് ചരിത്രവും</translation> <translation id="1513858653616922153">പാസ്വേഡ് ഇല്ലാതാക്കുക</translation> <translation id="1521774566618522728">ഇന്ന് സജീവമായിരുന്നു</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> ലാഭിച്ചു</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> അടച്ചു</translation> <translation id="2139186145475833000">ഹോംസ്ക്രീനിൽ ചേർക്കുക</translation> +<translation id="214888715418183969">Chrome-മായി പങ്കിടാൻ നിങ്ങൾക്ക് താൽപ്പര്യമുള്ളത് തിരഞ്ഞെടുക്കുക. Chrome-ന്റെ ഫീച്ചറുകളും പ്രകടനവും സ്ഥിരതയും മെച്ചപ്പെടുത്താൻ നിങ്ങൾ പങ്കിടുന്ന മെട്രിക്കുകൾ ഉപയോഗിക്കും.</translation> <translation id="2154484045852737596">കാർഡ് എഡിറ്റ് ചെയ്യുക</translation> <translation id="2154710561487035718">URL പകര്ത്തുക</translation> <translation id="2156074688469523661">ശേഷിക്കുന്ന സൈറ്റുകൾ (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR കോഡ്</translation> <translation id="218608176142494674">പങ്കിടൽ</translation> <translation id="2195339740518523951">Chrome-ന്റെ ഏറ്റവും ശക്തമായ സുരക്ഷ നേടുക</translation> +<translation id="2200113223741723867">ഉപയോഗ ഡാറ്റ പങ്കിടൽ മാനേജ് ചെയ്യുക</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> എന്ന പേരിൽ തുടരുക</translation> <translation id="2234876718134438132">സമന്വയവും Google സേവനങ്ങളും</translation> <translation id="2239812875700136898">'Discover-നുള്ള ഓപ്ഷനുകൾ' ബട്ടൺ അമർത്തി നിങ്ങളുടെ സ്റ്റോറികൾ നിയന്ത്രിക്കുക</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">രക്ഷാകർതൃ നിയന്ത്രണങ്ങൾ ഓണായതിനാൽ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു</translation> <translation id="3771694256347217732">Google സേവന നിബന്ധനകൾ</translation> <translation id="3773755127849930740">ജോടിയാക്കാൻ, <ph name="BEGIN_LINK" />Bluetooth ഓണാക്കുക<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">അടിസ്ഥാന ഡാറ്റയും നിങ്ങൾ സന്ദർശിക്കുന്ന വെബ്സൈറ്റുകളെയും ഉപയോഗിക്കുന്ന ആപ്പുകളെയും കുറിച്ചുള്ള വിവരങ്ങളും</translation> <translation id="3775705724665058594">നിങ്ങളുടെ ഉപകരണങ്ങളിലേക്ക് അയയ്ക്കുക</translation> <translation id="3778956594442850293">ഹോം സ്ക്രീനിലേക്ക് ചേർത്തു</translation> <translation id="3789841737615482174">ഇന്സ്റ്റാൾ ചെയ്യുക</translation> <translation id="3810838688059735925">വീഡിയോ</translation> <translation id="3810973564298564668">മാനേജ് ചെയ്യുക</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ഡൗൺലോഡുകൾ ഇല്ലാതാക്കി</translation> +<translation id="3848957262889631524">ഒരു സുരക്ഷാ കീയായി Google <ph name="APP_NAME" /></translation> <translation id="3856096718352044181">ഇത് സാധുതയുള്ളൊരു ദാതാവാണെന്ന് പരിശോധിച്ചുറപ്പിക്കുക അല്ലെങ്കിൽ പിന്നീട് വീണ്ടും ശ്രമിക്കുക</translation> <translation id="3861633093716975811">ജനപ്രിയ വീഡിയോകൾ</translation> <translation id="3892148308691398805">ടെക്സ്റ്റ് പകർത്തുക</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">വേഗത്തിലുള്ള തിരയൽ ഫലങ്ങൾ ഈ പാനലിൽ കാണുക</translation> <translation id="4000212216660919741">ഓഫ്ലൈൻ ഹോം</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# മണിക്കൂർ}other{# മണിക്കൂർ}}</translation> +<translation id="4045764304651014138">ഉപയോഗ ഡാറ്റ</translation> <translation id="4056223980640387499">സിപിയ</translation> +<translation id="4057643060762047384">ഇനിപ്പറയുന്നതിൽ ചേർക്കുക:</translation> <translation id="4060598801229743805">സ്ക്രീനിന്റെ മുകളിൽ ഓപ്ഷനുകൾ ലഭ്യമാണ്</translation> <translation id="4062305924942672200">നിയമ വിവരങ്ങൾ</translation> <translation id="4084682180776658562">ബുക്മാര്ക്ക്</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">അനുവദിക്കൂ</translation> <translation id="5040262127954254034">സ്വകാര്യത</translation> <translation id="5087580092889165836">കാർഡ് ചേർക്കുക</translation> +<translation id="5091249083535528968">വിപുലീകൃത ഉപയോഗ ഡാറ്റ</translation> <translation id="509429900233858213">ഒരു പിശക് സംഭവിച്ചു.</translation> <translation id="510275257476243843">ഒരു മണിക്കൂർ ശേഷിക്കുന്നു</translation> <translation id="5123685120097942451">അദൃശ്യ ടാബ്</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">ലിങ്ക് പങ്കിടുക</translation> <translation id="5836192821815272682">Chrome അപ്ഡേറ്റ് ഡൗൺലോഡ് ചെയ്യുന്നു…</translation> <translation id="5853623416121554550">താൽക്കാലികമായി നിർത്തി</translation> +<translation id="5854512288214985237">സ്ഥിതിവിവരക്കണക്കുകളോ ക്രാഷ് റിപ്പോർട്ടുകളോ Google-ന് അയയ്ക്കില്ല</translation> <translation id="5854790677617711513">30 ദിവസത്തിൽ കൂടുതൽ പഴക്കമുള്ളത്</translation> <translation id="5855546874025048181">പരിഷ്കരിക്കുക: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome-ന് Bluetooth അഡാപ്റ്റർ ഓണാക്കാനാവുന്നില്ല</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">സൈൻ ഔട്ട് ചെയ്ത് സമന്വയം ഓഫാക്കുക</translation> <translation id="6312687380483398334">വെബ് ആപ്പുകൾ (നിശബ്ദം)</translation> <translation id="6316139424528454185">Android പതിപ്പ് പിന്തുണയ്ക്കുന്നതല്ല</translation> +<translation id="6321526113093607004">ബുക്ക്മാർക്കുകളിൽ ചേർക്കുക</translation> <translation id="6324034347079777476">Android സിസ്റ്റം സമന്വയിപ്പിക്കൽ പ്രവർത്തനരഹിതമാക്കി</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> വഴി പങ്കിടുക</translation> <translation id="6337234675334993532">എന്ക്രിപ്ഷന്</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> -ൽ <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">ബുക്ക്മാർക്ക് എഡിറ്റ് ചെയ്യുക</translation> <translation id="6406506848690869874">Sync</translation> +<translation id="6410404864818553978">അടിസ്ഥാന ഉപയോഗ ഡാറ്റ</translation> <translation id="6410883413783534063">ഒരേ സമയം വ്യത്യസ്ത പേജുകൾ സന്ദർശിക്കാൻ ടാബുകൾ തുറക്കുക</translation> <translation id="6412673304250309937">Chrome-ൽ സംഭരിച്ചിരിക്കുന്ന സുരക്ഷിതമല്ലാത്ത സൈറ്റുകളുടെ ലിസ്റ്റ് ഉപയോഗിച്ച് URL-കൾ പരിശോധിക്കുന്നു. ഒരു സൈറ്റ് നിങ്ങളുടെ പാസ്വേഡ് മോഷ്ടിക്കാൻ ശ്രമിക്കുമ്പോഴോ നിങ്ങൾ ഒരു ദോഷകരമായ ഫയൽ ഡൗൺലോഡ് ചെയ്യുമ്പോഴോ, പേജ് ഉള്ളടക്കത്തിന്റെ ബിറ്റുകൾ ഉൾപ്പെടെയുള്ള URL-കളും Chrome സുരക്ഷിത ബ്രൗസിംഗിലേക്ക് അയച്ചേക്കാം.</translation> <translation id="641643625718530986">പ്രിന്റ് ചെയ്യുക…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">പ്രാഥമിക സമന്വയ സജ്ജീകരണം പൂർത്തിയാക്കിയിട്ടില്ല. സമന്വയം ഓഫാണ്.</translation> <translation id="7022756207310403729">ബ്രൗസറിൽ തുറക്കുക</translation> <translation id="702463548815491781">TalkBack അല്ലെങ്കിൽ ആക്സസ് മാറുക ഓണായിരിക്കുമ്പോൾ ശുപാർശ ചെയ്യുന്നു</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> പുനഃസ്ഥാപിച്ചു</translation> <translation id="7029809446516969842">പാസ്വേഡുകള്</translation> <translation id="703523980599857277">ഹോം പേജ് മാറ്റുക</translation> <translation id="7054588988317389591">ചിത്ര വിവരണങ്ങൾ നേടണോ?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> ഡൊമെയ്നും കൂടുതൽ സൈറ്റുകളും</translation> <translation id="8327155640814342956">മികച്ച ബ്രൗസിംഗ് അനുഭവത്തിന് Chrome അപ്ഡേറ്റ് ചെയ്യുക</translation> <translation id="8349013245300336738">ഉപയോഗിച്ച ഡാറ്റയുടെ അളവിനനുസരിച്ച് അടുക്കുക</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> ഡൗൺലോഡുകൾ പുനഃസ്ഥാപിച്ചു</translation> <translation id="8364299278605033898">ജനപ്രിയ വെബ്സൈറ്റുകൾ കാണുക</translation> <translation id="8368027906805972958">പരിചിതമല്ലാത്തതോ പിന്തുണയ്ക്കാത്തതോ ആയ ഉപകരണം (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> തയ്യാറാണ്.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">വീണ്ടും പ്രവേശിക്കുക</translation> <translation id="9155898266292537608">ഒരു വാക്കിൽ പെട്ടെന്ന് ടാപ്പ് ചെയ്തും നിങ്ങൾക്ക് തിരയാൻ കഴിയും</translation> <translation id="9169507124922466868">നാവിഗേഷൻ ചരിത്രം പകുതിയായി തുറന്നിരിക്കുന്നു</translation> +<translation id="9191031968346938109">ഇതിലേക്ക് ചേർക്കുക…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{ഒരു മിനിറ്റ് മുമ്പ് പരിശോധിച്ചു}other{# മിനിറ്റ് മുമ്പ് പരിശോധിച്ചു}}</translation> <translation id="9204836675896933765">ഒരു ഫയൽ ശേഷിക്കുന്നു</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">പിശക്: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">പാസ്ഫ്രെയ്സ് നല്കുക</translation> <translation id="95817756606698420"><ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> ഉപയോഗിച്ച് Chrome-ന് ചൈനയിൽ തിരയാനാവും. നിങ്ങൾക്കിത് <ph name="BEGIN_LINK" />ക്രമീകരണത്തിൽ<ph name="END_LINK" /> മാറ്റാനാവും.</translation> +<translation id="962979164594783469">ഈ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യുക</translation> <translation id="968900484120156207">നിങ്ങൾ സന്ദർശിക്കുന്ന പേജുകൾ ഇവിടെ ദൃശ്യമാകും</translation> <translation id="970715775301869095"><ph name="MINUTES" /> മിനിറ്റ് ശേഷിക്കുന്നു</translation> <translation id="974555521953189084">സമന്വയിപ്പിക്കൽ തുടങ്ങുന്നതിന് പാസ്ഫ്രെയ്സ് നൽകുക</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb index 9073839..843e3e1 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -444,7 +444,7 @@ <translation id="4405224443901389797">यामध्ये हलवा…</translation> <translation id="4411535500181276704">लाइट मोड</translation> <translation id="4415276339145661267">तुमचे Google खाते व्यवस्थापित करा</translation> -<translation id="4427306783828095590">वर्धित सुरक्षितता फिशिंग आणि मालवेअर अधिक चांगल्यारीत्या ब्लॉक करते</translation> +<translation id="4427306783828095590">वर्धित सुरक्षितता फिशिंग आणि मालवेअर अधिक चांगल्यारितीने ब्लॉक करते</translation> <translation id="4440958355523780886">Google ने पुरवलेले लाइट पेज. मूळ पेज लोड करण्यासाठी टॅप करा.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> टॅब बंद करा</translation> <translation id="4452548195519783679"><ph name="FOLDER_NAME" /> ला बुकमार्क केले</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb index fb861b8..2e48722 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">अहिले</translation> <translation id="2175927920773552910">QR कोड</translation> <translation id="218608176142494674">आदान प्रदान गर्दै</translation> +<translation id="2195339740518523951">Chrome को सबैभन्दा बलियो सुरक्षा विकल्प चयन गर्नुहोस्</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> का रूपमा जारी राख्नुहोस्</translation> <translation id="2234876718134438132">सिंक तथा Google सेवाहरू</translation> <translation id="2239812875700136898">Discover का विकल्पहरू नामक बटन प्रयोग गरी आफ्नो समाचार फिडमा देखिने सामग्री नियन्त्रण गर्नुहोस्</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google ले खोज र Google का अन्य सेवाहरूलाई वैयक्तीकृत गर्न तपाईंको इतिहाससम्बन्धी जानकारी प्रयोग गर्न सक्छ</translation> <translation id="2898264748040935573">भण्डार गरिएको पासवर्ड सम्पादन गर्नुहोस्</translation> <translation id="2900528713135656174">कार्यक्रम सिर्जना गर्नुहोस्</translation> +<translation id="2901411048554510387"><ph name="WEBSITE_TITLE" /> सम्बन्धी सुझावहरू देखाइँदै</translation> <translation id="2904414404539560095">ट्याब आदान प्रदान गरिनु पर्ने यन्त्रहरूको सूची पूर्ण उचाइमा खोलिएको छ।</translation> <translation id="2905036901251765993">वरपर रहेका मान्छेहरूसँग आदान प्रदान गर्न उनीहरूलाई यो QR कोड स्क्यान गर्न लगाउनुहोस्</translation> <translation id="2909615210195135082">Google का सूचनाहरूको प्लेटफर्म</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">यहाँ सार्नुहोस्…</translation> <translation id="4411535500181276704">लाइट मोड</translation> <translation id="4415276339145661267">आफ्नो Google खाताको व्यवस्थापन गर्नुहोस्</translation> +<translation id="4427306783828095590">परिष्कृत सुरक्षा प्रयोग गरी फिसिङ तथा मालवेयरमाथि अझ राम्रोसँग रोक लगाउन सकिन्छ</translation> <translation id="4440958355523780886">Google ले उपलब्ध गराएको मूल पृष्ठको लाइट संस्करण। मूल पृष्ठ लोड गर्न ट्याप गर्नुहोस्।</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ट्याब बन्द गर्नुहोस्</translation> <translation id="4452548195519783679"><ph name="FOLDER_NAME" /> मा पुस्तक चिन्ह लगाइयो</translation> @@ -799,6 +802,7 @@ <translation id="6783942555455976443">यो पृष्ठ पछि पढ्ने प्रयोजनका लागि सुरक्षित गर्नुहोस् र रिमाइन्डर प्राप्त गर्नुहोस्</translation> <translation id="6811034713472274749">पृष्ठ हेर्नका लागि तयार छ</translation> <translation id="6820686453637990663">CVC</translation> +<translation id="6824899148643461612"><ph name="TAB_TITLE" />, ट्याब, चयन गरियो</translation> <translation id="6845325883481699275">Chrome को सुरक्षामा सुधार गर्न मद्दत गर्नुहोस्</translation> <translation id="6846298663435243399">लोड हुँदै...</translation> <translation id="6850409657436465440">तपाईंको डाउनलोड हुने क्रम अझै जारी छ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb index 998b598b..27801a49 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Skjermdump</translation> <translation id="1111673857033749125">Bokmerker som er lagret på de andre enhetene dine, vises her.</translation> <translation id="1113597929977215864">Vis forenklet visning</translation> +<translation id="1123070903960493543">Hvordan du bruker Chrome, innstillinger du har valgt, detaljer om Chrome-krasj</translation> <translation id="1126809382673880764">Beskytter deg ikke mot farlige nettsteder, nedlastinger eller utvidelser. Du får fremdeles beskyttelse fra Safe Browsing der dette er tilgjengelig, på andre Google-tjenester, som Gmail og Søk.</translation> <translation id="1129510026454351943">Detaljer: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 nedlasting venter.}other{# nedlastinger venter.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Kan ikke dele <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Nedlastingen av <ph name="FILE_NAME" /> ble avbrutt på grunn av tjenerproblemer.</translation> <translation id="1506061864768559482">Søkemotor</translation> +<translation id="151267239139452619">Legg til i Nedlastinger</translation> <translation id="1513352483775369820">Bokmerker og nettlogg</translation> <translation id="1513858653616922153">Slett passordet</translation> <translation id="1521774566618522728">Aktiv i dag</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> spart</translation> <translation id="213279576345780926">Lukket <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Legg til på startsiden</translation> +<translation id="214888715418183969">Velg hva du synes er greit å dele med Chrome. Målingene du deler, brukes til å gjøre funksjonene, ytelsen og stabiliteten til Chrome bedre.</translation> <translation id="2154484045852737596">Endre kortet</translation> <translation id="2154710561487035718">Kopier nettadresse</translation> <translation id="2156074688469523661">Andre nettsteder (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR-kode</translation> <translation id="218608176142494674">Deling</translation> <translation id="2195339740518523951">Få den sterkeste sikkerheten Chrome tilbyr</translation> +<translation id="2200113223741723867">Administrer deling av bruksdata</translation> <translation id="2227444325776770048">Fortsett som <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Synkronisering/Google-tjenester</translation> <translation id="2239812875700136898">Styr nyhetssakene dine via Alternativer for Discover-knappen</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Denne innstillingen er avslått fordi foreldrekontroll er på</translation> <translation id="3771694256347217732">Googles vilkår for bruk</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Slå på Bluetooth<ph name="END_LINK" /> for å tillate tilkobling</translation> +<translation id="3773856050682458546">Grunnleggende data pluss informasjon om nettstedene du besøker, og appene du bruker</translation> <translation id="3775705724665058594">Send til enhetene dine</translation> <translation id="3778956594442850293">Lagt til på startskjermen</translation> <translation id="3789841737615482174">Installer</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Administrer</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedlastinger er slettet</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> som sikkerhetsnøkkel</translation> <translation id="3856096718352044181">Verifiser at dette er en gyldig leverandør, eller prøv på nytt senere</translation> <translation id="3861633093716975811">Populære videoer</translation> <translation id="3892148308691398805">Kopiér teksten</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Se umiddelbare søkeresultater i dette panelet</translation> <translation id="4000212216660919741">Hjem uten nett</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# t}other{# t}}</translation> +<translation id="4045764304651014138">Bruksdata</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Legg til i:</translation> <translation id="4060598801229743805">Du finner alternativene oppe på skjermen</translation> <translation id="4062305924942672200">Juridisk informasjon</translation> <translation id="4084682180776658562">Legg til bokmerke</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Tillat</translation> <translation id="5040262127954254034">Personvern</translation> <translation id="5087580092889165836">Legg til et kort</translation> +<translation id="5091249083535528968">Utvidede bruksdata</translation> <translation id="509429900233858213">Det oppsto en feil.</translation> <translation id="510275257476243843">1 time igjen</translation> <translation id="5123685120097942451">Inkognitofane</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Del en link</translation> <translation id="5836192821815272682">Laster ned en Chrome-oppdatering …</translation> <translation id="5853623416121554550">på pause</translation> +<translation id="5854512288214985237">Ingen statistikk eller programstopprapporter blir sendt til Google</translation> <translation id="5854790677617711513">Eldre enn 30 dager</translation> <translation id="5855546874025048181">Juster: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome kan ikke slå på Bluetooth-adapteren</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Logg av og slå av synkronisering</translation> <translation id="6312687380483398334">Nettprogrammer (stille)</translation> <translation id="6316139424528454185">Android-versjonen støttes ikke</translation> +<translation id="6321526113093607004">Legg til i bokmerker</translation> <translation id="6324034347079777476">Synkronisering for Android-systemet er slått av</translation> <translation id="6333140779060797560">Del via <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Kryptering</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> på <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Rediger bokmerket</translation> <translation id="6406506848690869874">Synkroniser</translation> +<translation id="6410404864818553978">Grunnleggende bruksdata</translation> <translation id="6410883413783534063">Åpne faner for å besøke ulike sider samtidig</translation> <translation id="6412673304250309937">Kontrollerer nettadresser opp mot en liste i Chrome over utrygge nettsteder. Hvis nettsteder prøver å stjele passordet ditt, eller når du laster ned skadelige filer, kan Chrome også sende nettadresser, inkludert deler av sideinnholdet, til Safe Browsing.</translation> <translation id="641643625718530986">Skriv ut</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Innledende synkroniseringsoppsett ble ikke fullført. Synkronisering er slått av.</translation> <translation id="7022756207310403729">Åpne i nettleseren</translation> <translation id="702463548815491781">Anbefalt når TalkBack eller brytertilgang er på</translation> +<translation id="7027549951530753705">Gjenopprettet <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Passord</translation> <translation id="703523980599857277">Endre startsiden</translation> <translation id="7054588988317389591">Vil du ha bildebeskrivelser?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> og flere nettsteder</translation> <translation id="8327155640814342956">For å få den beste surfeopplevelsen, åpne for å oppdatere Chrome</translation> <translation id="8349013245300336738">Sortér etter mengden data som er brukt</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> nedlastinger er gjenopprettet</translation> <translation id="8364299278605033898">Se populære nettsteder</translation> <translation id="8368027906805972958">Ukjent eller ikke-støttet enhet (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> er klart.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Logg på igjen</translation> <translation id="9155898266292537608">Du kan også søke med et kjapt trykk på et ord</translation> <translation id="9169507124922466868">Navigasjonshistorikken er halvveis åpnet</translation> +<translation id="9191031968346938109">Legg til i…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Sjekket for ett minutt siden}other{Sjekket for # minutter siden}}</translation> <translation id="9204836675896933765">1 fil gjenstår</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Feil: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Angi en passordfrase</translation> <translation id="95817756606698420">Chrome kan bruke <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> for søk i Kina. Du kan endre dette i <ph name="BEGIN_LINK" />Innstillinger<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Installer denne appen</translation> <translation id="968900484120156207">Sider du besøker, vises her</translation> <translation id="970715775301869095"><ph name="MINUTES" /> minutter igjen</translation> <translation id="974555521953189084">Skriv inn passordfrasen din for å starte synkroniseringen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb index 31e4891..72acdf2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Zrzut ekranu</translation> <translation id="1111673857033749125">Tutaj wyświetlą się zakładki z innych urządzeń.</translation> <translation id="1113597929977215864">Pokaż widok uproszczony</translation> +<translation id="1123070903960493543">Sposób interakcji z Chrome, wybrane ustawienia, szczegóły awarii przeglądarki Chrome</translation> <translation id="1126809382673880764">Nie chroni przed niebezpiecznymi stronami, pobieranymi plikami ani rozszerzeniami. Funkcja Bezpieczne przeglądanie nadal będzie chronić Cię w innych usługach Google, w których jest dostępna (takich jak Gmail i wyszukiwarka).</translation> <translation id="1129510026454351943">Szczegóły: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 plik oczekuje na pobranie.}few{# pliki oczekują na pobranie.}many{# plików oczekuje na pobranie.}other{# pliku oczekuje na pobranie.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" />: nie udało się udostępnić</translation> <translation id="1477626028522505441">Nie udało się pobrać pliku <ph name="FILE_NAME" /> z powodu problemów z serwerem.</translation> <translation id="1506061864768559482">Wyszukiwarka</translation> +<translation id="151267239139452619">Dodaj do Pobranych</translation> <translation id="1513352483775369820">Zakładki i historia online</translation> <translation id="1513858653616922153">Usuń hasło</translation> <translation id="1521774566618522728">Aktywność: dzisiaj</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Zaoszczędzono <ph name="DATA" /></translation> <translation id="213279576345780926">Zamknięto <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj do ekranu głównego</translation> +<translation id="214888715418183969">Wybierz, co chcesz udostępniać w Chrome. Udostępniane dane będą używane do ulepszania funkcji przeglądarki Chrome, jej działania i stabilności.</translation> <translation id="2154484045852737596">Edytowanie karty</translation> <translation id="2154710561487035718">Kopiuj adres URL</translation> <translation id="2156074688469523661">Pozostałe strony (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Kod QR</translation> <translation id="218608176142494674">Udostępnianie</translation> <translation id="2195339740518523951">Korzystaj z najlepszych zabezpieczeń Chrome</translation> +<translation id="2200113223741723867">Zarządzanie udostępnianiem danych o korzystaniu</translation> <translation id="2227444325776770048">Kontynuuj jako <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Synchronizacja i usługi Google</translation> <translation id="2239812875700136898">Zarządzaj wyświetlanymi wiadomościami za pomocą opcji przycisku Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">To ustawienie jest wyłączone, ponieważ włączona jest kontrola rodzicielska</translation> <translation id="3771694256347217732">Warunki korzystania z usług Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Włącz Bluetooth<ph name="END_LINK" />, by umożliwić parowanie</translation> +<translation id="3773856050682458546">Podstawowe dane oraz informacje na temat odwiedzanych stron i używanych aplikacji</translation> <translation id="3775705724665058594">Wyślij na swoje urządzenia</translation> <translation id="3778956594442850293">Dodano do ekranu głównego</translation> <translation id="3789841737615482174">Zainstaluj</translation> <translation id="3810838688059735925">Wideo</translation> <translation id="3810973564298564668">Zarządzaj</translation> <translation id="3819178904835489326">Usunięte pobrane pliki: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> jako klucz bezpieczeństwa</translation> <translation id="3856096718352044181">Sprawdź, czy jest to prawidłowy dostawca, lub spróbuj ponownie później</translation> <translation id="3861633093716975811">Popularne filmy</translation> <translation id="3892148308691398805">Kopiuj tekst</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Zobacz wyniki wyszukiwania dynamicznego w tym panelu</translation> <translation id="4000212216660919741">Ekran główny offline</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# godzina}few{# godziny}many{# godzin}other{# godziny}}</translation> +<translation id="4045764304651014138">Dane o korzystaniu</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Dodaj do:</translation> <translation id="4060598801229743805">Opcje dostępne na górze ekranu</translation> <translation id="4062305924942672200">Informacje prawne</translation> <translation id="4084682180776658562">Dodaj do zakładek</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Zezwalaj</translation> <translation id="5040262127954254034">Prywatność</translation> <translation id="5087580092889165836">Dodaj kartę</translation> +<translation id="5091249083535528968">Rozszerzone dane o korzystaniu</translation> <translation id="509429900233858213">Wystąpił błąd.</translation> <translation id="510275257476243843">Pozostała godzina</translation> <translation id="5123685120097942451">Karta incognito</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Udostępnij link</translation> <translation id="5836192821815272682">Pobieram aktualizację Chrome…</translation> <translation id="5853623416121554550">Wstrzymano</translation> +<translation id="5854512288214985237">Statystyki ani raporty o awariach nie są przesyłane do Google</translation> <translation id="5854790677617711513">Sprzed ponad 30 dni</translation> <translation id="5855546874025048181">Sprecyzuj: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome nie może włączyć adaptera Bluetooth</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Wyloguj się i wyłącz synchronizację</translation> <translation id="6312687380483398334">Aplikacje internetowe (wyciszenie)</translation> <translation id="6316139424528454185">Ta wersja Androida jest nieobsługiwana</translation> +<translation id="6321526113093607004">Dodaj do Zakładek</translation> <translation id="6324034347079777476">Synchronizacja systemu Android jest wyłączona</translation> <translation id="6333140779060797560">Udostępnij przez: <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Szyfrowanie</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609">Błąd <ph name="ERROR_CODE" /> adresu URL <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Edytuj zakładkę</translation> <translation id="6406506848690869874">Synchronizacja</translation> +<translation id="6410404864818553978">Podstawowe dane o korzystaniu</translation> <translation id="6410883413783534063">Otwórz karty, by odwiedzić jednocześnie wiele stron</translation> <translation id="6412673304250309937">Sprawdza, czy URL jest na liście potencjalnie niebezpiecznych stron zapisanej w Chrome. Jeśli strona próbuje wykraść Twoje hasło lub pobierasz szkodliwy plik, Chrome może też wysłać URL wraz z fragmentami zawartości strony do usługi Bezpieczne przeglądanie.</translation> <translation id="641643625718530986">Drukuj…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Nie ukończono początkowej konfiguracji synchronizacji. Synchronizacja jest wyłączona.</translation> <translation id="7022756207310403729">Otwórz w przeglądarce</translation> <translation id="702463548815491781">Zalecane, gdy włączono TalkBack lub Switch Access</translation> +<translation id="7027549951530753705">Przywrócono: <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Hasła</translation> <translation id="703523980599857277">Zmień stronę główną</translation> <translation id="7054588988317389591">Czy chcesz pobierać opisy obrazów?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> i więcej stron</translation> <translation id="8327155640814342956">Aby komfortowo przeglądać internet, otwórz tę stronę i zaktualizuj Chrome</translation> <translation id="8349013245300336738">Sortuj według ilości wykorzystanych danych</translation> +<translation id="835847953965672673">Przywrócone pliki: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="8364299278605033898">Zobacz najpopularniejsze strony</translation> <translation id="8368027906805972958">Nieznane lub nieobsługiwane urządzenie (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Język <ph name="LANG" /> jest gotowy.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Zaloguj się ponownie</translation> <translation id="9155898266292537608">Możesz też wyszukiwać szybkim kliknięciem słowa</translation> <translation id="9169507124922466868">Historia nawigacji jest otwarta w połowie</translation> +<translation id="9191031968346938109">Dodaj do…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Sprawdzano minutę temu}few{Sprawdzano # minuty temu}many{Sprawdzano # minut temu}other{Sprawdzano # minuty temu}}</translation> <translation id="9204836675896933765">Pozostał jeden plik</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Błąd: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Wpisz hasło</translation> <translation id="95817756606698420">Chrome może używać <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> do wyszukiwania w Chinach. Możesz to zmienić w <ph name="BEGIN_LINK" />Ustawieniach<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Zainstaluj tę aplikację</translation> <translation id="968900484120156207">Tutaj pojawią się strony, które odwiedzisz</translation> <translation id="970715775301869095">Pozostało: <ph name="MINUTES" /> min</translation> <translation id="974555521953189084">Wpisz hasło, by rozpocząć synchronizację</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb index b55ff73..4f0a89e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Captura de tela</translation> <translation id="1111673857033749125">Favoritos salvos nos seus outros dispositivos serão exibidos aqui.</translation> <translation id="1113597929977215864">Mostrar a versão simplificada</translation> +<translation id="1123070903960493543">A forma como você interage com o Chrome, as configurações selecionadas e os detalhes de falhas do Chrome</translation> <translation id="1126809382673880764">Não protege você contra sites, downloads e extensões perigosos. Você ainda terá a proteção do "Navegação segura", sempre que possível, em outros Serviços do Google, como o Gmail e a Pesquisa.</translation> <translation id="1129510026454351943">Detalhes: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download pendente.}one{# download pendente.}other{# downloads pendentes.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Falha no compartilhamento de <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Falha no download do arquivo <ph name="FILE_NAME" /> devido a problemas de servidor.</translation> <translation id="1506061864768559482">Mecanismo de pesquisa</translation> +<translation id="151267239139452619">Adicionar aos downloads</translation> <translation id="1513352483775369820">Favoritos e histórico da Web</translation> <translation id="1513858653616922153">Excluir senha</translation> <translation id="1521774566618522728">Ativado hoje</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> salvo(s)</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> fechada</translation> <translation id="2139186145475833000">Adicionar à tela inicial</translation> +<translation id="214888715418183969">Escolha o que você gostaria de compartilhar com o Chrome. As métricas compartilhadas são usadas para aprimorar os recursos, o desempenho e a estabilidade do navegador.</translation> <translation id="2154484045852737596">Editar cartão</translation> <translation id="2154710561487035718">Copiar URL</translation> <translation id="2156074688469523661">Sites restantes (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Código QR</translation> <translation id="218608176142494674">Compartilhamento</translation> <translation id="2195339740518523951">Usar o mais alto nível de segurança do Chrome</translation> +<translation id="2200113223741723867">Gerenciar o compartilhamento de dados de uso</translation> <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Serviços do Google e de sincronização</translation> <translation id="2239812875700136898">Controle suas matérias com o botão "Opções do Discover"</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Esta configuração está desativada porque o "controle dos pais" está ativado</translation> <translation id="3771694256347217732">Termos de Serviço do Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Ativar o Bluetooth<ph name="END_LINK" /> para permitir o pareamento</translation> +<translation id="3773856050682458546">Dados básicos e informações sobre os sites que você visita e os apps que usa</translation> <translation id="3775705724665058594">Enviar para seus dispositivos</translation> <translation id="3778956594442850293">Adicionado à tela inicial</translation> <translation id="3789841737615482174">Instalar</translation> <translation id="3810838688059735925">Vídeo</translation> <translation id="3810973564298564668">Gerenciar</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> downloads excluídos</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> como chave de segurança</translation> <translation id="3856096718352044181">Verifique se o provedor é válido ou tente novamente mais tarde</translation> <translation id="3861633093716975811">Vídeos mais acessados</translation> <translation id="3892148308691398805">Copiar texto</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Veja neste painel resultados da pesquisa instantâneos</translation> <translation id="4000212216660919741">Página inicial off-line</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}other{# h}}</translation> +<translation id="4045764304651014138">Dados de uso</translation> <translation id="4056223980640387499">Sépia</translation> +<translation id="4057643060762047384">Adicionar:</translation> <translation id="4060598801229743805">Opções disponíveis perto da parte superior da tela</translation> <translation id="4062305924942672200">Informações legais</translation> <translation id="4084682180776658562">Favorito</translation> @@ -546,6 +554,7 @@ <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidade</translation> <translation id="5087580092889165836">Adicionar cartão</translation> +<translation id="5091249083535528968">Dados de uso estendidos</translation> <translation id="509429900233858213">Ocorreu um erro.</translation> <translation id="510275257476243843">Uma hora restante</translation> <translation id="5123685120097942451">Guia anônima</translation> @@ -652,6 +661,7 @@ <translation id="5833984609253377421">Compartilhar link</translation> <translation id="5836192821815272682">Fazendo o download da atualização do Chrome…</translation> <translation id="5853623416121554550">pausado</translation> +<translation id="5854512288214985237">Os relatórios de erros e as estatísticas não serão enviados ao Google</translation> <translation id="5854790677617711513">Com mais de 30 dias</translation> <translation id="5855546874025048181">Refinar: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">O Chrome não pôde ativar o adaptador Bluetooth</translation> @@ -724,6 +734,7 @@ <translation id="6303969859164067831">Sair e desativar a sincronização</translation> <translation id="6312687380483398334">Apps da Web (silenciosos)</translation> <translation id="6316139424528454185">Versão Android não compatível</translation> +<translation id="6321526113093607004">Adicionar aos favoritos</translation> <translation id="6324034347079777476">Sincronização do sistema Android desativada</translation> <translation id="6333140779060797560">Compartilhar via <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Criptografia</translation> @@ -741,6 +752,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> em <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Editar favorito</translation> <translation id="6406506848690869874">Sincronizar</translation> +<translation id="6410404864818553978">Dados de uso básicos</translation> <translation id="6410883413783534063">Abra guias para acessar páginas diferentes ao mesmo tempo</translation> <translation id="6412673304250309937">Verifica se os URLs estão em uma lista de sites não seguros armazenada no Chrome. Se um site tentar roubar sua senha ou se você fizer o download de um arquivo nocivo, o Chrome também poderá enviar URLs, incluindo partes do conteúdo da página, para o "Navegação segura".</translation> <translation id="641643625718530986">Imprimir...</translation> @@ -834,6 +846,7 @@ <translation id="7015203776128479407">A configuração de sincronização inicial não foi concluída. A sincronização está desativada.</translation> <translation id="7022756207310403729">Abrir no navegador</translation> <translation id="702463548815491781">Recomendado quando o TalkBack ou o acesso com interruptor estão ativados</translation> +<translation id="7027549951530753705">Download de <ph name="ITEM_TITLE" /> restaurado</translation> <translation id="7029809446516969842">Senhas</translation> <translation id="703523980599857277">Mudar página inicial</translation> <translation id="7054588988317389591">Ver descrições de imagens?</translation> @@ -1015,6 +1028,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> e outros sites</translation> <translation id="8327155640814342956">Para ter a melhor experiência de navegação, abra para atualizar o Chrome</translation> <translation id="8349013245300336738">Classificar por quantidade de dados usados</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> downloads restaurados</translation> <translation id="8364299278605033898">Ver sites conhecidos</translation> <translation id="8368027906805972958">Dispositivo desconhecido ou incompatível (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">O <ph name="LANG" /> está pronto.</translation> @@ -1123,6 +1137,7 @@ <translation id="9148126808321036104">Faça login novamente</translation> <translation id="9155898266292537608">Você também pode pesquisar com um toque rápido em uma palavra</translation> <translation id="9169507124922466868">Histórico de navegação parcialmente aberto</translation> +<translation id="9191031968346938109">Adicionar a…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Verificado 1 minuto atrás}one{Verificado # minuto atrás}other{Verificado # minutos atrás}}</translation> <translation id="9204836675896933765">1 arquivo restante</translation> <translation id="9206873250291191720">A</translation> @@ -1135,6 +1150,7 @@ <translation id="938850635132480979">Erro: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Inserir senha</translation> <translation id="95817756606698420">O Chrome pode usar o <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> para fazer pesquisas na China. É possível alterar essa opção nas <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalar este app</translation> <translation id="968900484120156207">As páginas visitadas são exibidas aqui</translation> <translation id="970715775301869095"><ph name="MINUTES" /> minutos restantes</translation> <translation id="974555521953189084">Digite sua senha longa para iniciar a sincronização</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb index a598dc4b..b3292ea 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Ecrã a ser capturado...</translation> <translation id="1111673857033749125">Os marcadores guardados nos seus outros dispositivos são apresentados aqui.</translation> <translation id="1113597929977215864">Mostrar vista simplificada</translation> +<translation id="1123070903960493543">A forma como interage com o Chrome, as definições que selecionou, os detalhes das falhas do Chrome.</translation> <translation id="1126809382673880764">Não protege contra transferências, extensões ou Websites perigosos. Continuará a obter a proteção da Navegação segura, quando disponível, noutros Serviços Google, como o Gmail e a Pesquisa.</translation> <translation id="1129510026454351943">Detalhes: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 transferência pendente.}other{# transferências pendentes.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Não é possível partilhar <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">A transferência de <ph name="FILE_NAME" /> falhou devido a problemas do servidor.</translation> <translation id="1506061864768559482">Motor de pesquisa</translation> +<translation id="151267239139452619">Adicionar às Transferências</translation> <translation id="1513352483775369820">Marcadores e histórico da Web</translation> <translation id="1513858653616922153">Eliminar palavra-passe</translation> <translation id="1521774566618522728">Ativo hoje</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> guardado(s)</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> fechado</translation> <translation id="2139186145475833000">Adicionar ao ecrã principal</translation> +<translation id="214888715418183969">Escolha o que não se importa de partilhar com o Chrome. As métricas que partilhar serão utilizadas para ajudar a melhorar as funcionalidades, o desempenho e a estabilidade do Chrome.</translation> <translation id="2154484045852737596">Editar cartão</translation> <translation id="2154710561487035718">Copiar URL</translation> <translation id="2156074688469523661">Sites restantes (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Código QR</translation> <translation id="218608176142494674">Partilha</translation> <translation id="2195339740518523951">Obtenha a segurança mais avançada do Chrome</translation> +<translation id="2200113223741723867">Efetue a gestão da partilha dos dados de utilização</translation> <translation id="2227444325776770048">Continuar como <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sincronização e serviços Google</translation> <translation id="2239812875700136898">Controle as notícias a partir do botão Opções para o Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Esta definição está desativada porque o controlo parental está ativado.</translation> <translation id="3771694256347217732">Termos de Utilização do Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Ative o Bluetooth<ph name="END_LINK" /> para permitir a sincronização</translation> +<translation id="3773856050682458546">Os dados básicos e as informações acerca dos Websites que visita e as apps que utiliza.</translation> <translation id="3775705724665058594">Envie para os seus dispositivos</translation> <translation id="3778956594442850293">Adicionado ao ecrã principal</translation> <translation id="3789841737615482174">Instalar</translation> <translation id="3810838688059735925">Vídeo</translation> <translation id="3810973564298564668">Gerir</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> transferências eliminadas</translation> +<translation id="3848957262889631524">O Google <ph name="APP_NAME" /> como uma chave de segurança</translation> <translation id="3856096718352044181">Confirme que se trata de um fornecedor válido ou tente novamente mais tarde.</translation> <translation id="3861633093716975811">Vídeos populares</translation> <translation id="3892148308691398805">Copiar texto</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Veja resultados da pesquisa instantâneos neste painel.</translation> <translation id="4000212216660919741">Em casa offline</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation> +<translation id="4045764304651014138">Dados de utilização</translation> <translation id="4056223980640387499">Sépia</translation> +<translation id="4057643060762047384">Adicionar a:</translation> <translation id="4060598801229743805">Opções disponíveis junto à parte superior do ecrã</translation> <translation id="4062305924942672200">Informações legais</translation> <translation id="4084682180776658562">Marcar</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidade</translation> <translation id="5087580092889165836">Adicionar cartão</translation> +<translation id="5091249083535528968">Dados de utilização alargados</translation> <translation id="509429900233858213">Ocorreu um erro.</translation> <translation id="510275257476243843">Falta 1 hora</translation> <translation id="5123685120097942451">Separador de navegação anónima</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Partilhar link</translation> <translation id="5836192821815272682">A transferir a atualização do Chrome…</translation> <translation id="5853623416121554550">em pausa</translation> +<translation id="5854512288214985237">Não são enviados relatórios de falhas ou estatísticas para a Google.</translation> <translation id="5854790677617711513">Com mais de 30 dias</translation> <translation id="5855546874025048181">Refinar: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">O Chrome não consegue ativar o adaptador Bluetooth</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Terminar sessão e desativar a sincronização</translation> <translation id="6312687380483398334">Apps para a Web (silenciosas)</translation> <translation id="6316139424528454185">Versão Android não suportada.</translation> +<translation id="6321526113093607004">Adicionar aos Marcadores</translation> <translation id="6324034347079777476">Sincronização do sistema Android desativada</translation> <translation id="6333140779060797560">Partilhar através de <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Encriptação</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> em <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Editar marcador</translation> <translation id="6406506848690869874">Sincronização</translation> +<translation id="6410404864818553978">Dados de utilização básicos</translation> <translation id="6410883413783534063">Abra separadores para visitar várias páginas em simultâneo.</translation> <translation id="6412673304250309937">Verifica os URLs com listas de sites inseguros armazenados no Chrome. Se um site tentar roubar a sua palavra-passe, ou quando transferir um ficheiro prejudicial, o Chrome também pode enviar URLs, incluindo bits de conteúdo das páginas, para a Navegação segura.</translation> <translation id="641643625718530986">Imprimir…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">A configuração da sincronização inicial não foi concluída. A sincronização está desativada.</translation> <translation id="7022756207310403729">Abrir no navegador</translation> <translation id="702463548815491781">Recomendado quando o TalkBack ou o Acesso por comutador estão ativados.</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> restaurado</translation> <translation id="7029809446516969842">Palavras-passe</translation> <translation id="703523980599857277">Alterar página inicial</translation> <translation id="7054588988317389591">Pretende obter descrições de imagens?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408">De <ph name="DOMAIN_NAME" /> e de mais sites</translation> <translation id="8327155640814342956">Para obter a melhor experiência de navegação, abra o Chrome para o atualizar.</translation> <translation id="8349013245300336738">Ordenar por quantidade de dados utilizados</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> transferências restauradas.</translation> <translation id="8364299278605033898">Veja Websites populares</translation> <translation id="8368027906805972958">Dispositivo desconhecido ou não suportado (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">O <ph name="LANG" /> está pronto.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Iniciar sessão novamente</translation> <translation id="9155898266292537608">Também pode pesquisar ao tocar rapidamente numa palavra.</translation> <translation id="9169507124922466868">O histórico de navegação está aberto até meio.</translation> +<translation id="9191031968346938109">Adicionar a…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Última verificação há 1 minuto}other{Última verificação há # minutos}}</translation> <translation id="9204836675896933765">Falta 1 ficheiro</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Erro: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Introduzir frase de acesso</translation> <translation id="95817756606698420">O Chrome pode utilizar o <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> para pesquisar na China. Pode alterar esta opção nas <ph name="BEGIN_LINK" />Definições<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalar esta app</translation> <translation id="968900484120156207">As páginas que visita aparecem aqui.</translation> <translation id="970715775301869095">Faltam <ph name="MINUTES" /> minutos</translation> <translation id="974555521953189084">Introduza a frase de acesso para iniciar a sincronização</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index fd64abd..99aa29d3 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
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Сейчас</translation> <translation id="2175927920773552910">QR-код</translation> <translation id="218608176142494674">Совместный доступ</translation> +<translation id="2195339740518523951">Обеспечьте максимальную защиту в Chrome</translation> <translation id="2227444325776770048">Продолжить как <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Синхронизация сервисов Google</translation> <translation id="2239812875700136898">Управляйте контентом с помощью кнопки "Параметры рекомендаций".</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google может использовать вашу историю, чтобы персонализировать Поиск и другие сервисы.</translation> <translation id="2898264748040935573">Изменение сохраненного пароля.</translation> <translation id="2900528713135656174">Создать мероприятие</translation> +<translation id="2901411048554510387">Показ подсказок для сайта "<ph name="WEBSITE_TITLE" />"</translation> <translation id="2904414404539560095">Список устройств для отправки вкладки развернут на весь экран.</translation> <translation id="2905036901251765993">Чтобы предоставить доступ пользователю поблизости, попросите его отсканировать этот QR-код.</translation> <translation id="2909615210195135082">Платформа уведомлений Google</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Переместить в…</translation> <translation id="4411535500181276704">Упрощенный режим</translation> <translation id="4415276339145661267">Перейти в настройки аккаунта Google</translation> +<translation id="4427306783828095590">В режиме "Улучшенная защита" фишинговые атаки и вредоносное ПО блокируются ещё эффективнее.</translation> <translation id="4440958355523780886">Lite-версия страницы получена с помощью Google. Нажмите, чтобы загрузить оригинал.</translation> <translation id="4452411734226507615">Закрыть вкладку "<ph name="TAB_TITLE" />"</translation> <translation id="4452548195519783679">Закладка добавлена в папку "<ph name="FOLDER_NAME" />"</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb index f61c2cc5..c04f112 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Zajemanje slike</translation> <translation id="1111673857033749125">Tu bodo prikazani zaznamki, shranjeni v drugih napravah.</translation> <translation id="1113597929977215864">Pokaži poenostavljen pogled</translation> +<translation id="1123070903960493543">Kako uporabljate Chrome, katere nastavitve ste izbrali, podrobnosti zrušitev Chroma</translation> <translation id="1126809382673880764">Ne ščiti pred nevarnimi spletnimi mesti, prenosi in razširitvami. Še vedno boste deležni zaščite Varnega brskanja, kjer je na voljo, v drugih Googlovih storitvah, kot sta Gmail in Iskanje Google.</translation> <translation id="1129510026454351943">Podrobnosti: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 prenos na čakanju}one{# prenos na čakanju}two{# prenosa na čakanju}few{# prenosi na čakanju}other{# prenosov na čakanju}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Ni mogoče deliti tega: <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Prenos datoteke <ph name="FILE_NAME" /> ni uspel zaradi težav s strežnikom.</translation> <translation id="1506061864768559482">Iskalnik</translation> +<translation id="151267239139452619">Dodaj v prenose</translation> <translation id="1513352483775369820">Zaznamki in spletna zgodovina</translation> <translation id="1513858653616922153">Izbris gesla</translation> <translation id="1521774566618522728">Aktivno danes</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Shranjeno <ph name="DATA" /></translation> <translation id="213279576345780926">Zaprt zavihek: <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodajanje na začetni zaslon</translation> +<translation id="214888715418183969">Izberite, kaj želite deliti s Chromom. Meritve, ki jih boste delili, bomo uporabili za izboljšanje Chromovih funkcij, delovanja in stabilnosti.</translation> <translation id="2154484045852737596">Urejanje kartice</translation> <translation id="2154710561487035718">Kopiraj URL</translation> <translation id="2156074688469523661">Preostala spletna mesta (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Koda QR</translation> <translation id="218608176142494674">Deljenje z drugimi</translation> <translation id="2195339740518523951">Izberite Chromovo najmočnejšo varnost</translation> +<translation id="2200113223741723867">Upravljanje deljenja podatkov o uporabi</translation> <translation id="2227444325776770048">Nadaljujte kot <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinhroniz. in Googlove storitve</translation> <translation id="2239812875700136898">Nadzirajte članke v možnostih za gumb Odkrivanja</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Ta nastavitev je onemogočena, ker je vklopljen starševski nadzor</translation> <translation id="3771694256347217732">Googlovi pogoji storitve</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Vklopite Bluetooth<ph name="END_LINK" />, če želite dovoliti seznanjanje</translation> +<translation id="3773856050682458546">Osnovni podatki, vključno s podatki o spletnih mestih, ki jih obiskujete, in aplikacijami, ki jih uporabljate.</translation> <translation id="3775705724665058594">Pošiljanje v naprave</translation> <translation id="3778956594442850293">Dodano na začetni zaslon</translation> <translation id="3789841737615482174">Namesti</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Upravljanje</translation> <translation id="3819178904835489326">Št. izbrisanih prenosov: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> kot varnostni ključ.</translation> <translation id="3856096718352044181">Preverite, ali je ponudnik veljaven, in poskusite pozneje znova</translation> <translation id="3861633093716975811">Priljubljeni videoposnetki</translation> <translation id="3892148308691398805">Kopiraj besedilo</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Ogled rezultatov dinamičnega iskanja v tem podoknu</translation> <translation id="4000212216660919741">Začetna stran brez povezave</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# h}one{# h}two{# h}few{# h}other{# h}}</translation> +<translation id="4045764304651014138">Podatki o uporabi</translation> <translation id="4056223980640387499">Sepija</translation> +<translation id="4057643060762047384">Dodajanje:</translation> <translation id="4060598801229743805">Možnosti so na voljo blizu vrha zaslona</translation> <translation id="4062305924942672200">Pravne informacije</translation> <translation id="4084682180776658562">Zaznamek</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Dovoli</translation> <translation id="5040262127954254034">Zasebnost</translation> <translation id="5087580092889165836">Dodaj kartico</translation> +<translation id="5091249083535528968">Razširjeni podatki o uporabi</translation> <translation id="509429900233858213">Napaka.</translation> <translation id="510275257476243843">Še 1 h</translation> <translation id="5123685120097942451">Zavihek brez beleženja zgodovine</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Deli povezavo z drugimi</translation> <translation id="5836192821815272682">Prenašanje posodobitve za Chrome …</translation> <translation id="5853623416121554550">začasno ustavljeno</translation> +<translation id="5854512288214985237">Googlu ne bodo poslani statistični podatki ali poročila o zrušitvah.</translation> <translation id="5854790677617711513">Starejše od 30 dni</translation> <translation id="5855546874025048181">Spremeni: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ne more vklopiti vmesnika za Bluetooth</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Odjava in izklop sinhronizacije</translation> <translation id="6312687380483398334">Spletni programi (tiho)</translation> <translation id="6316139424528454185">Različica Androida ni podprta</translation> +<translation id="6321526113093607004">Dodaj med zaznamke</translation> <translation id="6324034347079777476">Sinhronizacija sistema Android je onemogočena.</translation> <translation id="6333140779060797560">Skupna raba prek: <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Šifriranje</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> na <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Uredi zaznamek</translation> <translation id="6406506848690869874">Sinhronizacija</translation> +<translation id="6410404864818553978">Osnovni podatki o uporabi</translation> <translation id="6410883413783534063">Odprite zavihke, če želite obiskati različne strani hkrati</translation> <translation id="6412673304250309937">Preveri URL-je, tako da jih primerja s seznamom spletnih mest, ki niso varna, shranjenim v Chromu. Če vam spletno mesto poskusi ukrasti geslo ali ko prenašate škodljivo datoteko, lahko Chrome prav tako pošlje URL-je, vključno z delčki vsebine strani, Varnemu brskanju.</translation> <translation id="641643625718530986">Tiskanje …</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Začetna nastavitev sinhronizacije ni bila dokončana. Sinhronizacija je izklopljena.</translation> <translation id="7022756207310403729">Odpiranje v brskalniku</translation> <translation id="702463548815491781">Priporočljivo, ko je vklopljena aplikacija TalkBack ali funkcija dostopa s stikalom</translation> +<translation id="7027549951530753705">Obnovljeno: <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Gesla</translation> <translation id="703523980599857277">Spremeni domačo stran</translation> <translation id="7054588988317389591">Želite pridobiti opise slik?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> in več spletnih mest</translation> <translation id="8327155640814342956">Za najboljšo izkušnjo pri brskanju odprite Chrome, da ga posodobite</translation> <translation id="8349013245300336738">Razvrsti glede na količino prenesenih podatkov</translation> +<translation id="835847953965672673">Obnovljenih je bilo toliko prenosov: <ph name="NUMBER_OF_DOWNLOADS" /></translation> <translation id="8364299278605033898">Ogled priljubljenih spletnih mest</translation> <translation id="8368027906805972958">Neznana ali nepodprta naprava (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Jezik <ph name="LANG" /> je pripravljen.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Prijavite se znova</translation> <translation id="9155898266292537608">Prav tako lahko iščete, tako da se hitro dotaknete besede</translation> <translation id="9169507124922466868">Zgodovina krmarjenja je napol odprta</translation> +<translation id="9191031968346938109">Dodajanje …</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Preverjeno pred 1 minuto}one{Preverjeno pred # minuto}two{Preverjeno pred # minutama}few{Preverjeno pred # minutami}other{Preverjeno pred # minutami}}</translation> <translation id="9204836675896933765">Še 1 datoteka</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Napaka: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Vnesite geslo</translation> <translation id="95817756606698420">Chrome lahko za iskanje na Kitajskem uporablja <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" />. To je mogoče spremeniti v <ph name="BEGIN_LINK" />nastavitvah<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Namestite to aplikacijo</translation> <translation id="968900484120156207">Strani, ki jih obiščete, so prikazane tu</translation> <translation id="970715775301869095">Še <ph name="MINUTES" /> min</translation> <translation id="974555521953189084">Vnesite geslo, če želite začeti sinhronizacijo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb index 32d42a7..8ddfd5e5b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Regjistrimi i ekranit</translation> <translation id="1111673857033749125">Faqeshënuesit e ruajtur në pajisjet e tua të tjera do të shfaqen këtu.</translation> <translation id="1113597929977215864">Shfaq pamjen e thjeshtuar</translation> +<translation id="1123070903960493543">Mënyra se si bashkëvepron me Chrome, cilësimet që ke zgjedhur, të dhënat e ndërprerjeve aksidentale të Chrome</translation> <translation id="1126809382673880764">Nuk të mbron kundër faqeve të internetit, shkarkimeve dhe shtesave të rrezikshme. Do të vazhdosh të marrësh mbrojtje për "Shfletimin e sigurt", aty ku ofrohet, në shërbimet e tjera të Google, si Gmail dhe "Kërko".</translation> <translation id="1129510026454351943">Detajet: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 shkarkim në pritje.}other{# shkarkime në pritje.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nuk mund të ndahet <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Shkarkimi i <ph name="FILE_NAME" /> dështoi për shkak të problemeve të serverit.</translation> <translation id="1506061864768559482">Motori i kërkimit</translation> +<translation id="151267239139452619">Shto te "Shkarkimet"</translation> <translation id="1513352483775369820">Faqeshënuesit dhe historiku i uebit</translation> <translation id="1513858653616922153">Fshi fjalëkalimin</translation> <translation id="1521774566618522728">Aktiv sot</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> të kursyera</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> është mbyllur</translation> <translation id="2139186145475833000">Shtoje te ekrani "Faqja kryesore"</translation> +<translation id="214888715418183969">Zgjidh se çfarë informacionesh ndihesh mirë të ndash me Chrome. Metrikat që ndan do të përdoren për të përmirësuar veçoritë, cilësinë e funksionimit dhe qëndrueshmërinë e Chrome.</translation> <translation id="2154484045852737596">Redakto kartën</translation> <translation id="2154710561487035718">Kopjo URL-në</translation> <translation id="2156074688469523661">Sajtet e mbetura (<ph name="NUMBER_OF_SITES" />)</translation> @@ -165,6 +168,7 @@ <translation id="2169830938017475061">Tani</translation> <translation id="2175927920773552910">Kodi QR</translation> <translation id="218608176142494674">Ndarja</translation> +<translation id="2200113223741723867">Menaxho ndarjen e të dhënave të përdorimit</translation> <translation id="2227444325776770048">Vazhdo si <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinkron. dhe "Shërbimet e Google"</translation> <translation id="2239812875700136898">Kontrollo historitë e tua nga butoni "Opsionet për Zbulo"</translation> @@ -369,12 +373,14 @@ <translation id="3771290962915251154">Ky cilësim është i çaktivizuar sepse kontrollet prindërore janë të aktivizuara</translation> <translation id="3771694256347217732">Kushtet e shërbimit të Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Aktivizo Bluetooth-in<ph name="END_LINK" /> për të lejuar çiftimin</translation> +<translation id="3773856050682458546">Të dhëna bazë plus informacione rreth faqeve të internetit që viziton dhe aplikacioneve që përdor</translation> <translation id="3775705724665058594">Dërgo te pajisjet e tua</translation> <translation id="3778956594442850293">U shtua në ekranin bazë</translation> <translation id="3789841737615482174">Instalo</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Menaxho</translation> <translation id="3819178904835489326">U fshinë <ph name="NUMBER_OF_DOWNLOADS" /> shkarkime</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> si çelës sigurie</translation> <translation id="3856096718352044181">Verifiko që ky është një ofrues i vlefshëm ose provo përsëri më vonë</translation> <translation id="3861633093716975811">Video të njohura</translation> <translation id="3892148308691398805">Kopjo tekstin</translation> @@ -402,7 +408,9 @@ <translation id="3988466920954086464">Shiko rezultatet e çastit të kërkimit në këtë panel</translation> <translation id="4000212216660919741">Shtëpia jashtë linje</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# orë}other{# orë}}</translation> +<translation id="4045764304651014138">Të dhënat e përdorimit</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Shto në:</translation> <translation id="4060598801229743805">Opsionet janë të disponueshme pranë kreut të ekranit</translation> <translation id="4062305924942672200">Informacioni ligjor</translation> <translation id="4084682180776658562">Faqeshënuesi</translation> @@ -542,6 +550,7 @@ <translation id="5039804452771397117">Lejo</translation> <translation id="5040262127954254034">Privatësia</translation> <translation id="5087580092889165836">Shto kartë</translation> +<translation id="5091249083535528968">Të dhënat e zgjeruara të përdorimit</translation> <translation id="509429900233858213">Ndodhi një gabim.</translation> <translation id="510275257476243843">1 orë e mbetur</translation> <translation id="5123685120097942451">Skeda "e fshehtë"</translation> @@ -648,6 +657,7 @@ <translation id="5833984609253377421">Ndaj lidhjen</translation> <translation id="5836192821815272682">Po shkarkon përditësimin e Chrome…</translation> <translation id="5853623416121554550">në pauzë</translation> +<translation id="5854512288214985237">Asnjë statistikë apo raport ndërprerjeje aksidentale nuk i dërgohet Google</translation> <translation id="5854790677617711513">Më të vjetra se 30 ditë</translation> <translation id="5855546874025048181">Detajo: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome nuk mund ta aktivizojë përshtatësin e Bluetooth-it</translation> @@ -720,6 +730,7 @@ <translation id="6303969859164067831">Dil dhe çaktivizo sinkronizimin</translation> <translation id="6312687380483398334">Aplikacionet e uebit (në qetësi)</translation> <translation id="6316139424528454185">Versioni i Android s'mbështetet</translation> +<translation id="6321526113093607004">Shto te faqeshënuesit</translation> <translation id="6324034347079777476">Sinkronizimi i sistemit Android u çaktivizua</translation> <translation id="6333140779060797560">Ndaje nëpërmjet <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Enkriptimi</translation> @@ -737,6 +748,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> në <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Redakto faqeshënuesin</translation> <translation id="6406506848690869874">Sinkronizo</translation> +<translation id="6410404864818553978">Të dhënat bazë të përdorimit</translation> <translation id="6410883413783534063">Hap skedat për të vizituar faqe të ndryshme njëkohësisht</translation> <translation id="6412673304250309937">Kontrollon URL-të kundrejt një liste sajtesh të pasigurta të ruajtur në Chrome. Nëse një sajt përpiqet të vjedhë fjalëkalimin tënd, ose kur shkarkon një skedar të dëmshëm, Chrome mund t'i dërgojë po ashtu "Shfletimit të sigurt" URL-të, duke përfshirë pjesë të përmbajtjes së faqes.</translation> <translation id="641643625718530986">Printo…</translation> @@ -800,6 +812,7 @@ <translation id="6783942555455976443">Ruaje këtë faqe për më vonë dhe merr një rikujtesë</translation> <translation id="6811034713472274749">Faqja është gati për ta shikuar</translation> <translation id="6820686453637990663">CVC</translation> +<translation id="6824899148643461612">Skeda <ph name="TAB_TITLE" /> është zgjedhur</translation> <translation id="6845325883481699275">Ndihmo në përmirësimin e sigurisë së Chrome</translation> <translation id="6846298663435243399">Po ngarkohet...</translation> <translation id="6850409657436465440">Shkarkimi yt është ende në vazhdim</translation> @@ -829,6 +842,7 @@ <translation id="7015203776128479407">Konfigurimi i sinkronizimit fillestar nuk përfundoi. Sinkronizimi është joaktiv.</translation> <translation id="7022756207310403729">Hape në shfletues</translation> <translation id="702463548815491781">Rekomandohet kur është aktiv TalkBack ose "Qasja me çelës"</translation> +<translation id="7027549951530753705">Restauruar në datën <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Fjalëkalimet</translation> <translation id="703523980599857277">Ndrysho faqen kryesore</translation> <translation id="7054588988317389591">Të merren përshkrimet e imazheve?</translation> @@ -1010,6 +1024,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> dhe sajte të tjera</translation> <translation id="8327155640814342956">Për një përvojë më të mirë shfletimi, hape për të përditësuar Chrome</translation> <translation id="8349013245300336738">Rendit sipas sasisë së të dhënave të përdorura</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> shkarkime u restauruan</translation> <translation id="8364299278605033898">Shiko sajte uebi të mirënjohura</translation> <translation id="8368027906805972958">Pajisje e panjohur ose e pambështetur (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> është gati.</translation> @@ -1118,6 +1133,7 @@ <translation id="9148126808321036104">Identifikohu sërish</translation> <translation id="9155898266292537608">Mund të kërkosh po ashtu me një trokitje të shpejtë te një fjalë</translation> <translation id="9169507124922466868">Historiku i navigimit është gjysmë i hapur</translation> +<translation id="9191031968346938109">Shto në…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Kontrolluar 1 minutë më parë}other{Kontrolluar # minuta më parë}}</translation> <translation id="9204836675896933765">1 skedar i mbetur</translation> <translation id="9206873250291191720">A</translation> @@ -1130,6 +1146,7 @@ <translation id="938850635132480979">Gabim: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Fut frazën e kalimit</translation> <translation id="95817756606698420">Chrome mund të përdorë <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> për kërkimin në Kinë. Mund ta ndryshosh këtë te <ph name="BEGIN_LINK" />Cilësimet<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalo këtë aplikacion</translation> <translation id="968900484120156207">Faqet që viziton shfaqen këtu</translation> <translation id="970715775301869095"><ph name="MINUTES" /> minuta të mbetura</translation> <translation id="974555521953189084">Fut frazën e kalimit për të nisur sinkronizimin</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb index 9f370c09..feec12a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Snimanje ekrana</translation> <translation id="1111673857033749125">Obeleživači sačuvani na drugim uređajima će se prikazati ovde.</translation> <translation id="1113597929977215864">Prikaži pojednostavljeni prikaz</translation> +<translation id="1123070903960493543">Kako ostvarujete interakciju sa Chrome-om, podešavanja koja ste izabrali, detalji o otkazivanjima Chrome-a</translation> <translation id="1126809382673880764">Ne štiti vas od opasnih veb-sajtova, preuzimanja i dodataka. U drugim Google uslugama, kao što su Gmail i Pretraga, i dalje ćete imati zaštitu pomoću Bezbednog pregledanja kada je dostupna.</translation> <translation id="1129510026454351943">Detalji: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 preuzimanje na čekanju.}one{# preuzimanje na čekanju.}few{# preuzimanja na čekanju.}other{# preuzimanja na čekanju.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Nije uspelo deljenje: <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Preuzimanje datoteke <ph name="FILE_NAME" /> nije uspelo zbog problema na serveru.</translation> <translation id="1506061864768559482">Pretraživač</translation> +<translation id="151267239139452619">Dodaj u preuzimanja</translation> <translation id="1513352483775369820">Obeleživači i veb-istorija</translation> <translation id="1513858653616922153">Izbriši lozinku</translation> <translation id="1521774566618522728">Aktivan je danas</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Sačuvano: <ph name="DATA" /></translation> <translation id="213279576345780926">Zatvorili ste karticu <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Dodaj na početni ekran</translation> +<translation id="214888715418183969">Izaberite ono što želite da delite u Chrome-u. Pokazatelje koje podelite ćemo koristiti za poboljšanje funkcija, performansi i stabilnosti Chrome-a.</translation> <translation id="2154484045852737596">Izmenite karticu</translation> <translation id="2154710561487035718">Kopiranje URL adrese</translation> <translation id="2156074688469523661">Preostali sajtovi (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR kôd</translation> <translation id="218608176142494674">Deljenje</translation> <translation id="2195339740518523951">Nabavite najjaču zaštitu u Chrome-u</translation> +<translation id="2200113223741723867">Upravljajte deljenjem podataka o korišćenju</translation> <translation id="2227444325776770048">Nastavi kao <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Sinhronizacija i Google usluge</translation> <translation id="2239812875700136898">Kontrolišite vesti pomoću dugmeta Opcije za Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Ovo podešavanje je onemogućeno zato što je uključen roditeljski nadzor</translation> <translation id="3771694256347217732">Google uslovi korišćenja usluge</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Uključite Bluetooth<ph name="END_LINK" /> da biste omogućili uparivanje</translation> +<translation id="3773856050682458546">Osnovni podaci plus informacije o veb-sajtovima koje posećujete i aplikacijama koje koristite</translation> <translation id="3775705724665058594">Pošaljite na svoje uređaje</translation> <translation id="3778956594442850293">Dodato je na početni ekran</translation> <translation id="3789841737615482174">Instaliraj</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Promeni</translation> <translation id="3819178904835489326">Izbrisana preuzimanja: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> kao bezbednosni ključ</translation> <translation id="3856096718352044181">Proverite da li je ovo važeći dobavljač usluge ili probajte ponovo kasnije</translation> <translation id="3861633093716975811">Popularni video snimci</translation> <translation id="3892148308691398805">Kopiraj tekst</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Pogledajte instant rezultate pretrage na ovoj tabli</translation> <translation id="4000212216660919741">Oflajn početna stranica</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# č}one{# č}few{# č}other{# č}}</translation> +<translation id="4045764304651014138">Podaci o korišćenju</translation> <translation id="4056223980640387499">Sepija</translation> +<translation id="4057643060762047384">Dodajte</translation> <translation id="4060598801229743805">Opcije su dostupne pri vrhu ekrana</translation> <translation id="4062305924942672200">Pravne informacije</translation> <translation id="4084682180776658562">Obeleživač</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Dozvoli</translation> <translation id="5040262127954254034">Privatnost</translation> <translation id="5087580092889165836">Dodaj karticu</translation> +<translation id="5091249083535528968">Detaljni podaci o korišćenju</translation> <translation id="509429900233858213">Došlo je do greške.</translation> <translation id="510275257476243843">Još 1 sat</translation> <translation id="5123685120097942451">Kartica bez arhiviranja</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Deli link</translation> <translation id="5836192821815272682">Preuzima se ažuriranje za Chrome…</translation> <translation id="5853623416121554550">pauzirano</translation> +<translation id="5854512288214985237">Google-u se ne šalju statistika ni izveštaji o otkazivanju</translation> <translation id="5854790677617711513">Starije od 30 dana</translation> <translation id="5855546874025048181">Preciziraj: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ne može da uključi Bluetooth adapter</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Odjavi me i isključi sinhronizaciju</translation> <translation id="6312687380483398334">Veb-aplikacije (tihe)</translation> <translation id="6316139424528454185">Nepodržana verzija Android-a</translation> +<translation id="6321526113093607004">Dodaj u obeleživače</translation> <translation id="6324034347079777476">Sinhronizacija Android sistema je onemogućena</translation> <translation id="6333140779060797560">Deljenje preko <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Šifrovanje</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Izmena obeleživača</translation> <translation id="6406506848690869874">Sinhronizacija</translation> +<translation id="6410404864818553978">Osnovni podaci o korišćenju</translation> <translation id="6410883413783534063">Otvorite kartice da biste istovremeno posetili različite stranice</translation> <translation id="6412673304250309937">Proverava URL-ove sa listom nebezbednih sajtova koji se čuvaju u Chrome-u. Ako neki sajt pokuša da ukrade vašu lozinku ili probate da preuzmete štetnu datoteku, Chrome može da pošalje URL-ove, uključujući delove sadržaja stranice, u Bezbedno pregledanje.</translation> <translation id="641643625718530986">Štampaj...</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Početno podešavanje sinhronizacije nije završeno. Sinhronizacija je isključena.</translation> <translation id="7022756207310403729">Otvori u pregledaču</translation> <translation id="702463548815491781">Preporučujemo vam kada uključite TalkBack ili pristup pomoću prekidača</translation> +<translation id="7027549951530753705">Vraćena je stavka <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Lozinke</translation> <translation id="703523980599857277">Promeni početnu stranicu</translation> <translation id="7054588988317389591">Želite da dobijate opise slika?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> i još sajtova</translation> <translation id="8327155640814342956">Ako želite najbolji doživljaj pregledanja, otvorite Chrome da biste ga ažurirali</translation> <translation id="8349013245300336738">Sortiraj po količini iskorišćenih podataka</translation> +<translation id="835847953965672673">Vraćena su preuzimanja (<ph name="NUMBER_OF_DOWNLOADS" />)</translation> <translation id="8364299278605033898">Pogledajte popularne veb-sajtove</translation> <translation id="8368027906805972958">Nepoznat ili nepodržan uređaj (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Jezik <ph name="LANG" /> je spreman.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Prijavi me ponovo</translation> <translation id="9155898266292537608">Možete i kratko da dodirnete reč da biste je pretražili</translation> <translation id="9169507124922466868">Istorija navigacije je poluotvorena</translation> +<translation id="9191031968346938109">Dodaj u…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Provereno pre 1 minut}one{Provereno pre # minut}few{Provereno pre # minuta}other{Provereno pre # minuta}}</translation> <translation id="9204836675896933765">Preostala je 1 datoteka</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Greška: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Unesite pristupnu frazu</translation> <translation id="95817756606698420">Chrome može da koristi <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> za pretragu u Kini. Ovo možete da promenite u <ph name="BEGIN_LINK" />Podešavanjima<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Instalirajte ovu aplikaciju</translation> <translation id="968900484120156207">Stranice koje posećujete se prikazuju ovde</translation> <translation id="970715775301869095">Još <ph name="MINUTES" /> min</translation> <translation id="974555521953189084">Unesite pristupnu frazu da da biste započeli sinhronizaciju</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb index 648246b..b28a698 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Снимање екрана</translation> <translation id="1111673857033749125">Обележивачи сачувани на другим уређајима ће се приказати овде.</translation> <translation id="1113597929977215864">Прикажи поједностављени приказ</translation> +<translation id="1123070903960493543">Како остварујете интеракцију са Chrome-ом, подешавања која сте изабрали, детаљи о отказивањима Chrome-а</translation> <translation id="1126809382673880764">Не штити вас од опасних веб-сајтова, преузимања и додатака. У другим Google услугама, као што су Gmail и Претрага, и даље ћете имати заштиту помоћу Безбедног прегледања када је доступна.</translation> <translation id="1129510026454351943">Детаљи: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 преузимање на чекању.}one{# преузимање на чекању.}few{# преузимања на чекању.}other{# преузимања на чекању.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Није успело дељење: <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Преузимање датотеке <ph name="FILE_NAME" /> није успело због проблема на серверу.</translation> <translation id="1506061864768559482">Претраживач</translation> +<translation id="151267239139452619">Додај у преузимања</translation> <translation id="1513352483775369820">Обележивачи и веб-историја</translation> <translation id="1513858653616922153">Избриши лозинку</translation> <translation id="1521774566618522728">Активан је данас</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825">Сачувано: <ph name="DATA" /></translation> <translation id="213279576345780926">Затворили сте картицу <ph name="TAB_TITLE" /></translation> <translation id="2139186145475833000">Додај на почетни екран</translation> +<translation id="214888715418183969">Изаберите оно што желите да делите у Chrome-у. Показатеље које поделите ћемо користити за побољшање функција, перформанси и стабилности Chrome-а.</translation> <translation id="2154484045852737596">Измените картицу</translation> <translation id="2154710561487035718">Копирање URL адресе</translation> <translation id="2156074688469523661">Преостали сајтови (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR кôд</translation> <translation id="218608176142494674">Дељење</translation> <translation id="2195339740518523951">Набавите најјачу заштиту у Chrome-у</translation> +<translation id="2200113223741723867">Управљајте дељењем података о коришћењу</translation> <translation id="2227444325776770048">Настави као <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Синхронизација и Google услуге</translation> <translation id="2239812875700136898">Контролишите вести помоћу дугмета Опције за Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Ово подешавање је онемогућено зато што је укључен родитељски надзор</translation> <translation id="3771694256347217732">Google услови коришћења услуге</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Укључите Bluetooth<ph name="END_LINK" /> да бисте омогућили упаривање</translation> +<translation id="3773856050682458546">Основни подаци плус информације о веб-сајтовима које посећујете и апликацијама које користите</translation> <translation id="3775705724665058594">Пошаљите на своје уређаје</translation> <translation id="3778956594442850293">Додато је на почетни екран</translation> <translation id="3789841737615482174">Инсталирај</translation> <translation id="3810838688059735925">Видео</translation> <translation id="3810973564298564668">Промени</translation> <translation id="3819178904835489326">Избрисана преузимања: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> као безбедносни кључ</translation> <translation id="3856096718352044181">Проверите да ли је ово важећи добављач услуге или пробајте поново касније</translation> <translation id="3861633093716975811">Популарни видео снимци</translation> <translation id="3892148308691398805">Копирај текст</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Погледајте инстант резултате претраге на овој табли</translation> <translation id="4000212216660919741">Офлајн почетна страница</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ч}one{# ч}few{# ч}other{# ч}}</translation> +<translation id="4045764304651014138">Подаци о коришћењу</translation> <translation id="4056223980640387499">Сепија</translation> +<translation id="4057643060762047384">Додајте</translation> <translation id="4060598801229743805">Опције су доступне при врху екрана</translation> <translation id="4062305924942672200">Правне информације</translation> <translation id="4084682180776658562">Обележивач</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Дозволи</translation> <translation id="5040262127954254034">Приватност</translation> <translation id="5087580092889165836">Додај картицу</translation> +<translation id="5091249083535528968">Детаљни подаци о коришћењу</translation> <translation id="509429900233858213">Дошло је до грешке.</translation> <translation id="510275257476243843">Још 1 сат</translation> <translation id="5123685120097942451">Картица без архивирања</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Дели линк</translation> <translation id="5836192821815272682">Преузима се ажурирање за Chrome…</translation> <translation id="5853623416121554550">паузирано</translation> +<translation id="5854512288214985237">Google-у се не шаљу статистика ни извештаји о отказивању</translation> <translation id="5854790677617711513">Старије од 30 дана</translation> <translation id="5855546874025048181">Прецизирај: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome не може да укључи Bluetooth адаптер</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Одјави ме и искључи синхронизацију</translation> <translation id="6312687380483398334">Веб-апликације (тихе)</translation> <translation id="6316139424528454185">Неподржана верзија Android-а</translation> +<translation id="6321526113093607004">Додај у обележиваче</translation> <translation id="6324034347079777476">Синхронизација Android система је онемогућена</translation> <translation id="6333140779060797560">Дељење преко <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Шифровање</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Измена обележивача</translation> <translation id="6406506848690869874">Синхронизација</translation> +<translation id="6410404864818553978">Основни подаци о коришћењу</translation> <translation id="6410883413783534063">Отворите картице да бисте истовремено посетили различите странице</translation> <translation id="6412673304250309937">Проверава URL-ове са листом небезбедних сајтова који се чувају у Chrome-у. Ако неки сајт покуша да украде вашу лозинку или пробате да преузмете штетну датотеку, Chrome може да пошаље URL-ове, укључујући делове садржаја странице, у Безбедно прегледање.</translation> <translation id="641643625718530986">Штампај...</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Почетно подешавање синхронизације није завршено. Синхронизација је искључена.</translation> <translation id="7022756207310403729">Отвори у прегледачу</translation> <translation id="702463548815491781">Препоручујемо вам када укључите TalkBack или приступ помоћу прекидача</translation> +<translation id="7027549951530753705">Враћена је ставка <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Лозинке</translation> <translation id="703523980599857277">Промени почетну страницу</translation> <translation id="7054588988317389591">Желите да добијате описе слика?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> и још сајтова</translation> <translation id="8327155640814342956">Ако желите најбољи доживљај прегледања, отворите Chrome да бисте га ажурирали</translation> <translation id="8349013245300336738">Сортирај по количини искоришћених података</translation> +<translation id="835847953965672673">Враћена су преузимања (<ph name="NUMBER_OF_DOWNLOADS" />)</translation> <translation id="8364299278605033898">Погледајте популарне веб-сајтове</translation> <translation id="8368027906805972958">Непознат или неподржан уређај (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">Језик <ph name="LANG" /> је спреман.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Пријави ме поново</translation> <translation id="9155898266292537608">Можете и кратко да додирнете реч да бисте је претражили</translation> <translation id="9169507124922466868">Историја навигације је полуотворена</translation> +<translation id="9191031968346938109">Додај у…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Проверено пре 1 минут}one{Проверено пре # минут}few{Проверено пре # минута}other{Проверено пре # минута}}</translation> <translation id="9204836675896933765">Преостала је 1 датотека</translation> <translation id="9206873250291191720">А</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Грешка: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Унесите приступну фразу</translation> <translation id="95817756606698420">Chrome може да користи <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> за претрагу у Кини. Ово можете да промените у <ph name="BEGIN_LINK" />Подешавањима<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Инсталирајте ову апликацију</translation> <translation id="968900484120156207">Странице које посећујете се приказују овде</translation> <translation id="970715775301869095">Још <ph name="MINUTES" /> мин</translation> <translation id="974555521953189084">Унесите приступну фразу да да бисте започели синхронизацију</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb index b52ae1df..e2218a7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Skärmavbildning</translation> <translation id="1111673857033749125">Här visas bokmärken som du har sparat på andra enheter.</translation> <translation id="1113597929977215864">Använd förenklad visning</translation> +<translation id="1123070903960493543">Hur du använder Chrome, inställningar du har valt, information om krascher i Chrome</translation> <translation id="1126809382673880764">Skyddar inte mot farliga webbplatser, nedladdningar och tillägg. Där funktionen är tillgänglig får du fortfarande skydd med Säker webbsökning i andra tjänster från Google, till exempel Gmail och Sök.</translation> <translation id="1129510026454351943">Mer information: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 nedladdning väntar.}other{# nedladdningar väntar.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Det gick inte att dela <ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Det gick inte att ladda ned <ph name="FILE_NAME" /> på grund av serverfel.</translation> <translation id="1506061864768559482">Sökmotor</translation> +<translation id="151267239139452619">Lägg till i Nedladdningar</translation> <translation id="1513352483775369820">Bokmärken och webbhistorik</translation> <translation id="1513858653616922153">Radera lösenord</translation> <translation id="1521774566618522728">Aktiv idag</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> har sparats</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> har stängts</translation> <translation id="2139186145475833000">Lägg till på startskärmen</translation> +<translation id="214888715418183969">Välj vad du vill dela med Chrome. Den statistik du delar används för att förbättra Chromes funktioner, prestanda och stabilitet.</translation> <translation id="2154484045852737596">Redigera kortet</translation> <translation id="2154710561487035718">Kopiera webbadress</translation> <translation id="2156074688469523661">Återstående webbplatser (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR-kod</translation> <translation id="218608176142494674">Delar</translation> <translation id="2195339740518523951">Få det bästa skyddet i Chrome</translation> +<translation id="2200113223741723867">Hantera delning av data om användning</translation> <translation id="2227444325776770048">Fortsätt som <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Synk och Googles tjänster</translation> <translation id="2239812875700136898">Du kan styra artiklarna med knappen Alternativ för Förslag</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Inställningen är inaktiverad eftersom föräldrakontroller används</translation> <translation id="3771694256347217732">Googles användarvillkor</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Aktivera Bluetooth<ph name="END_LINK" /> om du vill tillåta koppling</translation> +<translation id="3773856050682458546">Grundläggande data samt information om webbplatser du besöker och appar du använder</translation> <translation id="3775705724665058594">Skicka till dina enheter</translation> <translation id="3778956594442850293">Tillagd på startskärmen</translation> <translation id="3789841737615482174">Installera</translation> <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Hantera</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> nedladdningar har raderats</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> som säkerhetsnyckel</translation> <translation id="3856096718352044181">Verifiera att detta är en giltig leverantör eller försök igen senare</translation> <translation id="3861633093716975811">Populära videor</translation> <translation id="3892148308691398805">Kopiera text</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Visa snabba sökresultat i panelen</translation> <translation id="4000212216660919741">Startsida offline</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# tim}other{# tim}}</translation> +<translation id="4045764304651014138">Data om användning</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">Lägg till i:</translation> <translation id="4060598801229743805">Alternativ finns högt upp på skärmen</translation> <translation id="4062305924942672200">Juridisk information</translation> <translation id="4084682180776658562">Infoga bokmärke</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Tillåt</translation> <translation id="5040262127954254034">Sekretess</translation> <translation id="5087580092889165836">Lägg till kort</translation> +<translation id="5091249083535528968">Utökad data om användning</translation> <translation id="509429900233858213">Det har uppstått ett fel.</translation> <translation id="510275257476243843">1 timme kvar</translation> <translation id="5123685120097942451">Inkognitoflik</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Dela länk</translation> <translation id="5836192821815272682">Uppdatering för Chrome laddas ned …</translation> <translation id="5853623416121554550">pausad</translation> +<translation id="5854512288214985237">Varken statistik eller felrapporter skickas till Google</translation> <translation id="5854790677617711513">Äldre än 30 dagar</translation> <translation id="5855546874025048181">Finjustera: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Det gick inte att aktivera Bluetooth-adaptern i Chrome</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Logga ut och inaktivera synkronisering</translation> <translation id="6312687380483398334">Webbappar (tyst)</translation> <translation id="6316139424528454185">Android-versionen stöds inte</translation> +<translation id="6321526113093607004">Lägg till i bokmärken</translation> <translation id="6324034347079777476">Synkronisering av Android-system har inaktiverats</translation> <translation id="6333140779060797560">Dela via <ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Kryptering</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> <ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Redigera bokmärke</translation> <translation id="6406506848690869874">Synkronisera</translation> +<translation id="6410404864818553978">Grundläggande data om användning</translation> <translation id="6410883413783534063">Öppna flikar för att besöka olika sidor samtidigt</translation> <translation id="6412673304250309937">Kontrollera webbadresser mot en lista över osäkra webbplatser i Chrome. Om du utsätts för försök att kapa ditt lösenord på en webbplats eller om du laddar ned en skadlig fil kan webbadresserna skickas från Chrome till Säker webbsökning tillsammans med delar av sidinnehållet.</translation> <translation id="641643625718530986">Skriv ut …</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Den initiala synkroniseringskonfigureringen avslutades inte. Synkroniseringen är inaktiverad.</translation> <translation id="7022756207310403729">Öppna i webbläsaren</translation> <translation id="702463548815491781">Rekommenderas när TalkBack eller brytarstyrning är aktiverat</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> återställdes</translation> <translation id="7029809446516969842">Lösenord</translation> <translation id="703523980599857277">Ändra startsida</translation> <translation id="7054588988317389591">Vill du få bildbeskrivningar?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> och fler webbplatser</translation> <translation id="8327155640814342956">Uppdatera Chrome så att du får bästa möjliga surfupplevelse</translation> <translation id="8349013245300336738">Sortera efter dataförbrukning</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> nedladdningar har återställts</translation> <translation id="8364299278605033898">Visa populära webbplatser</translation> <translation id="8368027906805972958">Enheten är okänd eller stöds inte (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> är klart.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Logga in igen</translation> <translation id="9155898266292537608">Du kan även söka med ett snabbt tryck eller ett ord</translation> <translation id="9169507124922466868">Navigeringshistoriken visas på halva skärmen</translation> +<translation id="9191031968346938109">Lägg till i …</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Genomsöktes för 1 minut sedan}other{Genomsöktes för # minuter sedan}}</translation> <translation id="9204836675896933765">1 fil återstår</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Fel: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Ange lösenfras</translation> <translation id="95817756606698420">Chrome kan använda <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> som sökmotor i Kina. Du kan ändra detta i <ph name="BEGIN_LINK" />inställningarna<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Installera appen</translation> <translation id="968900484120156207">Sidor som du besöker visas här</translation> <translation id="970715775301869095"><ph name="MINUTES" /> minuter kvar</translation> <translation id="974555521953189084">Ange lösenfrasen för att starta synkroniseringen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index 11da396..1184f2d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">திரைப் படப்பிடிப்பு</translation> <translation id="1111673857033749125">உங்கள் பிற சாதனங்களில் சேமிக்கும் புக்மார்க்குகள் இங்கே தோன்றும்.</translation> <translation id="1113597929977215864">எளிதாக்கப்பட்ட காட்சியைக் காட்டு</translation> +<translation id="1123070903960493543">Chromeமில் நீங்கள் செயல்படும் விதம், நீங்கள் தேர்ந்தெடுத்துள்ள அமைப்புகள், Chrome சிதைவுகளின் விவரங்கள்</translation> <translation id="1126809382673880764">ஆபத்தான இணையதளங்கள், பதிவிறக்கங்கள், நீட்டிப்புகள் ஆகியவற்றிலிருந்து உங்களைப் பாதுகாக்காது. எனினும் Gmail, Search போன்ற பிற Google சேவைகளில் ’பாதுகாப்பு உலாவல்’ அம்சத்தின் (கிடைத்தால்) மூலம் பாதுகாப்பைப் பெறுவீர்கள்.</translation> <translation id="1129510026454351943">விவரங்கள்: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{ஒரு பதிவிறக்கம் நிலுவையில் உள்ளது.}other{# பதிவிறக்கங்கள் நிலுவையில் உள்ளன.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" />ஐப் பகிர முடியவில்லை</translation> <translation id="1477626028522505441">சேவையகச் சிக்கல்களால் <ph name="FILE_NAME" />ஐப் பதிவிறக்க முடியவில்லை.</translation> <translation id="1506061864768559482">தேடல் இன்ஜின்</translation> +<translation id="151267239139452619">பதிவிறக்கங்களில் சேர்</translation> <translation id="1513352483775369820">புத்தகக்குறிகளும் இணைய வரலாறும்</translation> <translation id="1513858653616922153">கடவுச்சொல்லை நீக்கு</translation> <translation id="1521774566618522728">இன்று பயன்படுத்தியுள்ளார்</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> சேமிக்கப்பட்டது</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> மூடப்பட்டது</translation> <translation id="2139186145475833000">முகப்புத் திரையில் சேர்</translation> +<translation id="214888715418183969">Chromeமுடன் என்னென்ன தகவல்களைப் பகிரலாம் என்பதைத் தேர்வுசெய்யுங்கள். Chromeமின் அம்சங்கள், செயல்திறன், நிலைப்புத்தன்மை ஆகியவற்றை மேம்படுத்த இந்தத் தகவல்கள் பயன்படுத்தப்படும்.</translation> <translation id="2154484045852737596">கார்டைத் திருத்தவும்</translation> <translation id="2154710561487035718">URL ஐ நகலெடு</translation> <translation id="2156074688469523661">மீதமுள்ள தளங்கள் (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR குறியீடு</translation> <translation id="218608176142494674">பகிர்தல்</translation> <translation id="2195339740518523951">Chromeமின் வலிமையான பாதுகாப்பைப் பெறுங்கள்</translation> +<translation id="2200113223741723867">உபயோகத் தரவுப் பகிர்தலை நிர்வகித்தல்</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ஆகத் தொடர்க</translation> <translation id="2234876718134438132">ஒத்திசைவு & Google சேவைகள்</translation> <translation id="2239812875700136898">கண்டறிவதற்கான விருப்பங்கள் என்ற பட்டன் மூலம் உங்கள் செய்திகளைக் கட்டுப்படுத்தலாம்</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">பெற்றோர் கட்டுப்பாடுகள் இயக்கத்தில் உள்ளதால் இந்த அமைப்பு முடக்கப்பட்டுள்ளது</translation> <translation id="3771694256347217732">Google சேவை விதிமுறைகள்</translation> <translation id="3773755127849930740">இணைத்தலை அனுமதிக்க, <ph name="BEGIN_LINK" />புளூடூத்தை இயக்கவும்<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">அடிப்படைத் தரவும் நீங்கள் பார்வையிடும் இணையதளங்கள், பயன்படுத்தும் ஆப்ஸ் ஆகியவற்றைப் பற்றிய தகவல்களும்</translation> <translation id="3775705724665058594">உங்கள் சாதனங்களுக்கு அனுப்புதல்</translation> <translation id="3778956594442850293">முகப்புத் திரையில் சேர்க்கப்பட்டது</translation> <translation id="3789841737615482174">நிறுவுக</translation> <translation id="3810838688059735925">வீடியோ</translation> <translation id="3810973564298564668">நிர்வகி</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> பதிவிறக்கங்கள் உள்ளன</translation> +<translation id="3848957262889631524">Google <ph name="APP_NAME" /> ஐப் பாதுகாப்பு விசையாகப் பயன்படுத்தும் வசதி</translation> <translation id="3856096718352044181">இது சரியான வழங்குநர்தான் என்பதைச் சரிபார்க்கவும் அல்லது பிறகு முயலவும்</translation> <translation id="3861633093716975811">பிரபலமான வீடியோக்கள்</translation> <translation id="3892148308691398805">உரையை நகலெடு</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">இந்தப் பேனலில் உடனடித் தேடல் முடிவுகளைப் பார்க்கவும்</translation> <translation id="4000212216660919741">Home ஆஃப்லைனில் உள்ளது</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# மணிநேரம்}other{# மணிநேரம்}}</translation> +<translation id="4045764304651014138">உபயோகத் தரவு</translation> <translation id="4056223980640387499">செபியா</translation> +<translation id="4057643060762047384">இதில் சேர்:</translation> <translation id="4060598801229743805">திரையின் மேற்பகுதிக்கு அருகில், விருப்பங்கள் உள்ளன</translation> <translation id="4062305924942672200">சட்டப்பூர்வத் தகவல்</translation> <translation id="4084682180776658562">புக்மார்க்</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">அனுமதி</translation> <translation id="5040262127954254034">தனியுரிமை</translation> <translation id="5087580092889165836">கார்டைச் சேர்</translation> +<translation id="5091249083535528968">கூடுதல் உபயோகத் தரவு</translation> <translation id="509429900233858213">பிழை ஏற்பட்டது.</translation> <translation id="510275257476243843">1 மணிநேரம் மீதமுள்ளது</translation> <translation id="5123685120097942451">மறைநிலைத் தாவல்</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">இணைப்பைப் பகிர்</translation> <translation id="5836192821815272682">Chrome புதுப்பிப்பைப் பதிவிறக்குகிறது…</translation> <translation id="5853623416121554550">இடைநிறுத்தப்பட்டது</translation> +<translation id="5854512288214985237">புள்ளிவிவரங்கள்/சிதைவு அறிக்கைகள் எதுவும் Googleளுக்கு அனுப்பப்படவில்லை</translation> <translation id="5854790677617711513">30 நாட்களுக்கு முந்தையவை</translation> <translation id="5855546874025048181">துல்லியமாக: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ஆல் புளூடூத் அடாப்டரை இயக்க முடியவில்லை</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">வெளியேறி ஒத்திசைவை முடக்கு</translation> <translation id="6312687380483398334">இணைய ஆப்ஸ் (நிசப்தம்)</translation> <translation id="6316139424528454185">Android பதிப்பு ஆதரிக்கப்படாது</translation> +<translation id="6321526113093607004">புக்மார்க்குகளில் சேர்</translation> <translation id="6324034347079777476">Android அமைப்பின் ஒத்திசைவு முடக்கப்பட்டது</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> வழியாகப் பகிர்</translation> <translation id="6337234675334993532">என்க்ரிப்ஷன்</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> இல் <ph name="ERROR_CODE" /> பிழை</translation> <translation id="6404511346730675251">புக்மார்க்களைத் திருத்து</translation> <translation id="6406506848690869874">Sync</translation> +<translation id="6410404864818553978">அடிப்படை உபயோகத் தரவு</translation> <translation id="6410883413783534063">ஒரே நேரத்தில் வெவ்வேறு பக்கங்களைப் பார்வையிடுவதற்குத் தாவல்களைத் திறக்கவும்</translation> <translation id="6412673304250309937">Chromeமில் சேமிக்கப்பட்டுள்ள பாதுகாப்பில்லாத தளங்களின் பட்டியலைப் பயன்படுத்தி URLகளைச் சரிபார்க்கும். தளம் உங்கள் கடவுச்சொல்லைத் திருட முயன்றலோ தீங்குவிளைவிக்கும் கோப்பை நீங்கள் பதிவிறக்கினாலோ Chromeமானது பக்க உள்ளடக்கத்தின் சிறிய பகுதிகள் உட்பட URLகளையும் பாதுகாப்பு உலாவலுக்கு அனுப்பக்கூடும்.</translation> <translation id="641643625718530986">அச்சிடு...</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">ஒத்திசைப்பதற்கான துவக்க அமைவு முடியவில்லை. ஒத்திசைவு முடக்கப்பட்டுள்ளது.</translation> <translation id="7022756207310403729">உலாவியில் திற</translation> <translation id="702463548815491781">TalkBack அல்லது ‘ஸ்விட்ச் அணுகல்’ இயக்கத்தில் இருக்கும்போது பரிந்துரைக்கப்படுகிறது</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> மீட்டெடுக்கப்பட்டது</translation> <translation id="7029809446516969842">கடவுச்சொற்கள்</translation> <translation id="703523980599857277">முகப்புப்பக்கத்தை மாற்று</translation> <translation id="7054588988317389591">பட விளக்கங்களைப் பெற வேண்டுமா?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> மற்றும் பல தளங்கள்</translation> <translation id="8327155640814342956">சிறந்த உலாவல் அனுபவத்திற்கு Chromeமைத் திறந்து புதுப்பியுங்கள்</translation> <translation id="8349013245300336738">பயன்படுத்திய தரவு அளவின்படி வரிசைப்படுத்தும்</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> பதிவிறக்கங்கள் மீட்டெடுக்கப்பட்டன</translation> <translation id="8364299278605033898">பிரபல இணையதளங்களைப் பாருங்கள்</translation> <translation id="8368027906805972958">அறியாத அல்லது ஆதரிக்கப்படாத சாதனம் (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> மொழித்தொகுப்பு தயாராக உள்ளது.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">மீண்டும் உள்நுழைக</translation> <translation id="9155898266292537608">ஒரு சொல்லைத் தட்டி உடனடியாகவும் தேடலாம்</translation> <translation id="9169507124922466868">வழிசெலுத்தல் வரலாறு பாதியளவு திறந்துள்ளது</translation> +<translation id="9191031968346938109">இதில் சேர்…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{சரிபார்த்தது: 1 நிமிடத்திற்கு முன்பு}other{சரிபார்த்தது: # நிமிடங்களுக்கு முன்பு}}</translation> <translation id="9204836675896933765">1 கோப்பு மீதமுள்ளது</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">பிழை: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">கடவுச்சொற்றொடரை உள்ளிடுக</translation> <translation id="95817756606698420">சீனாவில் தேடுவதற்கு, Chromeமில் <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" />ஐப் பயன்படுத்தலாம். இதை <ph name="BEGIN_LINK" />அமைப்புகளுக்குச்<ph name="END_LINK" /> சென்று மாற்றலாம்.</translation> +<translation id="962979164594783469">இந்த ஆப்ஸை நிறுவும்</translation> <translation id="968900484120156207">நீங்கள் பார்க்கும் பக்கங்கள் இங்குத் தோன்றும்</translation> <translation id="970715775301869095"><ph name="MINUTES" /> நிமிடங்கள் மீதமுள்ளன</translation> <translation id="974555521953189084">ஒத்திசைவைத் தொடங்க, கடவுச்சொற்றொடரை உள்ளிடவும்</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index 039b747..13f5d47 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">ఇప్పుడే</translation> <translation id="2175927920773552910">QR కోడ్</translation> <translation id="218608176142494674">షేరింగ్</translation> +<translation id="2195339740518523951">Chrome అత్యంత శక్తివంతమైన రక్షణను పొందండి</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" />గా కొనసాగించు</translation> <translation id="2234876718134438132">సింక్, Google సర్వీసులు</translation> <translation id="2239812875700136898">Discover కోసం ఆప్షన్లు' అనే బటన్ ద్వారా మీకు కనపడే కథనాలను నియంత్రించండి</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">శోధన, ఇతర Google సేవలను వ్యక్తిగతీకరించడానికి Google మీ చరిత్రను ఉపయోగించే అవకాశం ఉంటుంది</translation> <translation id="2898264748040935573">నిల్వ చేసిన పాస్వర్డ్ను సవరించండి</translation> <translation id="2900528713135656174">ఈవెంట్ను సృష్టించండి</translation> +<translation id="2901411048554510387"><ph name="WEBSITE_TITLE" /> కోసం సూచనలను చూపుతోంది</translation> <translation id="2904414404539560095">ట్యాబ్ను షేర్ చేయాల్సిన పరికరాల జాబితా పూర్తి ఎత్తులో తెరవబడింది.</translation> <translation id="2905036901251765993">సమీపంలోని వ్యక్తులతో షేర్ చేయడానికి, ఈ QR కోడ్ను స్కాన్ చేయాల్సిందిగా వాళ్లను అడగండి</translation> <translation id="2909615210195135082">Google నోటిఫికేషన్ల ప్లాట్ఫామ్</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">ఇక్కడికి తరలించండి…</translation> <translation id="4411535500181276704">లైట్ మోడ్</translation> <translation id="4415276339145661267">మీ Google ఖాతాను నిర్వహించండి</translation> +<translation id="4427306783828095590">ఫిషింగ్, అలాగే మాల్వేర్ను బ్లాక్ చేయడానికి మెరుగుపరచిన రక్షణ మరింత చేయగలదు</translation> <translation id="4440958355523780886">Google నుండి లైట్ పేజీ అందించబడింది. అసలు పేజీని లోడ్ చేయడానికి నొక్కండి.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> ట్యాబ్ను మూసివేయండి</translation> <translation id="4452548195519783679"><ph name="FOLDER_NAME" />కి బుక్మార్క్ చేసారు</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index 59bc445..522ba83e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -810,7 +810,7 @@ <translation id="6850830437481525139">ปิดแล้ว <ph name="TAB_COUNT" /> แท็บ</translation> <translation id="685850645784703949">Discover โดย Google - ปิดอยู่</translation> <translation id="6864459304226931083">ดาวน์โหลดรูปภาพ</translation> -<translation id="6865313869410766144">ข้อมูลฟอร์มที่ป้อนอัตโนมัติ</translation> +<translation id="6865313869410766144">ข้อมูลแบบฟอร์มที่ป้อนอัตโนมัติ</translation> <translation id="6882836635272038266">การปกป้องแบบมาตรฐานจากเว็บไซต์ การดาวน์โหลด และส่วนขยายที่ทราบแล้วว่าเป็นอันตราย</translation> <translation id="688738109438487280">เพิ่มข้อมูลที่มีอยู่ลงใน <ph name="TO_ACCOUNT" /></translation> <translation id="6891726759199484455">ปลดล็อกเพื่อคัดลอกรหัสผ่าน</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb index ffd3c8b..ba187fbb 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Şimdi</translation> <translation id="2175927920773552910">QR Kodu</translation> <translation id="218608176142494674">Paylaşım</translation> +<translation id="2195339740518523951">Chrome’un en güçlü güvenlik özelliklerinden faydalanın</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> olarak devam edin</translation> <translation id="2234876718134438132">Senkronizasyon ve Google hizmetleri</translation> <translation id="2239812875700136898">Haberlerinizi, Keşfet için Seçenekler düğmesinden kontrol edin</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google; Arama ve diğer Google hizmetlerini kişiselleştirmek için geçmişinizi kullanabilir</translation> <translation id="2898264748040935573">Saklı şifreyi düzenleyin</translation> <translation id="2900528713135656174">Etkinlik oluştur</translation> +<translation id="2901411048554510387"><ph name="WEBSITE_TITLE" /> için öneriler gösteriliyor</translation> <translation id="2904414404539560095">Sekme paylaşılacak cihazların listesi tam yükseklikte açıldı.</translation> <translation id="2905036901251765993">Yakınlardaki kişilerle paylaşmak için bu QR kodunu taramalarını sağlayın</translation> <translation id="2909615210195135082">Google Notifications Platform</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Klasöre taşı…</translation> <translation id="4411535500181276704">Basit mod</translation> <translation id="4415276339145661267">Google Hesabınızı yönetin</translation> +<translation id="4427306783828095590">Gelişmiş koruma, kimlik avını ve kötü amaçlı yazılımları engellemek için daha fazla özellik sunar</translation> <translation id="4440958355523780886">Google tarafından sağlanan basit sayfa. Sayfanın orijinalini yüklemek için dokunun.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> sekmesini kapat</translation> <translation id="4452548195519783679">Yer işareti <ph name="FOLDER_NAME" /> klasörüne eklendi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb index e27dc367..007532fd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Hozir</translation> <translation id="2175927920773552910">QR kod</translation> <translation id="218608176142494674">Ulashish</translation> +<translation id="2195339740518523951">Chrome brauzerining kuchli xavfsizligidan foydalaning</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> sifatida davom etish</translation> <translation id="2234876718134438132">Sinxronizatsiya va Google xizmatlari</translation> <translation id="2239812875700136898">Parametrlar orqali Discover yangiliklarini boshqarish tugmasi</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Qidiruv va boshqa xizmatlarni sizga moslashtirish uchun Google tarix maʼlumotlaringizdan foydalanishi mumkin</translation> <translation id="2898264748040935573">Saqlangan parolni tahrirlash</translation> <translation id="2900528713135656174">Tadbir yaratish</translation> +<translation id="2901411048554510387"><ph name="WEBSITE_TITLE" /> uchun tavsiyalar koʻrsatilmoqda</translation> <translation id="2904414404539560095">Butun hajmda ochilgan varaq uzatiladigan qurilmalar roʻyxati.</translation> <translation id="2905036901251765993">Yaqin-atrofdagilarga ulashish uchun ular shu QR kodni skanerlashi kerak.</translation> <translation id="2909615210195135082">Google bildirishnomalar platformasi</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Boshqa joyga olish…</translation> <translation id="4411535500181276704">Lite rejimi</translation> <translation id="4415276339145661267">Google hisobingizni boshqaring</translation> +<translation id="4427306783828095590">Kengaytirilgan himoya fishing va zararli dasturlarni bloklaydi</translation> <translation id="4440958355523780886">Sahifaning Lite-versiyasi Google tomonidan taqdim etildi. Asl versiyani yuklash uchun tegining.</translation> <translation id="4452411734226507615"><ph name="TAB_TITLE" /> nomli varaqni yopish</translation> <translation id="4452548195519783679">Xatcho‘p “<ph name="FOLDER_NAME" />” jildiga saqlandi</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb index 0021fc4..676825e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -165,6 +165,7 @@ <translation id="2169830938017475061">Bây giờ</translation> <translation id="2175927920773552910">Mã QR</translation> <translation id="218608176142494674">Chia sẻ</translation> +<translation id="2195339740518523951">Tận dụng mức bảo mật mạnh nhất của Chrome</translation> <translation id="2227444325776770048">Tiếp tục bằng <ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Đồng bộ hóa và các dịch vụ của Google</translation> <translation id="2239812875700136898">Kiểm soát các tin bài của bạn bằng các Tùy chọn của nút Khám phá</translation> @@ -256,6 +257,7 @@ <translation id="2893180576842394309">Google có thể sử dụng lịch sử của bạn để điều chỉnh tính năng Tìm kiếm và các dịch vụ khác của Google cho phù hợp với bạn</translation> <translation id="2898264748040935573">Chỉnh sửa mật khẩu đã lưu trữ</translation> <translation id="2900528713135656174">Tạo sự kiện</translation> +<translation id="2901411048554510387">Hiển thị nội dung đề xuất cho <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">Danh sách các thiết bị mà bạn có thể chia sẻ một thẻ đã mở trên toàn màn hình.</translation> <translation id="2905036901251765993">Để chia sẻ với những người ở gần, hãy cho phép họ quét mã QR này</translation> <translation id="2909615210195135082">Nền tảng thông báo của Google</translation> @@ -442,6 +444,7 @@ <translation id="4405224443901389797">Chuyển tới...</translation> <translation id="4411535500181276704">Chế độ thu gọn</translation> <translation id="4415276339145661267">Quản lý Tài khoản Google</translation> +<translation id="4427306783828095590">Chế độ bảo vệ tăng cường giúp chặn phần mềm độc hại và hành vi lừa đảo hiệu quả hơn</translation> <translation id="4440958355523780886">Trang phiên bản rút gọn do Google cung cấp. Nhấn để tải trang gốc.</translation> <translation id="4452411734226507615">Đóng thẻ <ph name="TAB_TITLE" /></translation> <translation id="4452548195519783679">Đã đánh dấu trang vào <ph name="FOLDER_NAME" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb index dd137a2..630068b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">Ukuthwebusla isikrini</translation> <translation id="1111673857033749125">Amabhukhimakhi alondolozwe kwamanye amadivayisi akho azovela lapha.</translation> <translation id="1113597929977215864">Bonisa ukubuka okulula</translation> +<translation id="1123070903960493543">Indlela yokuxhumana ne-Chrome, amasethingi owakhethile, imininingwane yokukhubazeka kwe-Chrome</translation> <translation id="1126809382673880764">Akukuvikeli kumawebusayithi ayingozi, okulandwayo, kanye nezandiso. Usazokuthola ukuvikelwa kokuphequlula okuphephile, lapho kutholakala, kwamanye amasevisi we-Google, njenge-Gmail. nokuSesha.</translation> <translation id="1129510026454351943">Imininingwane: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ukulanda okulindile.}one{# ukulandwa okulindile.}other{# ukulandwa okulindile.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080">Ayikwazi ukwabelana nge-<ph name="CONTENT_TYPE" /></translation> <translation id="1477626028522505441">Ukulandwa kwe-<ph name="FILE_NAME" /> kuhlulekile ngenxa yezinkinga zeseva.</translation> <translation id="1506061864768559482">Injini yokusesha</translation> +<translation id="151267239139452619">Engeza Kokulandiwe</translation> <translation id="1513352483775369820">Amabhukhimakhi nomlando wendawo</translation> <translation id="1513858653616922153">Susa iphasiwedi</translation> <translation id="1521774566618522728">Iyasebenza namhlanje</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> elondoloziwe</translation> <translation id="213279576345780926">I-<ph name="TAB_TITLE" /> evaliwe</translation> <translation id="2139186145475833000">Engeza kusikrini sasekhaya</translation> +<translation id="214888715418183969">Khetha lokho onethezeke ngakho ukukwaba ne-Chrome. Ama-metric owabayo azosetshenziselwa ukusiza ukuthuthukisa izici ze-Chrome, ukusebenza, nokuzinza.</translation> <translation id="2154484045852737596">Hlela ikhadi</translation> <translation id="2154710561487035718">Kopisa i-URL</translation> <translation id="2156074688469523661">Amasayithi asele (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">Ikhodi ye-QR</translation> <translation id="218608176142494674">Ukwabelana</translation> <translation id="2195339740518523951">Thola isivikelo esinamandla kakhulu se-Chrome</translation> +<translation id="2200113223741723867">Phatha ukwabiwa kwedatha yokusetshenziswa</translation> <translation id="2227444325776770048">Qhubeka njengo-<ph name="USER_FULL_NAME" /></translation> <translation id="2234876718134438132">Ukuvumelanisa namasevisi e-Google</translation> <translation id="2239812875700136898">Lawula izindaba zakho kusukela Kuzinketho zenkinobho ye-Discover</translation> @@ -371,12 +375,14 @@ <translation id="3771290962915251154">Lesi silungiselelo sikhutshaziwe ngoba izilawuli zomzali zivuliwe</translation> <translation id="3771694256347217732">Imigomo Yesevisi ye-Google</translation> <translation id="3773755127849930740"><ph name="BEGIN_LINK" />Vula i-Bluetooth<ph name="END_LINK" /> ukuvumela ukumatanisa</translation> +<translation id="3773856050682458546">Idatha eyinhloko kanye nolwazi olumayelana namawebhusayithi owavakashelayo nezinhlelo zokusebenza ozisebenzisayo</translation> <translation id="3775705724665058594">Thumela kumadivayisi akho</translation> <translation id="3778956594442850293">Kungezwe kusikrini sasekhaya</translation> <translation id="3789841737615482174">Faka</translation> <translation id="3810838688059735925">Ividiyo</translation> <translation id="3810973564298564668">Phatha</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> ukulanda kutholakele</translation> +<translation id="3848957262889631524">I-Google <ph name="APP_NAME" /> Njengokhiye wokuqinisekisa ubunikazi</translation> <translation id="3856096718352044181">Sicela uqinisekise ukuthi lo ngumhlinzeki wangempela noma uzame futhi kamuva</translation> <translation id="3861633093716975811">Amavidiyo adumile</translation> <translation id="3892148308691398805">Kopisha umbhalo</translation> @@ -404,7 +410,9 @@ <translation id="3988466920954086464">Bona imiphumela yosesho esheshayo kule phaneli</translation> <translation id="4000212216660919741">Ikhaya elingaxhunyiwe ku-inthanethi</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# hr}one{# amahora}other{# amahora}}</translation> +<translation id="4045764304651014138">Idatha yokusetshenziswa</translation> <translation id="4056223980640387499">I-Sepia</translation> +<translation id="4057643060762047384">Engeza ku-:</translation> <translation id="4060598801229743805">Izinketho ziyatholakala eduze kwaphezulu kwesikrini</translation> <translation id="4062305924942672200">Ulwazi lezomthetho</translation> <translation id="4084682180776658562">Ibhukhimakhi</translation> @@ -545,6 +553,7 @@ <translation id="5039804452771397117">Vumela</translation> <translation id="5040262127954254034">Ubumfihlo</translation> <translation id="5087580092889165836">Engeza ikhadi</translation> +<translation id="5091249083535528968">Idatha yokusetshenziswa enwetshiwe</translation> <translation id="509429900233858213">Kuvele iphutha.</translation> <translation id="510275257476243843">1 ihora elisele</translation> <translation id="5123685120097942451">Ithebhu ye-Incognito</translation> @@ -651,6 +660,7 @@ <translation id="5833984609253377421">Yabelana ngesixhumanisi</translation> <translation id="5836192821815272682">Ilanda isibuyekezo se-Chrome…</translation> <translation id="5853623416121554550">kuphunyuziwe</translation> +<translation id="5854512288214985237">Azikho izibalo noma imibiko yokusaphazeka ethunyelwe ku-Google</translation> <translation id="5854790677617711513">Kudala kunezinsuku ezingu-30</translation> <translation id="5855546874025048181">Yenza ngcono: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">I-Chrome ayikwazi ukuvula i-adaptha ye-Bluetooth</translation> @@ -723,6 +733,7 @@ <translation id="6303969859164067831">Phuma bese uvale ukuvumelanisa</translation> <translation id="6312687380483398334">Izinhlelo zokusebenza zewebhu (thulile)</translation> <translation id="6316139424528454185">Inguqulo ye-Android ayisekelwa</translation> +<translation id="6321526113093607004">Engeza kumabhukhimakhi</translation> <translation id="6324034347079777476">Ukuvumelanisa kwesistimu ye-Android kukhutshaziwe</translation> <translation id="6333140779060797560">Yabelana nge-<ph name="APPLICATION" /></translation> <translation id="6337234675334993532">Ukubethela</translation> @@ -740,6 +751,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" /> ku-<ph name="VIOLATED_URL" /></translation> <translation id="6404511346730675251">Hlela ibhukhimakhi</translation> <translation id="6406506848690869874">Vumelanisa</translation> +<translation id="6410404864818553978">Idatha yokusetshenziswa eyinhloko</translation> <translation id="6410883413783534063">Vula amathebhu ukuvakashela amakhasi ahlukile ngesikhathi esisodwa</translation> <translation id="6412673304250309937">Kuhlola ama-URL anohlu lwamasayithi angaphephile agcinwe ku-Chrome. Uma isayithi lizama ukuntshontsha iphasiwedi yakho, noma uma ulanda ifayela eliyingozi, i-Chrome ingathumela nama-URL, kuhlanganise nokuthile okuqukethwe kulelo khasi, Ekuphequluleni Okuphephile.</translation> <translation id="641643625718530986">Phrinta…</translation> @@ -833,6 +845,7 @@ <translation id="7015203776128479407">Ukusethwa kokuvumelanisa kwasekuqaleni akuzange kuqedelwe. Ukuvumelanisa kuvaliwe.</translation> <translation id="7022756207310403729">Vula kusiphequluli</translation> <translation id="702463548815491781">Kunconyiwe uma i-TalkBack noma okuthi Shintsha ukufinyelela kuvuliwe</translation> +<translation id="7027549951530753705">Kubuyisiwe <ph name="ITEM_TITLE" /></translation> <translation id="7029809446516969842">Amaphasiwedi</translation> <translation id="703523980599857277">Shintsha ikhasi lasekhaya</translation> <translation id="7054588988317389591">Thola incazelo yesithombe?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> namasayithi amaningi</translation> <translation id="8327155640814342956">Ukuze uthole umuzwa ohamba phambili wokuphequlula, vula ukuze ubuyekeze i-Chrome</translation> <translation id="8349013245300336738">Hlunga ngenani ledatha elisetshenzisiwe</translation> +<translation id="835847953965672673">Okulandiwe okungu-<ph name="NUMBER_OF_DOWNLOADS" /> okubuyiselwe</translation> <translation id="8364299278605033898">Bona amawebhusayithi adumile</translation> <translation id="8368027906805972958">Idivayisi engaziwa noma engasekelwe (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381">I-<ph name="LANG" /> ilungile.</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">Phinda ungene ngemvume</translation> <translation id="9155898266292537608">Futhi ungasesha ngokuthepha okusheshayo egameni</translation> <translation id="9169507124922466868">Umlando wokuzula uvuleke ngohhafu</translation> +<translation id="9191031968346938109">Engeza ku-…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{Kuhlolwe kumzuzu o-1 odlule}one{Kuhlolwe kwimizuzu engu-# edlule}other{Kuhlolwe kwimizuzu engu-# edlule}}</translation> <translation id="9204836675896933765">1 ifayela elisele</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">Iphutha: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">Faka umushwana wokungena</translation> <translation id="95817756606698420">I-Chrome ingasebenzisa i-<ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> ukusesha e-China. Ungashintsha lokhu <ph name="BEGIN_LINK" />kuzilungiselelo<ph name="END_LINK" />.</translation> +<translation id="962979164594783469">Faka lolu hlelo lokusebenza</translation> <translation id="968900484120156207">Amakhasi owavakashelayo avela lapha</translation> <translation id="970715775301869095"><ph name="MINUTES" /> amaminithi asele</translation> <translation id="974555521953189084">Faka umshwana wakho wokungena ukuze uqale ukuvumelanisa</translation>
diff --git a/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.cc b/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.cc index 67b3796..f2be419 100644 --- a/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.cc +++ b/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.cc
@@ -26,8 +26,13 @@ namespace { // Folder where the S3 communications are stored when running in replay mode. -constexpr const char kTestDataFolder[] = - "chromeos/assistant/internal/test_data/"; +constexpr char kTestDataFolder[] = "chromeos/assistant/internal/test_data/"; + +// Fake device id passed to Libassistant. By fixing this we ensure it remains +// consistent between the current session and the value stored in the stored +// test data. +// This must be a 16 characters hex string or it will be rejected. +constexpr char kDeviceId[] = "11112222333344445555666677778888"; base::FilePath GetExecutableDir() { base::FilePath result; @@ -152,10 +157,12 @@ SetAccessTokenForMode(mode); StartS3ServerProcess(mode); SetFakeS3ServerURI(); + SetDeviceId(); } void FakeS3Server::Teardown() { StopS3ServerProcess(); + UnsetDeviceId(); UnsetFakeS3ServerURI(); } @@ -177,6 +184,14 @@ Service::OverrideS3ServerUriForTesting(fake_s3_server_uri_.c_str()); } +void FakeS3Server::SetDeviceId() { + Service::OverrideDeviceIdForTesting(kDeviceId); +} + +void FakeS3Server::UnsetDeviceId() { + Service::OverrideDeviceIdForTesting(nullptr); +} + void FakeS3Server::UnsetFakeS3ServerURI() { Service::OverrideS3ServerUriForTesting(nullptr); fake_s3_server_uri_ = "";
diff --git a/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.h b/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.h index e09da6b..665fe7f 100644 --- a/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.h +++ b/chrome/browser/ui/ash/assistant/test_support/fake_s3_server.h
@@ -56,6 +56,8 @@ void SetAccessTokenForMode(FakeS3Mode mode); void SetFakeS3ServerURI(); void UnsetFakeS3ServerURI(); + void SetDeviceId(); + void UnsetDeviceId(); void StartS3ServerProcess(FakeS3Mode mode); void StopS3ServerProcess(); std::string GetTestDataFileName();
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_base.h b/chrome/browser/ui/cocoa/notifications/notification_builder_base.h index 1c6f072e..558ea73 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_base.h +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_base.h
@@ -14,10 +14,8 @@ base::scoped_nsobject<NSMutableDictionary> _notificationData; } -// Initializes a builder with default values for the button labels. -- (instancetype)initWithCloseLabel:(NSString*)closeLabel - optionsLabel:(NSString*)optionsLabel - settingsLabel:(NSString*)settingsLabel; +// Initializes an empty builder along with |_notificationData|. +- (instancetype)init; // Initializes a builder by deserializing |data|. The |data| must have been // generated by calling the buildDictionary function on another builder
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm index e39c3a6..4d24b29d 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm
@@ -8,20 +8,9 @@ @implementation NotificationBuilderBase -- (instancetype)initWithCloseLabel:(NSString*)closeLabel - optionsLabel:(NSString*)optionsLabel - settingsLabel:(NSString*)settingsLabel { +- (instancetype)init { if ((self = [super init])) { _notificationData.reset([[NSMutableDictionary alloc] init]); - [_notificationData - setObject:closeLabel - forKey:notification_constants::kNotificationCloseButtonTag]; - [_notificationData - setObject:optionsLabel - forKey:notification_constants::kNotificationOptionsButtonTag]; - [_notificationData - setObject:settingsLabel - forKey:notification_constants::kNotificationSettingsButtonTag]; } return self; }
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h index 690779077..a672946 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h
@@ -19,7 +19,7 @@ // base::scoped_nsobject<NotificationBuilder> builder( // [[NotificationBuilder alloc] initWithCloseLabel:@"Close" // optionsLabel:@"Options" -// settingsLabel:@"Settings"]); +// settingsLabel:@"Settings")]); // [builder setTitle:@"Hello"]; // // // Build a notification out of the data. @@ -34,6 +34,11 @@ // [[NotificationBuilder alloc] initWithData:notificationData]); @interface NotificationBuilder : NotificationBuilderBase +// Initializes a builder with default values for the button labels. +- (instancetype)initWithCloseLabel:(NSString*)closeLabel + optionsLabel:(NSString*)optionsLabel + settingsLabel:(NSString*)settingsLabel; + // Sets the icon that is displayed in the notification if present - (void)setIcon:(NSImage*)icon;
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm index 2b6d5c9..8d1abd2 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
@@ -13,6 +13,23 @@ @implementation NotificationBuilder +- (instancetype)initWithCloseLabel:(NSString*)closeLabel + optionsLabel:(NSString*)optionsLabel + settingsLabel:(NSString*)settingsLabel { + if ((self = [super init])) { + [_notificationData + setObject:closeLabel + forKey:notification_constants::kNotificationCloseButtonTag]; + [_notificationData + setObject:optionsLabel + forKey:notification_constants::kNotificationOptionsButtonTag]; + [_notificationData + setObject:settingsLabel + forKey:notification_constants::kNotificationSettingsButtonTag]; + } + return self; +} + - (void)setIcon:(NSImage*)icon { if (!icon) return;
diff --git a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h index 06e9903..8bb63ff 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h +++ b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.h
@@ -20,7 +20,6 @@ extern NSString* const kNotificationCloseButtonTag; extern NSString* const kNotificationOptionsButtonTag; extern NSString* const kNotificationSettingsButtonTag; -extern NSString* const kNotificationCategoryIdentifier; extern NSString* const kNotificationOrigin; extern NSString* const kNotificationId;
diff --git a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm index 9e01bf0..b1fc5dde 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm +++ b/chrome/browser/ui/cocoa/notifications/notification_constants_mac.mm
@@ -19,7 +19,6 @@ NSString* const kNotificationCloseButtonTag = @"closeButton"; NSString* const kNotificationOptionsButtonTag = @"optionsButton"; NSString* const kNotificationSettingsButtonTag = @"settingsButton"; -NSString* const kNotificationCategoryIdentifier = @"categoryIdentifier"; // Applicable to NotificationBuilder and NotificationResponseBuilder NSString* const kNotificationOrigin = @"notificationOrigin";
diff --git a/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.h b/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.h index a01f892..d166f32 100644 --- a/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.h +++ b/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.h
@@ -11,16 +11,13 @@ #import "chrome/browser/ui/cocoa/notifications/notification_builder_base.h" @class UNMutableNotificationContent; -@class UNNotificationCategory; // Provides a marshallable way for storing the information required to construct // a UNMutableNotificationContent that is to be displayed on the system. // // A quick example: // base::scoped_nsobject<UNNotificationBuilder> builder( -// [[UNNotificationBuilder alloc] initWithCloseLabel:@"Close" -// optionsLabel:@"Options" -// settingsLabel:@"Settings"]); +// [[UNNotificationBuilder alloc] init]); // [builder setTitle:@"Hello"]; // // // Build a notification out of the data. @@ -39,10 +36,6 @@ // Sets the icon path that is used to display it in the notification if present - (void)setIconPath:(NSString*)iconPath; -// Returns a UNNotificationCategory with the specified buttons. Needs to be -// called after setNotificationId is. -- (UNNotificationCategory*)buildCategory; - // Returns a notification ready to be displayed out of the provided // |notificationData|. - (UNMutableNotificationContent*)buildUserNotification;
diff --git a/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.mm index 6bc03e0..7e7f9bc 100644 --- a/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.mm +++ b/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.mm
@@ -19,104 +19,6 @@ forKey:notification_constants::kNotificationIconPath]; } -- (UNNotificationCategory*)buildCategory { - DCHECK( - [_notificationData objectForKey:notification_constants::kNotificationId]); - DCHECK([_notificationData - objectForKey:notification_constants::kNotificationHasSettingsButton]); - - NSMutableArray* buttonsArray = [NSMutableArray arrayWithCapacity:4]; - - // Extensions don't have a settings button. - NSNumber* showSettingsButton = [_notificationData - objectForKey:notification_constants::kNotificationHasSettingsButton]; - BOOL settingsButton = [showSettingsButton boolValue]; - - UNNotificationAction* closeButton = [UNNotificationAction - actionWithIdentifier:notification_constants::kNotificationCloseButtonTag - title:[_notificationData - objectForKey:notification_constants:: - kNotificationCloseButtonTag] - options:UNNotificationActionOptionNone]; - [buttonsArray addObject:closeButton]; - - if ([_notificationData - objectForKey:notification_constants::kNotificationButtonOne]) { - UNNotificationAction* buttonOne = [UNNotificationAction - actionWithIdentifier:notification_constants::kNotificationButtonOne - title:[_notificationData - objectForKey:notification_constants:: - kNotificationButtonOne] - options:UNNotificationActionOptionNone]; - [buttonsArray addObject:buttonOne]; - } - if ([_notificationData - objectForKey:notification_constants::kNotificationButtonTwo]) { - UNNotificationAction* buttonTwo = [UNNotificationAction - actionWithIdentifier:notification_constants::kNotificationButtonTwo - title:[_notificationData - objectForKey:notification_constants:: - kNotificationButtonTwo] - options:UNNotificationActionOptionNone]; - [buttonsArray addObject:buttonTwo]; - } - - if (settingsButton) { - UNNotificationAction* settingsButton = [UNNotificationAction - actionWithIdentifier:notification_constants:: - kNotificationSettingsButtonTag - title: - [_notificationData - objectForKey:notification_constants:: - kNotificationSettingsButtonTag] - options:UNNotificationActionOptionNone]; - [buttonsArray addObject:settingsButton]; - } - - // If there are only 2 buttons [Close, button] then the actions array need to - // be set as [button, Close] so that close is on top. This is to safeguard the - // order of the buttons in case respondsToSelector:@selector(alternateAction) - // were to return false. - if ([buttonsArray count] == 2) { - // Remove the close button and move it to the end of the array - [buttonsArray removeObject:closeButton]; - [buttonsArray addObject:closeButton]; - } - - UNNotificationCategory* category = [UNNotificationCategory - categoryWithIdentifier: - [_notificationData - objectForKey:notification_constants::kNotificationId] - actions:buttonsArray - intentIdentifiers:@[] - options:UNNotificationCategoryOptionCustomDismissAction]; - [_notificationData - setObject:[_notificationData - objectForKey:notification_constants::kNotificationId] - forKey:notification_constants::kNotificationCategoryIdentifier]; - - // This uses a private API to make sure the close button is always visible in - // both alerts and banners, and modifies its content so that it is consistent - // with the rest of the notification buttons. Otherwise, the text inside the - // close button will come from the Apple API - if ([category respondsToSelector:@selector(alternateAction)]) { - [buttonsArray removeObject:closeButton]; - [category setValue:buttonsArray forKey:@"actions"]; - [category setValue:closeButton forKey:@"_alternateAction"]; - } - - // This uses a private API to change the text of the actions menu title so - // that it is consistent with the rest of the notification buttons - if ([category respondsToSelector:@selector(actionsMenuTitle)]) { - [category setValue:[_notificationData - objectForKey:notification_constants:: - kNotificationOptionsButtonTag] - forKey:@"_actionsMenuTitle"]; - } - - return category; -} - - (UNMutableNotificationContent*)buildUserNotification { base::scoped_nsobject<UNMutableNotificationContent> toast( [[UNMutableNotificationContent alloc] init]); @@ -192,14 +94,6 @@ if (attachment != nil) [toast setAttachments:@[ attachment ]]; } - // Category - if ([_notificationData objectForKey:notification_constants:: - kNotificationCategoryIdentifier]) { - [toast setCategoryIdentifier: - [_notificationData - objectForKey:notification_constants:: - kNotificationCategoryIdentifier]]; - } [toast setUserInfo:@{ notification_constants::kNotificationOrigin : origin,
diff --git a/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac_unittest.mm b/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac_unittest.mm index c4bb705..b138757 100644 --- a/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac_unittest.mm +++ b/chrome/browser/ui/cocoa/notifications/unnotification_builder_mac_unittest.mm
@@ -25,9 +25,7 @@ base::scoped_nsobject<UNNotificationBuilder> NewTestBuilder( NotificationHandler::Type type) { base::scoped_nsobject<UNNotificationBuilder> builder( - [[UNNotificationBuilder alloc] initWithCloseLabel:@"Close" - optionsLabel:@"Options" - settingsLabel:@"Settings"]); + [[UNNotificationBuilder alloc] init]); [builder setNotificationId:@"notificationId"]; [builder setProfileId:@"profileId"]; [builder setIncognito:false]; @@ -54,244 +52,6 @@ } } -TEST(UNNotificationBuilderMacTest, TestNotificationNoButtons) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::WEB_NON_PERSISTENT); - - [builder setShowSettingsButton:true]; - UNNotificationCategory* category = [builder buildCategory]; - - // Test contents of the category - if ([category respondsToSelector:@selector(alternateAction)]) { - EXPECT_EQ("Close", base::SysNSStringToUTF8([[category - valueForKey:@"_alternateAction"] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[category valueForKey:@"_alternateAction"] identifier])); - - EXPECT_EQ(1ul, [[category actions] count]); - } else { - EXPECT_EQ("Close", base::SysNSStringToUTF8( - [[[category actions] firstObject] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[[category actions] firstObject] identifier])); - - EXPECT_EQ(2ul, [[category actions] count]); - } - - EXPECT_EQ("Settings", - base::SysNSStringToUTF8([[[category actions] lastObject] title])); - EXPECT_EQ( - base::SysNSStringToUTF8( - notification_constants::kNotificationSettingsButtonTag), - base::SysNSStringToUTF8([[[category actions] lastObject] identifier])); - - UNMutableNotificationContent* content = [builder buildUserNotification]; - EXPECT_EQ("notificationId", - base::SysNSStringToUTF8([content categoryIdentifier])); - } -} - -TEST(UNNotificationBuilderMacTest, TestNotificationOneButton) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::WEB_NON_PERSISTENT); - - [builder setButtons:@"Button1" secondaryButton:@""]; - [builder setShowSettingsButton:true]; - UNNotificationCategory* category = [builder buildCategory]; - - // Test contents of the category - if ([category respondsToSelector:@selector(alternateAction)]) { - EXPECT_EQ("Close", base::SysNSStringToUTF8([[category - valueForKey:@"_alternateAction"] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[category valueForKey:@"_alternateAction"] identifier])); - EXPECT_EQ(2ul, [[category actions] count]); - } else { - EXPECT_EQ("Close", base::SysNSStringToUTF8( - [[[category actions] firstObject] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[[category actions] firstObject] identifier])); - EXPECT_EQ(3ul, [[category actions] count]); - } - - EXPECT_EQ("Button1", - base::SysNSStringToUTF8([[category actions][0] title])); - EXPECT_EQ( - base::SysNSStringToUTF8(notification_constants::kNotificationButtonOne), - base::SysNSStringToUTF8([[category actions][0] identifier])); - - EXPECT_EQ("Settings", - base::SysNSStringToUTF8([[[category actions] lastObject] title])); - EXPECT_EQ( - base::SysNSStringToUTF8( - notification_constants::kNotificationSettingsButtonTag), - base::SysNSStringToUTF8([[[category actions] lastObject] identifier])); - - if ([category respondsToSelector:@selector(actionsMenuTitle)]) { - EXPECT_EQ("Options", base::SysNSStringToUTF8( - [category valueForKey:@"_actionsMenuTitle"])); - } - - UNMutableNotificationContent* content = [builder buildUserNotification]; - EXPECT_EQ("notificationId", - base::SysNSStringToUTF8([content categoryIdentifier])); - } -} - -TEST(UNNotificationBuilderMacTest, TestNotificationTwoButtons) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::WEB_NON_PERSISTENT); - - [builder setButtons:@"Button1" secondaryButton:@"Button2"]; - [builder setShowSettingsButton:true]; - UNNotificationCategory* category = [builder buildCategory]; - - // Test contents of the category - if ([category respondsToSelector:@selector(alternateAction)]) { - EXPECT_EQ("Close", base::SysNSStringToUTF8([[category - valueForKey:@"_alternateAction"] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[category valueForKey:@"_alternateAction"] identifier])); - EXPECT_EQ(3ul, [[category actions] count]); - } else { - EXPECT_EQ("Close", base::SysNSStringToUTF8( - [[[category actions] firstObject] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[[category actions] firstObject] identifier])); - EXPECT_EQ(4ul, [[category actions] count]); - } - - EXPECT_EQ("Button1", - base::SysNSStringToUTF8([[category actions][0] title])); - EXPECT_EQ( - base::SysNSStringToUTF8(notification_constants::kNotificationButtonOne), - base::SysNSStringToUTF8([[category actions][0] identifier])); - - EXPECT_EQ("Button2", - base::SysNSStringToUTF8([[category actions][1] title])); - EXPECT_EQ( - base::SysNSStringToUTF8(notification_constants::kNotificationButtonTwo), - base::SysNSStringToUTF8([[category actions][1] identifier])); - - EXPECT_EQ("Settings", - base::SysNSStringToUTF8([[[category actions] lastObject] title])); - EXPECT_EQ( - base::SysNSStringToUTF8( - notification_constants::kNotificationSettingsButtonTag), - base::SysNSStringToUTF8([[[category actions] lastObject] identifier])); - - if ([category respondsToSelector:@selector(actionsMenuTitle)]) { - EXPECT_EQ("Options", base::SysNSStringToUTF8( - [category valueForKey:@"_actionsMenuTitle"])); - } - - UNMutableNotificationContent* content = [builder buildUserNotification]; - EXPECT_EQ("notificationId", - base::SysNSStringToUTF8([content categoryIdentifier])); - EXPECT_EQ(0ul, [[content attachments] count]); - } -} - -TEST(UNNotificationBuilderMacTest, TestNotificationExtensionNoButtons) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::EXTENSION); - - UNNotificationCategory* category = [builder buildCategory]; - - // Test contents of the category - if ([category respondsToSelector:@selector(alternateAction)]) { - EXPECT_EQ("Close", base::SysNSStringToUTF8([[category - valueForKey:@"_alternateAction"] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[category valueForKey:@"_alternateAction"] identifier])); - - EXPECT_EQ(0ul, [[category actions] count]); - } else { - EXPECT_EQ("Close", base::SysNSStringToUTF8( - [[[category actions] firstObject] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[[category actions] firstObject] identifier])); - - EXPECT_EQ(1ul, [[category actions] count]); - } - - UNMutableNotificationContent* content = [builder buildUserNotification]; - EXPECT_EQ("notificationId", - base::SysNSStringToUTF8([content categoryIdentifier])); - } -} - -TEST(UNNotificationBuilderMacTest, TestNotificationExtensionTwoButtons) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::EXTENSION); - - [builder setButtons:@"Button1" secondaryButton:@"Button2"]; - UNNotificationCategory* category = [builder buildCategory]; - - // Test contents of the category - if ([category respondsToSelector:@selector(alternateAction)]) { - EXPECT_EQ("Close", base::SysNSStringToUTF8([[category - valueForKey:@"_alternateAction"] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[category valueForKey:@"_alternateAction"] identifier])); - EXPECT_EQ(2ul, [[category actions] count]); - } else { - EXPECT_EQ("Close", base::SysNSStringToUTF8( - [[[category actions] firstObject] title])); - EXPECT_EQ(base::SysNSStringToUTF8( - notification_constants::kNotificationCloseButtonTag), - base::SysNSStringToUTF8( - [[[category actions] firstObject] identifier])); - EXPECT_EQ(3ul, [[category actions] count]); - } - - EXPECT_EQ("Button1", - base::SysNSStringToUTF8([[category actions][0] title])); - EXPECT_EQ( - base::SysNSStringToUTF8(notification_constants::kNotificationButtonOne), - base::SysNSStringToUTF8([[category actions][0] identifier])); - - EXPECT_EQ("Button2", - base::SysNSStringToUTF8([[[category actions] lastObject] title])); - EXPECT_EQ( - base::SysNSStringToUTF8(notification_constants::kNotificationButtonTwo), - base::SysNSStringToUTF8([[[category actions] lastObject] identifier])); - - if ([category respondsToSelector:@selector(actionsMenuTitle)]) { - EXPECT_EQ("Options", base::SysNSStringToUTF8( - [category valueForKey:@"_actionsMenuTitle"])); - } - - UNMutableNotificationContent* content = [builder buildUserNotification]; - EXPECT_EQ("notificationId", - base::SysNSStringToUTF8([content categoryIdentifier])); - EXPECT_EQ(0ul, [[content attachments] count]); - } -} - TEST(UNNotificationBuilderMacTest, TestNotificationDataMissingContextMessage) { if (@available(macOS 10.14, *)) { base::scoped_nsobject<UNNotificationBuilder> builder =
diff --git a/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac.mm index 46c7efa2..97eefc3 100644 --- a/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac.mm +++ b/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac.mm
@@ -58,16 +58,6 @@ isEqualToString:notification_constants:: kNotificationSettingsButtonTag]) { operation = NotificationOperation::NOTIFICATION_SETTINGS; - } else if ([[response actionIdentifier] - isEqualToString:notification_constants:: - kNotificationButtonOne]) { - operation = NotificationOperation::NOTIFICATION_CLICK; - buttonIndex = 0; - } else if ([[response actionIdentifier] - isEqualToString:notification_constants:: - kNotificationButtonTwo]) { - operation = NotificationOperation::NOTIFICATION_CLICK; - buttonIndex = 1; } else { NOTREACHED(); }
diff --git a/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac_unittest.mm b/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac_unittest.mm index 21a9379..6bb15c3f 100644 --- a/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac_unittest.mm +++ b/chrome/browser/ui/cocoa/notifications/unnotification_response_builder_mac_unittest.mm
@@ -53,9 +53,7 @@ base::scoped_nsobject<UNNotificationBuilder> NewTestBuilder( NotificationHandler::Type type) { base::scoped_nsobject<UNNotificationBuilder> builder( - [[UNNotificationBuilder alloc] initWithCloseLabel:@"Close" - optionsLabel:@"Options" - settingsLabel:@"Settings"]); + [[UNNotificationBuilder alloc] init]); [builder setTitle:@"Title"]; [builder setSubTitle:@"https://www.moe.com"]; [builder setContextMessage:@"hey there"]; @@ -212,55 +210,3 @@ buttonIndex.intValue); } } - -TEST(UNNotificationResponseBuilderMacTest, TestNotificationButtonOne) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::WEB_PERSISTENT); - UNMutableNotificationContent* content = [builder buildUserNotification]; - base::scoped_nsobject<NSMutableDictionary> userInfo( - [[content userInfo] mutableCopy]); - - FakeUNNotificationResponse* fakeResponse = CreateFakeResponse(userInfo); - fakeResponse.actionIdentifier = - notification_constants::kNotificationButtonOne; - - NSDictionary* response = [UNNotificationResponseBuilder - buildDictionary:static_cast<UNNotificationResponse*>(fakeResponse)]; - - NSNumber* operation = - [response objectForKey:notification_constants::kNotificationOperation]; - NSNumber* buttonIndex = [response - objectForKey:notification_constants::kNotificationButtonIndex]; - - EXPECT_EQ(static_cast<int>(NotificationOperation::NOTIFICATION_CLICK), - operation.intValue); - EXPECT_EQ(0, buttonIndex.intValue); - } -} - -TEST(UNNotificationResponseBuilderMacTest, TestNotificationButtonTwo) { - if (@available(macOS 10.14, *)) { - base::scoped_nsobject<UNNotificationBuilder> builder = - NewTestBuilder(NotificationHandler::Type::WEB_PERSISTENT); - UNMutableNotificationContent* content = [builder buildUserNotification]; - base::scoped_nsobject<NSMutableDictionary> userInfo( - [[content userInfo] mutableCopy]); - - FakeUNNotificationResponse* fakeResponse = CreateFakeResponse(userInfo); - fakeResponse.actionIdentifier = - notification_constants::kNotificationButtonTwo; - - NSDictionary* response = [UNNotificationResponseBuilder - buildDictionary:static_cast<UNNotificationResponse*>(fakeResponse)]; - - NSNumber* operation = - [response objectForKey:notification_constants::kNotificationOperation]; - NSNumber* buttonIndex = [response - objectForKey:notification_constants::kNotificationButtonIndex]; - - EXPECT_EQ(static_cast<int>(NotificationOperation::NOTIFICATION_CLICK), - operation.intValue); - EXPECT_EQ(1, buttonIndex.intValue); - } -}
diff --git a/chrome/browser/ui/find_bar/find_bar_controller.cc b/chrome/browser/ui/find_bar/find_bar_controller.cc index 88ff1163..ddc6872 100644 --- a/chrome/browser/ui/find_bar/find_bar_controller.cc +++ b/chrome/browser/ui/find_bar/find_bar_controller.cc
@@ -139,6 +139,7 @@ content::Source<NavigationController>(&web_contents_->GetController())); MaybeSetPrepopulateText(); + UpdateFindBarForCurrentResult(); if (find_tab_helper && find_tab_helper->find_ui_active()) { // A tab with a visible find bar just got selected and we need to show the @@ -147,14 +148,36 @@ // we don't surprise the user by popping up to the left for no apparent // reason. find_bar_->Show(false); + // The condition below can be true on macOS if the global pasteboard changed + // while this tab was inactive (the find result will have been reset by + // FindBarPlatformHelperMac). In that case, we need to find the new text to + // update the results in the findbar. If condition is true due to the find + // text being empty, the call to StartFinding will be a harmless no-op. + if (find_tab_helper->find_result().number_of_matches() == -1) { + find_tab_helper->StartFinding(find_bar_->GetFindText(), + true /* forward_direction */, + false /* case_sensitive */, + false /* find_match */); + } } - UpdateFindBarForCurrentResult(); find_bar_->UpdateFindBarForChangedWebContents(); } void FindBarController::SetText(base::string16 text) { find_bar_->SetFindTextAndSelectedRange(text, find_bar_->GetSelectedRange()); + + if (!web_contents_) + return; + find_in_page::FindTabHelper* find_tab_helper = + find_in_page::FindTabHelper::FromWebContents(web_contents_); + if (!find_tab_helper->find_ui_active()) + return; + + find_tab_helper->StartFinding(text, + true /* forward_direction */, + false /* case_sensitive */, + false /* find_match */); } void FindBarController::OnUserChangedFindText(base::string16 text) { @@ -185,6 +208,11 @@ } } +void FindBarController::OnFindEmptyText(content::WebContents* web_contents) { + DCHECK_EQ(web_contents, web_contents_); + UpdateFindBarForCurrentResult(); +} + void FindBarController::OnFindResultAvailable( content::WebContents* web_contents) { DCHECK_EQ(web_contents, web_contents_);
diff --git a/chrome/browser/ui/find_bar/find_bar_controller.h b/chrome/browser/ui/find_bar/find_bar_controller.h index 341de97..e0100dd 100644 --- a/chrome/browser/ui/find_bar/find_bar_controller.h +++ b/chrome/browser/ui/find_bar/find_bar_controller.h
@@ -65,6 +65,7 @@ const content::NotificationDetails& details) override; // find_in_page::FindResultObserver: + void OnFindEmptyText(content::WebContents* web_contents) override; void OnFindResultAvailable(content::WebContents* web_contents) override; void SetText(base::string16 text);
diff --git a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc index 9766049..ce65288 100644 --- a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc +++ b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc
@@ -143,6 +143,16 @@ EnsureFindBoxOpenForBrowser(browser()); } + int FindNext(WebContents* web_contents, int* ordinal) { + browser()->GetFindBarController()->Show(true /*find_next*/); + ui_test_utils::FindResultWaiter observer(web_contents); + observer.Wait(); + if (ordinal) { + *ordinal = observer.active_match_ordinal(); + } + return observer.number_of_matches(); + } + int FindInPage16(WebContents* web_contents, const base::string16& search_str, bool forward, @@ -1090,9 +1100,8 @@ // Search for 'no_match'. No matches should be found. int ordinal = 0; - WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - EXPECT_EQ(0, FindInPageASCII(web_contents, "no_match", + auto* tab_strip = browser()->tab_strip_model(); + EXPECT_EQ(0, FindInPageASCII(tab_strip->GetActiveWebContents(), "no_match", kFwd, kIgnoreCase, &ordinal)); EXPECT_EQ(0, ordinal); @@ -1102,8 +1111,7 @@ // Simulate what happens when you press F3 for FindNext. We should get a // response here (a hang means search was aborted). - EXPECT_EQ(0, ui_test_utils::FindInPage(web_contents, base::string16(), kFwd, - kIgnoreCase, &ordinal, nullptr)); + EXPECT_EQ(0, FindNext(tab_strip->GetActiveWebContents(), &ordinal)); EXPECT_EQ(0, ordinal); // Open another tab (tab C). @@ -1112,8 +1120,7 @@ // Simulate what happens when you press F3 for FindNext. We should get a // response here (a hang means search was aborted). - EXPECT_EQ(0, ui_test_utils::FindInPage(web_contents, base::string16(), kFwd, - kIgnoreCase, &ordinal, nullptr)); + EXPECT_EQ(0, FindNext(tab_strip->GetActiveWebContents(), &ordinal)); EXPECT_EQ(0, ordinal); } @@ -1158,8 +1165,7 @@ // Simulate what happens when you press F3 for FindNext. Still should show // one match. This cleared the pre-populate string at one point (see bug). - EXPECT_EQ(1, ui_test_utils::FindInPage(web_contents, base::string16(), kFwd, - kIgnoreCase, &ordinal, nullptr)); + EXPECT_EQ(1, FindNext(web_contents, &ordinal)); EXPECT_EQ(1, ordinal); // End the Find session, thereby making the next F3 start afresh. @@ -1167,7 +1173,7 @@ find_in_page::SelectionAction::kKeep, find_in_page::ResultAction::kKeep); // Simulate F3 while Find box is closed. Should have 1 match. - EXPECT_EQ(1, FindInPageASCII(web_contents, "", kFwd, kIgnoreCase, &ordinal)); + EXPECT_EQ(1, FindNext(web_contents, &ordinal)); EXPECT_EQ(1, ordinal); } @@ -1211,8 +1217,7 @@ browser()->GetFindBarController()->EndFindSession( find_in_page::SelectionAction::kKeep, find_in_page::ResultAction::kKeep); // Simulate F3. - ui_test_utils::FindInPage(web_contents_1, base::string16(), kFwd, kIgnoreCase, - &ordinal, nullptr); + FindNext(web_contents_1, &ordinal); FindBar* find_bar = browser()->GetFindBarController()->find_bar(); if (find_bar->HasGlobalFindPasteboard()) { EXPECT_EQ(find_in_page::FindTabHelper::FromWebContents(web_contents_1)
diff --git a/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_browsertest.mm b/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_browsertest.mm index 9a496d8..2ec95aa 100644 --- a/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_browsertest.mm +++ b/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_browsertest.mm
@@ -10,11 +10,31 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/find_bar/find_bar.h" #include "chrome/browser/ui/find_bar/find_bar_controller.h" +#include "chrome/test/base/find_result_waiter.h" #include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_observer.h" #include "content/public/test/browser_test.h" #include "testing/gtest/include/gtest/gtest.h" #import "ui/base/cocoa/find_pasteboard.h" +const char kSimple[] = "simple.html"; + +GURL GetURL(const std::string& filename) { + return ui_test_utils::GetTestUrl(base::FilePath().AppendASCII("find_in_page"), + base::FilePath().AppendASCII(filename)); +} + +int WaitForFind(content::WebContents* web_contents, int* ordinal) { + ui_test_utils::FindResultWaiter observer(web_contents); + observer.Wait(); + if (ordinal) { + *ordinal = observer.active_match_ordinal(); + } + return observer.number_of_matches(); +} + class FindBarPlatformHelperMacTest : public InProcessBrowserTest { public: FindBarPlatformHelperMacTest() {} @@ -51,21 +71,61 @@ find_bar_controller->find_bar()->GetFindText()); } -// Tests that the find bar is updated as the pasteboard updates. +// Tests that the find bar text and results are updated as the global find +// pasteboard updates. The following bug used to exist: +// 1) Find some text. +// 2) Switch to another app and find something there to put it in the global +// find pasteboard. +// 3) Switch back to chrome, make sure no text is selected, and open the +// findbar. The bug caused the match counts from the previous search to +// remain in the findbar and the old find results to remain highlighted. IN_PROC_BROWSER_TEST_F(FindBarPlatformHelperMacTest, FindBarUpdatedFromPasteboard) { + ui_test_utils::NavigateToURL(browser(), GetURL(kSimple)); + FindBarController* find_bar_controller = browser()->GetFindBarController(); ASSERT_NE(nullptr, find_bar_controller); + FindBar* find_bar = find_bar_controller->find_bar(); + ASSERT_NE(nullptr, find_bar); + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + ASSERT_NE(nullptr, web_contents); + find_in_page::FindTabHelper* helper = + find_in_page::FindTabHelper::FromWebContents(web_contents); + ASSERT_NE(nullptr, helper); + + int ordinal = -1; + int find_request_id = helper->current_find_request_id(); NSString* update_string = @"Update String"; [[FindPasteboard sharedInstance] setFindText:update_string]; - EXPECT_EQ(base::SysNSStringToUTF16(update_string), - find_bar_controller->find_bar()->GetFindText()); + // setFindText shouldn't trigger a find since the findbar isn't showing + EXPECT_EQ(find_request_id, helper->current_find_request_id()); + EXPECT_EQ(base::SysNSStringToUTF16(update_string), find_bar->GetFindText()); - NSString* next_string = @"Next String"; + find_bar_controller->Show(); + // Showing the findbar should trigger a find request + EXPECT_EQ(find_request_id + 1, helper->current_find_request_id()); + EXPECT_EQ(0, WaitForFind(web_contents, &ordinal)); + EXPECT_EQ(0, ordinal); + + NSString* next_string = @"some text"; [[FindPasteboard sharedInstance] setFindText:next_string]; + // setFindText should trigger a find since the findbar is now showing + EXPECT_EQ(find_request_id + 2, helper->current_find_request_id()); + EXPECT_EQ(1, WaitForFind(web_contents, &ordinal)); + EXPECT_EQ(0, ordinal); + EXPECT_EQ(base::SysNSStringToUTF16(next_string), find_bar->GetFindText()); - EXPECT_EQ(base::SysNSStringToUTF16(next_string), - find_bar_controller->find_bar()->GetFindText()); + NSString* empty_string = @""; + [[FindPasteboard sharedInstance] setFindText:empty_string]; + // setting an empty string won't trigger a find, but it should clear + // the find results + EXPECT_EQ(find_request_id + 2, helper->current_find_request_id()); + EXPECT_EQ(-1, helper->find_result().number_of_matches()); + EXPECT_EQ(-1, helper->find_result().active_match_ordinal()); + EXPECT_EQ(base::string16(), + find_bar->GetFindBarTesting()->GetMatchCountText()); + EXPECT_EQ(base::SysNSStringToUTF16(empty_string), find_bar->GetFindText()); }
diff --git a/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_interactive_uitest.mm b/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_interactive_uitest.mm index 39ae506..59b41ff 100644 --- a/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_interactive_uitest.mm +++ b/chrome/browser/ui/find_bar/find_bar_platform_helper_mac_interactive_uitest.mm
@@ -259,8 +259,7 @@ find_bar_controller->EndFindSession(find_in_page::SelectionAction::kKeep, find_in_page::ResultAction::kKeep); // Simulate F3. - ui_test_utils::FindInPage(first_active_web_contents, base::string16(), true, - false, nullptr, nullptr); + browser()->GetFindBarController()->Show(true /*find_next*/); EXPECT_EQ( base::ASCIIToUTF16("given"), find_in_page::FindTabHelper::FromWebContents(first_active_web_contents)
diff --git a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc index e4f56d4d..1dbea62a 100644 --- a/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc +++ b/chrome/browser/ui/views/apps/app_dialog/app_dialog_view.cc
@@ -18,7 +18,7 @@ SetShowIcon(true); SetShowCloseButton(false); SetModalType(ui::MODAL_TYPE_WINDOW); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); }
diff --git a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc index 599922c..ac62874 100644 --- a/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc +++ b/chrome/browser/ui/views/autofill/autofill_popup_view_native_views.cc
@@ -71,6 +71,9 @@ // The additional height of the row in case it has two lines of text. constexpr int kAutofillPopupAdditionalDoubleRowHeight = 22; +// The additional padding of the row in case it has three lines of text. +constexpr int kAutofillPopupAdditionalPadding = 16; + // Vertical spacing between labels in one row. constexpr int kAdjacentLabelsVerticalSpacing = 2; @@ -186,6 +189,17 @@ return GetIconImageViewByName(suggestion.store_indicator_icon); } +// Creates a label with a specific context and style. +std::unique_ptr<views::Label> CreateLabelWithStyleAndContext( + const base::string16& text, + int text_context, + int text_style) { + auto label = std::make_unique<views::Label>(text, text_context, text_style); + label->SetHorizontalAlignment(gfx::ALIGN_LEFT); + + return label; +} + } // namespace namespace autofill { @@ -258,20 +272,9 @@ // Returns a value view. The label part is optional but allow caller to keep // track of all the labels for background color update. virtual ViewWithLabel CreateValueLabel(); - // Creates an optional label below the value. - virtual ViewWithLabel CreateSubtextLabel(); // The description view can be nullptr. virtual ViewWithLabel CreateDescriptionLabel(); - // Creates a label matching the style of the description label. - std::unique_ptr<views::Label> CreateSecondaryLabel( - const base::string16& text) const; - // Creates a label with a specific context and style. - std::unique_ptr<views::Label> CreateLabelWithStyleAndContext( - const base::string16& text, - int text_context, - int text_style) const; - // Returns the font weight to be applied to primary info. virtual gfx::Font::Weight GetPrimaryTextWeight() const = 0; @@ -285,6 +288,13 @@ } private: + // Returns a vector of optional labels to be displayed beneath value. + virtual std::vector<ViewWithLabel> CreateSubtextLabels(); + + // Returns the minimum cross axis size depending on the length of + // GetSubtexts(); + void UpdateLayoutSize(views::BoxLayout* layout_manager, int64_t num_subtexts); + const int frontend_id_; // All the labels inside this view. @@ -306,7 +316,7 @@ // AutofillPopupItemView: int GetPrimaryTextStyle() override; gfx::Font::Weight GetPrimaryTextWeight() const override; - ViewWithLabel CreateSubtextLabel() override; + std::vector<ViewWithLabel> CreateSubtextLabels() override; AutofillPopupSuggestionView(AutofillPopupViewNativeViews* popup_view, int line_number, int frontend_id); @@ -327,7 +337,7 @@ protected: // AutofillPopupItemView: ViewWithLabel CreateValueLabel() override; - ViewWithLabel CreateSubtextLabel() override; + std::vector<ViewWithLabel> CreateSubtextLabels() override; ViewWithLabel CreateDescriptionLabel() override; gfx::Font::Weight GetPrimaryTextWeight() const override; @@ -436,6 +446,11 @@ text.push_back(suggestion.label); } + if (!suggestion.offer_label.empty()) { + // |offer_label| is only populated for credit card suggestions. + text.push_back(suggestion.offer_label); + } + if (!suggestion.additional_label.empty()) { // |additional_label| is only populated in a passwords context. text.push_back(suggestion.additional_label); @@ -527,8 +542,8 @@ /*resize=*/false, layout_manager); } - ViewWithLabel lower_value_label = CreateSubtextLabel(); ViewWithLabel value_label = CreateValueLabel(); + std::vector<ViewWithLabel> subtext_labels = CreateSubtextLabels(); ViewWithLabel description_label = CreateDescriptionLabel(); std::unique_ptr<views::View> all_labels = std::make_unique<views::View>(); @@ -545,17 +560,12 @@ grid_layout->SkipColumns(1); } - const int kStandardRowHeight = - views::MenuConfig::instance().touchable_menu_height; - if (lower_value_label.first) { - layout_manager->set_minimum_cross_axis_size( - kStandardRowHeight + kAutofillPopupAdditionalDoubleRowHeight); + UpdateLayoutSize(layout_manager, subtext_labels.size()); + for (ViewWithLabel& subtext_label : subtext_labels) { grid_layout->StartRowWithPadding(0, 0, 0, kAdjacentLabelsVerticalSpacing); - grid_layout->AddView(std::move(lower_value_label.first)); - KeepLabel(lower_value_label.second); + grid_layout->AddView(std::move(subtext_label.first)); + KeepLabel(subtext_label.second); grid_layout->SkipColumns(1); - } else { - layout_manager->set_minimum_cross_axis_size(kStandardRowHeight); } AddChildView(std::move(all_labels)); @@ -603,7 +613,9 @@ ->controller() ->GetSuggestionAt(line_number()) .is_value_secondary) { - std::unique_ptr<views::Label> label = CreateSecondaryLabel(text); + std::unique_ptr<views::Label> label = CreateLabelWithStyleAndContext( + text, views::style::CONTEXT_DIALOG_BODY_TEXT, + views::style::STYLE_SECONDARY); view_and_label.second = label.get(); view_and_label.first = std::move(label); return view_and_label; @@ -625,31 +637,33 @@ } AutofillPopupItemView::ViewWithLabel -AutofillPopupItemView::CreateSubtextLabel() { - return ViewWithLabel(); -} - -AutofillPopupItemView::ViewWithLabel AutofillPopupItemView::CreateDescriptionLabel() { return ViewWithLabel(); } -std::unique_ptr<views::Label> AutofillPopupItemView::CreateSecondaryLabel( - const base::string16& text) const { - return CreateLabelWithStyleAndContext(text, - views::style::CONTEXT_DIALOG_BODY_TEXT, - views::style::STYLE_SECONDARY); +std::vector<AutofillPopupItemView::ViewWithLabel> +AutofillPopupItemView::CreateSubtextLabels() { + return {}; } -std::unique_ptr<views::Label> -AutofillPopupItemView::CreateLabelWithStyleAndContext( - const base::string16& text, - int text_context, - int text_style) const { - auto label = std::make_unique<views::Label>(text, text_context, text_style); - label->SetHorizontalAlignment(gfx::ALIGN_LEFT); +void AutofillPopupItemView::UpdateLayoutSize(views::BoxLayout* layout_manager, + int64_t num_subtexts) { + const int kStandardRowHeight = + views::MenuConfig::instance().touchable_menu_height; + if (num_subtexts == 0) { + layout_manager->set_minimum_cross_axis_size(kStandardRowHeight); + } else { + layout_manager->set_minimum_cross_axis_size( + kStandardRowHeight + kAutofillPopupAdditionalDoubleRowHeight); + } - return label; + // In the case that there are three rows in total, adding extra padding to + // avoid cramming. + if (num_subtexts == 2) { + layout_manager->set_inside_border_insets( + gfx::Insets(kAutofillPopupAdditionalPadding, GetHorizontalMargin(), + kAutofillPopupAdditionalPadding, GetHorizontalMargin())); + } } void AutofillPopupItemView::AddSpacerWithSize(int spacer_width, @@ -691,20 +705,29 @@ SetFocusBehavior(FocusBehavior::ALWAYS); } -AutofillPopupItemView::ViewWithLabel -AutofillPopupSuggestionView::CreateSubtextLabel() { - base::string16 label_text = +std::vector<AutofillPopupItemView::ViewWithLabel> +AutofillPopupSuggestionView::CreateSubtextLabels() { + const base::string16& second_row_label = popup_view()->controller()->GetSuggestionAt(line_number()).label; - if (label_text.empty()) - return ViewWithLabel(); + const base::string16& third_row_label = + popup_view()->controller()->GetSuggestionAt(line_number()).offer_label; - auto label = CreateLabelWithStyleAndContext( - label_text, ChromeTextContext::CONTEXT_DIALOG_BODY_TEXT_SMALL, - views::style::STYLE_SECONDARY); - ViewWithLabel result; - result.second = label.get(); - result.first = std::move(label); - return result; + std::vector<AutofillPopupItemView::ViewWithLabel> labels; + for (const base::string16& text : {second_row_label, third_row_label}) { + // If a row is missing, do not include any further rows. + if (text.empty()) + return labels; + + auto label = CreateLabelWithStyleAndContext( + text, ChromeTextContext::CONTEXT_DIALOG_BODY_TEXT_SMALL, + views::style::STYLE_SECONDARY); + ViewWithLabel result; + result.second = label.get(); + result.first = std::move(label); + labels.emplace_back(std::move(result)); + } + + return labels; } /************** PasswordPopupSuggestionView **************/ @@ -727,15 +750,19 @@ return label; } -AutofillPopupItemView::ViewWithLabel -PasswordPopupSuggestionView::CreateSubtextLabel() { - auto label = CreateSecondaryLabel(masked_password_); +std::vector<AutofillPopupItemView::ViewWithLabel> +PasswordPopupSuggestionView::CreateSubtextLabels() { + auto label = CreateLabelWithStyleAndContext( + masked_password_, views::style::CONTEXT_DIALOG_BODY_TEXT, + views::style::STYLE_SECONDARY); label->SetElideBehavior(gfx::TRUNCATE); ViewWithLabel result; result.second = label.get(); result.first = std::make_unique<ConstrainedWidthView>( std::move(label), kAutofillPopupPasswordMaxWidth); - return result; + std::vector<AutofillPopupItemView::ViewWithLabel> labels; + labels.emplace_back(std::move(result)); + return labels; } AutofillPopupItemView::ViewWithLabel @@ -743,7 +770,9 @@ if (origin_.empty()) return ViewWithLabel(); - auto label = CreateSecondaryLabel(origin_); + auto label = CreateLabelWithStyleAndContext( + origin_, views::style::CONTEXT_DIALOG_BODY_TEXT, + views::style::STYLE_SECONDARY); label->SetElideBehavior(gfx::ELIDE_HEAD); ViewWithLabel result; result.second = label.get();
diff --git a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc index c60482b..7eb2453 100644 --- a/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc +++ b/chrome/browser/ui/views/autofill/payments/card_unmask_prompt_views.cc
@@ -73,7 +73,7 @@ UpdateButtons(); SetModalType(ui::MODAL_TYPE_CHILD); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); }
diff --git a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc index 13b7a281..f95e35a 100644 --- a/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc +++ b/chrome/browser/ui/views/autofill/payments/local_card_migration_dialog_view.cc
@@ -358,7 +358,7 @@ &LocalCardMigrationDialogView::OnDialogAccepted, base::Unretained(this))); set_close_on_deactivate(false); set_margins(gfx::Insets()); - SetFixedWidth(ChromeLayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(ChromeLayoutProvider::Get()->GetDistanceMetric( DISTANCE_LARGE_MODAL_DIALOG_PREFERRED_WIDTH)); }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc index f64ff855..543b951 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -55,7 +55,7 @@ void RemoveBookmark() { base::RecordAction(UserMetricsAction("BookmarkBubble_Unstar")); - can_apply_edits_ = false; + should_apply_edits_ = false; bookmarks::BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_); const bookmarks::BookmarkNode* node = @@ -65,6 +65,8 @@ } void OnWindowClosing() { + if (should_apply_edits_) + ApplyEdits(); bookmark_bubble_ = nullptr; if (observer_) observer_->OnBookmarkBubbleHidden(); @@ -86,7 +88,8 @@ DCHECK(native_parent); Profile* const profile = profile_; - ApplyEdits(); + // Note that closing the dialog with |should_apply_edits_| still true will + // synchronously save any pending changes. dialog_model()->host()->Close(); if (node && native_parent) { @@ -108,9 +111,9 @@ } void ApplyEdits() { - DCHECK(can_apply_edits_); + DCHECK(should_apply_edits_); // Set this to make sure we don't attempt to apply edits again. - can_apply_edits_ = false; + should_apply_edits_ = false; bookmarks::BookmarkModel* const model = BookmarkModelFactory::GetForBrowserContext(profile_); @@ -148,7 +151,7 @@ Profile* const profile_; const GURL url_; - bool can_apply_edits_ = true; + bool should_apply_edits_ = true; }; // static
diff --git a/chrome/browser/ui/views/content_setting_bubble_contents.cc b/chrome/browser/ui/views/content_setting_bubble_contents.cc index d88df268..6d7024e 100644 --- a/chrome/browser/ui/views/content_setting_bubble_contents.cc +++ b/chrome/browser/ui/views/content_setting_bubble_contents.cc
@@ -397,7 +397,7 @@ base::Unretained(content_setting_bubble_model_.get()))); } - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); }
diff --git a/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc b/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc index 629bc52e..50bb859 100644 --- a/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc +++ b/chrome/browser/ui/views/download/download_in_progress_dialog_view.cc
@@ -14,6 +14,7 @@ #include "ui/gfx/geometry/size.h" #include "ui/views/controls/label.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" // static void DownloadInProgressDialogView::Show(
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view.cc b/chrome/browser/ui/views/extensions/extensions_menu_view.cc index ba8742c7..deea68f2 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_view.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_view.cc
@@ -92,7 +92,7 @@ // Let anchor view's MenuButtonController handle the highlight. set_highlight_button_when_shown(false); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kVertical));
diff --git a/chrome/browser/ui/views/extensions/print_job_confirmation_dialog_view.cc b/chrome/browser/ui/views/extensions/print_job_confirmation_dialog_view.cc index 8c2a6dc..7100308 100644 --- a/chrome/browser/ui/views/extensions/print_job_confirmation_dialog_view.cc +++ b/chrome/browser/ui/views/extensions/print_job_confirmation_dialog_view.cc
@@ -121,7 +121,7 @@ provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL))); const bool dialog_is_bubble = anchor_view != nullptr; SetModalType(dialog_is_bubble ? ui::MODAL_TYPE_NONE : ui::MODAL_TYPE_WINDOW); - SetFixedWidth(provider->GetDistanceMetric( + set_fixed_width(provider->GetDistanceMetric( dialog_is_bubble ? views::DISTANCE_BUBBLE_PREFERRED_WIDTH : views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH));
diff --git a/chrome/browser/ui/views/find_bar_view.cc b/chrome/browser/ui/views/find_bar_view.cc index d1d9a08..37b4b14d 100644 --- a/chrome/browser/ui/views/find_bar_view.cc +++ b/chrome/browser/ui/views/find_bar_view.cc
@@ -46,6 +46,7 @@ #include "ui/views/controls/separator.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/painter.h" #include "ui/views/view_class_properties.h" #include "ui/views/views_features.h" @@ -422,27 +423,10 @@ controller->OnUserChangedFindText(search_text); - // When the user changes something in the text box we check the contents and - // if the textbox contains something we set it as the new search string and - // initiate search (even though old searches might be in progress). - if (!search_text.empty()) { - find_tab_helper->StartFinding(search_text, true /* forward_direction */, - false /* case_sensitive */, - true /* find_match */); - } else { - find_tab_helper->StopFinding(find_in_page::SelectionAction::kClear); - UpdateForResult(find_tab_helper->find_result(), base::string16()); - find_bar_host_->MoveWindowIfNecessary(); - - // Clearing the text box should clear the prepopulate state so that when - // we close and reopen the Find box it doesn't show the search we just - // deleted. We can't do this on ChromeOS yet because we get ContentsChanged - // sent for a lot more things than just the user nulling out the search - // terms. See http://crbug.com/45372. - FindBarState* find_bar_state = FindBarStateFactory::GetForBrowserContext( - web_contents->GetBrowserContext()); - find_bar_state->SetLastSearchText(base::string16()); - } + // Initiate a search (even though old searches might be in progress). + find_tab_helper->StartFinding(search_text, true /* forward_direction */, + false /* case_sensitive */, + true /* find_match */); } void FindBarView::FindNext(bool reverse) {
diff --git a/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc b/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc index 1a8eb933..b40a116e 100644 --- a/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc +++ b/chrome/browser/ui/views/find_bar_views_interactive_uitest.cc
@@ -591,6 +591,9 @@ GURL("data:text/html,This is some text with a " "<a href=\"about:blank\">link</a>.")); + auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); + auto* host = web_contents->GetRenderWidgetHostView()->GetRenderWidgetHost(); + browser()->GetFindBarController()->Show(); // Search for "link". @@ -602,6 +605,8 @@ browser(), ui::VKEY_N, false, false, false, false)); ASSERT_TRUE(ui_test_utils::SendKeyPressSync( browser(), ui::VKEY_K, false, false, false, false)); + content::RunUntilInputProcessed(host); + EXPECT_EQ(ASCIIToUTF16("link"), GetFindBarText()); ui_test_utils::UrlLoadObserver observer(
diff --git a/chrome/browser/ui/views/intent_picker_bubble_view.cc b/chrome/browser/ui/views/intent_picker_bubble_view.cc index 99babd0f..81ca550 100644 --- a/chrome/browser/ui/views/intent_picker_bubble_view.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view.cc
@@ -36,6 +36,7 @@ #include "ui/views/controls/separator.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #if defined(OS_CHROMEOS) #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.cc b/chrome/browser/ui/views/media_router/cast_dialog_view.cc index 9d56bf20..9b86ea8 100644 --- a/chrome/browser/ui/views/media_router/cast_dialog_view.cc +++ b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
@@ -225,7 +225,7 @@ metrics_(start_time, activation_location, profile) { SetShowCloseButton(true); SetButtons(ui::DIALOG_BUTTON_NONE); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); sources_button_ = SetExtraView(std::make_unique<views::MdTextButtonWithDownArrow>(
diff --git a/chrome/browser/ui/views/media_router/cloud_services_dialog_view.cc b/chrome/browser/ui/views/media_router/cloud_services_dialog_view.cc index 061821b..dc1c325 100644 --- a/chrome/browser/ui/views/media_router/cloud_services_dialog_view.cc +++ b/chrome/browser/ui/views/media_router/cloud_services_dialog_view.cc
@@ -89,7 +89,7 @@ set_close_on_deactivate(false); SetLayoutManager(std::make_unique<views::FillLayout>()); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); }
diff --git a/chrome/browser/ui/views/media_router/media_remoting_dialog_view.cc b/chrome/browser/ui/views/media_router/media_remoting_dialog_view.cc index 0ea7d8c3..bce65401 100644 --- a/chrome/browser/ui/views/media_router/media_remoting_dialog_view.cc +++ b/chrome/browser/ui/views/media_router/media_remoting_dialog_view.cc
@@ -98,7 +98,7 @@ SetCancelCallback(base::BindOnce(&MediaRemotingDialogView::ReportPermission, base::Unretained(this), false)); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); SetLayoutManager(std::make_unique<views::BoxLayout>(
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc index b3de4c1..a16e5dc 100644 --- a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc +++ b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
@@ -352,7 +352,7 @@ SetCancelCallback( base::BindOnce(&NativeFileSystemUsageBubbleView::OnDialogCancelled, base::Unretained(this))); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); }
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc index 0ad8af784..75c84365 100644 --- a/chrome/browser/ui/views/page_info/page_info_bubble_view.cc +++ b/chrome/browser/ui/views/page_info/page_info_bubble_view.cc
@@ -240,7 +240,6 @@ views::StyledLabel::RangeStyleInfo::CreateForLink( base::BindRepeating(&PageInfoBubbleView::SecurityDetailsClicked, base::Unretained(bubble_))); - link_style.disable_line_wrapping = false; security_details_label_->AddStyleRange(details_range, link_style); } @@ -396,7 +395,7 @@ ChromeLayoutProvider::Get()->GetInsetsMetric(views::INSETS_DIALOG)); set_margins(gfx::Insets()); - SetFixedWidth(ChromeLayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(ChromeLayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); SetTitle(text);
diff --git a/chrome/browser/ui/views/page_info/page_info_hover_button.cc b/chrome/browser/ui/views/page_info/page_info_hover_button.cc index 271f6bb..aa5ed35 100644 --- a/chrome/browser/ui/views/page_info/page_info_hover_button.cc +++ b/chrome/browser/ui/views/page_info/page_info_hover_button.cc
@@ -15,6 +15,7 @@ #include "ui/views/controls/label.h" #include "ui/views/controls/styled_label.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/typography.h" PageInfoHoverButton::PageInfoHoverButton(
diff --git a/chrome/browser/ui/views/page_info/permission_selector_row.cc b/chrome/browser/ui/views/page_info/permission_selector_row.cc index 0b0c9b7..558ea90 100644 --- a/chrome/browser/ui/views/page_info/permission_selector_row.cc +++ b/chrome/browser/ui/views/page_info/permission_selector_row.cc
@@ -273,7 +273,7 @@ auto combobox = std::make_unique<internal::PermissionCombobox>( combobox_model_adapter_.get(), button_enabled, true); combobox->SetEnabled(button_enabled); - combobox->SetTooltipText(l10n_util::GetStringFUTF16( + combobox->SetTooltipTextAndAccessibleName(l10n_util::GetStringFUTF16( IDS_PAGE_INFO_SELECTOR_TOOLTIP, PageInfoUI::PermissionTypeToUIString(permission.type))); combobox_ = layout->AddView(std::move(combobox));
diff --git a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc index c5bf6d8..17e86c2 100644 --- a/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc +++ b/chrome/browser/ui/views/permission_bubble/permission_prompt_bubble_view.cc
@@ -82,7 +82,7 @@ ChromeLayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_RELATED_CONTROL_VERTICAL))); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); for (permissions::PermissionRequest* request : visible_requests_)
diff --git a/chrome/browser/ui/views/relaunch_notification/relaunch_recommended_bubble_view.cc b/chrome/browser/ui/views/relaunch_notification/relaunch_recommended_bubble_view.cc index 52e4a74..2ad0f93 100644 --- a/chrome/browser/ui/views/relaunch_notification/relaunch_recommended_bubble_view.cc +++ b/chrome/browser/ui/views/relaunch_notification/relaunch_recommended_bubble_view.cc
@@ -147,7 +147,7 @@ base::BindOnce(&base::RecordAction, base::UserMetricsAction("RelaunchRecommended_Close"))); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType(
diff --git a/chrome/browser/ui/views/sad_tab_view.cc b/chrome/browser/ui/views/sad_tab_view.cc index 4da085b2..3798a44 100644 --- a/chrome/browser/ui/views/sad_tab_view.cc +++ b/chrome/browser/ui/views/sad_tab_view.cc
@@ -31,6 +31,7 @@ #include "ui/views/controls/link.h" #include "ui/views/controls/webview/webview.h" #include "ui/views/layout/grid_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" namespace {
diff --git a/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_bubble_view_impl.cc b/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_bubble_view_impl.cc index 6fc6433..5d6a59d 100644 --- a/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_bubble_view_impl.cc +++ b/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_bubble_view_impl.cc
@@ -43,7 +43,7 @@ web_contents_(web_contents), controller_(controller) { SetButtons(ui::DIALOG_BUTTON_NONE); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); DCHECK(controller); }
diff --git a/chrome/browser/ui/views/sharing/sharing_dialog_view.cc b/chrome/browser/ui/views/sharing/sharing_dialog_view.cc index 69edd16..fd8ab69 100644 --- a/chrome/browser/ui/views/sharing/sharing_dialog_view.cc +++ b/chrome/browser/ui/views/sharing/sharing_dialog_view.cc
@@ -122,7 +122,7 @@ data_(std::move(data)) { SetButtons(ui::DIALOG_BUTTON_NONE); - SetFixedWidth(views::LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); if (data_.type == SharingDialogType::kDialogWithoutDevicesWithApp) {
diff --git a/chrome/browser/ui/views/toolbar/toolbar_button.cc b/chrome/browser/ui/views/toolbar/toolbar_button.cc index 753e58324..2efbf23 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_button.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_button.cc
@@ -39,6 +39,7 @@ #include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/menu_model_adapter.h" #include "ui/views/controls/menu/menu_runner.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" #include "ui/views/widget/widget.h"
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index c74e7d7..3c5ab4f 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -120,11 +120,11 @@ #if defined(OS_ANDROID) #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h" #include "chrome/browser/ui/webui/offline/offline_internals_ui.h" #include "chrome/browser/ui/webui/webapks_ui.h" #include "components/feed/buildflags.h" #include "components/feed/feed_feature_list.h" -#include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h" #else // defined(OS_ANDROID) #include "chrome/browser/media/feeds/media_feeds_service.h" #include "chrome/browser/media/kaleidoscope/constants.h" @@ -636,10 +636,8 @@ return &NewWebUI<chromeos::AccountManagerWelcomeUI>; if (url.host_piece() == chrome::kChromeUIAccountMigrationWelcomeHost) return &NewWebUI<chromeos::AccountMigrationWelcomeUI>; - if (chromeos::features::IsParentalControlsSettingsEnabled()) { - if (url.host_piece() == chrome::kChromeUIAddSupervisionHost) - return &NewWebUI<chromeos::AddSupervisionUI>; - } + if (url.host_piece() == chrome::kChromeUIAddSupervisionHost) + return &NewWebUI<chromeos::AddSupervisionUI>; if (url.host_piece() == chrome::kChromeUIBluetoothPairingHost) return &NewWebUI<chromeos::BluetoothPairingDialogUI>; if (url.host_piece() == chrome::kChromeUICellularSetupHost)
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc index 82bbaa0..f841a25 100644 --- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc +++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc
@@ -4,7 +4,6 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/user_action_tester.h" -#include "base/test/scoped_feature_list.h" #include "base/test/test_mock_time_task_runner.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" @@ -13,7 +12,6 @@ #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h" #include "chrome/test/base/in_process_browser_test.h" -#include "chromeos/constants/chromeos_features.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/browser_test.h" #include "content/public/test/test_web_ui.h" @@ -27,12 +25,6 @@ AddSupervisionMetricsRecorderTest() = default; ~AddSupervisionMetricsRecorderTest() override = default; - void SetUp() override { - feature_list_.InitAndEnableFeature( - chromeos::features::kParentalControlsSettings); - InProcessBrowserTest::SetUp(); - } - void SetUpOnMainThread() override { content::WebContents* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); @@ -76,7 +68,6 @@ private: DISALLOW_COPY_AND_ASSIGN(AddSupervisionMetricsRecorderTest); - base::test::ScopedFeatureList feature_list_; content::TestWebUI test_web_ui_; };
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc index 4fbc252d..d2c61234 100644 --- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc +++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc
@@ -7,7 +7,6 @@ #include "base/macros.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/metrics/user_action_tester.h" -#include "base/test/scoped_feature_list.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h" @@ -15,7 +14,6 @@ #include "chrome/common/webui_url_constants.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 "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test.h" @@ -34,10 +32,7 @@ // Base class for AddSupervision tests. class AddSupervisionBrowserTest : public InProcessBrowserTest { public: - AddSupervisionBrowserTest() { - scoped_feature_list_.InitWithFeatures( - {chromeos::features::kParentalControlsSettings}, {}); - } + AddSupervisionBrowserTest() = default; ~AddSupervisionBrowserTest() override = default; void SetUpOnMainThread() override { @@ -84,7 +79,6 @@ } private: - base::test::ScopedFeatureList scoped_feature_list_; std::unique_ptr<signin::IdentityTestEnvironment> identity_test_env_; DISALLOW_COPY_AND_ASSIGN(AddSupervisionBrowserTest);
diff --git a/chrome/browser/ui/webui/settings/chromeos/os_settings_features_util.cc b/chrome/browser/ui/webui/settings/chromeos/os_settings_features_util.cc index 66ff64e..19fa718 100644 --- a/chrome/browser/ui/webui/settings/chromeos/os_settings_features_util.cc +++ b/chrome/browser/ui/webui/settings/chromeos/os_settings_features_util.cc
@@ -9,7 +9,6 @@ #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chromeos/constants/chromeos_features.h" #include "components/arc/arc_features.h" #include "components/user_manager/user_manager.h" @@ -23,9 +22,6 @@ } bool ShouldShowParentalControlSettings(const Profile* profile) { - if (!chromeos::features::IsParentalControlsSettingsEnabled()) - return false; - // Not shown for secondary users. if (profile != ProfileManager::GetPrimaryUserProfile()) return false;
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 61bba374..68b5d93d 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -828,7 +828,6 @@ IDS_SETTINGS_CHECK_PASSWORDS_ERROR_GENERIC}, {"noCompromisedCredentials", IDS_SETTINGS_NO_COMPROMISED_CREDENTIALS_LABEL}, - {"noWeakPasswords", IDS_SETTINGS_NO_WEAK_PASSWORDS_FOUND}, {"checkPasswordsAgain", IDS_SETTINGS_CHECK_PASSWORDS_AGAIN}, {"checkPasswordsAgainAfterError", IDS_SETTINGS_CHECK_PASSWORDS_AGAIN_AFTER_ERROR},
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc index e0465b7..7f2c3259 100644 --- a/chrome/browser/ui/webui/settings/settings_ui.cc +++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -324,6 +324,8 @@ "compromisedPasswords", IDS_SETTINGS_COMPROMISED_PASSWORDS_COUNT); plural_string_handler->AddLocalizedString( "insecurePasswords", IDS_SETTINGS_INSECURE_PASSWORDS_COUNT); + plural_string_handler->AddLocalizedString("weakPasswords", + IDS_SETTINGS_WEAK_PASSWORDS_COUNT); web_ui->AddMessageHandler(std::move(plural_string_handler)); // Add the metrics handler to write uma stats.
diff --git a/chrome/browser/ui/webui/sync_internals_browsertest.js b/chrome/browser/ui/webui/sync_internals_browsertest.js index 837c9c4f..a37f271 100644 --- a/chrome/browser/ui/webui/sync_internals_browsertest.js +++ b/chrome/browser/ui/webui/sync_internals_browsertest.js
@@ -54,7 +54,8 @@ for (let j = 0; j < details[i].data.length; ++j) { const obj = details[i].data[j]; if (obj.stat_name === key) { - return obj.is_valid === isValid && obj.stat_value === value; + return (obj.stat_status !== 'uninitialized') === isValid && + obj.stat_value === value; } } } @@ -163,22 +164,22 @@ HARD_CODED_ABOUT_INFO = { 'actionable_error': [ { - 'is_valid': false, + 'stat_status': 'uninitialized', 'stat_name': 'Error Type', 'stat_value': 'Uninitialized' }, { - 'is_valid': false, + 'stat_status': 'uninitialized', 'stat_name': 'Action', 'stat_value': 'Uninitialized' }, { - 'is_valid': false, + 'stat_status': 'uninitialized', 'stat_name': 'URL', 'stat_value': 'Uninitialized' }, { - 'is_valid': false, + 'stat_status': 'uninitialized', 'stat_name': 'Error Description', 'stat_value': 'Uninitialized' } @@ -188,7 +189,7 @@ { 'data': [ { - 'is_valid': true, + 'stat_status': '', 'stat_name': 'Summary', 'stat_value': 'Sync service initialized' }
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 158aa8e..4076a18d 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1602741093-4d55155af2d57fc162c54eb0d019ea99dc26a80f.profdata +chrome-linux-master-1602762990-5610fc4d08ce928742199548ea998fa82cc20428.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 366fa27..ca21df54 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1602741093-813b9f30d38756007f17b964e7014a850d40bedc.profdata +chrome-mac-master-1602762990-5c0ecdd782b8586c3ade2c97da0a453329c89923.profdata
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 631894a..6f36ec1e 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -957,6 +957,11 @@ const char kFamilyUserMetricsSessionEngagementDuration[] = "family_user.metrics.session_engagement_duration"; +// TimeDelta pref to record the accumulated Chrome browser app usage for family +// user metrics. +const char kFamilyUserMetricsChromeBrowserEngagementDuration[] = + "family_user.metrics.chrome_browser_engagement_duration"; + // List of preconfigured network file shares. const char kNetworkFileSharesPreconfiguredShares[] = "network_file_shares.preconfigured_shares";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index c2f1905..457c6010 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -331,6 +331,7 @@ extern const char kPerAppTimeLimitsAllowlistPolicy[]; extern const char kFamilyUserMetricsDayId[]; extern const char kFamilyUserMetricsSessionEngagementDuration[]; +extern const char kFamilyUserMetricsChromeBrowserEngagementDuration[]; extern const char kDeviceWallpaperImageFilePath[]; extern const char kKerberosRememberPasswordEnabled[]; extern const char kKerberosAddAccountsAllowed[];
diff --git a/chrome/credential_provider/gaiacp/gcp_crash_reporter_client.cc b/chrome/credential_provider/gaiacp/gcp_crash_reporter_client.cc index 4413c203..f5bad7c 100644 --- a/chrome/credential_provider/gaiacp/gcp_crash_reporter_client.cc +++ b/chrome/credential_provider/gaiacp/gcp_crash_reporter_client.cc
@@ -4,8 +4,10 @@ #include "chrome/credential_provider/gaiacp/gcp_crash_reporter_client.h" +#include "base/check.h" #include "base/file_version_info.h" #include "base/files/file_path.h" +#include "base/notreached.h" #include "base/strings/utf_string_conversions.h" #include "base/win/registry.h" #include "build/branding_buildflags.h"
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb index d948f5c..832d566 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ar.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">يُستخدم لتشغيل صفحة تسجيل الدخول لمقدِّم بيانات الاعتماد في Google.</translation> <translation id="2048923169632968961">حدثت مشكلة أثناء مزامنة كلمة مرور حساب العمل مع ملفك الشخصي في Windows. يُرجى التواصل مع مشرفك.</translation> <translation id="2515346402363002066">لقد انتهت صلاحية الجلسة. يُرجى تسجيل الدخول باستخدام حساب العمل.</translation> +<translation id="2549902055700841962">تعذّر تسجيل الدخول إلى حساب العمل. يُرجى التواصل مع مشرفك.</translation> <translation id="2566603360883977759">لا يُسمَح بتسجيل الدخول باستخدام هذا البريد الإلكتروني. يُرجى إعادة المحاولة باستخدام الحساب الذي تستخدمه في العمل أو المؤسسة التعليمية. وإذا لم تتمكّن من تسجيل الدخول، يُرجى التواصل مع المشرف.</translation> <translation id="2844349213149998955">لا يُسمح بتسجيل الدخول باستخدام حساب شخصي على هذا الجهاز. يُرجى تسجيل الدخول باستخدام حساب عمل.</translation> <translation id="3217145568844727893">قد تفقد البيانات نهائيًا على هذا الجهاز في حال المتابَعة بدون إدخال كلمة مرور Windows الحالية.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb index 8d9e5f8b..cd8eed5 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_fr.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Utilisé pour exécuter la page de connexion du fournisseur d'informations d'identification Google.</translation> <translation id="2048923169632968961">Un problème est survenu lors de la synchronisation du mot de passe de votre compte professionnel avec votre profil Windows. Veuillez contacter votre administrateur.</translation> <translation id="2515346402363002066">Votre session a expiré. Connectez-vous à votre compte professionnel.</translation> +<translation id="2549902055700841962">Impossible de vous connecter à votre compte professionnel. Veuillez contacter votre administrateur.</translation> <translation id="2566603360883977759">Vous n'êtes pas autorisé à vous connecter via cette adresse e-mail. Réessayez avec votre compte scolaire ou professionnel. Si vous ne parvenez toujours pas à vous connecter, contactez votre administrateur.</translation> <translation id="2844349213149998955">Vous n'êtes pas autorisé à vous connecter avec un compte personnel sur cet appareil. Veuillez vous connecter avec un compte professionnel.</translation> <translation id="3217145568844727893">Si vous poursuivez sans saisir votre mot de passe Windows actuel, vous risquez de perdre définitivement des informations sur cet appareil.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_gl.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_gl.xtb index d14c84a..d1c54e9 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_gl.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_gl.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Utilízase para executar a páxina de inicio de sesión do provedor de credenciais de Google.</translation> <translation id="2048923169632968961">Produciuse un problema ao sincronizar o contrasinal da túa conta do traballo co teu perfil de Windows. Ponte en contacto co teu administrador.</translation> <translation id="2515346402363002066">A túa sesión caducou. Inicia sesión coa túa conta do traballo.</translation> +<translation id="2549902055700841962">Non se puido iniciar sesión na túa conta do traballo. Ponte en contacto co teu administrador.</translation> <translation id="2566603360883977759">Non se admite este correo electrónico para iniciar sesión. Téntao de novo coa conta que utilizas para o traballo ou os estudos. Se aínda así non podes iniciar sesión, contacta co administrador.</translation> <translation id="2844349213149998955">Non se permite iniciar sesión cunha conta persoal neste dispositivo. Faino cunha do traballo.</translation> <translation id="3217145568844727893">Se continúas sen poñer o teu contrasinal actual de Windows, poderías perder permanentemente os datos deste dispositivo.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb index d49a46e..fb0b820 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_id.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Digunakan untuk menjalankan halaman login Penyedia Kredensial Google.</translation> <translation id="2048923169632968961">Terjadi masalah saat menyinkronkan sandi akun kerja ke profil Windows Anda. Harap hubungi administrator Anda.</translation> <translation id="2515346402363002066">Sesi Anda telah berakhir. Login dengan akun kerja Anda.</translation> +<translation id="2549902055700841962">Tidak dapat login ke akun kerja Anda. Harap hubungi administrator Anda.</translation> <translation id="2566603360883977759">Email ini tidak diizinkan untuk login. Coba lagi dengan akun yang Anda gunakan untuk kerja atau sekolah. Jika masih tidak dapat login, hubungi administrator Anda.</translation> <translation id="2844349213149998955">Login dengan akun pribadi di perangkat ini tidak diizinkan. Silakan login dengan akun kerja.</translation> <translation id="3217145568844727893">Jika Anda melanjutkan tanpa memasukkan sandi Windows saat ini, Anda dapat kehilangan data di perangkat ini secara permanen.</translation> @@ -20,7 +21,7 @@ <translation id="5581861273642234526">Akun kerja lain sudah dikaitkan dengan perangkat ini. Login dengan akun Windows Anda.</translation> <translation id="6033715878377252112">Bantuan Penyedia Kredensial Google untuk Windows</translation> <translation id="6149399665202317746">Penyedia Kredensial Google untuk Windows</translation> -<translation id="6243062314475217481">Sandi akun kerja Anda tidak cocok dengan persyaratan kerumitan sandi untuk Windows. Hubungi administrator untuk meminta bantuan.</translation> +<translation id="6243062314475217481">Sandi akun kerja Anda tidak cocok dengan persyaratan kekuatan sandi untuk Windows. Hubungi administrator untuk meminta bantuan.</translation> <translation id="6463752215771576050">Tidak dapat mendaftarkan komputer ini untuk pengelolaan perusahaan. Harap login menggunakan akun kerja lain.</translation> <translation id="6582876473835446261">Sandi Windows salah. Coba lagi.</translation> <translation id="6657585470893396449">Sandi</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb index ccca42c..f7530b3 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_kn.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Google ರುಜುವಾತು ಪೂರೈಕೆದಾರರ ಸೈನ್ ಇನ್ ಪುಟವನ್ನು ಚಲಾಯಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ.</translation> <translation id="2048923169632968961">ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಿಮ್ಮ Windows ಪ್ರೊಫೈಲ್ನೊಂದಿಗೆ ಸಿಂಕ್ ಮಾಡುವಾಗ ಸಮಸ್ಯೆ ಉಂಟಾಗಿದೆ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="2515346402363002066">ನಿಮ್ಮ ಸೆಶನ್ ಮುಗಿದಿದೆ. ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಯ ಮೂಲಕ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> +<translation id="2549902055700841962">ನಿಮ್ಮ ಕೆಲಸದ ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="2566603360883977759">ಸೈನ್ ಇನ್ ಮಾಡಲು ಈ ಇಮೇಲ್ಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ. ಕೆಲಸ ಅಥವಾ ಶಾಲೆಗಾಗಿ ನೀವು ಬಳಸುವ ಖಾತೆಯನ್ನು ಬಳಸಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ನಿಮಗೆ ಈಗಲೂ ಸೈನ್ ಇನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="2844349213149998955">ಈ ಸಾಧನದಲ್ಲಿ ವೈಯಕ್ತಿಕ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವುದನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ. ಕೆಲಸದ ಖಾತೆಯೊಂದಿಗೆ ಲಾಗಿನ್ ಮಾಡಿ.</translation> <translation id="3217145568844727893">ನಿಮ್ಮ ಪ್ರಸ್ತುತ Windows ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸದೆಯೇ ನೀವು ಮುಂದುವರಿದರೆ, ಈ ಸಾಧನದಲ್ಲಿರುವ ಡೇಟಾವನ್ನು ನೀವು ಶಾಶ್ವತವಾಗಿ ಕಳೆದುಕೊಳ್ಳಬಹುದು.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb index aafe799..5f47b3dd 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ne.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Google प्रमाण प्रदायकको साइन इन पृष्ठ सञ्चालन गर्न प्रयोग गरिन्छ।</translation> <translation id="2048923169632968961">तपाईंको कार्यालय खाताको पासवर्ड तपाईंको Windows को प्रोफाइलसँग सिंक गर्ने क्रममा कुनै समस्या आयो। कृपया आफ्ना प्रशासकलाई सम्पर्क गर्नुहोस्।</translation> <translation id="2515346402363002066">तपाईंको सत्रको समय समाप्त भएको छ। आफ्नो कार्यालय खातामा साइन इन गर्नुहोस्।</translation> +<translation id="2549902055700841962">तपाईंको कार्यालय खातामा साइन इन गर्न सकिएन। कृपया आफ्ना प्रशासकसँग सम्पर्क गर्नुहोस्।</translation> <translation id="2566603360883977759">यो इमेल प्रयोग गरी साइन इन गर्न मिल्दैन। तपाईंले कार्यालय वा विद्यालयमा चलाउने खाता प्रयोग गरी फेरि प्रयास गर्नुहोस्। तपाईंले अझै पनि साइन इन गर्न सक्नुभएन भने आफ्ना एड्मिनसँग सम्पर्क गर्नुहोस्।</translation> <translation id="2844349213149998955">यस यन्त्रमा व्यक्तिगत खाताबाट साइन इन गर्ने अनुमति छैन। कृपया कुनै कार्य खाता प्रयोग गरी लग इन गर्नुहोस्।</translation> <translation id="3217145568844727893">तपाईंले आफ्नो Windows को हालको पासवर्ड प्रविष्टि नगरिकन जारी राख्नुभयो भने तपाईं यो यन्त्रमा भएको डेटा सदाका लागि गुमाउन सक्नुहुन्छ।</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb index 5be785a..70a605d3 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_ru.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Используется для перехода на страницу входа поставщика учетных данных Google.</translation> <translation id="2048923169632968961">Не удалось синхронизировать пароль от рабочего аккаунта с профилем Windows. Обратитесь к администратору.</translation> <translation id="2515346402363002066">Время сессии истекло. Войдите в рабочий аккаунт.</translation> +<translation id="2549902055700841962">Не удалось войти в рабочий аккаунт. Обратитесь к администратору.</translation> <translation id="2566603360883977759">Невозможно выполнить вход с этим адресом электронной почты. Введите учетные данные рабочего или учебного аккаунта. Если вам не удастся войти в систему, обратитесь к администратору.</translation> <translation id="2844349213149998955">На этом устройстве запрещен вход с личным аккаунтом. Войдите в рабочий аккаунт.</translation> <translation id="3217145568844727893">Если вы продолжите работу, не вводя текущий пароль для Windows, данные на устройстве могут быть безвозвратно утеряны.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb index 5d1b6f6..70754aa7 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_te.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Google ఆధారాల ప్రదాత సైన్ ఇన్ పేజీని అమలు చేయడానికి ఉపయోగించబడుతుంది.</translation> <translation id="2048923169632968961">మీ కార్యాలయ ఖాతా పాస్వర్డ్ను మీ Windows ప్రొఫైల్తో సింక్ చేస్తున్నప్పుడు సమస్య ఏర్పడింది. దయచేసి మీ అడ్మినిస్ట్రేటర్ను సంప్రదించండి.</translation> <translation id="2515346402363002066">మీ సెషన్ గడువు ముగిసింది. మీ కార్యాలయ ఖాతాతో సైన్ ఇన్ చేయండి.</translation> +<translation id="2549902055700841962">మీ కార్యాలయ ఖాతాకు సైన్ ఇన్ చేయడం సాధ్యపడదు. దయచేసి మీ అడ్మినిస్ట్రేటర్ను సంప్రదించండి.</translation> <translation id="2566603360883977759">ఈ ఇమెయిల్కు సైన్ ఇన్ చేయడానికి అనుమతి లేదు. మీరు కార్యాలయం లేదా పాఠశాలకు ఉపయోగించే ఖాతాతో మళ్లీ ట్రై చేయండి. మీరు ఇప్పటికీ సైన్ ఇన్ చేయలేకపోతే, అడ్మినిస్ట్రేటర్ను సంప్రదించండి.</translation> <translation id="2844349213149998955">ఈ పరికరంలో వ్యక్తిగత ఖాతాతో సైన్ ఇన్ చేయడానికి అనుమతి లేదు. దయచేసి కార్యాలయ ఖాతాతో లాగిన్ చేయండి.</translation> <translation id="3217145568844727893">మీ ప్రస్తుత Windows పాస్వర్డ్ను ఎంటర్ చేయకుండా కొనసాగితే, ఈ పరికరంలోని డేటాను మీరు శాశ్వతంగా కోల్పోయే అవకాశం ఉంది.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_tr.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_tr.xtb index fb00990..c0daea9 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_tr.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_tr.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Google Kimlik Bilgisi Sağlayıcısı oturum açma sayfasını çalıştırmak için kullanılır.</translation> <translation id="2048923169632968961">İş hesabı şifrenizi Windows profilinizle senkronize ederken bir sorun oluştu. Lütfen yöneticinizle iletişime geçin.</translation> <translation id="2515346402363002066">Oturumunuzun süresi doldu. İş hesabınızla oturum açın.</translation> +<translation id="2549902055700841962">İş hesabınızda oturum açılamıyor. Lütfen yöneticinizle iletişime geçin.</translation> <translation id="2566603360883977759">Bu e-postanın oturum açmasına izin verilmiyor. İş veya okul için kullandığınız hesapla tekrar deneyin. Hâlâ oturum açamıyorsanız yöneticinizle iletişime geçin.</translation> <translation id="2844349213149998955">Bu cihazda kişisel hesapla oturum açılmasına izin verilmiyor. Lütfen bir iş hesabıyla giriş yapın.</translation> <translation id="3217145568844727893">Geçerli Windows şifrenizi girmeden devam ederseniz bu cihazda verileri kalıcı olarak kaybedebilirsiniz.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_uz.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_uz.xtb index 8efe473..9e17c28 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_uz.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_uz.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Google Credential Provider sahifasiga kirish uchun foydalaniladi.</translation> <translation id="2048923169632968961">Ishchi hisob parolini Windows profiliga sinxronlashda xatolik yuz berdi. Administratorga murojaat qiling.</translation> <translation id="2515346402363002066">Seansingizga ajratilgan vaqt tugadi. Ishchi hisobingiz orqali kiring.</translation> +<translation id="2549902055700841962">Ishchi hisobingizga kirilmadi. Administratorga murojaat qiling.</translation> <translation id="2566603360883977759">Bu email orqali kirish imkonsiz. Ishxona yoki maktab hisobi orqali kirishga qayta urining. Kirishda muammo qaytarilsa, administratorga murojaat qiling.</translation> <translation id="2844349213149998955">Bu qurilmada shaxsiy hisob orqali kirish taqiqlangan. Ishchi hisob orqali kiring.</translation> <translation id="3217145568844727893">Agar joriy Windows parolini kiritmay davom etsangiz, bu qurilmadagi maʼlumotlar butunlay tozalanishi mumkin.</translation>
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_vi.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_vi.xtb index 5e36627..c69fc9a9 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_vi.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_vi.xtb
@@ -5,6 +5,7 @@ <translation id="1383286653814676580">Dùng để chạy trang đăng nhập vào Nhà cung cấp chứng chỉ Google.</translation> <translation id="2048923169632968961">Đã xảy ra lỗi khi đồng bộ hóa mật khẩu tài khoản công việc với hồ sơ Windows của bạn. Vui lòng liên hệ với quản trị viên.</translation> <translation id="2515346402363002066">Phiên truy cập của bạn đã hết hạn. Hãy đăng nhập bằng tài khoản công việc của bạn.</translation> +<translation id="2549902055700841962">Không thể đăng nhập vào tài khoản công việc của bạn. Vui lòng liên hệ với quản trị viên.</translation> <translation id="2566603360883977759">Email này không được phép đăng nhập. Hãy thử lại bằng tài khoản bạn dùng cho công việc hoặc trường học. Nếu bạn vẫn không thể đăng nhập, hãy liên hệ với quản trị viên của bạn.</translation> <translation id="2844349213149998955">Bạn không thể đăng nhập vào thiết bị này bằng tài khoản cá nhân. Vui lòng đăng nhập bằng tài khoản công việc.</translation> <translation id="3217145568844727893">Nếu tiếp tục mà không nhập mật khẩu Windows hiện tại của mình, thì bạn có thể vĩnh viễn mất dữ liệu trên thiết bị này.</translation>
diff --git a/chrome/services/cups_proxy/ipp_attribute_validator.cc b/chrome/services/cups_proxy/ipp_attribute_validator.cc index cfc156b..3f8a0af 100644 --- a/chrome/services/cups_proxy/ipp_attribute_validator.cc +++ b/chrome/services/cups_proxy/ipp_attribute_validator.cc
@@ -67,6 +67,7 @@ {"job-originating-host-name", {false, ValueType::STRING}}, {"job-originating-user-name", {false, ValueType::STRING}}, {"job-page-limit", {false, ValueType::INTEGER}}, + {"job-password", {false, ValueType::OCTET}}, {"job-printer-state-message", {false, ValueType::STRING}}, {"job-printer-state-reasons", {true, ValueType::STRING}}, {"job-printer-up-time", {false, ValueType::INTEGER}},
diff --git a/chrome/services/cups_proxy/ipp_validator.cc b/chrome/services/cups_proxy/ipp_validator.cc index 586fe0ba..8f009a8 100644 --- a/chrome/services/cups_proxy/ipp_validator.cc +++ b/chrome/services/cups_proxy/ipp_validator.cc
@@ -71,6 +71,9 @@ case ValueType::STRING: DCHECK(attr_value->is_strings()); return attr_value->get_strings().size(); + case ValueType::OCTET: + DCHECK(attr_value->is_octets()); + return attr_value->get_octets().size(); default: break; @@ -251,6 +254,29 @@ } break; } + case ValueType::OCTET: { + DCHECK(attribute->value->is_octets()); + size_t num = attribute->value->get_octets().size(); + if (num != 1) { + LOG(ERROR) << "CUPS API only supports adding a single octet string " + "- cannot add " + << num << " octet strings."; + return nullptr; + } + int size = attribute->value->get_octets()[0].size(); + if (size < 1) { + LOG(ERROR) << "Invalid octet string size=" << size; + return nullptr; + } + auto* attr = ippAddOctetString( + ipp.get(), static_cast<ipp_tag_t>(attribute->group_tag), + attribute->name.c_str(), attribute->value->get_octets()[0].data(), + size); + if (!attr) { + return nullptr; + } + break; + } default: NOTREACHED() << "Unknown IPP attribute type found."; }
diff --git a/chrome/services/ipp_parser/public/cpp/ipp_converter.cc b/chrome/services/ipp_parser/public/cpp/ipp_converter.cc index 54d811a..53b6283 100644 --- a/chrome/services/ipp_parser/public/cpp/ipp_converter.cc +++ b/chrome/services/ipp_parser/public/cpp/ipp_converter.cc
@@ -106,6 +106,10 @@ case IPP_TAG_NAMELANG: return ValueType::STRING; + // Octet (binary) string + case IPP_TAG_STRING: + return ValueType::OCTET; + default: break; } @@ -157,6 +161,24 @@ } return ret; } + +base::Optional<std::vector<std::vector<uint8_t>>> IppGetOctets( + ipp_attribute_t* attr) { + const size_t count = ippGetCount(attr); + + std::vector<std::vector<uint8_t>> ret; + ret.reserve(count); + for (size_t i = 0; i < count; ++i) { + int len = 0; + const uint8_t* v = + static_cast<const uint8_t*>(ippGetOctetString(attr, i, &len)); + if (!v || len <= 0) { + return base::nullopt; + } + ret.emplace_back(v, v + len); + } + return ret; +} } // namespace base::Optional<std::vector<std::string>> ParseRequestLine( @@ -395,6 +417,14 @@ attrptr->value->set_strings(*vals); break; } + case ValueType::OCTET: { + auto vals = IppGetOctets(attr); + if (!vals.has_value()) { + return nullptr; + } + attrptr->value->set_octets(*vals); + break; + } default: NOTREACHED(); }
diff --git a/chrome/services/ipp_parser/public/cpp/ipp_message_parser_fuzzer.dict b/chrome/services/ipp_parser/public/cpp/ipp_message_parser_fuzzer.dict index daf499fe..8a212a7 100644 --- a/chrome/services/ipp_parser/public/cpp/ipp_message_parser_fuzzer.dict +++ b/chrome/services/ipp_parser/public/cpp/ipp_message_parser_fuzzer.dict
@@ -35,6 +35,7 @@ "job-constraints-supported" "job-creation-attributes-supported" "job-ids-supported" +"job-password" "job-password-supported" "job-password-encryption-supported" "job-resolvers-supported"
diff --git a/chrome/services/ipp_parser/public/mojom/ipp_parser.mojom b/chrome/services/ipp_parser/public/mojom/ipp_parser.mojom index b523e78..c431a41 100644 --- a/chrome/services/ipp_parser/public/mojom/ipp_parser.mojom +++ b/chrome/services/ipp_parser/public/mojom/ipp_parser.mojom
@@ -8,12 +8,12 @@ module ipp_parser.mojom; -[Extensible] -enum ValueType { +[Extensible] enum ValueType { BOOLEAN, DATE, INTEGER, STRING, + OCTET, }; union IppAttributeValue { @@ -25,6 +25,7 @@ array<int32> ints; array<string> strings; + array<array<uint8>> octets; }; struct IppAttribute {
diff --git a/chrome/services/media_gallery_util/public/mojom/media_parser.mojom b/chrome/services/media_gallery_util/public/mojom/media_parser.mojom index 2449a84..2f682826 100644 --- a/chrome/services/media_gallery_util/public/mojom/media_parser.mojom +++ b/chrome/services/media_gallery_util/public/mojom/media_parser.mojom
@@ -5,7 +5,7 @@ module chrome.mojom; import "media/mojo/mojom/media_types.mojom"; -import "mojo/public/mojom/base/file.mojom"; +import "mojo/public/mojom/base/read_only_file.mojom"; import "mojo/public/mojom/base/time.mojom"; import "mojo/public/mojom/base/values.mojom"; @@ -46,7 +46,7 @@ // Note: it is still not safe to decode the file in the calling process after // this check. CheckMediaFile(mojo_base.mojom.TimeDelta decode_time, - mojo_base.mojom.File file) + mojo_base.mojom.ReadOnlyFile file) => (bool success); // Used by tests to validate the right CPU information is set on third-party
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 359d9cf4..97b28f0 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -4337,9 +4337,9 @@ "../browser/enterprise/connectors/service_provider_config_unittest.cc", "../browser/enterprise/reporting/browser_report_generator_unittest.cc", "../browser/enterprise/reporting/extension_info_unittest.cc", - "../browser/enterprise/reporting/notification/extension_request_notification_unittest.cc", - "../browser/enterprise/reporting/notification/extension_request_observer_factory_unittest.cc", - "../browser/enterprise/reporting/notification/extension_request_observer_unittest.cc", + "../browser/enterprise/reporting/extension_request/extension_request_notification_unittest.cc", + "../browser/enterprise/reporting/extension_request/extension_request_observer_factory_unittest.cc", + "../browser/enterprise/reporting/extension_request/extension_request_observer_unittest.cc", "../browser/enterprise/reporting/policy_info_unittest.cc", "../browser/enterprise/reporting/profile_report_generator_unittest.cc", "../browser/enterprise/reporting/report_generator_unittest.cc", @@ -5884,6 +5884,7 @@ "//ui/web_dialogs:test_support", ] sources += [ + "../../ui/views/controls/webview/web_bubble_dialog_view_unittest.cc", "../../ui/views/controls/webview/web_dialog_view_unittest.cc", "../../ui/views/controls/webview/webview_unittest.cc", "../browser/ui/in_product_help/feature_promo_snooze_service_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java index dbf6656..f6b3799a 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/AccountManagerTestRule.java
@@ -128,12 +128,15 @@ } /** - * Adds an account and seed it in native code. + * Adds an account and seed it in native code. Will create a ProfileData entry for the account + * if ProfileDataSource is not null. * * This method invokes native code. It shouldn't be called in a Robolectric test. */ public Account addAccountAndWaitForSeeding(String accountName) { - Account account = addAccount(accountName); + Account account = mFakeAccountManagerFacade.getProfileDataSource() == null + ? addAccount(accountName) + : addAccount(createProfileDataFromName(accountName)); waitForSeeding(); return account; } @@ -191,6 +194,17 @@ } /** + * Creates ProfileData object from accountName. + */ + public ProfileDataSource.ProfileData createProfileDataFromName(String accountName) { + String email = accountName.split("@", 2)[0]; + String givenName = email + ".given"; + String fullName = email + ".full"; + return new ProfileDataSource.ProfileData( + accountName, createProfileImage(), fullName, givenName); + } + + /** * Returns the currently signed in account. * * This method invokes native code. It shouldn't be called in a Robolectric test.
diff --git a/chrome/test/data/webui/settings/password_check_test.js b/chrome/test/data/webui/settings/password_check_test.js index b0e93ca..e466ae7 100644 --- a/chrome/test/data/webui/settings/password_check_test.js +++ b/chrome/test/data/webui/settings/password_check_test.js
@@ -12,11 +12,12 @@ import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {PluralStringProxyImpl} from 'chrome://resources/js/plural_string_proxy.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {OpenWindowProxyImpl, PasswordManagerImpl, PasswordManagerProxy, Router, routes} from 'chrome://settings/settings.js'; +import {OpenWindowProxyImpl, PasswordManagerImpl, PasswordManagerProxy, Router, routes, SyncBrowserProxyImpl} from 'chrome://settings/settings.js'; import {makeCompromisedCredential, makeInsecureCredential, makePasswordCheckStatus} from 'chrome://test/settings/passwords_and_autofill_fake_data.js'; import {getSyncAllPrefs,simulateSyncStatus} from 'chrome://test/settings/sync_test_util.m.js'; import {TestOpenWindowProxy} from 'chrome://test/settings/test_open_window_proxy.js'; import {TestPasswordManagerProxy} from 'chrome://test/settings/test_password_manager_proxy.js'; +import {TestSyncBrowserProxy} from 'chrome://test/settings/test_sync_browser_proxy.m.js'; import {eventToPromise} from 'chrome://test/test_util.m.js'; // clang-format on @@ -166,11 +167,19 @@ /** @type {TestPasswordManagerProxy} */ let passwordManager = null; + /** @type {TestSyncBrowserProxy} */ + let syncBrowserProxy = null; + setup(function() { PolymerTest.clearBody(); // Override the PasswordManagerImpl for testing. passwordManager = new TestPasswordManagerProxy(); PasswordManagerImpl.instance_ = passwordManager; + + // Override the SyncBrowserProxyImpl for testing. + syncBrowserProxy = new TestSyncBrowserProxy(); + SyncBrowserProxyImpl.instance_ = syncBrowserProxy; + syncBrowserProxy.syncStatus = {signedIn: false}; }); // Test verifies that clicking 'Check again' make proper function call to @@ -246,9 +255,8 @@ const section = createCheckPasswordSection(); webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); - simulateSyncStatus({signedIn: true}); - await passwordManager.whenCalled('getPasswordCheckStatus'); + simulateSyncStatus({signedIn: true}); expectEquals( section.i18n('checkPasswordsErrorQuotaGoogleAccount'), section.$.title.innerText); @@ -263,8 +271,6 @@ const section = createCheckPasswordSection(); webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); - simulateSyncStatus({signedIn: false}); - await passwordManager.whenCalled('getPasswordCheckStatus'); flush(); expectEquals( @@ -282,9 +288,8 @@ const syncPrefs = getSyncAllPrefs(); syncPrefs.encryptAllData = true; webUIListenerCallback('sync-prefs-changed', syncPrefs); - simulateSyncStatus({signedIn: true}); - await passwordManager.whenCalled('getPasswordCheckStatus'); + simulateSyncStatus({signedIn: true}); flush(); expectEquals( section.i18n('checkPasswordsErrorQuota'), section.$.title.innerText); @@ -319,9 +324,6 @@ /*state=*/ PasswordCheckState.SIGNED_OUT); const section = createCheckPasswordSection(); webUIListenerCallback('stored-accounts-updated', []); - if (isChromeOS) { - simulateSyncStatus({signedIn: false}); - } await passwordManager.whenCalled('getPasswordCheckStatus'); flush(); expectFalse(isElementVisible(section.$.controlPasswordCheckButton)); @@ -350,9 +352,6 @@ /*state=*/ PasswordCheckState.SIGNED_OUT); const section = createCheckPasswordSection(); webUIListenerCallback('stored-accounts-updated', []); - if (isChromeOS) { - simulateSyncStatus({signedIn: false}); - } await passwordManager.whenCalled('getPasswordCheckStatus'); flush(); expectTrue(isElementVisible(section.$.controlPasswordCheckButton)); @@ -414,12 +413,12 @@ const section = createCheckPasswordSection(); assertFalse(isElementVisible(section.$.noCompromisedCredentials)); webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); - simulateSyncStatus({signedIn: true}); // Initialize with dummy data breach detection settings section.prefs = {profile: {password_manager_leak_detection: {value: true}}}; await passwordManager.whenCalled('getPasswordCheckStatus'); + simulateSyncStatus({signedIn: true}); flush(); assertFalse(isElementVisible(section.$.compromisedCredentialsBody)); assertTrue(isElementVisible(section.$.noCompromisedCredentials)); @@ -441,12 +440,12 @@ const section = createCheckPasswordSection(); assertFalse(isElementVisible(section.$.noCompromisedCredentials)); webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); - simulateSyncStatus({signedIn: true}); // Initialize with dummy data breach detection settings section.prefs = {profile: {password_manager_leak_detection: {value: true}}}; await passwordManager.whenCalled('getPasswordCheckStatus'); + simulateSyncStatus({signedIn: true}); flush(); assertFalse(isElementVisible(section.$.compromisedCredentialsBody)); assertTrue(isElementVisible(section.$.noCompromisedCredentials)); @@ -534,6 +533,26 @@ assertEquals('one.com', formattedOrigin); }); + // Tests that a secure change password URL gets linkified in the remove + // password confirmation dialog. + test('secureChangePasswordUrlInRemovePasswordConfirmationDialog', () => { + const entry = makeCompromisedCredential('one.com', 'test4', 'LEAKED', 0); + entry.changePasswordUrl = 'https://one.com'; + const removeDialog = createRemovePasswordDialog(entry); + assertTrue(isElementVisible(removeDialog.$.link)); + assertFalse(isElementVisible(removeDialog.$.text)); + }); + + // Tests that an insecure change password URL does not get linkified in the + // remove password confirmation dialog. + test('insecureChangePasswordUrlInRemovePasswordConfirmationDialog', () => { + const entry = makeCompromisedCredential('one.com', 'test4', 'LEAKED', 0); + entry.changePasswordUrl = 'http://one.com'; + const removeDialog = createRemovePasswordDialog(entry); + assertFalse(isElementVisible(removeDialog.$.link)); + assertTrue(isElementVisible(removeDialog.$.text)); + }); + // A changing status is immediately reflected in title, icon and banner. test('updatesNumberOfCheckedPasswordsWhileRunning', async function() { passwordManager.data.checkStatus = makePasswordCheckStatus( @@ -599,6 +618,7 @@ // Tests that there is neither spinner nor icon if the check hasn't run yet. test('iconWhenFirstRunIsPending', async function() { + loadTimeData.overrideValues({passwordsWeaknessCheck: false}); const data = passwordManager.data; assertEquals(0, data.leakedCredentials.length); data.checkStatus = makePasswordCheckStatus(PasswordCheckState.IDLE); @@ -720,7 +740,7 @@ }); // If passwords weakness check is enabled, shows count of insecure - // credentials. + // credentials, if compromised credentials exist. test('showInsecurePasswordsCount', async function() { loadTimeData.overrideValues({passwordsWeaknessCheck: true}); const data = passwordManager.data; @@ -737,11 +757,51 @@ const subtitle = section.$.subtitle; assertTrue(isElementVisible(subtitle)); - return PluralStringProxyImpl.getInstance() - .getPluralString('insecurePasswords', 2) - .then(count => { - expectEquals(count, subtitle.textContent.trim()); - }); + const count = await PluralStringProxyImpl.getInstance().getPluralString( + 'insecurePasswords', 2); + expectEquals(count, subtitle.textContent.trim()); + }); + + // If passwords weakness check is enabled, shows count of weak + // credentials, if no compromised credentials exist. + test('showWeakPasswordsCountSignedIn', async function() { + loadTimeData.overrideValues({passwordsWeaknessCheck: true}); + passwordManager.data.weakCredentials = [ + makeInsecureCredential('one.com', 'test4'), + makeInsecureCredential('two.com', 'test5'), + ]; + + const section = createCheckPasswordSection(); + webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); + await passwordManager.whenCalled('getPasswordCheckStatus'); + simulateSyncStatus({signedIn: true}); + flush(); + const subtitle = section.$.subtitle; + assertTrue(isElementVisible(subtitle)); + + const count = await PluralStringProxyImpl.getInstance().getPluralString( + 'insecurePasswords', 2); + expectEquals(count, subtitle.textContent.trim()); + }); + + // If passwords weakness check is enabled, shows count of weak credentials, if + // no compromised credentials exist and the user is signed out. + test('showWeakPasswordsCountSignedOut', async function() { + loadTimeData.overrideValues({passwordsWeaknessCheck: true}); + passwordManager.data.weakCredentials = [ + makeInsecureCredential('one.com', 'test4'), + makeInsecureCredential('two.com', 'test5'), + ]; + + const section = createCheckPasswordSection(); + await passwordManager.whenCalled('getPasswordCheckStatus'); + flush(); + const subtitle = section.$.subtitle; + assertTrue(isElementVisible(subtitle)); + + const count = await PluralStringProxyImpl.getInstance().getPluralString( + 'weakPasswords', 2); + expectEquals(count, subtitle.textContent.trim()); }); // If passwords weakness check is disabled, shows count of compromised @@ -779,8 +839,8 @@ const section = createCheckPasswordSection(); webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); - simulateSyncStatus({signedIn: true}); await passwordManager.whenCalled('getPasswordCheckStatus'); + simulateSyncStatus({signedIn: true}); flush(); assertTrue(isElementVisible(section.$.weakCredentialsBody)); @@ -800,7 +860,6 @@ const section = createCheckPasswordSection(); webUIListenerCallback('sync-prefs-changed', getSyncAllPrefs()); - simulateSyncStatus({signedIn: false}); await passwordManager.whenCalled('getPasswordCheckStatus'); flush(); @@ -933,7 +992,6 @@ passwordManager.data.leakedCredentials = [makeCompromisedCredential('one.com', 'test4', 'LEAKED', 1)]; const section = createCheckPasswordSection(); - simulateSyncStatus({signedIn: false}); await passwordManager.whenCalled('getPasswordCheckStatus'); flush(); @@ -942,11 +1000,10 @@ assertTrue(isElementVisible(title)); expectEquals(section.i18n('checkedPasswords'), title.innerText); assertTrue(isElementVisible(subtitle)); - await PluralStringProxyImpl.getInstance() - .getPluralString('insecurePasswords', 2) - .then(count => { - expectEquals(count, subtitle.textContent.trim()); - }); + const count = await PluralStringProxyImpl.getInstance().getPluralString( + 'insecurePasswords', 2); + expectEquals(count, subtitle.textContent.trim()); + expectTrue( section.$$('iron-icon').classList.contains('has-security-issues')); expectFalse( @@ -973,7 +1030,6 @@ passwordManager.data.checkStatus = makePasswordCheckStatus(PasswordCheckState.SIGNED_OUT); const section = createCheckPasswordSection(); - simulateSyncStatus({signedIn: false}); await passwordManager.whenCalled('getPasswordCheckStatus'); flush();
diff --git a/chrome/updater/win/group_policy_manager.h b/chrome/updater/win/group_policy_manager.h index 5249199..e3086e6 100644 --- a/chrome/updater/win/group_policy_manager.h +++ b/chrome/updater/win/group_policy_manager.h
@@ -8,6 +8,7 @@ #include <memory> #include <string> +#include "base/strings/string16.h" #include "base/win/registry.h" #include "chrome/updater/policy_manager.h"
diff --git a/chromeos/components/camera_app_ui/resources.h b/chromeos/components/camera_app_ui/resources.h index a15281cf..3a9c874 100644 --- a/chromeos/components/camera_app_ui/resources.h +++ b/chromeos/components/camera_app_ui/resources.h
@@ -110,8 +110,9 @@ const char* path; int id; } kGritResourceMap[] = { - {"js/browser_proxy/browser_proxy.js", - IDR_CAMERA_WEBUI_BROWSER_PROXY_JS}, + {"js/browser_proxy/browser_proxy.js", IDR_CAMERA_WEBUI_BROWSER_PROXY_JS}, + {"js/window_controller/window_controller.js", + IDR_CAMERA_MOJO_WINDOW_CONTROLLER_JS}, {"js/mojo/camera_intent.mojom-lite.js", IDR_CAMERA_CAMERA_INTENT_MOJOM_LITE_JS}, {"js/mojo/image_capture.mojom-lite.js", @@ -122,16 +123,14 @@ IDR_CAMERA_CAMERA_METADATA_MOJOM_LITE_JS}, {"js/mojo/camera_metadata_tags.mojom-lite.js", IDR_CAMERA_CAMERA_METADATA_TAGS_MOJOM_LITE_JS}, - {"js/mojo/camera_app.mojom-lite.js", - IDR_CAMERA_CAMERA_APP_MOJOM_LITE_JS}, + {"js/mojo/camera_app.mojom-lite.js", IDR_CAMERA_CAMERA_APP_MOJOM_LITE_JS}, {"js/mojo/mojo_bindings_lite.js", IDR_MOJO_MOJO_BINDINGS_LITE_JS}, {"js/mojo/camera_app_helper.mojom-lite.js", IDR_CAMERA_CAMERA_APP_HELPER_MOJOM_LITE_JS}, {"js/mojo/time.mojom-lite.js", IDR_CAMERA_TIME_MOJOM_LITE_JS}, {"js/mojo/idle_manager.mojom-lite.js", IDR_CAMERA_IDLE_MANAGER_MOJOM_LITE_JS}, - {"js/mojo/camera_app.mojom-lite.js", - IDR_CAMERA_CAMERA_APP_MOJOM_LITE_JS}, + {"js/mojo/camera_app.mojom-lite.js", IDR_CAMERA_CAMERA_APP_MOJOM_LITE_JS}, {"js/mojo/geometry.mojom-lite.js", IDR_CAMERA_GEOMETRY_MOJOM_LITE_JS}, {"js/mojo/range.mojom-lite.js", IDR_CAMERA_RANGE_MOJOM_LITE_JS}, };
diff --git a/chromeos/components/camera_app_ui/resources/BUILD.gn b/chromeos/components/camera_app_ui/resources/BUILD.gn index 6a048ad9..f13631f7 100644 --- a/chromeos/components/camera_app_ui/resources/BUILD.gn +++ b/chromeos/components/camera_app_ui/resources/BUILD.gn
@@ -27,6 +27,7 @@ ":chrome_camera_app_js_views", ":chrome_camera_app_js_views_camera", ":chrome_camera_app_js_views_camera_mode", + ":chrome_camera_app_js_window_controller", ":chrome_camera_app_mojo_generated", ":chrome_camera_app_sounds", ":chrome_camera_app_views", @@ -96,6 +97,7 @@ copy("chrome_camera_app_js") { sources = [ + "js/app_window.js", "js/async_job_queue.js", "js/background.js", "js/background_ops.js", @@ -111,6 +113,7 @@ "js/perf.js", "js/sound.js", "js/state.js", + "js/test_bridge.js", "js/toast.js", "js/tooltip.js", "js/type.js", @@ -219,6 +222,16 @@ outputs = [ "$out_camera_app_dir/js/views/camera/mode/{{source_file_part}}" ] } +copy("chrome_camera_app_js_window_controller") { + sources = [ + "js/window_controller/mojo_window_controller.js", + "js/window_controller/window_controller.js", + "js/window_controller/window_controller_interface.js", + ] + + outputs = [ "$out_camera_app_dir/js/window_controller/{{source_file_part}}" ] +} + copy("chrome_camera_app_sounds") { sources = [ "sounds/record_end.ogg",
diff --git a/chromeos/components/camera_app_ui/resources/camera_app_resources.grd b/chromeos/components/camera_app_ui/resources/camera_app_resources.grd index 0b92c6c..522b7a0 100644 --- a/chromeos/components/camera_app_ui/resources/camera_app_resources.grd +++ b/chromeos/components/camera_app_ui/resources/camera_app_resources.grd
@@ -13,6 +13,7 @@ <release seq="1"> <structures> <structure name="IDR_CAMERA_ANALYTICS_JS" file="js/lib/analytics.js" type="chrome_html" /> + <structure name="IDR_CAMERA_APP_WINDOW_JS" file="js/app_window.js" type="chrome_html" /> <structure name="IDR_CAMERA_ASYNC_JOB_QUEUE_JS" file="js/async_job_queue.js" type="chrome_html" /> <structure name="IDR_CAMERA_ASYNC_WRITER_JS" file="js/models/async_writer.js" type="chrome_html" /> <structure name="IDR_CAMERA_BACKGROUND_JS" file="js/background.js" type="chrome_html" /> @@ -52,6 +53,7 @@ <structure name="IDR_CAMERA_MODE_RECORD_TIME_JS" file="js/views/camera/mode/record_time.js" type="chrome_html" /> <structure name="IDR_CAMERA_MODE_SQUARE_JS" file="js/views/camera/mode/square.js" type="chrome_html" /> <structure name="IDR_CAMERA_MODE_VIDEO_JS" file="js/views/camera/mode/video.js" type="chrome_html" /> + <structure name="IDR_CAMERA_MOJO_WINDOW_CONTROLLER_JS" file="js/window_controller/mojo_window_controller.js" type="chrome_html" /> <structure name="IDR_CAMERA_MP4_VIDEO_PROCESSOR_JS" file="js/models/mp4_video_processor.js" type="chrome_html" /> <structure name="IDR_CAMERA_NATIVE_FILE_SYSTEM_ENTRY_JS" file="js/models/native_file_system_entry.js" type="chrome_html" /> <structure name="IDR_CAMERA_NAV_JS" file="js/nav.js" type="chrome_html" /> @@ -64,6 +66,8 @@ <structure name="IDR_CAMERA_SETTINGS_JS" file="js/views/settings.js" type="chrome_html" /> <structure name="IDR_CAMERA_SOUND_JS" file="js/sound.js" type="chrome_html" /> <structure name="IDR_CAMERA_STATE_JS" file="js/state.js" type="chrome_html" /> + <structure name="IDR_CAMERA_TEST_BRIDGE_JS" file="js/test_bridge.js" type="chrome_html" /> + <structure name="IDR_CAMERA_TEST_HTML" file="views/test.html" type="chrome_html" /> <structure name="IDR_CAMERA_TIMERTICK_JS" file="js/views/camera/timertick.js" type="chrome_html" /> <structure name="IDR_CAMERA_TOAST_JS" file="js/toast.js" type="chrome_html" /> <structure name="IDR_CAMERA_TOOLTIP_JS" file="js/tooltip.js" type="chrome_html" /> @@ -74,6 +78,7 @@ <structure name="IDR_CAMERA_WAITABLE_EVENT_JS" file="js/waitable_event.js" type="chrome_html" /> <structure name="IDR_CAMERA_WARNING_JS" file="js/views/warning.js" type="chrome_html" /> <structure name="IDR_CAMERA_WEBUI_BROWSER_PROXY_JS" file="js/browser_proxy/webui_browser_proxy.js" type="chrome_html" /> + <structure name="IDR_CAMERA_WINDOW_CONTROLLER_INTERFACE_JS" file="js/window_controller/window_controller_interface.js" type="chrome_html" /> </structures> <includes> <!-- Mojo Lite Bindings -->
diff --git a/chromeos/components/camera_app_ui/resources/js/BUILD.gn b/chromeos/components/camera_app_ui/resources/js/BUILD.gn index 81951a70..d7518606 100644 --- a/chromeos/components/camera_app_ui/resources/js/BUILD.gn +++ b/chromeos/components/camera_app_ui/resources/js/BUILD.gn
@@ -22,6 +22,7 @@ js_library("compile_resources") { sources = [ + "app_window.js", "async_job_queue.js", "background.js", "background_ops.js", @@ -60,6 +61,7 @@ "perf.js", "sound.js", "state.js", + "test_bridge.js", "toast.js", "tooltip.js", "type.js", @@ -83,6 +85,9 @@ "views/view.js", "views/warning.js", "waitable_event.js", + "window_controller/mojo_window_controller.js", + "window_controller/window_controller.js", + "window_controller/window_controller_interface.js", ] deps = [ "//chromeos/components/camera_app_ui:mojo_bindings_js_library_for_compile",
diff --git a/chromeos/components/camera_app_ui/resources/js/app_window.js b/chromeos/components/camera_app_ui/resources/js/app_window.js new file mode 100644 index 0000000..1bfdf35 --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/js/app_window.js
@@ -0,0 +1,188 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// eslint-disable-next-line no-unused-vars +import { + ErrorInfo, // eslint-disable-line no-unused-vars + PerfEntry, // eslint-disable-line no-unused-vars + PerfEvent, +} from './type.js'; +import {WaitableEvent} from './waitable_event.js'; + +/** + * Class which is used to coordinate the setup of window between Tast side and + * CCA side. Note that the methods in this class are all marked with "async" + * since the instance of this class will be wrapped by Comlink, which makes + * all synchronous calls asynchronous. Making them async will make type check + * easier. + */ +export class AppWindow { + /** + * @param {boolean} fromColdStart Whether this app is launched from a cold + * start. It is used for performance measurement. + * @public + */ + constructor(fromColdStart) { + /** + * @type {boolean} + * @private + */ + this.fromColdStart_ = fromColdStart; + + /** + * A waitable event which will resolve to the URL of the CCA instance just + * launched. + * @type {!WaitableEvent<string>} + * @private + */ + this.readyOnCCASide_ = new WaitableEvent(); + + /** + * @type {!WaitableEvent} + * @private + */ + this.readyOnTastSide_ = new WaitableEvent(); + + /** + * @type {!WaitableEvent} + * @private + */ + this.onClosed_ = new WaitableEvent(); + + /** + * @type {boolean} + * @private + */ + this.inClosingItself_ = false; + + /** + * @type {!Array<!ErrorInfo>} + */ + this.errors_ = []; + + /** + * @type {!Array<!PerfEntry>} + */ + this.perfs_ = []; + + /** + * @type {number} + */ + this.launchedTime_ = performance.now(); + } + + /** + * Waits until the window is bound and returns the URL of the window. + * @return {!Promise<string>} The URL of the window. + */ + async waitUntilWindowBound() { + return this.readyOnCCASide_.wait(); + } + + /** + * Binds the URL to the window. + * @param {string} url + * @return {!Promise} + */ + async bindUrl(url) { + this.readyOnCCASide_.signal(url); + } + + /** + * Notifies the listener that the window setup is done on Tast side. + * @return {!Promise} + */ + async notifyReadyOnTastSide() { + this.readyOnTastSide_.signal(); + } + + /** + * Waits until the setup for the window is done on Tast side. + * @return {!Promise} + */ + async waitUntilReadyOnTastSide() { + return this.readyOnTastSide_.wait(); + } + + /** + * Triggers when CCA is fully launched. + * @return {!Promise} + */ + async onAppLaunched() { + const event = this.fromColdStart_ ? + PerfEvent.LAUNCHING_FROM_LAUNCH_APP_COLD : + PerfEvent.LAUNCHING_FROM_LAUNCH_APP_WARM; + this.perfs_.push({ + event: event, + duration: (performance.now() - this.launchedTime_), + }); + } + + /** + * Notifies the listener that the window is closed. + * @return {!Promise} + */ + async notifyClosed() { + this.onClosed_.signal(); + } + + /** + * Waits until the window is closed. + * @return {!Promise} + */ + async waitUntilClosed() { + return this.onClosed_.wait(); + } + + /** + * Notifies the listener that the window is about to close itself. + * @return {!Promise} + */ + async notifyClosingItself() { + this.inClosingItself_ = true; + } + + /** + * Check if it has received the signal that the window is about to close + * itself. + * @return {!Promise<boolean>} + */ + async isClosingItself() { + return this.inClosingItself_; + } + + /** + * Reports error and makes it visible on Tast side. + * @param {!ErrorInfo} errorInfo Information of the error. + * @return {!Promise} + */ + async reportError(errorInfo) { + this.errors_.push(errorInfo); + } + + /** + * Gets all the errors. + * @return {!Promise<!Array<!ErrorInfo>>} + */ + async getErrors() { + return this.errors_; + } + + /** + * Reports perf information and makes it visible on Tast side. + * @param {!PerfEntry} perfEntry Information of the perf event. + * @return {!Promise} + */ + async reportPerf(perfEntry) { + this.perfs_.push(perfEntry); + } + + /** + * Gets all the perf information. + * @return {!Promise<!Array<!PerfEntry>>} + */ + async getPerfs() { + return this.perfs_; + } +}
diff --git a/chromeos/components/camera_app_ui/resources/js/background.js b/chromeos/components/camera_app_ui/resources/js/background.js index a953dc1..64f3f8b 100644 --- a/chromeos/components/camera_app_ui/resources/js/background.js +++ b/chromeos/components/camera_app_ui/resources/js/background.js
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// eslint-disable-next-line no-unused-vars +import {AppWindow} from './app_window.js'; import { BackgroundOps, // eslint-disable-line no-unused-vars ForegroundOps, // eslint-disable-line no-unused-vars @@ -11,7 +13,8 @@ import {TestingErrorCallback} from './error.js'; import {Intent} from './intent.js'; import {initMetrics, setMetricsEnabled} from './metrics.js'; -import {PerfEvent, PerfLogger} from './perf.js'; +import {PerfLogger} from './perf.js'; +import {PerfEvent} from './type.js'; /** * Fixed minimum width of the window inner-bounds in pixels. @@ -136,6 +139,12 @@ this.appWindow_ = null; /** + * @type {?AppWindow} + * @private + */ + this.testAppWindow_ = null; + + /** * @type {?ForegroundOps} * @private */ @@ -195,8 +204,6 @@ this.appWindow_ = appWindow; this.appWindow_.onClosed.addListener(() => { browserProxy.localStorageSet({maximized: appWindow.isMaximized()}); - browserProxy.localStorageSet( - {fullscreen: appWindow.isFullscreen()}); this.state_ = WindowState.CLOSED; if (this.intent_ !== null && !this.intent_.done) { this.intent_.cancel(); @@ -205,6 +212,9 @@ if (this.testingCallbacks_ !== null) { this.testingCallbacks_.onClosed(windowUrl); } + if (this.testAppWindow_ !== null) { + this.testAppWindow_.notifyClosed(); + } }); appWindow.contentWindow['backgroundOps'] = this; if (this.testingCallbacks_ !== null) { @@ -223,6 +233,13 @@ /** * @override */ + bindAppWindow(appWindow) { + this.testAppWindow_ = appWindow; + } + + /** + * @override + */ getIntent() { return this.intent_; } @@ -546,13 +563,15 @@ return; } switch (port.name) { + // TODO(crbug.com/980846): Remove the old error reporting logic once the + // implementation using TestBridge on Tast side is ready. case 'SET_PERF_CONNECTION': port.onMessage.addListener((event) => { if (perfLoggerForTesting === null) { perfLoggerForTesting = new PerfLogger(); - perfLoggerForTesting.addListener((event, duration, extras) => { - port.postMessage({event, duration, extras}); + perfLoggerForTesting.addListener(({event, duration, perfInfo}) => { + port.postMessage({event, duration, extras: perfInfo}); }); } @@ -600,4 +619,4 @@ } }); -browserProxy.addOnConnectExternalListener(handleExternalConnectionFromTest); +chrome.runtime.onConnectExternal.addListener(handleExternalConnectionFromTest);
diff --git a/chromeos/components/camera_app_ui/resources/js/background_ops.js b/chromeos/components/camera_app_ui/resources/js/background_ops.js index 7eabb7d..285d5f89 100644 --- a/chromeos/components/camera_app_ui/resources/js/background_ops.js +++ b/chromeos/components/camera_app_ui/resources/js/background_ops.js
@@ -3,6 +3,8 @@ // found in the LICENSE file. // eslint-disable-next-line no-unused-vars +import {AppWindow} from './app_window.js'; +// eslint-disable-next-line no-unused-vars import {TestingErrorCallback} from './error.js'; // eslint-disable-next-line no-unused-vars import {Intent} from './intent.js'; @@ -40,6 +42,12 @@ bindForegroundOps(ops) {} /** + * Sets the app window which is associated to the foreground window. + * @param {?AppWindow} appWindow + */ + bindAppWindow(appWindow) {} + + /** * Gets intent associate with CCA Window object. * @return {?Intent} * @abstract
diff --git a/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy.js b/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy.js index b55d387..a589fd12 100644 --- a/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy.js +++ b/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy.js
@@ -93,6 +93,11 @@ } /** @override */ + localStorageClear() { + return promisify(chrome.storage.local.clear.bind(chrome.storage.local))(); + } + + /** @override */ async getBoard() { const values = await promisify(chrome.chromeosInfoPrivate.get)(['board']); return values['board']; @@ -146,16 +151,6 @@ } /** @override */ - addOnMessageExternalListener(listener) { - chrome.runtime.onMessageExternal.addListener(listener); - } - - /** @override */ - addOnConnectExternalListener(listener) { - chrome.runtime.onConnectExternal.addListener(listener); - } - - /** @override */ addDummyHistoryIfNotAvailable() { // Since GA will use history.length to generate hash but it is not available // in platform apps, set it to 1 manually. @@ -174,12 +169,6 @@ } /** @override */ - isFullscreenOrMaximized() { - return chrome.app.window.current().outerBounds.width >= screen.width || - chrome.app.window.current().outerBounds.height >= screen.height; - } - - /** @override */ async fitWindow() { const appWindow = chrome.app.window.current(); @@ -226,26 +215,6 @@ } /** @override */ - showWindow() { - chrome.app.window.current().show(); - } - - /** @override */ - hideWindow() { - chrome.app.window.current().hide(); - } - - /** @override */ - isMinimized() { - return chrome.app.window.current().isMinimized(); - } - - /** @override */ - addOnMinimizedListener(listener) { - chrome.app.window.current().onMinimized.addListener(listener); - } - - /** @override */ openFeedback() { const data = { 'categoryTag': 'chromeos-camera-app', @@ -262,6 +231,18 @@ const id = 'gfdkimpbcpahaombhbimeihdjnejgicl'; // Feedback extension id. chrome.runtime.sendMessage(id, data); } + + /** @override */ + setupUnloadListener(listener) { + // Platform app should use chrome.app.window.AppWindow onClosed event + // listener in background page instead of window unload event listener. + } + + /** @override */ + async setLaunchingFromWindowCreationStartTime(callback) { + // For platform app, the start time of window creation is recorded by + // background page so we don't need to trigger it here. + } } export const browserProxy = new ChromeAppBrowserProxy();
diff --git a/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy_interface.js b/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy_interface.js index 5d7174c..6affb9a5 100644 --- a/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy_interface.js +++ b/chromeos/components/camera_app_ui/resources/js/browser_proxy/browser_proxy_interface.js
@@ -49,6 +49,12 @@ async localStorageRemove(items) {} /** + * @return {!Promise} + * @abstract + */ + async localStorageClear() {} + + /** * @return {!Promise<string>} * @abstract */ @@ -101,19 +107,6 @@ getTextDirection() {} /** - * @param {function(*, !MessageSender, function(string)): (boolean|undefined)} - * listener - * @abstract - */ - addOnMessageExternalListener(listener) {} - - /** - * @param {function(!Port)} listener - * @abstract - */ - addOnConnectExternalListener(listener) {} - - /** * @abstract */ addDummyHistoryIfNotAvailable() {} @@ -131,12 +124,6 @@ getBackgroundOps() {} /** - * @return {boolean} - * @abstract - */ - isFullscreenOrMaximized() {} - - /** * @return {!Promise} * @abstract */ @@ -145,27 +132,18 @@ /** * @abstract */ - showWindow() {} - - /** - * @abstract - */ - hideWindow() {} - - /** - * @return {boolean} - * @abstract - */ - isMinimized() {} + openFeedback() {} /** * @param {function(): void} listener * @abstract */ - addOnMinimizedListener(listener) {} + setupUnloadListener(listener) {} /** + * @param {function(): !Promise} callback + * @return {!Promise} * @abstract */ - openFeedback() {} + async setLaunchingFromWindowCreationStartTime(callback) {} }
diff --git a/chromeos/components/camera_app_ui/resources/js/browser_proxy/webui_browser_proxy.js b/chromeos/components/camera_app_ui/resources/js/browser_proxy/webui_browser_proxy.js index 85d8f7a..4bf7d5ca 100644 --- a/chromeos/components/camera_app_ui/resources/js/browser_proxy/webui_browser_proxy.js +++ b/chromeos/components/camera_app_ui/resources/js/browser_proxy/webui_browser_proxy.js
@@ -14,7 +14,6 @@ // eslint-disable-next-line no-unused-vars import {BackgroundOps} from '../background_ops.js'; import {assert} from '../chrome_util.js'; -import {NotImplementedError} from '../error.js'; import {Intent} from '../intent.js'; import {getMaybeLazyDirectory} from '../models/lazy_directory_entry.js'; import {NativeDirectoryEntry} from '../models/native_file_system_entry.js'; @@ -102,6 +101,11 @@ } /** @override */ + async localStorageClear() { + window.localStorage.clear(); + } + + /** @override */ async getBoard() { return window.loadTimeData.getString('board_name'); } @@ -128,7 +132,8 @@ /** @override */ openInspector(type) { - throw new NotImplementedError(); + // SWA can open the inspector by the hot-keys and there is no need to + // implement it. } /** @override */ @@ -142,16 +147,6 @@ } /** @override */ - addOnMessageExternalListener(listener) { - throw new NotImplementedError(); - } - - /** @override */ - addOnConnectExternalListener(listener) { - throw new NotImplementedError(); - } - - /** @override */ addDummyHistoryIfNotAvailable() { // no-ops } @@ -170,6 +165,7 @@ const intent = url.includes('intent') ? Intent.create(new URL(url)) : null; return /** @type {!BackgroundOps} */ ({ bindForegroundOps: (ops) => {}, + bindAppWindow: (appWindow) => {}, getIntent: () => intent, getPerfLogger: () => perfLogger, getTestingErrorCallback: () => null, @@ -179,42 +175,25 @@ } /** @override */ - isFullscreenOrMaximized() { - // TODO(crbug.com/980846): Implement the fullscreen monitor. - return false; - } - - /** @override */ fitWindow() { // TODO(crbug.com/980846): Remove the method once we migrate to SWA. } /** @override */ - showWindow() { - // TODO(crbug.com/980846): Remove the method once we migrate to SWA. - } - - /** @override */ - hideWindow() { - // TODO(crbug.com/980846): Remove the method once we migrate to SWA. - } - - /** @override */ - isMinimized() { - // TODO(crbug.com/980846): Implement the minimization monitor. - return false; - } - - /** @override */ - addOnMinimizedListener(listener) { - // TODO(crbug.com/980846): Implement the minimization monitor. - } - - /** @override */ openFeedback() { ChromeHelper.getInstance().openFeedbackDialog( this.getI18nMessage('feedback_description_placeholder')); } + + /** @override */ + setupUnloadListener(listener) { + window.addEventListener('unload', listener); + } + + /** @override */ + async setLaunchingFromWindowCreationStartTime(callback) { + await callback(); + } } export const browserProxy = new WebUIBrowserProxy();
diff --git a/chromeos/components/camera_app_ui/resources/js/error.js b/chromeos/components/camera_app_ui/resources/js/error.js index 0a42f141..0a9298d6 100644 --- a/chromeos/components/camera_app_ui/resources/js/error.js +++ b/chromeos/components/camera_app_ui/resources/js/error.js
@@ -2,37 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// eslint-disable-next-line no-unused-vars +import {AppWindow} from './app_window.js'; import {assertInstanceof} from './chrome_util.js'; import * as metrics from './metrics.js'; - -/** - * Types of error used in ERROR metrics. - * @enum {string} - */ -export const ErrorType = { - BROKEN_THUMBNAIL: 'broken-thumbnail', - UNCAUGHT_PROMISE: 'uncaught-promise', -}; - -/** - * Error level used in ERROR metrics. - * @enum {string} - */ -export const ErrorLevel = { - WARNING: 'WARNING', - ERROR: 'ERROR', -}; - -/** - * Error reported in testing run. - * @typedef {{ - * type: !ErrorType, - * level: !ErrorLevel, - * stack: string, - * time: number, - * }} - */ -let ErrorInfo; // eslint-disable-line no-unused-vars +import { + ErrorInfo, // eslint-disable-line no-unused-vars + ErrorLevel, + ErrorType, +} from './type.js'; /** * Callback for reporting error in testing run. @@ -143,6 +121,11 @@ let onTestingError = null; /** + * @type {?AppWindow} + */ +const appWindow = window['appWindow']; + +/** * Initializes error collecting functions. * @param {?TestingErrorCallback} onError Callback for reporting error in * testing run. Set to null in non testing run. @@ -193,10 +176,16 @@ } triggeredErrorSet.add(hash); + // TODO(crbug.com/980846): Remove the old error reporting logic once the + // implementation using TestBridge on Tast side is ready. if (onTestingError !== null) { onTestingError({type, level, stack: formatErrorStack(error), time}); return; } + if (appWindow !== null) { + appWindow.reportError({type, level, stack: formatErrorStack(error), time}); + return; + } metrics.sendErrorEvent( {type, level, errorName, fileName, funcName, lineNo, colNo}); }
diff --git a/chromeos/components/camera_app_ui/resources/js/externs/chrome.js b/chromeos/components/camera_app_ui/resources/js/externs/chrome.js index 2c26613..599bc9d 100644 --- a/chromeos/components/camera_app_ui/resources/js/externs/chrome.js +++ b/chromeos/components/camera_app_ui/resources/js/externs/chrome.js
@@ -9,3 +9,14 @@ * }} */ chrome.chromeosInfoPrivate; + +/** @const */ +chrome.events = {}; + +/** + * @typedef {{ + * addListener: function(function(): void), + * removeListener: function(function(): void), + * }} + */ +chrome.events.Event;
diff --git a/chromeos/components/camera_app_ui/resources/js/init.js b/chromeos/components/camera_app_ui/resources/js/init.js index 0304b5da..2e607e9 100644 --- a/chromeos/components/camera_app_ui/resources/js/init.js +++ b/chromeos/components/camera_app_ui/resources/js/init.js
@@ -2,7 +2,27 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -document.addEventListener('DOMContentLoaded', () => { +import * as Comlink from './lib/comlink.js'; +// eslint-disable-next-line no-unused-vars + +document.addEventListener('DOMContentLoaded', async () => { + const workerPath = '/js/test_bridge.js'; + // The cast here is a workaround to avoid warning in closure compiler since + // it does not have such signature. We need to fix it in upstream. + // TODO(crbug.com/980846): Remove the cast once the PR is merged: + // https://github.com/google/closure-compiler/pull/3704 + const sharedWorker = + new SharedWorker(workerPath, /** @type {string} */ ({type: 'module'})); + const testBridge = Comlink.wrap(sharedWorker.port); + const appWindow = await testBridge.bindWindow(window.location.href); + // TODO(crbug.com/980846): Refactor to use a better way rather than window + // properties to pass data to other modules. + window['appWindow'] = appWindow; + window['windowCreationTime'] = performance.now(); + if (appWindow !== null) { + await appWindow.waitUntilReadyOnTastSide(); + } + const mainScript = document.createElement('script'); mainScript.setAttribute('type', 'module'); mainScript.setAttribute('src', '/js/main.js');
diff --git a/chromeos/components/camera_app_ui/resources/js/intent.js b/chromeos/components/camera_app_ui/resources/js/intent.js index 344ec9a..b640201 100644 --- a/chromeos/components/camera_app_ui/resources/js/intent.js +++ b/chromeos/components/camera_app_ui/resources/js/intent.js
@@ -121,8 +121,11 @@ return; } this.done_ = true; - await this.chromeHelper_.cancel(this.intentId); + // TODO(crbug.com/1125997): We send the metrics before the actual action + // here to workaround the issue that codes behind "await" might not be + // executed when unloading window. this.logResult(metrics.IntentResultType.CANCELED); + await this.chromeHelper_.cancel(this.intentId); } /**
diff --git a/chromeos/components/camera_app_ui/resources/js/main.js b/chromeos/components/camera_app_ui/resources/js/main.js index 742679b1..2495431a 100644 --- a/chromeos/components/camera_app_ui/resources/js/main.js +++ b/chromeos/components/camera_app_ui/resources/js/main.js
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// eslint-disable-next-line no-unused-vars +import {AppWindow} from './app_window.js'; import { BackgroundOps, // eslint-disable-line no-unused-vars ForegroundOps, // eslint-disable-line no-unused-vars @@ -19,10 +21,9 @@ import * as metrics from './metrics.js'; import * as filesystem from './models/file_system.js'; import * as nav from './nav.js'; -import {PerfEvent} from './perf.js'; import * as state from './state.js'; import * as tooltip from './tooltip.js'; -import {Mode, ViewName} from './type.js'; +import {Mode, PerfEvent, ViewName} from './type.js'; import * as util from './util.js'; import {Camera} from './views/camera.js'; import {CameraIntent} from './views/camera_intent.js'; @@ -34,6 +35,12 @@ } from './views/settings.js'; import {View} from './views/view.js'; import {Warning} from './views/warning.js'; +import {windowController} from './window_controller/window_controller.js'; + +/** + * @type {?AppWindow} + */ +const appWindow = window['appWindow']; /** * Creates the Camera App main object. @@ -124,6 +131,7 @@ nav.open(ViewName.SPLASH); this.backgroundOps_.bindForegroundOps(this); + this.backgroundOps_.bindAppWindow(appWindow); } /** @@ -204,14 +212,23 @@ const showWindow = (async () => { await browserProxy.fitWindow(); - browserProxy.showWindow(); + windowController.enable(); this.backgroundOps_.notifyActivation(); })(); const startCamera = (async () => { const isSuccess = await this.cameraView_.start(); nav.close(ViewName.SPLASH); nav.open(ViewName.CAMERA); - this.backgroundOps_.getPerfLogger().stopLaunch({hasError: !isSuccess}); + await browserProxy.setLaunchingFromWindowCreationStartTime(async () => { + const windowCreationTime = window['windowCreationTime']; + this.backgroundOps_.getPerfLogger().start( + PerfEvent.LAUNCHING_FROM_WINDOW_CREATION, windowCreationTime); + }); + this.backgroundOps_.getPerfLogger().stop( + PerfEvent.LAUNCHING_FROM_WINDOW_CREATION, {hasError: !isSuccess}); + if (appWindow !== null) { + appWindow.onAppLaunched(); + } })(); metrics.sendLaunchEvent({ackMigrate: false}); @@ -235,7 +252,7 @@ async suspend() { state.set(state.State.SUSPEND, true); await this.cameraView_.start(); - browserProxy.hideWindow(); + windowController.disable(); this.backgroundOps_.notifySuspension(); } @@ -244,7 +261,7 @@ */ resume() { state.set(state.State.SUSPEND, false); - browserProxy.showWindow(); + windowController.enable(); this.backgroundOps_.notifyActivation(); } } @@ -264,6 +281,18 @@ } const bgOps = browserProxy.getBackgroundOps(); + browserProxy.setupUnloadListener(() => { + const intent = bgOps.getIntent(); + if (intent !== null && !intent.done) { + // TODO(crbug.com/1125997): Move the task to ServiceWorker once it is + // supported on SWA. + intent.cancel(); + } + if (appWindow !== null) { + appWindow.notifyClosed(); + } + }); + const testErrorCallback = bgOps.getTestingErrorCallback(); metrics.initMetrics(); if (testErrorCallback !== null) { @@ -276,8 +305,22 @@ const perfLogger = bgOps.getPerfLogger(); // Setup listener for performance events. - perfLogger.addListener((event, duration, extras) => { - metrics.sendPerfEvent({event, duration, extras}); + perfLogger.addListener(({event, duration, perfInfo}) => { + metrics.sendPerfEvent({event, duration, perfInfo}); + + // Setup for console perf logger. + if (state.get(state.State.PRINT_PERFORMANCE_LOGS)) { + // eslint-disable-next-line no-console + console.log( + '%c%s %s ms %s', 'color: #4E4F97; font-weight: bold;', + event.padEnd(40), duration.toFixed(0).padStart(4), + JSON.stringify(perfInfo)); + } + + // Setup for Tast tests logger. + if (appWindow !== null) { + appWindow.reportPerf({event, duration, perfInfo}); + } }); const states = Object.values(PerfEvent); states.push(state.State.TAKING); @@ -302,17 +345,6 @@ }); }); - // Setup for console perf logger. - perfLogger.addListener((event, duration, extras) => { - if (state.get(state.State.PRINT_PERFORMANCE_LOGS)) { - // eslint-disable-next-line no-console - console.log( - '%c%s %s ms %s', 'color: #4E4F97; font-weight: bold;', - event.padEnd(40), duration.toFixed(0).padStart(4), - JSON.stringify(extras)); - } - }); - instance = new App( /** @type {!BackgroundOps} */ (bgOps)); await instance.start();
diff --git a/chromeos/components/camera_app_ui/resources/js/metrics.js b/chromeos/components/camera_app_ui/resources/js/metrics.js index bcf2e00b..3a475a4 100644 --- a/chromeos/components/camera_app_ui/resources/js/metrics.js +++ b/chromeos/components/camera_app_ui/resources/js/metrics.js
@@ -5,12 +5,13 @@ import {browserProxy} from './browser_proxy/browser_proxy.js'; import {assert} from './chrome_util.js'; // eslint-disable-next-line no-unused-vars -import {PerfEvent} from './perf.js'; import * as state from './state.js'; import { Facing, // eslint-disable-line no-unused-vars Mode, - Resolution, // eslint-disable-line no-unused-vars + PerfEvent, // eslint-disable-line no-unused-vars + PerfInformation, // eslint-disable-line no-unused-vars + Resolution, // eslint-disable-line no-unused-vars } from './type.js'; /** @@ -306,9 +307,9 @@ this.duration; /** - * @type {!Object|undefined} Optional information for the event. + * @type {!PerfInformation|undefined} Optional information for the event. */ - this.extras; + this.perfInfo; } } @@ -316,9 +317,9 @@ * Sends perf type event. * @param {!PerfEventParam} param */ -export function sendPerfEvent({event, duration, extras = {}}) { - const resolution = extras['resolution'] || ''; - const facing = extras['facing'] || ''; +export function sendPerfEvent({event, duration, perfInfo = {}}) { + const resolution = perfInfo['resolution'] || ''; + const facing = perfInfo['facing'] || ''; sendEvent( { eventCategory: 'perf',
diff --git a/chromeos/components/camera_app_ui/resources/js/nav.js b/chromeos/components/camera_app_ui/resources/js/nav.js index a86e55f..e76382d 100644 --- a/chromeos/components/camera_app_ui/resources/js/nav.js +++ b/chromeos/components/camera_app_ui/resources/js/nav.js
@@ -13,6 +13,7 @@ import * as util from './util.js'; // eslint-disable-next-line no-unused-vars import {View} from './views/view.js'; +import {windowController} from './window_controller/window_controller.js'; /** * All views stacked in ascending z-order (DOM order) for navigation, and only @@ -178,7 +179,7 @@ const key = util.getShortcutIdentifier(event); switch (key) { case 'BrowserBack': - chrome.app.window.current().minimize(); + windowController.minimize(); break; case 'Ctrl-V': toast.showDebugMessage(browserProxy.getAppVersion());
diff --git a/chromeos/components/camera_app_ui/resources/js/perf.js b/chromeos/components/camera_app_ui/resources/js/perf.js index d42caa87..ca794b72 100644 --- a/chromeos/components/camera_app_ui/resources/js/perf.js +++ b/chromeos/components/camera_app_ui/resources/js/perf.js
@@ -4,28 +4,10 @@ import {ChromeHelper} from './mojo/chrome_helper.js'; // eslint-disable-next-line no-unused-vars -import {PerfInformation} from './type.js'; +import {PerfEntry, PerfEvent, PerfInformation} from './type.js'; /** - * Type for performance event. - * @enum {string} - */ -export const PerfEvent = { - PHOTO_TAKING: 'photo-taking', - PHOTO_CAPTURE_SHUTTER: 'photo-capture-shutter', - PHOTO_CAPTURE_POST_PROCESSING: 'photo-capture-post-processing', - VIDEO_CAPTURE_POST_PROCESSING: 'video-capture-post-processing', - PORTRAIT_MODE_CAPTURE_POST_PROCESSING: - 'portrait-mode-capture-post-processing', - MODE_SWITCHING: 'mode-switching', - CAMERA_SWITCHING: 'camera-switching', - LAUNCHING_FROM_WINDOW_CREATION: 'launching-from-window-creation', - LAUNCHING_FROM_LAUNCH_APP_COLD: 'launching-from-launch-app-cold', - LAUNCHING_FROM_LAUNCH_APP_WARM: 'launching-from-launch-app-warm', -}; - -/** - * @typedef {function(!PerfEvent, number, !Object=)} + * @typedef {function(!PerfEntry): void} */ let PerfEventListener; // eslint-disable-line no-unused-vars @@ -77,14 +59,15 @@ /** * Starts the measurement for given event. * @param {!PerfEvent} event Target event. + * @param {number=} startTime The start time of the event. */ - start(event) { + start(event, startTime = performance.now()) { if (this.startTimeMap_.has(event)) { console.error(`Failed to start event ${event} since the previous one is not stopped.`); return; } - this.startTimeMap_.set(event, performance.now()); + this.startTimeMap_.set(event, startTime); ChromeHelper.getInstance().startTracing(event); } @@ -117,26 +100,8 @@ const duration = performance.now() - startTime; ChromeHelper.getInstance().stopTracing(event); - this.listeners_.forEach((listener) => listener(event, duration, perfInfo)); - } - - /** - * Stops the measurement of launch-related events. - * @param {!PerfInformation=} perfInfo Optional information of this event - * for performance measurement. - */ - stopLaunch(perfInfo) { - const launchEvents = [ - PerfEvent.LAUNCHING_FROM_WINDOW_CREATION, - PerfEvent.LAUNCHING_FROM_LAUNCH_APP_COLD, - PerfEvent.LAUNCHING_FROM_LAUNCH_APP_WARM, - ]; - - launchEvents.forEach((event) => { - if (this.startTimeMap_.has(event)) { - this.stop(event, perfInfo); - } - }); + this.listeners_.forEach( + (listener) => listener({event, duration, perfInfo})); } /**
diff --git a/chromeos/components/camera_app_ui/resources/js/state.js b/chromeos/components/camera_app_ui/resources/js/state.js index 4f51dca..d3cd86e 100644 --- a/chromeos/components/camera_app_ui/resources/js/state.js +++ b/chromeos/components/camera_app_ui/resources/js/state.js
@@ -3,9 +3,9 @@ // found in the LICENSE file. import {assert} from './chrome_util.js'; -import {PerfEvent} from './perf.js'; import { Mode, + PerfEvent, PerfInformation, // eslint-disable-line no-unused-vars ViewName, } from './type.js';
diff --git a/chromeos/components/camera_app_ui/resources/js/test_bridge.js b/chromeos/components/camera_app_ui/resources/js/test_bridge.js new file mode 100644 index 0000000..3c68783 --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/js/test_bridge.js
@@ -0,0 +1,76 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview + * This scripts should only be loaded as a SharedWorker and the worker is only + * used for communication between Tast tests and CCA instance. Generally, the + * SharedWorker will first be created by Tast tests when constructing the test + * bridge. And when CCA is launched, it will also connect to the SharedWorker + * during its initialization. And the SharedWorker will be close once the test + * bridge is destroyed from Tast tests side. + */ + +import {AppWindow} from './app_window.js'; +import {assert} from './chrome_util.js'; +import * as Comlink from './lib/comlink.js'; + +/** + * Pending unbound AppWindow requested by tast waiting to be bound by next + * launched CCA window. + * @type {?AppWindow} + */ +let pendingAppWindow = null; + +/** + * Whether the app is launched from a cold start. It will be set to false once + * an app instance is launched. + */ +let fromColdStart = true; + +/** + * Registers a pending unbound AppWindow which will be bound with the URL + * later once the window is created. This method is expected to be called in + * Tast tests. + * @return {!AppWindow} + */ +export function registerUnboundWindow() { + assert(pendingAppWindow === null); + const appWindow = new AppWindow(fromColdStart); + pendingAppWindow = appWindow; + return Comlink.proxy(appWindow); +} + +/** + * Binds the URL to pending AppWindow and exposes AppWindow using the URL. + * @param {string} url The URL to bind. + * @return {?AppWindow} + */ +function bindWindow(url) { + fromColdStart = false; + if (pendingAppWindow !== null) { + const appWindow = pendingAppWindow; + pendingAppWindow = null; + appWindow.bindUrl(url); + return Comlink.proxy(appWindow); + } + return null; +} + +const sharedWorkerScope = /** @type {!SharedWorkerGlobalScope} */ (self); + +/** + * Triggers when the Shared Worker is connected. + * @param {!Event} event + */ +sharedWorkerScope.onconnect = (event) => { + const port = /** @type {!MessageEvent} */ (event).ports[0]; + Comlink.expose( + { + bindWindow, + registerUnboundWindow, + }, + port); + port.start(); +};
diff --git a/chromeos/components/camera_app_ui/resources/js/type.js b/chromeos/components/camera_app_ui/resources/js/type.js index 169cae16..fd48240 100644 --- a/chromeos/components/camera_app_ui/resources/js/type.js +++ b/chromeos/components/camera_app_ui/resources/js/type.js
@@ -124,14 +124,6 @@ /** * @typedef {{ - * hasError: (boolean|undefined), - * resolution: (!Resolution|undefined), - * }} - */ -export let PerfInformation; - -/** - * @typedef {{ * width: number, * height: number, * maxFps: number, @@ -166,3 +158,67 @@ * @typedef {!Array<!FpsRange>} */ export let FpsRangeList; + +/** + * Type for performance event. + * @enum {string} + */ +export const PerfEvent = { + PHOTO_TAKING: 'photo-taking', + PHOTO_CAPTURE_SHUTTER: 'photo-capture-shutter', + PHOTO_CAPTURE_POST_PROCESSING: 'photo-capture-post-processing', + VIDEO_CAPTURE_POST_PROCESSING: 'video-capture-post-processing', + PORTRAIT_MODE_CAPTURE_POST_PROCESSING: + 'portrait-mode-capture-post-processing', + MODE_SWITCHING: 'mode-switching', + CAMERA_SWITCHING: 'camera-switching', + LAUNCHING_FROM_WINDOW_CREATION: 'launching-from-window-creation', + LAUNCHING_FROM_LAUNCH_APP_COLD: 'launching-from-launch-app-cold', + LAUNCHING_FROM_LAUNCH_APP_WARM: 'launching-from-launch-app-warm', +}; + +/** + * @typedef {{ + * hasError: (boolean|undefined), + * resolution: (!Resolution|undefined), + * }} + */ +export let PerfInformation; + +/** + * @typedef {{ + * event: !PerfEvent, + * duration: number, + * perfInfo: (!PerfInformation|undefined), + * }} + */ +export let PerfEntry; + +/** + * Error reported in testing run. + * @typedef {{ + * type: !ErrorType, + * level: !ErrorLevel, + * stack: string, + * time: number, + * }} + */ +export let ErrorInfo; + +/** + * Types of error used in ERROR metrics. + * @enum {string} + */ +export const ErrorType = { + BROKEN_THUMBNAIL: 'broken-thumbnail', + UNCAUGHT_PROMISE: 'uncaught-promise', +}; + +/** + * Error level used in ERROR metrics. + * @enum {string} + */ +export const ErrorLevel = { + WARNING: 'WARNING', + ERROR: 'ERROR', +};
diff --git a/chromeos/components/camera_app_ui/resources/js/util.js b/chromeos/components/camera_app_ui/resources/js/util.js index 1580488..0fc1643 100644 --- a/chromeos/components/camera_app_ui/resources/js/util.js +++ b/chromeos/components/camera_app_ui/resources/js/util.js
@@ -4,10 +4,10 @@ import {browserProxy} from './browser_proxy/browser_proxy.js'; import {assertInstanceof} from './chrome_util.js'; -import {ErrorLevel, ErrorType, reportError} from './error.js'; +import {reportError} from './error.js'; import * as state from './state.js'; import * as tooltip from './tooltip.js'; -import {Facing} from './type.js'; +import {ErrorLevel, ErrorType, Facing} from './type.js'; /** * Creates a canvas element for 2D drawing.
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera.js b/chromeos/components/camera_app_ui/resources/js/views/camera.js index ad7b035f..6c28f82 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera.js
@@ -31,6 +31,7 @@ ViewName, } from '../type.js'; import * as util from '../util.js'; +import {windowController} from '../window_controller/window_controller.js'; import {Layout} from './camera/layout.js'; import { // eslint-disable-line no-unused-vars @@ -255,7 +256,7 @@ } }); - browserProxy.addOnMinimizedListener(() => { + windowController.addOnMinimizedListener(() => { this.start(); }); @@ -334,7 +335,7 @@ * @return {boolean} */ isSuspended() { - return this.locked_ || browserProxy.isMinimized() || + return this.locked_ || windowController.isMinimized() || state.get(state.State.SUSPEND) || this.screenOff_ || this.isTabletBackground_(); }
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/layout.js b/chromeos/components/camera_app_ui/resources/js/views/camera/layout.js index e2de15c8..21038d4 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/layout.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/layout.js
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {browserProxy} from '../../browser_proxy/browser_proxy.js'; import { assert, assertInstanceof, @@ -10,6 +9,7 @@ import * as dom from '../../dom.js'; import * as state from '../../state.js'; import {Mode, Resolution} from '../../type.js'; +import {windowController} from '../../window_controller/window_controller.js'; /** * CSS rules. @@ -111,7 +111,7 @@ * Updates the layout for video-size or window-size changes. */ update() { - const fullWindow = browserProxy.isFullscreenOrMaximized(); + const fullWindow = windowController.isFullscreenOrMaximized(); const tall = window.innerHeight > window.innerWidth; state.set(state.State.TABLET_LANDSCAPE, fullWindow && !tall); state.set(state.State.MAX_WND, fullWindow);
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/photo.js b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/photo.js index 9a0f298..2d7c5bd4 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/photo.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/photo.js
@@ -6,11 +6,11 @@ import * as filesystem from '../../../models/file_system.js'; import {DeviceOperator, parseMetadata} from '../../../mojo/device_operator.js'; import {CrosImageCapture} from '../../../mojo/image_capture.js'; -import {PerfEvent} from '../../../perf.js'; import * as state from '../../../state.js'; import * as toast from '../../../toast.js'; import { Facing, // eslint-disable-line no-unused-vars + PerfEvent, Resolution, } from '../../../type.js'; import * as util from '../../../util.js';
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/portrait.js b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/portrait.js index b115884..038f51dd 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/portrait.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/portrait.js
@@ -4,11 +4,11 @@ import {Filenamer} from '../../../models/file_namer.js'; import {CrosImageCapture} from '../../../mojo/image_capture.js'; -import {PerfEvent} from '../../../perf.js'; import * as state from '../../../state.js'; import * as toast from '../../../toast.js'; import { - Facing, // eslint-disable-line no-unused-vars + Facing, // eslint-disable-line no-unused-vars + PerfEvent, Resolution, // eslint-disable-line no-unused-vars } from '../../../type.js'; import * as util from '../../../util.js';
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js index 70a0ce6..878c429 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/mode/video.js
@@ -9,12 +9,12 @@ import { VideoSaver, // eslint-disable-line no-unused-vars } from '../../../models/video_saver.js'; -import {PerfEvent} from '../../../perf.js'; import * as sound from '../../../sound.js'; import * as state from '../../../state.js'; import * as toast from '../../../toast.js'; import { Facing, // eslint-disable-line no-unused-vars + PerfEvent, Resolution, ResolutionList, // eslint-disable-line no-unused-vars } from '../../../type.js';
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/options.js b/chromeos/components/camera_app_ui/resources/js/views/camera/options.js index 15f3fae7..188453d 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/options.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/options.js
@@ -9,9 +9,8 @@ import {DeviceInfoUpdater} from '../../device/device_info_updater.js'; import * as dom from '../../dom.js'; import * as nav from '../../nav.js'; -import {PerfEvent} from '../../perf.js'; import * as state from '../../state.js'; -import {Facing, ViewName} from '../../type.js'; +import {Facing, PerfEvent, ViewName} from '../../type.js'; import * as util from '../../util.js'; /**
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera/preview.js b/chromeos/components/camera_app_ui/resources/js/views/camera/preview.js index 4f2e886..f429a82 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera/preview.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera/preview.js
@@ -8,6 +8,7 @@ import * as nav from '../../nav.js'; import * as state from '../../state.js'; import * as util from '../../util.js'; +import {windowController} from '../../window_controller/window_controller.js'; /** * Creates a controller for the video preview of Camera view. @@ -417,7 +418,7 @@ .then(() => { // Resize window by aspect ratio only if it's not maximized or // fullscreen. - if (browserProxy.isFullscreenOrMaximized()) { + if (windowController.isFullscreenOrMaximized()) { return; } return browserProxy.fitWindow();
diff --git a/chromeos/components/camera_app_ui/resources/js/views/camera_intent.js b/chromeos/components/camera_app_ui/resources/js/views/camera_intent.js index a5bbdeb..ed2b389 100644 --- a/chromeos/components/camera_app_ui/resources/js/views/camera_intent.js +++ b/chromeos/components/camera_app_ui/resources/js/views/camera_intent.js
@@ -167,7 +167,15 @@ }); if (confirmed) { await this.intent_.finish(); - window.close(); + + const appWindow = window['appWindow']; + if (appWindow === null) { + window.close(); + } else { + // For test session, we notify tests and let test close the window for + // us. + await appWindow.notifyClosingItself(); + } return; } this.focus(); // Refocus the visible shutter button for ChromeVox.
diff --git a/chromeos/components/camera_app_ui/resources/js/window_controller/mojo_window_controller.js b/chromeos/components/camera_app_ui/resources/js/window_controller/mojo_window_controller.js new file mode 100644 index 0000000..451d73a --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/js/window_controller/mojo_window_controller.js
@@ -0,0 +1,74 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// eslint-disable-next-line no-unused-vars +import {NotImplementedError} from '../error.js'; + +// eslint-disable-next-line no-unused-vars +import {WindowController} from './window_controller_interface.js'; + +/** + * WindowController which relies on our specific Mojo interface. + * @implements {WindowController} + */ +export class MojoWindowController { + /** + * @public + */ + constructor() {} + + /** @override */ + async minimize() { + throw new NotImplementedError(); + } + + /** @override */ + async maximize() { + throw new NotImplementedError(); + } + + /** @override */ + async restore() { + throw new NotImplementedError(); + } + + /** @override */ + async fullscreen() { + throw new NotImplementedError(); + } + + /** @override */ + async focus() { + throw new NotImplementedError(); + } + + /** @override */ + isMinimized() { + // TODO(980846): Implement the minimization monitor. + return false; + } + + /** @override */ + isFullscreenOrMaximized() { + // TODO(980846): Implement the fullscreen monitor. + return false; + } + + /** @override */ + enable() { + // TODO(980846): Implement by hiding "Camera is in-use" message to user. + } + + /** @override */ + disable() { + // TODO(980846): Implement by showing "Camera is in-use" message to user. + } + + /** @override */ + addOnMinimizedListener(listener) { + // TODO(980846): Remove the method once we migrate to SWA. + } +} + +export const windowController = new MojoWindowController();
diff --git a/chromeos/components/camera_app_ui/resources/js/window_controller/window_controller.js b/chromeos/components/camera_app_ui/resources/js/window_controller/window_controller.js new file mode 100644 index 0000000..764c333 --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/js/window_controller/window_controller.js
@@ -0,0 +1,107 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// eslint-disable-next-line no-unused-vars +import {WindowController} from './window_controller_interface.js'; + +/** + * Changes the state of the current App window. + * @param {function(!chrome.app.window.AppWindow): boolean} predicate The + * function to determine whether the window is in the target state. + * @param {function(!chrome.app.window.AppWindow): !chrome.events.Event} + * getEventTarget The function to get the target for adding the event + * listener. + * @param {function(!chrome.app.window.AppWindow): undefined} changeState The + * function to trigger the state change of the window. + * @return {!Promise<undefined>} A completion Promise that will be resolved + * when the window is in the target state. + */ +function changeWindowState(predicate, getEventTarget, changeState) { + const win = chrome.app.window.current(); + const eventTarget = getEventTarget(win); + return new Promise((resolve) => { + if (predicate(win)) { + resolve(); + return; + } + const onStateChanged = () => { + eventTarget.removeListener(onStateChanged); + resolve(); + }; + eventTarget.addListener(onStateChanged); + changeState(win); + }); +} + +/** + * WindowController which mainly relies on Chrome AppWindow API. + * @implements {WindowController} + */ +export class ChromeWindowController { + /** @override */ + async minimize() { + changeWindowState( + (w) => w.isMinimized(), (w) => w.onMinimized, (w) => w.minimize()); + } + + /** @override */ + async maximize() { + changeWindowState( + (w) => w.isMaximized(), (w) => w.onMaximized, (w) => w.maximize()); + } + + /** @override */ + async restore() { + changeWindowState( + (w) => !w.isMaximized() && !w.isMinimized() && !w.isFullscreen(), + (w) => w.onRestored, (w) => w.restore()); + chrome.app.window.current().show(); + } + + /** @override */ + async fullscreen() { + changeWindowState( + (w) => w.isFullscreen(), (w) => w.onFullscreened, + (w) => w.fullscreen()); + } + + /** @override */ + async focus() { + changeWindowState( + (w) => w.contentWindow.document.hasFocus(), + ({contentWindow: cw}) => ({ + addListener: cw.addEventListener.bind(cw, 'focus'), + removeListener: cw.removeEventListener.bind(cw, 'focus'), + }), + (w) => w.focus()); + } + + /** @override */ + isMinimized() { + return chrome.app.window.current().isMinimized(); + } + + /** @override */ + isFullscreenOrMaximized() { + return chrome.app.window.current().outerBounds.width >= screen.width || + chrome.app.window.current().outerBounds.height >= screen.height; + } + + /** @override */ + enable() { + chrome.app.window.current().show(); + } + + /** @override */ + disable() { + chrome.app.window.current().hide(); + } + + /** @override */ + addOnMinimizedListener(listener) { + chrome.app.window.current().onMinimized.addListener(listener); + } +} + +export const windowController = new ChromeWindowController();
diff --git a/chromeos/components/camera_app_ui/resources/js/window_controller/window_controller_interface.js b/chromeos/components/camera_app_ui/resources/js/window_controller/window_controller_interface.js new file mode 100644 index 0000000..7ac2ec4 --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/js/window_controller/window_controller_interface.js
@@ -0,0 +1,77 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * Controller to get/set/listener for window state. + * @interface + */ +export class WindowController { + /** + * Minimizes the window. + * @return {!Promise} + * @abstract + */ + async minimize() {} + + /** + * Maximizes the window. + * @return {!Promise} + * @abstract + */ + async maximize() {} + + /** + * Restores the window and leaves maximized/minimized/fullscreen state. + * @return {!Promise} + * @abstract + */ + async restore() {} + + /** + * Makes the window fullscreen. + * @return {!Promise} + * @abstract + */ + async fullscreen() {} + + /** + * Focuses the window. + * @return {!Promise} + * @abstract + */ + async focus() {} + + /** + * Returns true if the window is currently minimized. + * @return {boolean} + * @abstract + */ + isMinimized() {} + + /** + * Returns true if the window is currently fullscreen or maximized. + * @return {boolean} + * @abstract + */ + isFullscreenOrMaximized() {} + + /** + * Enables the window. + * @abstract + */ + enable() {} + + /** + * Disables the window. + * @abstract + */ + disable() {} + + /** + * Adds listener for window minimization event. + * @param {function(): void} listener + * @abstract + */ + addOnMinimizedListener(listener) {} +}
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ar.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ar.xtb index 361a430f..cc715e6a 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ar.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ar.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="ar"> <translation id="1276998909102132017">صور المعرض</translation> <translation id="1430915738399379752">طباعة</translation> +<translation id="1473110567575736769">مؤقّت لمدة 3 ثوانٍ</translation> <translation id="1620510694547887537">الكاميرا</translation> <translation id="1627744224761163218">4 × 4</translation> <translation id="1664224225747386870">لم يتمّ تسجيل أيّ بيانات.</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">تعذّر التقاط صور أشخاص</translation> <translation id="3569311554794739032">هل تريد فعلاً إزالة <ph name="FILE" />؟</translation> <translation id="3810838688059735925">الفيديوهات</translation> +<translation id="4000398125663085899">سيتم الآن حفظ الصور والفيديوهات الجديدة في مجلد في تطبيق "الملفات": ملفاتي > الكاميرا.</translation> <translation id="4118525110028899586">إيقاف التسجيل مؤقتًا</translation> <translation id="4279490309300973883">النسخ المطابق</translation> <translation id="4329152592498422850">التبديل لالتقاط صورة مربّعة</translation> @@ -63,6 +65,7 @@ <translation id="6965382102122355670">حسنًا</translation> <translation id="698156982839284926">3 ثوانٍ</translation> <translation id="712848772518857951">هل تريد فعلاً إزالة <ph name="COUNT" /> من العناصر؟</translation> +<translation id="7134221860976209830">مؤقّت لمدة 10 ثوانٍ</translation> <translation id="7243947652761655814">درجة دقة الفيديو</translation> <translation id="7337660886763914220">أخطاء نظام الملفات.</translation> <translation id="7557677699350329807">التبديل إلى الكاميرا التالية</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr.xtb index bffb162..23943a9 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_fr.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="fr"> <translation id="1276998909102132017">Images de la galerie</translation> <translation id="1430915738399379752">Imprimer</translation> +<translation id="1473110567575736769">Minuteur de 3 secondes</translation> <translation id="1620510694547887537">Caméra</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Aucune donnée enregistrée</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Impossible de prendre une photo en mode portrait</translation> <translation id="3569311554794739032">Voulez-vous vraiment supprimer <ph name="FILE" /> ?</translation> <translation id="3810838688059735925">Vidéo</translation> +<translation id="4000398125663085899">Les nouvelles photos et vidéos seront désormais enregistrées dans un dossier de l'application Fichiers : Mes fichiers > Appareil photo.</translation> <translation id="4118525110028899586">Suspendre l'enregistrement</translation> <translation id="4279490309300973883">Mise en miroir</translation> <translation id="4329152592498422850">Bouton permettant de prendre une photo carrée</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="698156982839284926">3 secondes</translation> <translation id="712848772518857951">Voulez-vous vraiment supprimer <ph name="COUNT" /> éléments ?</translation> +<translation id="7134221860976209830">Minuteur de 10 secondes</translation> <translation id="7243947652761655814">Résolution vidéo</translation> <translation id="7337660886763914220">Erreurs du système de fichiers.</translation> <translation id="7557677699350329807">Passer à la caméra suivante</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_gl.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_gl.xtb index 13b584c..5d5c1b79 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_gl.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_gl.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="gl"> <translation id="1276998909102132017">Imaxes da galería</translation> <translation id="1430915738399379752">Imprimir</translation> +<translation id="1473110567575736769">Temporizador de 3 segundos</translation> <translation id="1620510694547887537">Cámara</translation> <translation id="1627744224761163218">4 × 4</translation> <translation id="1664224225747386870">Non se gravou nada</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Non se puido facer a foto de retrato</translation> <translation id="3569311554794739032">Seguro que queres eliminar <ph name="FILE" />?</translation> <translation id="3810838688059735925">Vídeo</translation> +<translation id="4000398125663085899">Agora as fotos e os vídeos novos gardaranse nun cartafol da aplicación Ficheiros: Os meus ficheiros > Cámara</translation> <translation id="4118525110028899586">Pór gravación en pausa</translation> <translation id="4279490309300973883">Proxección</translation> <translation id="4329152592498422850">Cambiar para facer unha foto cadrada</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">Aceptar</translation> <translation id="698156982839284926">3 segundos</translation> <translation id="712848772518857951">Seguro que queres quitar os <ph name="COUNT" /> elementos?</translation> +<translation id="7134221860976209830">Temporizador de 10 segundos</translation> <translation id="7243947652761655814">Resolución de vídeo</translation> <translation id="7337660886763914220">Producíronse erros relacionados co sistema de ficheiros.</translation> <translation id="7557677699350329807">Cambiar á seguinte cámara</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_id.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_id.xtb index 2d0e158..0ba719e9 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_id.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_id.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="id"> <translation id="1276998909102132017">Foto galeri</translation> <translation id="1430915738399379752">Cetak</translation> +<translation id="1473110567575736769">Timer 3 detik</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Tidak ada yang direkam</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Tidak dapat mengambil foto potret</translation> <translation id="3569311554794739032">Yakin ingin menghapus <ph name="FILE" />?</translation> <translation id="3810838688059735925">Video</translation> +<translation id="4000398125663085899">Foto dan video baru kini akan disimpan ke folder di aplikasi File: File saya > Kamera.</translation> <translation id="4118525110028899586">Jeda rekaman</translation> <translation id="4279490309300973883">Mencerminkan</translation> <translation id="4329152592498422850">Beralih ke mode mengambil foto persegi</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">Oke</translation> <translation id="698156982839284926">3 detik</translation> <translation id="712848772518857951">Yakin ingin menghapus <ph name="COUNT" /> item?</translation> +<translation id="7134221860976209830">Timer 10 detik</translation> <translation id="7243947652761655814">Resolusi video</translation> <translation id="7337660886763914220">Error sistem file.</translation> <translation id="7557677699350329807">Beralih ke kamera berikutnya</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_kn.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_kn.xtb index 84d5cd77..ac8f31d 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_kn.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_kn.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="kn"> <translation id="1276998909102132017">ಗ್ಯಾಲರಿ ಚಿತ್ರಗಳು</translation> <translation id="1430915738399379752">ಮುದ್ರಿಸು</translation> +<translation id="1473110567575736769">3 ಸೆಕೆಂಡುಗಳ ಟೈಮರ್</translation> <translation id="1620510694547887537">ಕ್ಯಾಮರಾ</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">ಏನನ್ನೂ ರೆಕಾರ್ಡ್ ಮಾಡಲಾಗಿಲ್ಲ</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">ಪೋರ್ಟ್ರೇಟ್ ಫೋಟೋ ತೆಗೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation> <translation id="3569311554794739032">ನೀವು ನಿಜವಾಗಿಯೂ <ph name="FILE" /> ತೆಗೆದುಹಾಕಲು ಬಯಸುವಿರಾ?</translation> <translation id="3810838688059735925">ವೀಡಿಯೊ</translation> +<translation id="4000398125663085899">ಹೊಸ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಈಗ Files ಆ್ಯಪ್ನಲ್ಲಿರುವ ಫೋಲ್ಡರ್ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ: ನನ್ನ ಫೈಲ್ಗಳು > ಕ್ಯಾಮರಾ</translation> <translation id="4118525110028899586">ರೆಕಾರ್ಡಿಂಗ್ ವಿರಾಮಗೊಳಿಸಿ</translation> <translation id="4279490309300973883">ಪ್ರತಿಬಿಂಬಿಸುವಿಕೆ</translation> <translation id="4329152592498422850">ಚೌಕಾಕಾರದ ಫೋಟೋ ತೆಗೆಯಲು ಬದಲಾಯಿಸಿ</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">ಸರಿ</translation> <translation id="698156982839284926">3 ಸೆಕೆಂಡುಗಳು</translation> <translation id="712848772518857951">ನೀವು ನಿಜವಾಗಿಯೂ <ph name="COUNT" /> ಐಟಂಗಳನ್ನು ತೆಗೆದುಹಾಕಲು ಬಯಸುವಿರಾ?</translation> +<translation id="7134221860976209830">10 ಸೆಕೆಂಡುಗಳ ಟೈಮರ್</translation> <translation id="7243947652761655814">ವೀಡಿಯೊ ರೆಸಲ್ಯೂಷನ್</translation> <translation id="7337660886763914220">ಫೈಲ್ ಸಿಸ್ಟಂ ದೋಷಗಳು.</translation> <translation id="7557677699350329807">ಮುಂದಿನ ಕ್ಯಾಮರಾಗೆ ಬದಲಿಸಿ</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb index c046f31..a8939d79 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ne.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="ne"> <translation id="1276998909102132017">ग्यालेरीका छविहरू</translation> <translation id="1430915738399379752">प्रिन्ट गर्नुहोस्</translation> +<translation id="1473110567575736769">३ सेकेन्डको टाइमर</translation> <translation id="1620510694547887537">क्यामेरा</translation> <translation id="1627744224761163218">४ x ४</translation> <translation id="1664224225747386870">केही पनि रेकर्ड गरिएन</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">पोर्ट्रेट तस्बिर खिच्न सकिएन</translation> <translation id="3569311554794739032">तपाईंले <ph name="FILE" /> हटाउन खोज्नुभएकै हो त?</translation> <translation id="3810838688059735925">भिडियो</translation> +<translation id="4000398125663085899">अब नयाँ फोटो तथा भिडियोहरू Files एपको फोल्डर अर्थात् "मेरा फाइल > क्यामेरा" मा सुरक्षित गरिने छन्</translation> <translation id="4118525110028899586">रेकर्डिङ पज गर्नुहोस्</translation> <translation id="4279490309300973883">प्रतिबिम्ब गर्दै</translation> <translation id="4329152592498422850">वर्गाकार तस्बिर खिच्न थाल्नुहोस्</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">ठिक छ</translation> <translation id="698156982839284926">३ सेकेन्ड</translation> <translation id="712848772518857951">तपाईंले <ph name="COUNT" /> वस्तुहरू हटाउन खोज्नुभएकै हो त?</translation> +<translation id="7134221860976209830">१० सेकेन्डको टाइमर</translation> <translation id="7243947652761655814">भिडियोको रिजोल्युसन</translation> <translation id="7337660886763914220">फाइल प्रणालीसम्बन्धी त्रुटिहरू।</translation> <translation id="7557677699350329807">अर्को क्यामेरा प्रयोग गर्नुहोस्</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ru.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ru.xtb index 544827e9..f7340a5 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_ru.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_ru.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="ru"> <translation id="1276998909102132017">Изображения в галерее</translation> <translation id="1430915738399379752">Печать</translation> +<translation id="1473110567575736769">Таймер на 3 сек.</translation> <translation id="1620510694547887537">Камера</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Ничего не записано.</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Не удалось сделать вертикальное фото.</translation> <translation id="3569311554794739032">Удалить файл <ph name="FILE" />?</translation> <translation id="3810838688059735925">Видео</translation> +<translation id="4000398125663085899">Для них предназначена новая папка в приложении "Файлы" (Мои файлы > Камера).</translation> <translation id="4118525110028899586">Приостановить запись</translation> <translation id="4279490309300973883">Отражение</translation> <translation id="4329152592498422850">Перейти к созданию квадратного фото</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">ОК</translation> <translation id="698156982839284926">3 секунды</translation> <translation id="712848772518857951">Удалить выбранные файлы (<ph name="COUNT" />)?</translation> +<translation id="7134221860976209830">Таймер на 10 сек.</translation> <translation id="7243947652761655814">Разрешение видео</translation> <translation id="7337660886763914220">Ошибки файловой системы.</translation> <translation id="7557677699350329807">Переключиться на следующую камеру</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb index cac2c44..2d261887 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_te.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="te"> <translation id="1276998909102132017">గ్యాలరీ చిత్రాలు</translation> <translation id="1430915738399379752">ముద్రించు</translation> +<translation id="1473110567575736769">3 సెకన్ల టైమర్</translation> <translation id="1620510694547887537">కెమెరా</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">ఏదీ రికార్డ్ చేయలేదు</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">పోర్ట్రెయిట్ ఫోటోను తీయలేకపోయింది</translation> <translation id="3569311554794739032">మీరు <ph name="FILE" />ను ఖచ్చితంగా తీసివేయాలనుకుంటున్నారా?</translation> <translation id="3810838688059735925">వీడియో</translation> +<translation id="4000398125663085899">కొత్త ఫోటోలు, వీడియోలు ఇప్పుడు Files యాప్లోని ఫోల్డర్లో సేవ్ చేయబడతాయి: నా ఫైల్లు > కెమెరా</translation> <translation id="4118525110028899586">రికార్డింగ్ను పాజ్ చేయి</translation> <translation id="4279490309300973883">మిర్రరింగ్</translation> <translation id="4329152592498422850">చతురస్ర ఆకారంలో ఫోటోను తీసేలా మార్చు</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">సరే</translation> <translation id="698156982839284926">3 సెకన్లు</translation> <translation id="712848772518857951">మీరు <ph name="COUNT" /> అంశాలను ఖచ్చితంగా తీసివేయాలనుకుంటున్నారా?</translation> +<translation id="7134221860976209830">10 సెకన్ల టైమర్</translation> <translation id="7243947652761655814">వీడియో రిజల్యూషన్</translation> <translation id="7337660886763914220">ఫైల్ సిస్టమ్ ఎర్రర్లు.</translation> <translation id="7557677699350329807">తర్వాతి కెమెరాకు మార్చు</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_tr.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_tr.xtb index 5f87d1b..01e7028 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_tr.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_tr.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="tr"> <translation id="1276998909102132017">Galeri resimleri</translation> <translation id="1430915738399379752">Yazdır</translation> +<translation id="1473110567575736769">3 saniye zamanlayıcı</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Hiçbir şey kaydedilmedi</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Portre fotoğrafı çekilemiyor</translation> <translation id="3569311554794739032"><ph name="FILE" /> dosyasını kaldırmak istediğinizden emin misiniz?</translation> <translation id="3810838688059735925">Video</translation> +<translation id="4000398125663085899">Artık yeni fotoğraflar ve videolar, Dosyalar uygulamasında bir klasöre kaydedilecek: Dosyalarım > Kamera</translation> <translation id="4118525110028899586">Kaydı duraklat</translation> <translation id="4279490309300973883">Yansıtılıyor</translation> <translation id="4329152592498422850">Kare fotoğraf çekme moduna geç</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">Tamam</translation> <translation id="698156982839284926">3 saniye</translation> <translation id="712848772518857951"><ph name="COUNT" /> öğeyi gerçekten kaldırmak istiyor musunuz?</translation> +<translation id="7134221860976209830">10 saniyelik zamanlayıcı</translation> <translation id="7243947652761655814">Video çözünürlüğü</translation> <translation id="7337660886763914220">Dosya sistemi hataları.</translation> <translation id="7557677699350329807">Sonraki kameraya geç</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_uz.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_uz.xtb index 2b942cc..c34ee294 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_uz.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_uz.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="uz"> <translation id="1276998909102132017">Galereyadagi rasmlar</translation> <translation id="1430915738399379752">Chop etish</translation> +<translation id="1473110567575736769">3 soniyalik taymer</translation> <translation id="1620510694547887537">Kamera</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Hech narsa yozib olinmadi</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Portret rejimida suratga olinmadi</translation> <translation id="3569311554794739032"><ph name="FILE" /> olib tashlansinmi?</translation> <translation id="3810838688059735925">Video</translation> +<translation id="4000398125663085899">Yangi rasm va videolar endi Files ilovasidagi jildda saqlanadi: Fayllarim > Kamera.</translation> <translation id="4118525110028899586">Pauza qilish</translation> <translation id="4279490309300973883">Ekran nusxasini boshqa ekranga uzatish</translation> <translation id="4329152592498422850">Kvadrat shaklida suratga olish</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="698156982839284926">3 soniya</translation> <translation id="712848772518857951"><ph name="COUNT" /> ta element olib tashlansinmi?</translation> +<translation id="7134221860976209830">10 soniyalik taymer</translation> <translation id="7243947652761655814">Video tiniqligi</translation> <translation id="7337660886763914220">Fayllar tizimiga oid xatoliklar.</translation> <translation id="7557677699350329807">Keyingi kameraga almashtirish</translation>
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_vi.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_vi.xtb index f853ef1c7..664750b 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_vi.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_vi.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="vi"> <translation id="1276998909102132017">Ảnh trong thư viện</translation> <translation id="1430915738399379752">In</translation> +<translation id="1473110567575736769">Đồng hồ hẹn giờ 3 giây</translation> <translation id="1620510694547887537">Máy ảnh</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Chưa ghi dữ liệu nào</translation> @@ -30,6 +31,7 @@ <translation id="3517926952904427380">Không thể chụp ảnh chân dung</translation> <translation id="3569311554794739032">Bạn có thực sự muốn xóa <ph name="FILE" /> không?</translation> <translation id="3810838688059735925">Video</translation> +<translation id="4000398125663085899">Giờ đây, các ảnh và video mới sẽ được lưu vào một thư mục trong ứng dụng Files: Tệp của tôi > Máy ảnh</translation> <translation id="4118525110028899586">Tạm dừng quay</translation> <translation id="4279490309300973883">Đang phản chiếu</translation> <translation id="4329152592498422850">Chuyển sang chụp ảnh vuông</translation> @@ -62,6 +64,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="698156982839284926">3 giây</translation> <translation id="712848772518857951">Bạn có thực sự muốn xóa <ph name="COUNT" /> mục không?</translation> +<translation id="7134221860976209830">Đồng hồ hẹn giờ 10 giây</translation> <translation id="7243947652761655814">Độ phân giải video</translation> <translation id="7337660886763914220">Lỗi hệ thống tệp.</translation> <translation id="7557677699350329807">Chuyển sang máy ảnh tiếp theo</translation>
diff --git a/chromeos/components/camera_app_ui/resources/views/test.html b/chromeos/components/camera_app_ui/resources/views/test.html new file mode 100644 index 0000000..82c75d87 --- /dev/null +++ b/chromeos/components/camera_app_ui/resources/views/test.html
@@ -0,0 +1,8 @@ +<!doctype html> +<!-- Copyright 2020 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> +<html> + <head> + </head> +</html>
diff --git a/chromeos/components/camera_app_ui/url_constants.cc b/chromeos/components/camera_app_ui/url_constants.cc index 6a25ec23..8cd5969 100644 --- a/chromeos/components/camera_app_ui/url_constants.cc +++ b/chromeos/components/camera_app_ui/url_constants.cc
@@ -7,8 +7,7 @@ namespace chromeos { const char kChromeUICameraAppHost[] = "camera-app"; -const char kChromeUICameraAppMainURL[] = - "chrome://camera-app/views/main.html"; +const char kChromeUICameraAppMainURL[] = "chrome://camera-app/views/main.html"; const char kChromeUICameraAppURL[] = "chrome://camera-app/"; } // namespace chromeos
diff --git a/chromeos/components/cdm_factory_daemon/output_protection_impl.cc b/chromeos/components/cdm_factory_daemon/output_protection_impl.cc index 54e09bf..542633f8 100644 --- a/chromeos/components/cdm_factory_daemon/output_protection_impl.cc +++ b/chromeos/components/cdm_factory_daemon/output_protection_impl.cc
@@ -200,12 +200,17 @@ return; } - // We never lower the HDCP level with a new request. - if (desired_protection == ProtectionType::HDCP_TYPE_0) { - if (!desired_protection_mask_) + // We just pass through what the client requests. + switch (desired_protection) { + case ProtectionType::HDCP_TYPE_0: desired_protection_mask_ = display::CONTENT_PROTECTION_METHOD_HDCP_TYPE_0; - } else if (desired_protection == ProtectionType::HDCP_TYPE_1) { - desired_protection_mask_ = display::CONTENT_PROTECTION_METHOD_HDCP_TYPE_1; + break; + case ProtectionType::HDCP_TYPE_1: + desired_protection_mask_ = display::CONTENT_PROTECTION_METHOD_HDCP_TYPE_1; + break; + case ProtectionType::NONE: + desired_protection_mask_ = display::CONTENT_PROTECTION_METHOD_NONE; + break; } // We want to copy this since we will manipulate it.
diff --git a/chromeos/components/cdm_factory_daemon/output_protection_impl_unittest.cc b/chromeos/components/cdm_factory_daemon/output_protection_impl_unittest.cc index 5ebe6753..d8e8efd 100644 --- a/chromeos/components/cdm_factory_daemon/output_protection_impl_unittest.cc +++ b/chromeos/components/cdm_factory_daemon/output_protection_impl_unittest.cc
@@ -189,18 +189,18 @@ base::RunLoop().RunUntilIdle(); } -TEST_F(OutputProtectionImplTest, ApplyAggregateTypes) { +TEST_F(OutputProtectionImplTest, ApplyDoesNotAggregateTypes) { UpdateDisplays(1); EXPECT_CALL(*delegate_, cached_displays()) .WillOnce(ReturnRef(cached_displays_)); OutputProtection::ProtectionType applied_types[] = { OutputProtection::ProtectionType::HDCP_TYPE_0, OutputProtection::ProtectionType::HDCP_TYPE_1, - OutputProtection::ProtectionType::HDCP_TYPE_0}; + OutputProtection::ProtectionType::NONE}; display::ContentProtectionMethod expected_types[] = { display::CONTENT_PROTECTION_METHOD_HDCP_TYPE_0, display::CONTENT_PROTECTION_METHOD_HDCP_TYPE_1, - display::CONTENT_PROTECTION_METHOD_HDCP_TYPE_1}; + display::CONTENT_PROTECTION_METHOD_NONE}; for (size_t i = 0; i < base::size(applied_types); ++i) { ExpectProtectionCall(kDisplayIds[0], expected_types[i], true);
diff --git a/chromeos/components/diagnostics_ui/backend/system_data_provider.cc b/chromeos/components/diagnostics_ui/backend/system_data_provider.cc index 20e36701..c73d716 100644 --- a/chromeos/components/diagnostics_ui/backend/system_data_provider.cc +++ b/chromeos/components/diagnostics_ui/backend/system_data_provider.cc
@@ -222,6 +222,11 @@ base::Unretained(this), proto)); } +void SystemDataProvider::BindInterface( + mojo::PendingReceiver<mojom::SystemDataProvider> pending_receiver) { + receiver_.Bind(std::move(pending_receiver)); +} + void SystemDataProvider::SetBatteryChargeStatusTimerForTesting( std::unique_ptr<base::RepeatingTimer> timer) { battery_charge_status_timer_ = std::move(timer);
diff --git a/chromeos/components/diagnostics_ui/backend/system_data_provider.h b/chromeos/components/diagnostics_ui/backend/system_data_provider.h index 3b58ba92..db28941 100644 --- a/chromeos/components/diagnostics_ui/backend/system_data_provider.h +++ b/chromeos/components/diagnostics_ui/backend/system_data_provider.h
@@ -11,6 +11,8 @@ #include "chromeos/components/diagnostics_ui/mojom/system_data_provider.mojom.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/services/cros_healthd/public/mojom/cros_healthd.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote_set.h" @@ -45,6 +47,9 @@ // PowerManagerClient::Observer: void PowerChanged(const power_manager::PowerSupplyProperties& proto) override; + void BindInterface( + mojo::PendingReceiver<mojom::SystemDataProvider> pending_receiver); + void SetBatteryChargeStatusTimerForTesting( std::unique_ptr<base::RepeatingTimer> timer); @@ -96,6 +101,8 @@ mojo::RemoteSet<mojom::BatteryHealthObserver> battery_health_observers_; mojo::RemoteSet<mojom::MemoryUsageObserver> memory_usage_observers_; + mojo::Receiver<mojom::SystemDataProvider> receiver_{this}; + std::unique_ptr<base::RepeatingTimer> battery_charge_status_timer_; std::unique_ptr<base::RepeatingTimer> battery_health_timer_; std::unique_ptr<base::RepeatingTimer> memory_usage_timer_;
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc index cc94f49..7694c6e 100644 --- a/chromeos/constants/chromeos_features.cc +++ b/chromeos/constants/chromeos_features.cc
@@ -433,10 +433,6 @@ const base::Feature kOsSettingsPolymer3{"OsSettingsPolymer3", base::FEATURE_DISABLED_BY_DEFAULT}; -// Controls whether to enable the Parental Controls section of settings. -const base::Feature kParentalControlsSettings{ - "ChromeOSParentalControlsSettings", base::FEATURE_ENABLED_BY_DEFAULT}; - // Provides a UI for users to view information about their Android phone // and perform phone-side actions within Chrome OS. const base::Feature kPhoneHub{"PhoneHub", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -726,10 +722,6 @@ return base::FeatureList::IsEnabled(kClipboardHistorySimpleRender); } -bool IsParentalControlsSettingsEnabled() { - return base::FeatureList::IsEnabled(kParentalControlsSettings); -} - bool IsPhoneHubEnabled() { return base::FeatureList::IsEnabled(kPhoneHub); }
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h index 9ad2e9f..a2612f43 100644 --- a/chromeos/constants/chromeos_features.h +++ b/chromeos/constants/chromeos_features.h
@@ -196,8 +196,6 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kOsSettingsPolymer3; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) -extern const base::Feature kParentalControlsSettings; -COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kPhoneHub; COMPONENT_EXPORT(CHROMEOS_CONSTANTS) extern const base::Feature kPhoneHubUseBle; @@ -317,7 +315,6 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsClipboardHistorySimpleRenderEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsOobeScreensPriorityEnabled(); -COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsParentalControlsSettingsEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPhoneHubEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPhoneHubUseBleEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPinAutosubmitFeatureEnabled();
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom index cf99be2..63589d1f 100644 --- a/chromeos/crosapi/mojom/crosapi.mojom +++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -11,6 +11,7 @@ import "chromeos/crosapi/mojom/screen_manager.mojom"; import "chromeos/crosapi/mojom/select_file.mojom"; import "mojo/public/mojom/base/token.mojom"; +import "mojo/public/mojom/base/values.mojom"; import "services/device/public/mojom/hid.mojom"; // LacrosInfo is a set of parameters passed to ash from lacros-chrome @@ -173,4 +174,12 @@ // Opens a new window in lacros-chrome with, currently, the last used profile. // The callback is called on the command execution. NewWindow@1() => (); + + // Returns lacros feedback data used for generating feedback report in + // a dictionary object, each entry representing a log entry in the feedback + // report, for example, "Lacros crash_report_ids: xxx", + // "Lacros extensions: xxx", "Lacros mem_usage: xxx", etc. + [MinVersion=6] + GetFeedbackData@3() => ( + mojo_base.mojom.DictionaryValue feedback_info); };
diff --git a/chromeos/lacros/BUILD.gn b/chromeos/lacros/BUILD.gn index 4e3f0c7..c28afbc 100644 --- a/chromeos/lacros/BUILD.gn +++ b/chromeos/lacros/BUILD.gn
@@ -18,6 +18,7 @@ "//mojo/public/cpp/bindings", ] sources = [ + "get_feedback_data_callback.h", "lacros_chrome_service_delegate.h", "lacros_chrome_service_impl.cc", "lacros_chrome_service_impl.h",
diff --git a/chromeos/lacros/get_feedback_data_callback.h b/chromeos/lacros/get_feedback_data_callback.h new file mode 100644 index 0000000..0e327c1 --- /dev/null +++ b/chromeos/lacros/get_feedback_data_callback.h
@@ -0,0 +1,15 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMEOS_LACROS_GET_FEEDBACK_DATA_CALLBACK_H_ +#define CHROMEOS_LACROS_GET_FEEDBACK_DATA_CALLBACK_H_ + +#include "base/callback.h" +#include "base/values.h" + +// Callback used by GetFeedbackData crosapi and all the downstream classes +// that propagate GetFeedbackData call for getting lacros feedback data. +using GetFeedbackDataCallback = base::OnceCallback<void(base::Value)>; + +#endif // CHROMEOS_LACROS_GET_FEEDBACK_DATA_CALLBACK_H_
diff --git a/chromeos/lacros/lacros_chrome_service_delegate.h b/chromeos/lacros/lacros_chrome_service_delegate.h index 4bfaba1..82d49539 100644 --- a/chromeos/lacros/lacros_chrome_service_delegate.h +++ b/chromeos/lacros/lacros_chrome_service_delegate.h
@@ -7,6 +7,8 @@ #include <string> +#include "chromeos/lacros/get_feedback_data_callback.h" + namespace chromeos { // Interface to inject Chrome dependent behavior into LacrosChromeServiceImpl @@ -23,6 +25,9 @@ // {browser version} {channel} // For example, "87.0.0.1 dev", "86.0.4240.38 beta". virtual std::string GetChromeVersion() = 0; + + // Gets lacros feedback data. + virtual void GetFeedbackData(GetFeedbackDataCallback callback) = 0; }; } // namespace chromeos
diff --git a/chromeos/lacros/lacros_chrome_service_impl.cc b/chromeos/lacros/lacros_chrome_service_impl.cc index 5dab8dc..84d6dce 100644 --- a/chromeos/lacros/lacros_chrome_service_impl.cc +++ b/chromeos/lacros/lacros_chrome_service_impl.cc
@@ -75,6 +75,13 @@ std::move(callback)); } + void GetFeedbackData(GetFeedbackDataCallback callback) override { + owner_sequence_->PostTask( + FROM_HERE, + base::BindOnce(&LacrosChromeServiceImpl::GetFeedbackDataAffineSequence, + owner_, std::move(callback))); + } + // Unlike most of other methods of this class, this is called on the // affined thread. Specifically, it is intended to be called before starting // the message pumping of the affined thread to pass the initialization @@ -388,6 +395,12 @@ delegate_->NewWindow(); } +void LacrosChromeServiceImpl::GetFeedbackDataAffineSequence( + GetFeedbackDataCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(affine_sequence_checker_); + delegate_->GetFeedbackData(std::move(callback)); +} + int LacrosChromeServiceImpl::AshChromeServiceVersion() { if (g_disable_all_crosapi_for_tests) return -1;
diff --git a/chromeos/lacros/lacros_chrome_service_impl.h b/chromeos/lacros/lacros_chrome_service_impl.h index d8f48d9..715019ef 100644 --- a/chromeos/lacros/lacros_chrome_service_impl.h +++ b/chromeos/lacros/lacros_chrome_service_impl.h
@@ -19,6 +19,7 @@ #include "chromeos/crosapi/mojom/message_center.mojom.h" #include "chromeos/crosapi/mojom/screen_manager.mojom.h" #include "chromeos/crosapi/mojom/select_file.mojom.h" +#include "chromeos/lacros/get_feedback_data_callback.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -180,6 +181,9 @@ // Creates a new window on the affine sequence. void NewWindowAffineSequence(); + // Gets feedback data on the affine sequence. + void GetFeedbackDataAffineSequence(GetFeedbackDataCallback callback); + // Returns ash's version of the AshChromeService mojo interface version. This // determines which interface methods are available. This is safe to call from // any sequence. This can only be called after BindReceiver().
diff --git a/chromeos/profiles/orderfile.newest.txt b/chromeos/profiles/orderfile.newest.txt index 96a5537f..9069250c 100644 --- a/chromeos/profiles/orderfile.newest.txt +++ b/chromeos/profiles/orderfile.newest.txt
@@ -1 +1 @@ -chromeos-chrome-orderfile-field-87-4277.0-1602498224-benchmark-87.0.4280.19-r1.orderfile.xz +chromeos-chrome-orderfile-field-87-4277.0-1602498224-benchmark-87.0.4280.20-r1.orderfile.xz
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc index 5e51a71..ff6a712 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.cc +++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -185,7 +185,8 @@ std::unique_ptr<AssistantManagerServiceDelegate> delegate, std::unique_ptr<network::PendingSharedURLLoaderFactory> pending_url_loader_factory, - base::Optional<std::string> s3_server_uri_override) + base::Optional<std::string> s3_server_uri_override, + base::Optional<std::string> device_id_override) : media_session_(std::make_unique<AssistantMediaSession>(this)), action_module_(std::make_unique<action::CrosActionModule>( this, @@ -197,7 +198,8 @@ context_(context), delegate_(std::move(delegate)), background_thread_("background thread"), - libassistant_config_(CreateLibAssistantConfig(s3_server_uri_override)), + libassistant_config_( + CreateLibAssistantConfig(s3_server_uri_override, device_id_override)), weak_factory_(this) { background_thread_.Start();
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.h b/chromeos/services/assistant/assistant_manager_service_impl.h index ff05a476..236cb585 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.h +++ b/chromeos/services/assistant/assistant_manager_service_impl.h
@@ -111,7 +111,8 @@ std::unique_ptr<AssistantManagerServiceDelegate> delegate, std::unique_ptr<network::PendingSharedURLLoaderFactory> pending_url_loader_factory, - base::Optional<std::string> s3_server_uri_override); + base::Optional<std::string> s3_server_uri_override, + base::Optional<std::string> device_id_override); ~AssistantManagerServiceImpl() override;
diff --git a/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc b/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc index a5c6d1c..17e5ced 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc +++ b/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/public/cpp/assistant/controller/assistant_alarm_timer_controller.h" #include "base/json/json_reader.h" +#include "base/optional.h" #include "base/test/bind_test_util.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" @@ -179,7 +180,8 @@ assistant_manager_service_ = std::make_unique<AssistantManagerServiceImpl>( service_context_.get(), std::move(delegate), - shared_url_loader_factory_->Clone(), s3_server_uri_override); + shared_url_loader_factory_->Clone(), s3_server_uri_override, + /*device_id_override=*/base::nullopt); } void TearDown() override {
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc index cb28280..52993fb 100644 --- a/chromeos/services/assistant/service.cc +++ b/chromeos/services/assistant/service.cc
@@ -76,6 +76,9 @@ // Testing override for the URI used to contact the s3 server. const char* g_s3_server_uri_override = nullptr; +// Testing override for the device-id used by Libassistant to identify this +// device. +const char* g_device_id_override = nullptr; AssistantStatus ToAssistantStatus(AssistantManagerService::State state) { using State = AssistantManagerService::State; @@ -96,6 +99,12 @@ return g_s3_server_uri_override; return base::nullopt; } + +base::Optional<std::string> GetDeviceIdOverride() { + if (g_device_id_override) + return g_device_id_override; + return base::nullopt; +} #endif // Returns true if the system is currently in Ambient Mode (with ambient screen @@ -230,6 +239,11 @@ g_s3_server_uri_override = uri; } +// static +void Service::OverrideDeviceIdForTesting(const char* device_id) { + g_device_id_override = device_id; +} + void Service::SetAssistantManagerServiceForTesting( std::unique_ptr<AssistantManagerService> assistant_manager_service) { DCHECK(assistant_manager_service_ == nullptr); @@ -547,7 +561,7 @@ DCHECK(pending_url_loader_factory_); return std::make_unique<AssistantManagerServiceImpl>( context(), std::move(delegate), std::move(pending_url_loader_factory_), - GetS3ServerUriOverride()); + GetS3ServerUriOverride(), GetDeviceIdOverride()); #else return std::make_unique<FakeAssistantManagerServiceImpl>(); #endif
diff --git a/chromeos/services/assistant/service.h b/chromeos/services/assistant/service.h index 54ae7c8c..1186aff 100644 --- a/chromeos/services/assistant/service.h +++ b/chromeos/services/assistant/service.h
@@ -81,6 +81,7 @@ // itself is created, so we do not have time in our tests to grab a handle // to |Service| and set this before it is too late. static void OverrideS3ServerUriForTesting(const char* uri); + static void OverrideDeviceIdForTesting(const char* device_id); void SetAssistantManagerServiceForTesting( std::unique_ptr<AssistantManagerService> assistant_manager_service);
diff --git a/chromeos/services/assistant/utils.cc b/chromeos/services/assistant/utils.cc index eaf45589..82bbf877 100644 --- a/chromeos/services/assistant/utils.cc +++ b/chromeos/services/assistant/utils.cc
@@ -56,7 +56,8 @@ } std::string CreateLibAssistantConfig( - base::Optional<std::string> s3_server_uri_override) { + base::Optional<std::string> s3_server_uri_override, + base::Optional<std::string> device_id_override) { using Value = base::Value; using Type = base::Value::Type; @@ -158,6 +159,9 @@ else config.SetStringPath("internal.transport_type", "HTTP"); + if (device_id_override) + config.SetStringPath("internal.cast_device_id", device_id_override.value()); + config.SetBoolPath("internal.enable_on_device_assistant_tts_as_text", true); // Finally add in the server uri override.
diff --git a/chromeos/services/assistant/utils.h b/chromeos/services/assistant/utils.h index f3f65368..24dbd3d 100644 --- a/chromeos/services/assistant/utils.h +++ b/chromeos/services/assistant/utils.h
@@ -25,7 +25,8 @@ // Creates the configuration for libassistant. std::string CreateLibAssistantConfig( - base::Optional<std::string> s3_server_uri_override = base::nullopt); + base::Optional<std::string> s3_server_uri_override, + base::Optional<std::string> device_id_override); } // namespace assistant } // namespace chromeos
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb index 06ffa75..454ae8b 100644 --- a/chromeos/strings/chromeos_strings_af.xtb +++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Wagwoord moes al verander geword het</translation> <translation id="2049639323467105390">Die toestel word deur <ph name="DOMAIN" /> bestuur.</translation> <translation id="2161394479394250669">Kanselleer druktaak</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Skakel Bluetooth aan om toestelle in die omtrek te ontdek</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> pogings oor</translation> <translation id="2517472476991765520">Skandeer</translation>
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb index b363cd1..c44a6109 100644 --- a/chromeos/strings/chromeos_strings_am.xtb +++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">የይለፍ ቃል ለውጥ ማድረጊያ ጊዜው አልፏል</translation> <translation id="2049639323467105390">ይህ መሣሪያ በ<ph name="DOMAIN" /> ነው የሚቀናበረው።</translation> <translation id="2161394479394250669">የኅትመት ሥራን ሰርዝ</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">በአቅራቢያ ያሉ መሣሪያዎችን ለማግኘት ብሉቱዝን ያብሩ</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ሙከራዎች ቀርተዋል</translation> <translation id="2517472476991765520">ቃኝ</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb index 76edd600..e54f0c2 100644 --- a/chromeos/strings/chromeos_strings_bs.xtb +++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Vrijeme za promjenu lozinke je isteklo</translation> <translation id="2049639323467105390">Ovim uređajem upravlja domena <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Otkaži zadatak štampanja</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Uključite Bluetooth da otkrijete uređaje u blizini</translation> <translation id="2375079107209812402">Broj preostalih pokušaja: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Skeniraj</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb index 85f2174..130f8c7 100644 --- a/chromeos/strings/chromeos_strings_ca.xtb +++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Canvi de contrasenya vençut</translation> <translation id="2049639323467105390">Aquest dispositiu està gestionat per <ph name="DOMAIN" /></translation> <translation id="2161394479394250669">Cancel·la la tasca d'impressió</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> ppp</translation> <translation id="2338501278241028356">Activa el Bluetooth per detectar dispositius propers</translation> <translation id="2375079107209812402">Intents restants: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Cerca</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb index f9507f7..1990b311 100644 --- a/chromeos/strings/chromeos_strings_el.xtb +++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Εκπρόθεσμη αλλαγή κωδικού πρόσβασης</translation> <translation id="2049639323467105390">Η διαχείριση της συσκευής γίνεται από τον τομέα <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Ακύρωση εργασίας εκτύπωσης</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Ενεργοποιήστε το Bluetooth, για να εντοπίσετε κοντινές συσκευές</translation> <translation id="2375079107209812402">Απομένουν <ph name="ATTEMPTS_LEFT" /> προσπάθειες</translation> <translation id="2517472476991765520">Σάρωση</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb index 1602697..6640728 100644 --- a/chromeos/strings/chromeos_strings_en-GB.xtb +++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Password change overdue</translation> <translation id="2049639323467105390">This device is managed by <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Cancel print job</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> DPI</translation> <translation id="2338501278241028356">Turn on Bluetooth to discover nearby devices</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> attempts left</translation> <translation id="2517472476991765520">Scan</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb index ecab5793..686fb4e 100644 --- a/chromeos/strings/chromeos_strings_fa.xtb +++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">مهلت تغییر گذرواژه به پایان رسید</translation> <translation id="2049639323467105390">این دستگاه توسط <ph name="DOMAIN" /> مدیریت میشود.</translation> <translation id="2161394479394250669">لغو کردن کار چاپ</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> نقطه در اینچ</translation> <translation id="2338501278241028356">برای کاوش دستگاههای همین اطراف، بلوتوث را روشن کنید</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> فرصت باقی مانده است</translation> <translation id="2517472476991765520">اسکن</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb index 2aa3aab..fd630985 100644 --- a/chromeos/strings/chromeos_strings_hr.xtb +++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Zakašnjela promjena zaporke</translation> <translation id="2049639323467105390">Ovim uređajem upravlja <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Otkaži zadatak ispisa</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Uključite Bluetooth da biste otkrili uređaje u blizini</translation> <translation id="2375079107209812402">Preostalo pokušaja: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Traži</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb index 7fbe3dc9c..17fc5e6 100644 --- a/chromeos/strings/chromeos_strings_hu.xtb +++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Esedékes a jelszó frissítése</translation> <translation id="2049639323467105390">Ezt az eszközt a(z) <ph name="DOMAIN" /> domain kezeli.</translation> <translation id="2161394479394250669">Nyomtatási feladat megszakítása</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Kapcsolja be a Bluetooth-t a közeli eszközök felfedezéséhez</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> próbálkozás maradt</translation> <translation id="2517472476991765520">Keresés</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb index 858e468..d08e308 100644 --- a/chromeos/strings/chromeos_strings_is.xtb +++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Breyting á aðgangsorði komin fram yfir tíma</translation> <translation id="2049639323467105390">Þessu tæki er stjórnað af <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Hætta við prentverk</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Kveiktu á Bluetooth til að uppgötva nálæg tæki</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tilraunir eftir</translation> <translation id="2517472476991765520">Leita</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb index 2e339d9..59fb768f 100644 --- a/chromeos/strings/chromeos_strings_lt.xtb +++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Vėluojama pakeisti slaptažodį</translation> <translation id="2049639323467105390">Įrenginys valdomas „<ph name="DOMAIN" />“.</translation> <translation id="2161394479394250669">Atšaukti spausdinimo užduotį</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> tšk./col.</translation> <translation id="2338501278241028356">Įjunkite „Bluetooth“, kad aptiktumėte įrenginius netoliese</translation> <translation id="2375079107209812402">Liko bandymų: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Nuskaityti</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb index 1219f651c..e79c715 100644 --- a/chromeos/strings/chromeos_strings_lv.xtb +++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Paroles maiņa ir nokavēta</translation> <translation id="2049639323467105390">Šo ierīci pārvalda vietne <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Atcelt drukas uzdevumu</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> DPI</translation> <translation id="2338501278241028356">Ieslēdziet Bluetooth, lai atklātu tuvumā esošas ierīces</translation> <translation id="2375079107209812402">Vēl <ph name="ATTEMPTS_LEFT" /> mēģinājumi</translation> <translation id="2517472476991765520">Meklēt</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb index 02a6523..ce95293 100644 --- a/chromeos/strings/chromeos_strings_mk.xtb +++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Измина рокот за промена на лозинката</translation> <translation id="2049639323467105390">Овој уред е управуван од <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Откажи го налогот за печатење</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Вклучете Bluetooth за да откриете места во близина</translation> <translation id="2375079107209812402">Преостануваат <ph name="ATTEMPTS_LEFT" /> обиди</translation> <translation id="2517472476991765520">Скенирај</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb index 909565d..2f089f5 100644 --- a/chromeos/strings/chromeos_strings_ml.xtb +++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">പാസ്വേഡ് മാറ്റേണ്ട സമയം കഴിഞ്ഞു</translation> <translation id="2049639323467105390">ഈ ഉപകരണം മാനേജ് ചെയ്യുന്നത് <ph name="DOMAIN" /> ആണ്.</translation> <translation id="2161394479394250669">പ്രിന്റ് ജോലി റദ്ദാക്കുക</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">സമീപത്തുള്ള ഉപകരണങ്ങൾ കണ്ടെത്താൻ Bluetooth ഓണാക്കുക</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ശ്രമങ്ങൾ ശേഷിക്കുന്നു</translation> <translation id="2517472476991765520">സ്കാൻ ചെയ്യുക</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb index b4fae60..7b7c3818 100644 --- a/chromeos/strings/chromeos_strings_no.xtb +++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Det er på høy tid å endre passordet</translation> <translation id="2049639323467105390">Denne enheten administreres av <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Avbryt utskriftsjobben</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> DPI</translation> <translation id="2338501278241028356">Slå på Bluetooth for å finne enheter i nærheten</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> forsøk igjen</translation> <translation id="2517472476991765520">Skann</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb index d4228de..811de415 100644 --- a/chromeos/strings/chromeos_strings_pl.xtb +++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Zaległa zmiana hasła</translation> <translation id="2049639323467105390">To urządzenie jest zarządzane przez: <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Anuluj zadanie drukowania</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Włącz Bluetooth, by wykryć urządzenia w pobliżu</translation> <translation id="2375079107209812402">Pozostałe próby: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Skanuj</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb index 6bcf234..514114e 100644 --- a/chromeos/strings/chromeos_strings_pt-BR.xtb +++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">O prazo para a alteração de senha foi ultrapassado</translation> <translation id="2049639323467105390">Este dispositivo é gerenciado por <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Cancelar trabalho de impressão</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Ativar o Bluetooth para descobrir dispositivos nas proximidades</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tentativas restantes</translation> <translation id="2517472476991765520">Verificar</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb index 97eb19e..a371aa4 100644 --- a/chromeos/strings/chromeos_strings_pt-PT.xtb +++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Alteração da palavra-passe vencida</translation> <translation id="2049639323467105390">Este aparelho é gerido por <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Cancelar tarefa de impressão</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> ppp</translation> <translation id="2338501278241028356">Ativar o Bluetooth para detetar dispositivos próximos</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> tentativas restantes</translation> <translation id="2517472476991765520">Analisar</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb index 528c641d..5cf69450 100644 --- a/chromeos/strings/chromeos_strings_sl.xtb +++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Rok za spremembo gesla je potekel</translation> <translation id="2049639323467105390">To napravo upravlja <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Preklic tiskalnega opravila</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> pik na palec</translation> <translation id="2338501278241028356">Vklopite Bluetooth, če želite odkriti naprave v bližini</translation> <translation id="2375079107209812402">Na voljo imate še toliko poskusov: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Išči</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb index f6b0b049..e0db1dc 100644 --- a/chromeos/strings/chromeos_strings_sq.xtb +++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Afati i ndryshimit të fjalëkalimit ka kaluar</translation> <translation id="2049639323467105390">Kjo pajisje menaxhohet nga <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Anulo printimin</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Aktivizo "Bluetooth-in" për të zbuluar pajisjet në afërsi</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> përpjekje të mbetura</translation> <translation id="2517472476991765520">Skano</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb index df0ee75..60ecf9e 100644 --- a/chromeos/strings/chromeos_strings_sr-Latn.xtb +++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Rok za promenu lozinke je istekao</translation> <translation id="2049639323467105390">Ovim uređajem upravlja domen <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Otkaži zadatak štampanja</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Uključite Bluetooth da biste otkrili uređaje u blizini</translation> <translation id="2375079107209812402">Preostali pokušaji: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Skeniraj</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb index a069c64..d56a7820 100644 --- a/chromeos/strings/chromeos_strings_sr.xtb +++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Рок за промену лозинке је истекао</translation> <translation id="2049639323467105390">Овим уређајем управља домен <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Откажи задатак штампања</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Укључите Bluetooth да бисте открили уређаје у близини</translation> <translation id="2375079107209812402">Преостали покушаји: <ph name="ATTEMPTS_LEFT" /></translation> <translation id="2517472476991765520">Скенирај</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb index b6d3204..b4c3302 100644 --- a/chromeos/strings/chromeos_strings_sv.xtb +++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Tiden för att ändra lösenordet har gått ut</translation> <translation id="2049639323467105390">Den här enheten hanteras av <ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Avbryt utskriftsjobb</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> DPI</translation> <translation id="2338501278241028356">Aktivera Bluetooth så att det går att upptäcka enheter i närheten</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> försök kvar</translation> <translation id="2517472476991765520">Sök</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb index a83f95f77..6453241 100644 --- a/chromeos/strings/chromeos_strings_ta.xtb +++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">கடவுச்சொல்லை மாற்ற வேண்டும்</translation> <translation id="2049639323467105390"><ph name="DOMAIN" /> ஆல் இந்த சாதனம் நிர்வகிக்கப்படுகிறது.</translation> <translation id="2161394479394250669">அச்சுப் பணியை ரத்துசெய்</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">அருகிலுள்ள சாதனங்களைக் கண்டறிய, புளூடூத்தை இயக்கவும்</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> முயற்சிகள் மீதமுள்ளன</translation> <translation id="2517472476991765520">ஸ்கேன் செய்</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb index aabe7f96..be28586 100644 --- a/chromeos/strings/chromeos_strings_zu.xtb +++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">Ukushintsha iphasiwedi kudlulelwe isikhathi</translation> <translation id="2049639323467105390">Idivayisi iphethwe yi-<ph name="DOMAIN" />.</translation> <translation id="2161394479394250669">Khansela umsebenzi wokuphrinta</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">Vula i-Bluetooth ukuze uthole amadivayisi aseduze</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> imizamo esele</translation> <translation id="2517472476991765520">Skena</translation>
diff --git a/components/arc/session/arc_vm_client_adapter_unittest.cc b/components/arc/session/arc_vm_client_adapter_unittest.cc index 693e7d6..0f51bbd 100644 --- a/components/arc/session/arc_vm_client_adapter_unittest.cc +++ b/components/arc/session/arc_vm_client_adapter_unittest.cc
@@ -14,6 +14,7 @@ #include <vector> #include "base/bind.h" +#include "base/bind_helpers.h" #include "base/command_line.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" @@ -650,6 +651,85 @@ EXPECT_TRUE(arc_instance_stopped_called()); } +// b/164816080 This test ensures that a new vm instance that is +// created while handling the shutting down of the previous instance, +// doesn't incorrectly receive the shutdown event as well. +TEST_F(ArcVmClientAdapterTest, DoesNotGetArcInstanceStoppedOnNestedInstance) { + using RunLoopFactory = base::RepeatingCallback<base::RunLoop*()>; + + class Observer : public ArcClientAdapter::Observer { + public: + Observer(RunLoopFactory run_loop_factory, Observer* child_observer) + : run_loop_factory_(run_loop_factory), + child_observer_(child_observer) {} + Observer(const Observer&) = delete; + Observer& operator=(const Observer&) = delete; + + ~Observer() override { + if (child_observer_ && nested_adapter_) + nested_adapter_->RemoveObserver(child_observer_); + } + + bool stopped_called() const { return stopped_called_; } + + // ArcClientAdapter::Observer: + void ArcInstanceStopped() override { + stopped_called_ = true; + + if (child_observer_) { + nested_adapter_ = CreateArcVmClientAdapterForTesting(base::DoNothing()); + nested_adapter_->AddObserver(child_observer_); + nested_adapter_->SetUserInfo( + cryptohome::Identification(user_manager::StubAccountId()), + kUserIdHash, kSerialNumber); + + base::RunLoop* run_loop = run_loop_factory_.Run(); + nested_adapter_->StartMiniArc({}, QuitClosure(run_loop)); + run_loop->Run(); + + run_loop = run_loop_factory_.Run(); + nested_adapter_->UpgradeArc({}, QuitClosure(run_loop)); + run_loop->Run(); + } + } + + private: + base::OnceCallback<void(bool)> QuitClosure(base::RunLoop* run_loop) { + return base::BindOnce( + [](base::RunLoop* run_loop, bool result) { run_loop->Quit(); }, + run_loop); + } + + base::RepeatingCallback<base::RunLoop*()> const run_loop_factory_; + Observer* const child_observer_; + std::unique_ptr<ArcClientAdapter> nested_adapter_; + bool stopped_called_ = false; + }; + + SetValidUserInfo(); + StartMiniArc(); + UpgradeArc(true); + + RunLoopFactory run_loop_factory = base::BindLambdaForTesting([this]() { + RecreateRunLoop(); + return run_loop(); + }); + + Observer child_observer(run_loop_factory, nullptr); + Observer parent_observer(run_loop_factory, &child_observer); + adapter()->AddObserver(&parent_observer); + base::ScopedClosureRunner teardown(base::BindOnce( + [](ArcClientAdapter* adapter, Observer* parent_observer) { + adapter->RemoveObserver(parent_observer); + }, + adapter(), &parent_observer)); + + SendVmStoppedSignal(); + + EXPECT_TRUE(parent_observer.stopped_called()); + EXPECT_FALSE(child_observer.stopped_called()); +} + // Tests that StopArcInstance() initiates ARC log backup. TEST_F(ArcVmClientAdapterTest, StopArcInstance_WithLogBackup) { SetValidUserInfo();
diff --git a/components/browser_sync/BUILD.gn b/components/browser_sync/BUILD.gn index eb83562..a72e0a1 100644 --- a/components/browser_sync/BUILD.gn +++ b/components/browser_sync/BUILD.gn
@@ -6,7 +6,6 @@ static_library("browser_sync") { sources = [ - "browser_sync_client.cc", "browser_sync_client.h", "browser_sync_switches.cc", "browser_sync_switches.h",
diff --git a/components/browser_sync/browser_sync_client.cc b/components/browser_sync/browser_sync_client.cc deleted file mode 100644 index 9c285221..0000000 --- a/components/browser_sync/browser_sync_client.cc +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/browser_sync/browser_sync_client.h" - -#include "components/sync/model/model_type_store_service.h" - -namespace browser_sync { - -BrowserSyncClient::BrowserSyncClient() = default; - -BrowserSyncClient::~BrowserSyncClient() = default; - -base::FilePath BrowserSyncClient::GetSyncDataPath() { - return GetModelTypeStoreService()->GetSyncDataPath(); -} - -} // namespace browser_sync
diff --git a/components/browser_sync/browser_sync_client.h b/components/browser_sync/browser_sync_client.h index 16aa43c4..54ae5e4c 100644 --- a/components/browser_sync/browser_sync_client.h +++ b/components/browser_sync/browser_sync_client.h
@@ -51,10 +51,9 @@ // to handle these scenarios gracefully. class BrowserSyncClient : public syncer::SyncClient { public: - BrowserSyncClient(); - ~BrowserSyncClient() override; + BrowserSyncClient() = default; + ~BrowserSyncClient() override = default; - base::FilePath GetSyncDataPath() final; virtual syncer::ModelTypeStoreService* GetModelTypeStoreService() = 0; // Returns a weak pointer to the ModelTypeControllerDelegate specified by
diff --git a/components/browser_sync/profile_sync_components_factory_impl.cc b/components/browser_sync/profile_sync_components_factory_impl.cc index b326e9a..0ef38156 100644 --- a/components/browser_sync/profile_sync_components_factory_impl.cc +++ b/components/browser_sync/profile_sync_components_factory_impl.cc
@@ -9,6 +9,8 @@ #include "base/bind.h" #include "base/feature_list.h" #include "base/memory/ref_counted.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" #include "build/build_config.h" #include "components/autofill/core/browser/payments/autofill_wallet_model_type_controller.h" #include "components/autofill/core/browser/webdata/autocomplete_sync_bridge.h" @@ -27,6 +29,7 @@ #include "components/reading_list/features/reading_list_switches.h" #include "components/send_tab_to_self/send_tab_to_self_model_type_controller.h" #include "components/send_tab_to_self/send_tab_to_self_sync_service.h" +#include "components/sync/base/legacy_directory_deletion.h" #include "components/sync/base/report_unrecoverable_error.h" #include "components/sync/base/sync_base_switches.h" #include "components/sync/driver/data_type_manager_impl.h" @@ -135,6 +138,10 @@ history_disabled_pref_(history_disabled_pref), ui_thread_(ui_thread), db_thread_(db_thread), + engines_and_directory_deletion_thread_( + base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN})), web_data_service_on_disk_(web_data_service_on_disk), web_data_service_in_memory_(web_data_service_in_memory), profile_password_store_(profile_password_store), @@ -398,7 +405,17 @@ const base::WeakPtr<syncer::SyncPrefs>& sync_prefs) { return std::make_unique<syncer::SyncEngineImpl>( name, invalidator, sync_invalidation_service, sync_prefs, - sync_client_->GetModelTypeStoreService()->GetSyncDataPath()); + sync_client_->GetModelTypeStoreService()->GetSyncDataPath(), + engines_and_directory_deletion_thread_); +} + +void ProfileSyncComponentsFactoryImpl:: + DeleteLegacyDirectoryFilesAndNigoriStorage() { + engines_and_directory_deletion_thread_->PostTask( + FROM_HERE, + base::BindOnce( + &syncer::DeleteLegacyDirectoryFilesAndNigoriStorage, + sync_client_->GetModelTypeStoreService()->GetSyncDataPath())); } std::unique_ptr<syncer::ModelTypeControllerDelegate>
diff --git a/components/browser_sync/profile_sync_components_factory_impl.h b/components/browser_sync/profile_sync_components_factory_impl.h index 01909fd0..da0a32a1 100644 --- a/components/browser_sync/profile_sync_components_factory_impl.h +++ b/components/browser_sync/profile_sync_components_factory_impl.h
@@ -83,6 +83,7 @@ invalidation::InvalidationService* invalidator, syncer::SyncInvalidationsService* sync_invalidation_service, const base::WeakPtr<syncer::SyncPrefs>& sync_prefs) override; + void DeleteLegacyDirectoryFilesAndNigoriStorage() override; private: // Factory function for ModelTypeController instances for models living on @@ -120,6 +121,8 @@ const char* history_disabled_pref_; const scoped_refptr<base::SequencedTaskRunner> ui_thread_; const scoped_refptr<base::SequencedTaskRunner> db_thread_; + const scoped_refptr<base::SequencedTaskRunner> + engines_and_directory_deletion_thread_; const scoped_refptr<autofill::AutofillWebDataService> web_data_service_on_disk_; const scoped_refptr<autofill::AutofillWebDataService>
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp index 382b4f77..455f07f 100644 --- a/components/browser_ui/strings/android/site_settings.grdp +++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -31,7 +31,7 @@ Clipboard </message> <message name="IDS_WEBSITE_SETTINGS_IDLE_DETECTION" desc="Title of the permission to detect user activity [CHAR-LIMIT=32]"> - User presence + Your presence </message> <message name="IDS_JAVASCRIPT_PERMISSION_TITLE" desc="Title of the permission to run javascript [CHAR-LIMIT=32]"> JavaScript
diff --git a/components/browser_ui/strings/android/site_settings_grdp/IDS_WEBSITE_SETTINGS_IDLE_DETECTION.png.sha1 b/components/browser_ui/strings/android/site_settings_grdp/IDS_WEBSITE_SETTINGS_IDLE_DETECTION.png.sha1 index 92e2cd7..ac2d337 100644 --- a/components/browser_ui/strings/android/site_settings_grdp/IDS_WEBSITE_SETTINGS_IDLE_DETECTION.png.sha1 +++ b/components/browser_ui/strings/android/site_settings_grdp/IDS_WEBSITE_SETTINGS_IDLE_DETECTION.png.sha1
@@ -1 +1 @@ -185d0c9b1c1233660cd632ef919e025b7639ad3e \ No newline at end of file +0d1f293561f2b3e78e639a2f3afd848347d1d82f \ No newline at end of file
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb index 9e6baaab..20b6e30 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
@@ -94,7 +94,7 @@ <translation id="3587482841069643663">Alle</translation> <translation id="358794129225322306">Tillad, at et website kan downloade flere filer automatisk.</translation> <translation id="3594780231884063836">Slå lyden i videoen fra</translation> -<translation id="3596414637720633074">Bloker tredjepartscookies i Inkognito</translation> +<translation id="3596414637720633074">Bloker tredjepartscookies i inkognito</translation> <translation id="3600792891314830896">Lyden slås fra for websites, der afspiller lyd</translation> <translation id="3744111561329211289">Synkronisering i baggrunden</translation> <translation id="3763247130972274048">Tryk to gange i videoens venstre eller højre side for at springe ti sekunder frem eller tilbage</translation>
diff --git a/components/exo/wayland/BUILD.gn b/components/exo/wayland/BUILD.gn index 3044611..5d685697 100644 --- a/components/exo/wayland/BUILD.gn +++ b/components/exo/wayland/BUILD.gn
@@ -470,6 +470,8 @@ "clients/test/run_all_client_perftests.cc", "clients/test/wayland_client_test.cc", "clients/test/wayland_client_test.h", + "clients/test/wayland_client_test_server.cc", + "clients/test/wayland_client_test_server.h", ] deps = [ @@ -507,6 +509,43 @@ } } +test("wayland_client_compatibility_tests") { + testonly = true + + sources = [ + "clients/test/wayland_client_test.cc", + "clients/test/wayland_client_test.h", + "clients/test/wayland_client_test_server.cc", + "clients/test/wayland_client_test_server.h", + "compatibility_test/client_compatibility_test.cc", + "compatibility_test/client_compatibility_test.h", + "compatibility_test/client_compatibility_test_server.cc", + "compatibility_test/wayland_client_event_receiver_version_fixtures.h", + "compatibility_test/wayland_client_event_recorder.cc", + "compatibility_test/wayland_client_event_recorder.h", + "compatibility_test/wayland_client_registry.cc", + "compatibility_test/wayland_client_registry.h", + ] + + deps = [ + ":wayland", + ":wayland_client_test_helper", + "//base", + "//base/test:test_support", + "//components/exo/wayland/compatibility_test", + "//components/exo/wayland/compatibility_test:generated_client_helper_headers", + "//components/viz/test:test_support", + "//mojo/core/embedder:embedder", + "//ui/gl:test_support", + ] + + if (is_chromeos) { + deps += [ "//ash:test_support" ] + } + + data_deps = [] +} + if (ozone_platform_drm) { executable("wayland_yuv_client") { sources = [ "clients/yuv.cc" ]
diff --git a/components/exo/wayland/clients/test/DEPS b/components/exo/wayland/clients/test/DEPS index f8858c1b..b026dcd 100644 --- a/components/exo/wayland/clients/test/DEPS +++ b/components/exo/wayland/clients/test/DEPS
@@ -1,5 +1,5 @@ specific_include_rules = { - "run_all_client_perftests\.cc": [ + "wayland_client_test_server\.cc": [ "+components/viz/test/test_gpu_service_holder.h", "+mojo/core/embedder/embedder.h", ],
diff --git a/components/exo/wayland/clients/test/run_all_client_perftests.cc b/components/exo/wayland/clients/test/run_all_client_perftests.cc index a827d039..70a4d50 100644 --- a/components/exo/wayland/clients/test/run_all_client_perftests.cc +++ b/components/exo/wayland/clients/test/run_all_client_perftests.cc
@@ -2,123 +2,34 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/test/ash_test_suite.h" #include "base/bind.h" -#include "base/command_line.h" -#include "base/debug/debugger.h" -#include "base/process/launch.h" -#include "base/run_loop.h" -#include "base/test/launcher/unit_test_launcher.h" -#include "base/test/task_environment.h" -#include "base/threading/thread.h" -#include "base/threading/thread_task_runner_handle.h" -#include "build/build_config.h" #include "components/exo/wayland/clients/test/wayland_client_test.h" -#include "components/viz/test/test_gpu_service_holder.h" -#include "mojo/core/embedder/embedder.h" +#include "components/exo/wayland/clients/test/wayland_client_test_server.h" namespace exo { namespace { -const char kRunWithExternalWaylandServer[] = "run-with-external-wayland-server"; +class ExoClientPerfTestSuite : public WaylandClientTestSuiteServer { + using WaylandClientTestSuiteServer::WaylandClientTestSuiteServer; -class ExoClientPerfTestSuite : public ash::AshTestSuite { - public: - ExoClientPerfTestSuite(int argc, char** argv) - : ash::AshTestSuite(argc, argv), - run_with_external_wayland_server_( - base::CommandLine::ForCurrentProcess()->HasSwitch( - kRunWithExternalWaylandServer)) {} - - int Run() { - Initialize(); - - base::Thread client_thread("ClientThread"); - client_thread.Start(); - - base::RunLoop run_loop; - client_thread.task_runner()->PostTask( - FROM_HERE, - base::BindOnce(&ExoClientPerfTestSuite::RunTestsOnClientThread, - base::Unretained(this), run_loop.QuitWhenIdleClosure())); - run_loop.Run(); - - Shutdown(); - return result_; + void SetClientTestUIThreadTaskRunner( + scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner) + override { + WaylandClientTest::SetUIThreadTaskRunner(std::move(ui_thread_task_runner)); } - private: - // Overriden from ash::AshTestSuite: - void Initialize() override { - if (!base::debug::BeingDebugged()) - base::RaiseProcessToHighPriority(); - - if (run_with_external_wayland_server_) { - base::TestSuite::Initialize(); - - task_environment_ = std::make_unique<base::test::TaskEnvironment>( - base::test::TaskEnvironment::MainThreadType::UI); - } else { - // We only need initialized ash related stuff for running wayland server - // within the test. - ash::AshTestSuite::Initialize(); - - // Initialize task envrionment here instead of Test::SetUp(), because all - // tests and their SetUp() will be running in client thread. - task_environment_ = std::make_unique<base::test::TaskEnvironment>( - base::test::TaskEnvironment::MainThreadType::UI); - - // Set the UI thread task runner to WaylandClientTest, so all tests can - // post tasks to UI thread. - WaylandClientTest::SetUIThreadTaskRunner( - base::ThreadTaskRunnerHandle::Get()); - } - } - - void Shutdown() override { - if (run_with_external_wayland_server_) { - task_environment_ = nullptr; - base::TestSuite::Shutdown(); - } else { - WaylandClientTest::SetUIThreadTaskRunner(nullptr); - task_environment_ = nullptr; - ash::AshTestSuite::Shutdown(); - } - } - - private: - void RunTestsOnClientThread(base::OnceClosure finished_closure) { - result_ = RUN_ALL_TESTS(); - std::move(finished_closure).Run(); - } - - // Do not run the wayland server within the test. - const bool run_with_external_wayland_server_ = false; - - std::unique_ptr<base::test::TaskEnvironment> task_environment_; - - // Result of RUN_ALL_TESTS(). - int result_ = 1; - DISALLOW_COPY_AND_ASSIGN(ExoClientPerfTestSuite); }; +std::unique_ptr<WaylandClientTestSuiteServer> MakeServer(int argc, + char** argv) { + return std::make_unique<exo::ExoClientPerfTestSuite>(argc, argv); +} + } // namespace } // namespace exo int main(int argc, char** argv) { - mojo::core::Init(); - - // The TaskEnvironment and UI thread don't get reset between tests so don't - // reset the GPU thread either. Destroying the GPU service is problematic - // because tasks on the UI thread can live on past the end of the test and - // keep references to GPU thread objects. - viz::TestGpuServiceHolder::DoNotResetOnTestExit(); - - exo::ExoClientPerfTestSuite test_suite(argc, argv); - - return base::LaunchUnitTestsSerially( - argc, argv, - base::BindOnce(&exo::ExoClientPerfTestSuite::Run, - base::Unretained(&test_suite))); + return exo::ExoClientPerfTestSuite::TestMain( + argc, argv, base::BindOnce(&exo::MakeServer)); }
diff --git a/components/exo/wayland/clients/test/wayland_client_test_server.cc b/components/exo/wayland/clients/test/wayland_client_test_server.cc new file mode 100644 index 0000000..b641b74 --- /dev/null +++ b/components/exo/wayland/clients/test/wayland_client_test_server.cc
@@ -0,0 +1,116 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/exo/wayland/clients/test/wayland_client_test_server.h" +#include "base/bind.h" +#include "base/command_line.h" +#include "base/debug/debugger.h" +#include "base/process/launch.h" +#include "base/run_loop.h" +#include "base/test/launcher/unit_test_launcher.h" +#include "base/threading/thread.h" +#include "base/threading/thread_task_runner_handle.h" +#include "build/build_config.h" +#include "components/exo/wayland/clients/test/wayland_client_test.h" +#include "components/viz/test/test_gpu_service_holder.h" +#include "mojo/core/embedder/embedder.h" + +namespace exo { +namespace { + +const char kRunWithExternalWaylandServer[] = "run-with-external-wayland-server"; + +} + +WaylandClientTestSuiteServer::WaylandClientTestSuiteServer(int argc, + char** argv) + : ash::AshTestSuite(argc, argv), + run_with_external_wayland_server_( + base::CommandLine::ForCurrentProcess()->HasSwitch( + kRunWithExternalWaylandServer)) {} + +WaylandClientTestSuiteServer::~WaylandClientTestSuiteServer() = default; + +int WaylandClientTestSuiteServer::Run() { + Initialize(); + + base::Thread client_thread("ClientThread"); + client_thread.Start(); + + base::RunLoop run_loop; + client_thread.task_runner()->PostTask( + FROM_HERE, + base::BindOnce(&WaylandClientTestSuiteServer::RunTestsOnClientThread, + base::Unretained(this), run_loop.QuitWhenIdleClosure())); + run_loop.Run(); + + Shutdown(); + return result_; +} + +void WaylandClientTestSuiteServer::Initialize() { + if (!base::debug::BeingDebugged()) + base::RaiseProcessToHighPriority(); + + if (run_with_external_wayland_server_) { + base::TestSuite::Initialize(); + + task_environment_ = std::make_unique<base::test::TaskEnvironment>( + base::test::TaskEnvironment::MainThreadType::UI); + } else { + // We only need initialized ash related stuff for running wayland server + // within the test. + ash::AshTestSuite::Initialize(); + + // Initialize task environment here instead of Test::SetUp(), because all + // tests and their SetUp() will be running in client thread. + task_environment_ = std::make_unique<base::test::TaskEnvironment>( + base::test::TaskEnvironment::MainThreadType::UI); + + // Set the UI thread task runner to WaylandClientTest, so all tests can + // post tasks to UI thread. + WaylandClientTest::SetUIThreadTaskRunner( + base::ThreadTaskRunnerHandle::Get()); + } +} + +void WaylandClientTestSuiteServer::Shutdown() { + if (run_with_external_wayland_server_) { + task_environment_.reset(); + base::TestSuite::Shutdown(); + } else { + WaylandClientTest::SetUIThreadTaskRunner(nullptr); + task_environment_.reset(); + ash::AshTestSuite::Shutdown(); + } +} + +void WaylandClientTestSuiteServer::RunTestsOnClientThread( + base::OnceClosure finished_closure) { + result_ = RUN_ALL_TESTS(); + std::move(finished_closure).Run(); +} + +int WaylandClientTestSuiteServer::TestMain( + int argc, + char** argv, + WaylandClientTestSuiteServer::CreateServerCallback create_server_callback) { + mojo::core::Init(); + + // The TaskEnvironment and UI thread don't get reset between tests so don't + // reset the GPU thread either. Destroying the GPU service is problematic + // because tasks on the UI thread can live on past the end of the test and + // keep references to GPU thread objects. + viz::TestGpuServiceHolder::DoNotResetOnTestExit(); + + std::unique_ptr<WaylandClientTestSuiteServer> server = + std::move(create_server_callback).Run(argc, argv); + + return base::LaunchUnitTestsSerially( + argc, argv, + base::BindOnce(&WaylandClientTestSuiteServer::Run, + base::Unretained(server.get()))); +} + +} // namespace exo
diff --git a/components/exo/wayland/clients/test/wayland_client_test_server.h b/components/exo/wayland/clients/test/wayland_client_test_server.h new file mode 100644 index 0000000..2287841 --- /dev/null +++ b/components/exo/wayland/clients/test/wayland_client_test_server.h
@@ -0,0 +1,56 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_EXO_WAYLAND_CLIENTS_TEST_WAYLAND_CLIENT_TEST_SERVER_H_ +#define COMPONENTS_EXO_WAYLAND_CLIENTS_TEST_WAYLAND_CLIENT_TEST_SERVER_H_ + +#include "ash/test/ash_test_suite.h" +#include "base/callback.h" +#include "base/test/task_environment.h" +#include "base/threading/thread.h" +#include "base/threading/thread_task_runner_handle.h" + +namespace exo { + +class WaylandClientTestSuiteServer : public ash::AshTestSuite { + public: + using CreateServerCallback = + base::OnceCallback<std::unique_ptr<WaylandClientTestSuiteServer>(int, + char**)>; + + WaylandClientTestSuiteServer(int argc, char** argv); + ~WaylandClientTestSuiteServer() override; + + int Run(); + + static int TestMain(int argc, + char** argv, + CreateServerCallback create_server_callback); + + protected: + // Overridden from ash::AshTestSuite: + void Initialize() override; + void Shutdown() override; + + // Implemented by the derived class for a particular set of client tests. + virtual void SetClientTestUIThreadTaskRunner( + scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner) = 0; + + private: + void RunTestsOnClientThread(base::OnceClosure finished_closure); + + // Do not run the wayland server within the test. + const bool run_with_external_wayland_server_ = false; + + std::unique_ptr<base::test::TaskEnvironment> task_environment_; + + // Result of RunTestsOnClientThread(). + int result_ = 1; + + DISALLOW_COPY_AND_ASSIGN(WaylandClientTestSuiteServer); +}; + +} // namespace exo + +#endif // COMPONENTS_EXO_WAYLAND_CLIENTS_TEST_WAYLAND_CLIENT_TEST_SERVER_H_
diff --git a/components/exo/wayland/compatibility_test/BUILD.gn b/components/exo/wayland/compatibility_test/BUILD.gn new file mode 100644 index 0000000..df9bef7c9 --- /dev/null +++ b/components/exo/wayland/compatibility_test/BUILD.gn
@@ -0,0 +1,103 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import( + "//components/exo/wayland/compatibility_test/wayland_protocol_codegen.gni") + +# This is the canonical list of all protocols which are potentially exposed by the server +server_wayland_protocols = [ + "//components/exo/wayland/protocol/aura-shell.xml", + "//third_party/wayland/src/protocol/wayland.xml", + "//third_party/wayland-protocols/src/stable/presentation-time/presentation-time.xml", + "//third_party/wayland-protocols/src/stable/viewporter/viewporter.xml", + "//third_party/wayland-protocols/src/stable/xdg-shell/xdg-shell.xml", + "//third_party/wayland-protocols/src/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/input-timestamps/input-timestamps-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/linux-explicit-synchronization/linux-explicit-synchronization-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/relative-pointer/relative-pointer-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/text-input/text-input-unstable-v1.xml", + "//third_party/wayland-protocols/src/unstable/xdg-shell/xdg-shell-unstable-v6.xml", + "//third_party/wayland-protocols/unstable/alpha-compositing/alpha-compositing-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/color-space/color-space-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/cursor-shapes/cursor-shapes-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/gaming-input/gaming-input-unstable-v2.xml", + "//third_party/wayland-protocols/unstable/keyboard/keyboard-configuration-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/keyboard/keyboard-extension-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/notification-shell/notification-shell-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/remote-shell/remote-shell-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/secure-output/secure-output-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/stylus/stylus-unstable-v2.xml", + "//third_party/wayland-protocols/unstable/stylus-tools/stylus-tools-unstable-v1.xml", + "//third_party/wayland-protocols/unstable/vsync-feedback/vsync-feedback-unstable-v1.xml", +] + +wayland_protocol_codegen("generated_client_helper_headers") { + template = "//components/exo/wayland/compatibility_test/template_client_helpers.h.tmpl" + sources = server_wayland_protocols + output_pattern = + "$target_gen_dir/generated-{{source_name_part}}-client-helpers.h" +} + +wayland_protocol_codegen("generated_client_helper_impl") { + template = "//components/exo/wayland/compatibility_test/template_client_helpers.cc.tmpl" + sources = server_wayland_protocols + output_pattern = + "$target_gen_dir/generated-{{source_name_part}}-client-helpers.cc" +} + +wayland_protocol_codegen("generated_client_event_receiver_version_tests") { + testonly = true + reduce = true + template = "//components/exo/wayland/compatibility_test/template_client_event_receiver_version_tests.cc.tmpl" + sources = server_wayland_protocols + output_pattern = + "$target_gen_dir/all_generated_client_event_receiver_version_tests.cc" +} + +source_set("compatibility_test") { + testonly = true + + sources = get_target_outputs(":generated_client_helper_impl") + sources += + get_target_outputs(":generated_client_event_receiver_version_tests") + + deps = [ + ":generated_client_event_receiver_version_tests", + ":generated_client_helper_headers", + ":generated_client_helper_impl", + ] + + public_deps = [ + "//components/exo/wayland/protocol:aura_shell_protocol", + "//testing/gmock", + "//testing/gtest", + "//third_party/wayland:wayland_client", + "//third_party/wayland-protocols:alpha_compositing_protocol", + "//third_party/wayland-protocols:color_space_protocol", + "//third_party/wayland-protocols:cursor_shapes_protocol", + "//third_party/wayland-protocols:fullscreen_shell_protocol", + "//third_party/wayland-protocols:gaming_input_protocol", + "//third_party/wayland-protocols:input_timestamps_protocol", + "//third_party/wayland-protocols:keyboard_configuration_protocol", + "//third_party/wayland-protocols:keyboard_extension_protocol", + "//third_party/wayland-protocols:linux_dmabuf_protocol", + "//third_party/wayland-protocols:linux_explicit_synchronization_protocol", + "//third_party/wayland-protocols:notification_shell_protocol", + "//third_party/wayland-protocols:pointer_constraints_protocol", + "//third_party/wayland-protocols:pointer_gestures_protocol", + "//third_party/wayland-protocols:presentation_time_protocol", + "//third_party/wayland-protocols:relative_pointer_protocol", + "//third_party/wayland-protocols:remote_shell_protocol", + "//third_party/wayland-protocols:secure_output_protocol", + "//third_party/wayland-protocols:stylus_protocol", + "//third_party/wayland-protocols:stylus_tools_protocol", + "//third_party/wayland-protocols:text_input_protocol", + "//third_party/wayland-protocols:viewporter_protocol", + "//third_party/wayland-protocols:vsync_feedback_protocol", + "//third_party/wayland-protocols:xdg_shell_protocol", + ] +}
diff --git a/components/exo/wayland/compatibility_test/client_compatibility_test.cc b/components/exo/wayland/compatibility_test/client_compatibility_test.cc new file mode 100644 index 0000000..3921047 --- /dev/null +++ b/components/exo/wayland/compatibility_test/client_compatibility_test.cc
@@ -0,0 +1,18 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/exo/wayland/compatibility_test/client_compatibility_test.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { + +ClientCompatibilityTest::ClientCompatibilityTest() = default; +ClientCompatibilityTest::~ClientCompatibilityTest() = default; + +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo \ No newline at end of file
diff --git a/components/exo/wayland/compatibility_test/client_compatibility_test.h b/components/exo/wayland/compatibility_test/client_compatibility_test.h new file mode 100644 index 0000000..37d067ea --- /dev/null +++ b/components/exo/wayland/compatibility_test/client_compatibility_test.h
@@ -0,0 +1,29 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_CLIENT_COMPATIBILITY_TEST_H_ +#define COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_CLIENT_COMPATIBILITY_TEST_H_ + +#include "components/exo/wayland/clients/test/wayland_client_test.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { + +class ClientCompatibilityTest : public WaylandClientTest { + public: + ClientCompatibilityTest(); + ~ClientCompatibilityTest() override; + + private: + DISALLOW_COPY_AND_ASSIGN(ClientCompatibilityTest); +}; + +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo + +#endif // COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_CLIENT_COMPATIBILITY_TEST_H_
diff --git a/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc b/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc new file mode 100644 index 0000000..163b4cc --- /dev/null +++ b/components/exo/wayland/compatibility_test/client_compatibility_test_server.cc
@@ -0,0 +1,44 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/bind.h" +#include "components/exo/wayland/clients/test/wayland_client_test_server.h" +#include "components/exo/wayland/compatibility_test/client_compatibility_test.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { +namespace { + +class CompatibilityTestSuiteServer : public WaylandClientTestSuiteServer { + public: + using WaylandClientTestSuiteServer::WaylandClientTestSuiteServer; + + void SetClientTestUIThreadTaskRunner( + scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner) + override { + ClientCompatibilityTest::SetUIThreadTaskRunner( + std::move(ui_thread_task_runner)); + } + + DISALLOW_COPY_AND_ASSIGN(CompatibilityTestSuiteServer); +}; + +std::unique_ptr<WaylandClientTestSuiteServer> MakeServer(int argc, + char** argv) { + return std::make_unique<CompatibilityTestSuiteServer>(argc, argv); +} + +} // namespace +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo + +int main(int argc, char** argv) { + return exo::WaylandClientTestSuiteServer::TestMain( + argc, argv, + base::BindOnce(&exo::wayland::compatibility::test::MakeServer)); +}
diff --git a/components/exo/wayland/compatibility_test/template_client_event_receiver_version_tests.cc.tmpl b/components/exo/wayland/compatibility_test/template_client_event_receiver_version_tests.cc.tmpl new file mode 100644 index 0000000..2f1f95be --- /dev/null +++ b/components/exo/wayland/compatibility_test/template_client_event_receiver_version_tests.cc.tmpl
@@ -0,0 +1,415 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <algorithm> +#include <memory> +#include <type_traits> + +#include "base/check.h" +#include "base/logging.h" +#include "components/exo/wayland/compatibility_test/client_compatibility_test.h" +{% for protocol in protocols %} +#include "components/exo/wayland/compatibility_test/generated-{{ protocol.filename }}-client-helpers.h" +{% endfor %} +#include "components/exo/wayland/compatibility_test/wayland_client_registry.h" +#include "components/exo/wayland/compatibility_test/wayland_client_event_recorder.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/gmock/include/gmock/gmock.h" + + +{# +Figure out which Wayland interfaces need to be tested. + +We only need to test interfaces which have events with a "since" that is +greater than the first possible version of the interface. +#} +{% set interfaces_to_test = [] %} +{% for protocol in protocols %} + {% for interface in protocol.interfaces %} + {% set min_version = get_minimum_version_to_construct(interface) %} + {# if interface.events|selectattr("since")|max(attribute="since") > min_version #} + {% if interface.events|selectattr("since")|selectattr("since", ">", min_version)|list|length %} + {% set _ = interfaces_to_test.append(interface) %} + {% endif %} + {% endfor %} +{% endfor %} + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { +namespace { + +// Each of these generated fixture interfaces can be overriden by +// non-generated code in wayland_client_event_receiver_version_fixtures.h + +{% for target_interface in interfaces_to_test %} + {% set steps = get_construction_steps(target_interface) %} + +class {{ target_interface.name | pascal }}EventTestBase : public ClientCompatibilityTest { + protected: + // Returns true if this test should be skipped. The base implementation + // checks that the server supports the required interface versions. + virtual bool ShouldSkip(uint32_t target_interface_version) const noexcept; + {% for step in steps %} + {% if step.ctor %} + {% if step.ctor.message.is_event %} + // Overriden by non-generated code to ensure the server sends the interface + // creation event. + virtual void NudgeServerFor{{ step.instance_name | pascal }}Creation() noexcept; + {% endif %} + // Factory function to set {{ step.instance_name }} + virtual std::unique_ptr<struct {{ step.interface.name }}> Make{{ step.instance_name | pascal }}() noexcept; + {% endif %} + {% endfor %} + // Overriden by non-generated code to ensure the server sends the required + // events. + virtual void NudgeServerForTestEvents() noexcept; + + void ValidateEventsImpl(uint32_t target_interface_version) noexcept; + void ValidateEvents(uint32_t target_interface_version) noexcept; + + // Interfaces and helpers needed for the test, in construction order. + std::unique_ptr<wl_display> display_; + std::unique_ptr<WaylandClientRegistry> registry_; + {% for step in steps %} + std::unique_ptr<struct {{ step.interface.name }}> {{ step.instance_name }}; + {% endfor %} +}; + +{% endfor %} + +} // namespace +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo + +// This is intentionally included after all the fixture class definitions +// above, so that the header file can provide overrides. +#include "components/exo/wayland/compatibility_test/wayland_client_event_receiver_version_fixtures.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { +namespace { + +{% for target_interface in interfaces_to_test %} + {% set steps = get_construction_steps(target_interface) %} + {% set base_fixture_name = target_interface.name | pascal + "EventTestBase" %} +// Make sure this is defined even if not complete. +struct {{ target_interface.name | pascal }}EventTest; + +// Use {{ target_interface.name | pascal }}EventTest if it is defined, otherwise +// fall back to {{ target_interface.name | pascal }}EventTestBase. +constexpr bool k{{ target_interface.name | pascal }}EventTestFixtureUsesOverride = + std::is_convertible< + {{ target_interface.name | pascal }}EventTest*, + {{ target_interface.name | pascal }}EventTestBase* + >::value; +using {{ target_interface.name | pascal }}EventTestFixture = + std::conditional_t< + k{{ target_interface.name | pascal }}EventTestFixtureUsesOverride, + {{ target_interface.name | pascal }}EventTest, + {{ target_interface.name | pascal }}EventTestBase>; + +bool {{ base_fixture_name }}::ShouldSkip(uint32_t target_interface_version) const noexcept { + return false + {% for step in steps %} + {% if not step.ctor %} + {% if step.interface.protocol == target_interface.protocol %} + || !registry_->Has<struct {{step.interface.name}}>( + std::max(target_interface_version, {{ step.minimum_version }}u)) + {% else %} + || !registry_->Has<struct {{step.interface.name}}>({{ step.minimum_version }}u) + {% endif %} + {% endif %} + {% endfor %} + ; +} + + {% for step in steps %} + {% if step.ctor %} + {% if step.ctor.message.is_event %} +void {{ base_fixture_name }}::NudgeServerFor{{ step.instance_name | pascal }}Creation() noexcept {} + + {% endif %} +std::unique_ptr<struct {{ step.interface.name }}> +{{ base_fixture_name }}::Make{{ step.instance_name | pascal }}() noexcept { + {% if not step.ctor.message.is_event %} + auto {{ step.instance_name }} = std::unique_ptr<struct {{ step.interface.name }}>( + {{ step.ctor.interface_step.interface.name }}_{{ step.ctor.message.name }}( + {{ step.ctor.interface_step.instance_name }}.get() + {% for arg in step.ctor.message.args %} + {% if arg.type == "new_id" %} + {% elif arg.type == "object" %} + , {{ step.ctor.object_args[loop.index0].instance_name }}.get() + {% elif arg.type == "fd" %} + , -1 /* generated default {{ arg.type }} value for {{ arg.name }} */ + {% elif arg.type == "string" %} + , "" /* generated default {{ arg.type }} value for {{ arg.name }} */ + {% elif arg.type == "array" %} + , nullptr_t /* generated default {{ arg.type }} value for {{ arg.name }} */ + {% elif arg.type in ["int", "uint", "fixed"] %} + , 0 /* generated default {{ arg.type }} value for {{ arg.name }} */ + {% else %} + , nullptr_t /* generated default {{ arg.type }} value for {{ arg.name }} */ + {% endif %} + {% endfor %} + )); + {% else %} + std::unique_ptr<struct {{ step.interface.name }}> {{ step.instance_name }}; + + static {{ step.ctor.interface_step.interface.name }}_listener {{ step.ctor.interface_step.interface.name }}_listener = { + {% for event in step.ctor.interface_step.interface.events %} + /* {{ event.name }} */ + [](void* user_data_, struct {{ step.ctor.interface_step.interface.name }}* interface_ + {% for arg in event.args %} + {{ get_c_arg_for_client_event_arg(arg) }} + {% endfor %} + ) { + {% if event.name == step.ctor.message.name %} + if (user_data_) { + {% for arg in event.args %} + {% if arg.type == "ctor" and arg.interface == step.interface.name %} + auto* container = static_cast<std::unique_ptr<struct {{ step.interface.name }}>*>(context); + (*container) = {{ arg.name }}; + {% endif %} + {% endfor %} + } else { + LOG(INFO) << "Received unexpected " << "{{ step.ctor.interface_step.interface.name }}::{{ event.name }}"; + } + {% else %} + LOG(INFO) << "Received unexpected " << "{{ step.ctor.interface_step.interface.name }}::{{ event.name }}"; + {% endif %} + + {% for arg in event.args %} + {% if event.args.type == "fd" %} + base::ScopedFD unused_scoped_{{ arg.name }}(fd); + {% endif %} + {% endfor %} + }, + {% endfor %} + }; + + { + int err = {{ step.ctor.interface_step.interface.name }}_add_listener( + {{ step.ctor.interface_step.instance_name }}.get(), + &{{ step.ctor.interface_step.interface.name }}_listener, + &{{ step.instance_name }}); + if (err != 0) { + ADD_FAILURE() << "Failed to add listener!"; + return {}; + } + } + + // Sync with the server to ensure it receives all requests + { + int err = wl_display_roundtrip(display_.get()); + if (err < 0) { + ADD_FAILURE() << "Failed to roundtrip!"; + return {}; + } + } + + NudgeServerFor{{ step.instance_name | pascal }}Creation(); + + // Sync with the server again to process all events + { + int err = wl_display_roundtrip(display_.get()); + if (err < 0) { + ADD_FAILURE() << "Failed to roundtrip!"; + return {}; + } + } + + // We want to keep the instance but want to ignore further events. + {{ step.ctor.interface_step.interface.name }}_set_user_data({{ step.ctor.interface_step.instance_name }}.get(), nullptr); + + if (!{{ step.instance_name }}.get()) + ADD_FAILURE() + << "Required event {{ step.ctor.interface_step.interface.name }}::{{ step.ctor.message.name }}\n" + << "not received! This is needed to construct a {{ step.interface.name }} instance.\n" + << "You may need to define " + << "{{ step.interface.name | pascal }}EventTest::NudgeServerFor{{ step.instance_name | pascal }}Creation()"; + + {% endif %} + return {{ step.instance_name }}; +} + + {% endif %} + {% endfor %} + +void {{ base_fixture_name }}::NudgeServerForTestEvents() noexcept {} + +void {{ base_fixture_name }}::ValidateEventsImpl(uint32_t target_interface_version) noexcept { + display_ = std::unique_ptr<wl_display>(wl_display_connect(nullptr)); + ASSERT_THAT(display_.get(), ::testing::IsTrue()); + + registry_ = std::make_unique<WaylandClientRegistry>(display_.get()); + ASSERT_THAT(registry_.get(), ::testing::IsTrue()); + ASSERT_THAT(wl_display_roundtrip(display_.get()), ::testing::Ge(0)); + + if (ShouldSkip(target_interface_version)) { + GTEST_SKIP(); + return; + } + + {% for step in steps %} + {% if step.ctor %} + {{ step.instance_name }} = Make{{ step.instance_name|pascal }}(); + {% else %} + {% if step.interface.protocol == target_interface.protocol %} + {{ step.instance_name }} = registry_->Bind<struct {{step.interface.name}}>( + std::max(target_interface_version, {{ step.minimum_version }}u)); + {% else %} + {{ step.instance_name }} = registry_->Bind<struct {{step.interface.name}}>( + {{ step.minimum_version }}u); + {% endif %} + {% endif %} + ASSERT_THAT({{ step.instance_name }}.get(), ::testing::IsTrue()); + {% endfor %} + + {% set min_version = get_minimum_version_to_construct(target_interface) %} +// Min version: {{ min_version }} + {% for event in target_interface.events %} +// event {{ event.name }} since {{ event.since }} {{ event.since and event.since > min_version }} + {% endfor %} + + static {{ target_interface.name }}_listener {{ target_interface.name }}_listener = { + {% for event in target_interface.events %} + /* {{ event.name }} */ + [](void* user_data_, struct {{ target_interface.name }}* interface_ + {% for arg in event.args %} + {{ get_c_arg_for_client_event_arg(arg) }} + {% endfor %} + ) { + {% if event.since and event.since > min_version %} + auto* recorder = static_cast<EventRecorder*>(user_data_); + uint32_t version = {{ target_interface.name }}_get_version(interface_); + recorder->OnEvent( + "{{ target_interface.name }}::{{ event.name }}", + version); + {% endif %} + + {% for arg in event.args %} + {% if event.args.type == "fd" %} + base::ScopedFD unused_scoped_{{ arg.name }}(fd); + {% endif %} + {% endfor %} + }, + {% endfor %} + }; + + EventRecorder recorder; + + { + int err = {{ target_interface.name }}_add_listener( + {{ steps[-1].instance_name }}.get(), + &{{ target_interface.name }}_listener, + &recorder); + ASSERT_THAT(err, ::testing::Eq(0)) << "Failed to add target listener!"; + } + + // Ensure the server side receives all the creation requests + ASSERT_THAT(wl_display_roundtrip(display_.get()), ::testing::Ge(0)); + + NudgeServerForTestEvents(); + + // Ensure the server side events are received and processed + ASSERT_THAT(wl_display_roundtrip(display_.get()), ::testing::Ge(0)); + + // These expectations are really what this test is checking. + {% for event in target_interface.events %} + {% if event.since and event.since > min_version %} + { + const char* event_name = + "{{ target_interface.name }}::{{ event.name }}"; + constexpr uint32_t event_since_version = + {{ event.since or 1 }}u; + base::Optional<uint32_t> received_at_version = + recorder.MaybeGetReceivedAtVersion(event_name); + + if (target_interface_version == event_since_version) { + EXPECT_THAT(received_at_version, ::testing::Not(::testing::Eq(base::nullopt))) + << "Failed to receive " << event_name << " at interface version " + << target_interface_version + << " as the event is defined as since version " + << event_since_version << ".\n" + << "\n" + << "You may need to override:\n" + << " {{ target_interface.name | pascal }}EventTest::NudgeServerForTestEvents()\n" + << "to ensure the event is sent by the server."; + } + + if (target_interface_version >= event_since_version) { + ASSERT_THAT(received_at_version, ::testing::AnyOf( + ::testing::Eq(base::nullopt), + ::testing::Optional(::testing::Eq(target_interface_version)))) + << "Unexpected version mismatch. Test expected to create a\n" + << " {{ target_interface.name }}" + << "at version " + << target_interface_version + << " but actually created the interface at version " + << received_at_version.value_or(0u) + << "."; + } + + if (target_interface_version < event_since_version) { + EXPECT_THAT(received_at_version, ::testing::Eq(base::nullopt)) + << "Unexpectedly received " + << event_name + << " at interface version " + << received_at_version.value_or(0u) + << ".\n" + << "The event is defined as since version " + << event_since_version + << " and can cause the client to\n" + << "abort or crash if sent to a client that uses an earlier version."; + } + } + + {% endif %} + {% endfor %} +} + +void {{ base_fixture_name }}::ValidateEvents(uint32_t target_interface_version) noexcept { + ValidateEventsImpl(target_interface_version); + + if (HasFailure() && !k{{ target_interface.name | pascal }}EventTestFixtureUsesOverride) { + LOG(INFO) + << "\n" + << "Note:\n" + << " {{ target_interface.name | pascal }}EventTest\n" + << "can be defined to override the default generated code for this test.\n" + << "\n" + << "For example, to disable/skip this test, add this to\n" + << "components/exo/wayland/compatibility_test/wayland_client_event_receiver_version_fixtures.h:\n" + << "\n" + << " struct {{ target_interface.name | pascal }}EventTest\n" + << " : public {{ target_interface.name | pascal }}EventTestBase {\n" + << " bool ShouldSkip(uint32_t) const noexcept override;\n" + << " };\n" + << " bool {{ target_interface.name | pascal }}EventTest::ShouldSkip(uint32_t) const noexcept {\n" + << " return true;\n" + << " }\n" + << "\n" + << "Otherwise see that header for more general notes."; + } +} + + {% for target_interface_version in get_versions_to_test_for_event_delivery(target_interface) %} +TEST_F({{ target_interface.name | pascal }}EventTestFixture, + EventsForV{{ target_interface_version }}) { + ValidateEvents({{ target_interface_version }}); +} + + {% endfor %} +{% endfor %} +} // namespace +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo
diff --git a/components/exo/wayland/compatibility_test/template_client_helpers.cc.tmpl b/components/exo/wayland/compatibility_test/template_client_helpers.cc.tmpl new file mode 100644 index 0000000..89edfc97d --- /dev/null +++ b/components/exo/wayland/compatibility_test/template_client_helpers.cc.tmpl
@@ -0,0 +1,32 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +{% if protocol.name == 'wayland' %} +#include <wayland-client-core.h> +{% endif %} +#include "components/exo/wayland/compatibility_test/generated-{{ protocol.filename|kebab }}-client-helpers.h" + + +namespace std { + +{% for interface in protocol.interfaces|sort(attribute="name") %} +void default_delete<struct {{ interface.name }}>::operator()(struct {{ interface.name }}* instance) noexcept { + if (instance) + {% if interface.name == 'wl_display' %} + wl_display_disconnect(instance); + {% else %} + {{ interface.name }}_{{ get_destructor(interface).name or "destroy" }}(instance); + {% endif %} +} + +{% endfor %} + +} // namespace std + +{% for interface in protocol.interfaces|sort(attribute="name") %} +const wl_interface* + WaylandGlobalInterfaceDescriptor<struct {{ interface.name }}>::protocol_interface = + &{{ interface.name }}_interface; + +{% endfor %}
diff --git a/components/exo/wayland/compatibility_test/template_client_helpers.h.tmpl b/components/exo/wayland/compatibility_test/template_client_helpers.h.tmpl new file mode 100644 index 0000000..d3641c6 --- /dev/null +++ b/components/exo/wayland/compatibility_test/template_client_helpers.h.tmpl
@@ -0,0 +1,39 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +{% set header_guard = "COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_" + protocol.name|upper + "_CLIENT_HELPERS_H_" %} +#ifndef {{ header_guard }} +#define {{ header_guard }} + +#include <memory> + +#include <{{ protocol.filename }}-client-protocol.h> + +namespace std { + +{% for interface in protocol.interfaces|sort(attribute="name") %} +template <> +struct default_delete<struct {{ interface.name }}> { + void operator()(struct {{ interface.name }}*) noexcept; +}; + +{% endfor %} + +} // namespace std + +template <typename T> +struct WaylandGlobalInterfaceDescriptor; + +{% for interface in protocol.interfaces|sort(attribute="name") %} +template <> +struct WaylandGlobalInterfaceDescriptor<struct {{ interface.name }}> { + using CType = struct {{ interface.name }}; + static const wl_interface* protocol_interface; + static constexpr const char* interface_name = "{{ interface.name }}"; + static constexpr uint32_t protocol_version = {{ interface.version }}; +}; + +{% endfor %} + +#endif /* {{ header_guard }} */
diff --git a/components/exo/wayland/compatibility_test/wayland_client_event_receiver_version_fixtures.h b/components/exo/wayland/compatibility_test/wayland_client_event_receiver_version_fixtures.h new file mode 100644 index 0000000..ec3577b --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_client_event_receiver_version_fixtures.h
@@ -0,0 +1,159 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_EVENT_RECEIVER_VERSION_FIXTURES_H_ +#define COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_EVENT_RECEIVER_VERSION_FIXTURES_H_ + +// =========================================================================== +// +// This file contains optional fixture overrides/customizations for each of +// the generated fixtures. Each generated fixture has functions that can be +// overridden for: +// +// 1) Determining if the test should be skipped. The generated code skips +// tests for interface versions not supported by the server. +// +// 2) Creating target and dependent interfaces for each test. For some tests, +// the generated default creation steps may work to get a valid target +// interface. +// +// 3) "Nudge" functions called by the client test to help inject or otherwise +// trigger event generation by the server. The server may otherwise not +// send certain events without some other trigger, such as keys being +// pressed to generate keyboard input events. +// +// Understanding what can and may need to be overridden means examining the +// generated code in: +// +// out/$target/gen/components/exo/wayland/compatibility_test/ +// all_generated_client_event_receiver_version_tests.cc +// +// At present this file contains examples for only the first case. Getting more +// tests to work (see TODO's below) will require the other two types of +// overrides. +// =========================================================================== + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { +namespace { + +struct ZauraSurfaceEventTest : public ZauraSurfaceEventTestBase { + using Base = ZauraSurfaceEventTestBase; + bool ShouldSkip(uint32_t version) const noexcept override; +}; + +bool ZauraSurfaceEventTest::ShouldSkip(uint32_t version) const noexcept { + // TODO(b/157254342): Remove the skip for versions >= 8 + if (version >= 8) + return true; + return Base::ShouldSkip(version); +} + +struct WlDataOfferEventTest : public WlDataOfferEventTestBase { + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool WlDataOfferEventTest::ShouldSkip(uint32_t) const noexcept { + // TODO(b/157254342): Remove the skip for any version + return true; +} + +struct WlDataSourceEventTest : public WlDataSourceEventTestBase { + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool WlDataSourceEventTest::ShouldSkip(uint32_t) const noexcept { + // TODO(b/157254342): Remove the skip for any version + return true; +} + +struct WlPointerEventTest : public WlPointerEventTestBase { + using Base = WlPointerEventTestBase; + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool WlPointerEventTest::ShouldSkip(uint32_t version) const noexcept { + // TODO(b/157254342): Remove the skip for versions >= 5 + if (version >= 5) + return true; + return Base::ShouldSkip(version); +} + +struct WlTouchEventTest : public WlTouchEventTestBase { + using Base = WlTouchEventTestBase; + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool WlTouchEventTest::ShouldSkip(uint32_t version) const noexcept { + // TODO(b/157254342): Remove the skip for versions >= 6 + if (version >= 6) + return true; + return Base::ShouldSkip(version); +} + +struct XdgPopupEventTest : public XdgPopupEventTestBase { + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool XdgPopupEventTest::ShouldSkip(uint32_t) const noexcept { + // TODO(b/157254342): Remove the skip for any version + return true; +} + +struct ZcrGamepadV2EventTest : public ZcrGamepadV2EventTestBase { + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool ZcrGamepadV2EventTest::ShouldSkip(uint32_t) const noexcept { + // TODO(b/157254342): Remove the skip for any version + return true; +} + +struct ZcrKeyboardDeviceConfigurationV1EventTest + : public ZcrKeyboardDeviceConfigurationV1EventTestBase { + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool ZcrKeyboardDeviceConfigurationV1EventTest::ShouldSkip( + uint32_t) const noexcept { + // TODO(b/157254342): Remove the skip for any version + return true; +} + +struct ZcrRemoteShellV1EventTest : public ZcrRemoteShellV1EventTestBase { + using Base = ZcrRemoteShellV1EventTestBase; + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool ZcrRemoteShellV1EventTest::ShouldSkip(uint32_t version) const noexcept { + // Note: versions < 20 are NO LONGER supported by the server. + if (version < 20) + return true; + return Base::ShouldSkip(version); +} + +struct ZcrRemoteSurfaceV1EventTest : public ZcrRemoteSurfaceV1EventTestBase { + using Base = ZcrRemoteSurfaceV1EventTestBase; + bool ShouldSkip(uint32_t) const noexcept override; +}; + +bool ZcrRemoteSurfaceV1EventTest::ShouldSkip(uint32_t version) const noexcept { + // TODO(b/157254342): Remove the skip for any version + return true; + + // Note: versions < 20 are NO LONGER supported by the server. + // if (version < 20) + // return true; + // return Base::ShouldSkip(version); +} + +} // namespace +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo + +#endif // COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_EVENT_RECEIVER_VERSION_FIXTURES_H_
diff --git a/components/exo/wayland/compatibility_test/wayland_client_event_recorder.cc b/components/exo/wayland/compatibility_test/wayland_client_event_recorder.cc new file mode 100644 index 0000000..adca106 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_client_event_recorder.cc
@@ -0,0 +1,18 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/exo/wayland/compatibility_test/wayland_client_event_recorder.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { + +EventRecorder::EventRecorder() = default; +EventRecorder::~EventRecorder() = default; + +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo
diff --git a/components/exo/wayland/compatibility_test/wayland_client_event_recorder.h b/components/exo/wayland/compatibility_test/wayland_client_event_recorder.h new file mode 100644 index 0000000..5dc15c2 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_client_event_recorder.h
@@ -0,0 +1,41 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_EVENT_RECORDER_H_ +#define COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_EVENT_RECORDER_H_ + +#include <cstdint> +#include <string> +#include <unordered_map> + +#include "base/optional.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { + +struct EventRecorder { + EventRecorder(); + ~EventRecorder(); + + void OnEvent(const char* event_name, uint32_t version) noexcept { + data.emplace(event_name, version); + } + + base::Optional<uint32_t> MaybeGetReceivedAtVersion( + const char* event_name) const noexcept { + auto it = data.find(event_name); + return it != data.end() ? base::make_optional(it->second) : base::nullopt; + } + + std::unordered_map<std::string, uint32_t> data; +}; + +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo + +#endif // COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_EVENT_RECORDER_H_
diff --git a/components/exo/wayland/compatibility_test/wayland_client_registry.cc b/components/exo/wayland/compatibility_test/wayland_client_registry.cc new file mode 100644 index 0000000..9434cb92 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_client_registry.cc
@@ -0,0 +1,85 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +//#include <wayland-client-core.h> +#include <wayland-client-protocol.h> + +#include "base/check.h" +#include "base/logging.h" +#include "components/exo/wayland/compatibility_test/wayland_client_registry.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { + +WaylandClientRegistry::WaylandClientRegistry(wl_display* display) + : registry_(wl_display_get_registry(display)) { + static wl_registry_listener registry_listener = { + &WaylandClientRegistry::Add, + &WaylandClientRegistry::Remove, + }; + int err = wl_registry_add_listener(registry_.get(), ®istry_listener, this); + DCHECK(err == 0); +} + +WaylandClientRegistry::~WaylandClientRegistry() = default; + +base::Optional<WaylandClientRegistry::Entry> WaylandClientRegistry::GetEntry( + const char* interface_name) const noexcept { + DCHECK(registry_); + if (!registry_) + return {}; + + const auto it = globals_.find(interface_name); + if (it == globals_.end()) + return {}; + + return it->second; +} + +bool WaylandClientRegistry::Has(const char* interface_name, + uint32_t client_version) const noexcept { + const auto entry = GetEntry(interface_name); + return entry ? entry->server_version >= client_version : false; +} + +void* WaylandClientRegistry::Bind(const char* interface_name, + const struct wl_interface* protocol_interface, + uint32_t protocol_version, + uint32_t client_version) noexcept { + const auto entry = GetEntry(interface_name); + + if (!entry || entry->server_version < client_version) + return nullptr; + + // This code should be built from the same sources. While the newest + // versions of the protocol may not be used by the server, the server + // shouldn't be claiming support for an unexpected version. + DCHECK(entry->server_version <= protocol_version); + + return wl_registry_bind(registry_.get(), entry->name, protocol_interface, + client_version); +} + +void WaylandClientRegistry::Add(void* context, + wl_registry*, + uint32_t name, + const char* interface, + uint32_t version) { + WaylandClientRegistry* registry = + static_cast<WaylandClientRegistry*>(context); + registry->globals_.emplace(interface, + WaylandClientRegistry::Entry{name, version}); +} + +void WaylandClientRegistry::Remove(void*, wl_registry*, uint32_t name) { + LOG(ERROR) << "Unexpected global remove of id " << name; + DCHECK(false); +} + +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo
diff --git a/components/exo/wayland/compatibility_test/wayland_client_registry.h b/components/exo/wayland/compatibility_test/wayland_client_registry.h new file mode 100644 index 0000000..bae0206 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_client_registry.h
@@ -0,0 +1,83 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_REGISTRY_H_ +#define COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_REGISTRY_H_ + +#include <memory> +#include <string> +#include <unordered_map> + +#include <wayland-client-core.h> +#include <wayland-client-protocol.h> + +#include "base/macros.h" +#include "base/optional.h" +#include "components/exo/wayland/compatibility_test/generated-wayland-client-helpers.h" + +namespace exo { +namespace wayland { +namespace compatibility { +namespace test { + +class WaylandClientRegistry { + public: + explicit WaylandClientRegistry(wl_display* display); + ~WaylandClientRegistry(); + + WaylandClientRegistry(const WaylandClientRegistry&) = delete; + WaylandClientRegistry& operator=(const WaylandClientRegistry&) = delete; + + template <typename T> + bool Has(uint32_t client_version) const noexcept; + + template <typename T> + std::unique_ptr<T> Bind(uint32_t client_version) noexcept; + + private: + static void Add(void*, + wl_registry*, + uint32_t name, + const char* interface, + uint32_t version) noexcept; + static void Remove(void*, wl_registry*, uint32_t name) noexcept; + + struct Entry { + uint32_t name; + uint32_t server_version; + }; + + base::Optional<Entry> GetEntry(const char* interface_name) const noexcept; + bool Has(const char* interface_name, uint32_t client_version) const noexcept; + void* Bind(const char* interface_name, + const struct wl_interface* protocol_interface, + uint32_t protocol_version, + uint32_t client_version) noexcept; + + std::unique_ptr<wl_registry> registry_; + std::unordered_map<std::string, Entry> globals_; +}; + +template <typename T> +bool WaylandClientRegistry::Has(uint32_t client_version) const noexcept { + using Descriptor = WaylandGlobalInterfaceDescriptor<T>; + return Has(Descriptor::interface_name, client_version); +} + +template <typename T> +std::unique_ptr<T> WaylandClientRegistry::Bind( + uint32_t client_version) noexcept { + using Descriptor = WaylandGlobalInterfaceDescriptor<T>; + return std::unique_ptr<typename Descriptor::CType>( + static_cast<typename Descriptor::CType*>( + Bind(Descriptor::interface_name, Descriptor::protocol_interface, + Descriptor::protocol_version, client_version))); +} + +} // namespace test +} // namespace compatibility +} // namespace wayland +} // namespace exo + +#endif // COMPONENTS_EXO_WAYLAND_COMPATIBILITY_TEST_WAYLAND_CLIENT_REGISTRY_H_
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_c_arg_handling.py b/components/exo/wayland/compatibility_test/wayland_protocol_c_arg_handling.py new file mode 100644 index 0000000..92c36e9 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_c_arg_handling.py
@@ -0,0 +1,85 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import wayland_protocol_data_classes + +MessageArgType = wayland_protocol_data_classes.MessageArgType + + +def get_c_argument_type(arg_type): + # type: (MessageArgType) -> str + """Maps a protocol argument type to a C type.""" + # Note: This should match what the core scanner.c does + return { + MessageArgType.INT.value: 'int32_t', + MessageArgType.UINT.value: 'uint32_t', + MessageArgType.FIXED.value: 'wl_fixed_t', + MessageArgType.STRING.value: 'const char*', + MessageArgType.FD.value: 'int32_t', + MessageArgType.ARRAY.value: 'struct wl_array *', + MessageArgType.NEW_ID.value: 'uint32_t', + }[arg_type] + + +def get_c_arg_for_server_request_arg(arg): + # type: (MessageArg) -> str: + """Maps a protocol argument to C argument(s) for server-side requests.""" + # Note: This should match what the core scanner.c does + if arg.type == MessageArgType.NEW_ID.value and not arg.interface: + return (', const char *interface, uint32_t version, ' + 'uint32_t %s' % arg.name) + elif arg.type == MessageArgType.NEW_ID.value: + return ', uint32_t %s' % arg.name + elif arg.type == MessageArgType.OBJECT.value: + return ', struct %s *%s' % (arg.interface, arg.name) + else: + return ', %s %s' % (get_c_argument_type(arg.type), arg.name) + + +def get_c_arg_for_server_event_arg(arg): + # type: (MessageArg) -> str: + """Maps a protocol argument to C argument(s) for server-side events.""" + # Note: This should match what the core scanner.c does + if arg.type == MessageArgType.NEW_ID.value: + return ', struct wl_resource* %s' % arg.name + else: + return ', %s %s' % (get_c_argument_type(arg.type), arg.name) + + +def get_c_return_type_for_client_request(message): + # type: (Message) -> str: + """Determines the C return type for client-side requests.""" + # Note: This should match what the core scanner.c does + for arg in message.args: + if arg.type == MessageArgType.NEW_ID.value: + if arg.interface is None: + return 'void *' + else: + return 'struct %s' % arg.interface + return 'void' + + +def get_c_arg_for_client_request_arg(arg): + # type: (MessageArg) -> str: + """Maps a protocol argument to C argument(s) for client-side requeuests.""" + # Note: This should match what the core scanner.c does + if arg.type == MessageArgType.NEW_ID.value and not arg.interface: + return ', const struct wl_interface *interface, uint32_t version' + elif arg.type == MessageArgType.NEW_ID.value: + return '' + else: + return ', %s %s' % (get_c_argument_type(arg.type), arg.name) + + +def get_c_arg_for_client_event_arg(arg): + # type: (MessageArg) -> str: + """Maps a protocol argument to C argument(s) for client-side events.""" + if arg.type == MessageArgType.OBJECT.value and arg.interface is None: + return ', void * %s' % arg.name + elif arg.type == MessageArgType.NEW_ID.value: + return ', struct %s *%s' % (arg.interface, arg.name) + elif arg.type == MessageArgType.OBJECT.value: + return ', struct %s *%s' % (arg.interface, arg.name) + else: + return ', %s %s' % (get_c_argument_type(arg.type), arg.name)
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_codegen.gni b/components/exo/wayland/compatibility_test/wayland_protocol_codegen.gni new file mode 100644 index 0000000..d3fb213 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_codegen.gni
@@ -0,0 +1,57 @@ +template("wayland_protocol_codegen") { + assert(defined(invoker.template), + "Need template for for wayland_protocol_codegen") + assert(defined(invoker.sources), + "Need sources for for wayland_protocol_codegen") + assert(defined(invoker.output_pattern), + "Need output_pattern for for wayland_protocol_codegen") + + # If the invoker sets "reduce=true", we are generating a single output from + # all the source protocols. + if (defined(invoker.reduce) && invoker.reduce) { + action = "action" + } else { + action = "action_foreach" + } + + target(action, target_name) { + forward_variables_from(invoker, + [ + "data", + "data_deps", + "depfile", + "deps", + "metadata", + "pool", + "response_file_contents", + "sources", + "testonly", + ]) + + script = "//components/exo/wayland/compatibility_test/wayland_protocol_codegen.py" + inputs = [ invoker.template ] + outputs = [ invoker.output_pattern ] + + if (host_os == "win") { + clang_format_path = "//buildtools/win/clang-format.exe" + } else if (host_os == "mac") { + clang_format_path = "//buildtools/mac/clang-format" + } else if (host_os == "linux") { + clang_format_path = "//buildtools/linux64/clang-format" + } else { + assert(false) + } + + args = [ + rebase_path("//third_party", root_build_dir), + rebase_path(clang_format_path, root_build_dir), + rebase_path(invoker.template, root_build_dir), + rebase_path(invoker.output_pattern, root_build_dir), + ] + if (defined(invoker.reduce) && invoker.reduce) { + args += rebase_path(sources, root_build_dir) + } else { + args += [ "{{source}}" ] + } + } +}
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_codegen.py b/components/exo/wayland/compatibility_test/wayland_protocol_codegen.py new file mode 100644 index 0000000..0b8215cc --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_codegen.py
@@ -0,0 +1,119 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import os.path +import subprocess +import sys + +import wayland_protocol_c_arg_handling +import wayland_protocol_construction +import wayland_protocol_data_classes +import wayland_protocol_externals +import wayland_protocol_identifiers + + +def expand_template(template, context): + # type: (str, Mapping[str, Any]) -> str + """Expands the template using context, and returns the result""" + + # Loaded from third_party/jinja2 after a sys.path modification + import jinja2 + + env = jinja2.Environment( + loader=jinja2.FileSystemLoader(os.path.dirname(template)), + keep_trailing_newline=True, # newline-terminate generated files + lstrip_blocks=True, + trim_blocks=True) # so don't need {%- -%} everywhere + + # Additional global functions + env.globals['get_c_arg_for_server_request_arg'] = ( + wayland_protocol_c_arg_handling.get_c_arg_for_server_request_arg) + env.globals['get_c_arg_for_server_event_arg'] = ( + wayland_protocol_c_arg_handling.get_c_arg_for_server_event_arg) + env.globals['get_c_return_type_for_client_request'] = ( + wayland_protocol_c_arg_handling.get_c_return_type_for_client_request) + env.globals['get_c_arg_for_client_request_arg'] = ( + wayland_protocol_c_arg_handling.get_c_arg_for_client_request_arg) + env.globals['get_c_arg_for_client_event_arg'] = ( + wayland_protocol_c_arg_handling.get_c_arg_for_client_event_arg) + env.globals['get_construction_steps'] = ( + wayland_protocol_construction.get_construction_steps) + env.globals['get_destructor'] = ( + wayland_protocol_construction.get_destructor) + env.globals['get_external_interfaces_for_protocol'] = ( + wayland_protocol_externals.get_external_interfaces_for_protocol) + env.globals['get_minimum_version_to_construct'] = ( + wayland_protocol_construction.get_minimum_version_to_construct) + env.globals['get_versions_to_test_for_event_delivery'] = ( + wayland_protocol_construction.get_versions_to_test_for_event_delivery) + env.globals['is_global_interface'] = ( + wayland_protocol_construction.is_global_interface) + + # Additional filters for transforming text + env.filters['kebab'] = wayland_protocol_identifiers.kebab_case + env.filters['pascal'] = wayland_protocol_identifiers.pascal_case + + return env.get_template(os.path.basename(template)).render(context) + + +def clang_format_source_text(source_text, clang_format_path, + effective_filename): + # type: (str, str, str) -> str + """Runs clang-format on source_text and returns the result.""" + # clang-format the output, for better readability and for + # -Wmisleading-indentation. + proc = subprocess.Popen( + [clang_format_path, '--assume-filename', effective_filename], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + stdout_output, stderr_output = proc.communicate(input=source_text) + retcode = proc.wait() + if retcode != 0: + raise CalledProcessError(retcode, + 'clang-format error: ' + stderr_output) + return stdout_output + + +def write_if_changed(source_text, output): + # type: (str, str) -> None + """Writes source_text to output, but only if different.""" + if os.path.exists(output): + with open(output, 'rt') as infile: + if infile.read() == source_text: + return + + with open(output, 'wt') as outfile: + outfile.write(source_text) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('third_party_path') + parser.add_argument('clang_format_path') + parser.add_argument('template') + parser.add_argument('output') + parser.add_argument('protocols', nargs='+') + args = parser.parse_args() + + # Allows us to import jinga2 + sys.path.append(args.third_party_path) + + protocols = wayland_protocol_data_classes.Protocols.parse_xml_files( + args.protocols) + + if len(protocols.protocols) == 1: + expanded = expand_template(args.template, + {'protocol': protocols.protocols[0]}) + else: + expanded = expand_template(args.template, + {'protocols': protocols.protocols}) + + formatted = clang_format_source_text(expanded, args.clang_format_path, + args.output) + write_if_changed(formatted, args.output) + + +if __name__ == '__main__': + main()
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_construction.py b/components/exo/wayland/compatibility_test/wayland_protocol_construction.py new file mode 100644 index 0000000..1873890f --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_construction.py
@@ -0,0 +1,252 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import collections +import functools +import io +import itertools +import sys + +import wayland_protocol_data_classes +import wayland_protocol_identifiers +import wayland_protocol_utils + +RequestType = wayland_protocol_data_classes.RequestType + + +@wayland_protocol_utils.memoize(cache={}) +def get_interface_for_name(protocols, target_interface_name): + # type: (Iterable[Protocol], str) -> Optional[Interface] + """Given a name string, gets the interface that has that name, or None.""" + for protocol in protocols: + for interface in protocol.interfaces: + if interface.name == target_interface_name: + return interface + return None + + +@wayland_protocol_utils.memoize(cache={}) +def get_constructor_for_interface(target_interface): + # type: (Interface) -> Optional[Message] + """Gets the message to use to construct the target interface, or None.""" + + # Note: We assume there is only one constructor for any interface, and + # return the first found, but there could be a protocol that defines + # more than one way. + + for interface in target_interface.protocol.interfaces: + for request in interface.requests: + for arg in request.args: + if (arg.type == 'new_id' + and arg.interface == target_interface.name): + return request + for event in interface.events: + for arg in event.args: + if (arg.type == 'new_id' + and arg.interface == target_interface.name): + return event + return None + + +class ConstructionStepCtor(object): + """Message and related data for a ConstructionStep""" + def __init__(self, interface_step, message, object_args): + # type: (ConstructionStep, Message, + # Tuple[Optional['ConstructionStep'], ...]) -> None + + # The construction step for the interface needed for this step. + self.interface_step = interface_step + + # The message on the interface used to perform the construction in this + # step. Note that while this is normally a client request, it can + # occasionally be a server event. One example of that is the + # wl_data_offer in the core Wayland protocol. + self.message = message + + # For request constructors, gives the construction steps for any + # additional objects that are needed for constructing the target. + # There are entries only for the arguments that are objects. The rest + # are None. For event constructors this will always be empty. + self.object_args = object_args + + +class ConstructionStep(object): + """Represents a step in the construction path of a target interface.""" + def __init__(self, interface, instance_name, ctor, minimum_version): + # type: (Interface, str, Optional[ConstructionStepCtor], int) -> None + + # Wayland interface constructed by this step + self.interface = interface + + # A reasonable human-readable name that can be used to generate variable + # and function names for this step. The names will be unique within a + # single generated sequence of steps. + self.instance_name = instance_name + + # The details of how to construct this interface, based on other + # construction steps. This will be None if the interface in this step + # is a Wayland global interface. + self.ctor = ctor + + # Set to the minimum version needed for this interface. + self.minimum_version = minimum_version + + +@wayland_protocol_utils.memoize(cache={}) +def get_construction_steps(target_interface): + # type: (Interface) -> Tuple[ConstructionStep, ...] + """Generates the ConstructionSteps to construct a target interface.""" + + # For brevity later, get the list of protocols as a local + protocols = target_interface.protocol.protocols.protocols + + # Helper map for constructing human readable instance names + base_human_readable_name_map = ( + wayland_protocol_identifiers.get_base_human_readable_name_map( + target_interface.protocol.protocols.protocols)) + + # Globals that will be needed (not ordered) + global_steps = {} + + # Non-global instances that will be needed (ordered) + instance_steps = [] + + # To help ensure unique instance names + uniquifier = collections.Counter() + + def unique_instance_name(prefix, name): + # type: (str, str) -> str + + def dedupe_words(name): + # type: (str) -> str + + # Otherwise a generated name might be "parent_surface_surface" + # for a wl_surface passed as a parent_surface argument. + words = name.split("_") + if len(words) == 1: + return name + words = [ + w for i, w in enumerate(words[:-1]) if w not in words[i + 1] + ] + [words[-1]] + return "_".join(words) + + name = prefix + base_human_readable_name_map.get(name, name) + name = dedupe_words(name) + suffix = str(uniquifier.get(name, '')) + uniquifier[name] += 1 + return name + suffix + "_" + + def recursive_construction_steps(current_target, prefix, minimum_version): + # type: (Interface, str, int) -> ConstructionStep + + ctor_message = get_constructor_for_interface(current_target) + ctor = None + + if ctor_message is not None: + # If we have a message, we have to use another interface to + # create the current target. + ctor_interface = recursive_construction_steps( + ctor_message.interface, prefix, + max(minimum_version, + ctor_message.since if ctor_message.since else 1)) + ctor_object_args = [] + + if not ctor_message.is_event: + # We may also have to construct other interfaces as well to + # pass as object arguments. Those interfaces can be part of + # any protocol, though normally it is either in the same + # protocol or the core Wayland protocol. + for arg in ctor_message.args: + arg_step = None + if arg.type == 'object': + arg_interface = get_interface_for_name( + protocols, arg.interface) + arg_step = recursive_construction_steps( + arg_interface, '%s%s_' % (prefix, arg.name), 1) + ctor_object_args.append(arg_step) + + ctor = ConstructionStepCtor(ctor_interface, ctor_message, + tuple(ctor_object_args)) + + # Construct the step + step = ConstructionStep(interface=current_target, + instance_name=unique_instance_name( + prefix if ctor is not None else '', + current_target.name), + ctor=ctor, + minimum_version=minimum_version) + + if ctor is None: + # For a global, interface, we only make/get one instance + step = global_steps.setdefault(current_target.name, step) + else: + # Otherwise store each individual step + instance_steps.append(step) + + return step + + recursive_construction_steps(target_interface, '', 1) + + return tuple([global_steps[name] + for name in sorted(global_steps)] + instance_steps) + + +@wayland_protocol_utils.memoize(cache={}) +def get_destructor(interface): + # type: (Interface) -> Optional[Message] + """Gets the Message that acts as the interface destructor, if present.""" + for message in interface.requests: + if message.request_type == RequestType.DESTRUCTOR.value: + return message + return None + + +def get_minimum_version_to_construct(target): + # type: (Interface) -> int + """Gets the minimum version of the global needed to construct a target.""" + def recursive_minimum(interface, minimum_version): + # type: (Interface, int) -> int + + ctor_message = get_constructor_for_interface(interface) + + # If there is no explicit constructor for this target, it must be a + # global + if not ctor_message: + # Return the global interface + return minimum_version + + # If the constructor has a "since", it constrains the minimum version + if ctor_message.since: + minimum_version = max(minimum_version, ctor_message.since) + + return recursive_minimum(ctor_message.interface, minimum_version) + + # Until proven otherwise, assume the first version can create the target + return recursive_minimum(target, 1) + + +def get_versions_to_test_for_event_delivery(interface): + # type: (Interface) -> Tuple[int, ...] + """Returns the list of versions around which the interface changes.""" + + # Get the minimum interface version + min_version = get_minimum_version_to_construct(interface) + + # Include all versions where events are introduced + versions = set(event.since for event in interface.events + if event.since and event.since > min_version) + # Include all versions one less than where events are introduced + versions = versions.union(event.since - 1 for event in interface.events + if event.since and event.since - 1 > min_version) + # Include the minimum and maximum versions + versions = versions.union((min_version, interface.version)) + + return tuple(versions) + + +def is_global_interface(interface): + # type: (Interface) -> bool + """Returns true if the interface is a global interface.""" + return get_constructor_for_interface(interface) is None
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_data_classes.py b/components/exo/wayland/compatibility_test/wayland_protocol_data_classes.py new file mode 100644 index 0000000..a00d97d --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_data_classes.py
@@ -0,0 +1,519 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os.path +import xml.etree.ElementTree + +import wayland_protocol_utils + +EnumValue = wayland_protocol_utils.EnumValue + + +class Description(object): + """Holds the data from a Wayland protocol <description> subtree.""" + def __init__(self, summary, description): + # type: (str, str) -> None + + # The value of the name summary of the <description>. + object.__setattr__(self, 'summary', summary) + + # The text content of the <description>. + object.__setattr__(self, 'description', description) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return 'Description(summary=%r, description=%r)' % (self.summary, + self.description) + + def __hash__(self): + return hash((self.summary, self.description)) + + def __eq__(self, other): + return ((self.summary, self.description) == (other.summary, + other.description)) + + @staticmethod + def parse_xml(e): + # type: (Element) -> Optional[Description] + + return Description(summary=e.get('summary'), + description=e.text.strip() + if e.text else '') if e is not None else None + + +class MessageArgType(object): + """The valid types of an <arg>.""" + INT = EnumValue('int') + UINT = EnumValue('uint') + FIXED = EnumValue('fixed') + STRING = EnumValue('string') + FD = EnumValue('fd') # File descriptor + ARRAY = EnumValue('array') # untyped Array + NEW_ID = EnumValue('new_id') # Special type for constructing + OBJECT = EnumValue('object') # An interface + + +class MessageArg(object): + """Holds the data from a Wayland protocol <arg> subtree.""" + def __init__(self, message, name, type, summary, interface, nullable, enum, + description): + # type: (Message, str, MessageArgType, Optional[str], Optional[str], + # Optional[bool], Optional[str], Optional[Description]) -> None + + # The containing Message, for context. + object.__setattr__(self, 'message', message) + + # The value of the name attribute of the <arg>. + object.__setattr__(self, 'name', name) + + # The value of the type attribute of the <arg>. + object.__setattr__(self, 'type', type) + + # The value of the optional summary attribute of the <arg>. + object.__setattr__(self, 'summary', summary) + + # The value of the optional interface attribute of the <arg>. + object.__setattr__(self, 'interface', interface) + + # The value of the optional nullable attribute of the <arg>. + object.__setattr__(self, 'nullable', nullable) + + # The value of the optional enum attribute of the <arg>. + object.__setattr__(self, 'enum', enum) + + # The optional <description> child element of the <arg>. + object.__setattr__(self, 'description', description) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return ('MessageArg(name=%r, type=%r, summary=%r, interface=%r, ' + 'nullable=%r, enum=%r, description=%r)' % + (self.name, self.type, self.summary, self.interface, + self.nullable, self.enum, self.description)) + + def __hash__(self): + return hash((self.name, self.type, self.summary, self.interface, + self.nullable, self.enum, self.description)) + + def __eq__(self, other): + return ((self.name, self.type, self.summary, self.interface, + self.nullable, self.enum, + self.description) == (other.name, other.type, other.summary, + other.interface, other.nullable, + other.enum, other.description)) + + @staticmethod + def parse_xml(message, e): + # type: (Message, Element) -> MessageArg + return MessageArg(message=message, + name=e.get('name'), + type=e.get('type'), + summary=e.get('summary'), + interface=e.get('interface'), + nullable=e.get('allow-null') == 'true' + if e.get('allow-null') else None, + enum=e.get('enum'), + description=Description.parse_xml( + e.find('description'))) + + +class RequestType(object): + """The valid types of a <request> message.""" + DESTRUCTOR = EnumValue('destructor') + + +class Message(object): + """Holds the data from a Wayland protocol <request> OR <event> subtree.""" + def __init__(self, interface, is_event, name, request_type, since, + description): + # type: (Interface, bool, str, Optional[RequestType], Optional[int], + # Optional[Description]) -> None + + # The containing Interface, for context. + object.__setattr__(self, 'interface', interface) + + # If true, this message is an <event> in the containing interface. + # Otherwise it is a <request>. + object.__setattr__(self, 'is_event', is_event) + + # The value of the name attribute of the <request> or <event>. + object.__setattr__(self, 'name', name) + + # The value of the optional type attribute of the <request> Always empty + # for <events>. + object.__setattr__(self, 'request_type', request_type) + + # The value of the optional since attribute of the <request> or <event>. + object.__setattr__(self, 'since', since) + + # The optional <description> child element of the <request> or <event>. + object.__setattr__(self, 'description', description) + + # The child <arg> elements of the <request> or <event> + # type: Tuple[MessageArg, ...] + object.__setattr__(self, 'args', ()) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return ('Message(is_event=%r, name=%r, request_type=%r, since=%r, ' + 'description=%r, args=%r)' % + (self.is_event, self.name, self.request_type, self.since, + self.description, self.args)) + + def __hash__(self): + return hash((self.is_event, self.name, self.request_type, self.since, + self.description, self.args)) + + def __eq__(self, other): + return ((self.is_event, self.name, self.request_type, self.since, + self.description, + self.args) == (other.is_event, other.name, other.request_type, + other.since, other.description, other.args)) + + @staticmethod + def parse_xml(interface, is_event, e): + # type (Interface, bool, Element) -> Message + + message = Message( + interface=interface, + is_event=is_event, + name=e.get('name'), + request_type=e.get('type'), + since=int(e.get('since')) if e.get('since') else None, + description=Description.parse_xml(e.find('description'))) + + # Note: This is needed to finish up since the instance is frozen. + object.__setattr__( + message, 'args', + tuple(MessageArg.parse_xml(message, c) for c in e.findall('arg'))) + + return message + + +class EnumEntry(object): + """Holds the data from a Wayland protocol <entry> subtree.""" + def __init__(self, enum, name, value, summary, since, description): + # type: (Enum, str, int, Optional[str], Optional[int], + # Optional[Description]) -> None + + # The containing Enum, for context. + object.__setattr__(self, 'enum', enum) + + # The value of the name attribute of the <entry>. + object.__setattr__(self, 'name', name) + + # The value of the value attribute of the <entry>. + object.__setattr__(self, 'value', value) + + # The value of the optional summary attribute of the <entry>. + object.__setattr__(self, 'summary', summary) + + # The value of the optional since attribute of the <entry>. + object.__setattr__(self, 'since', since) + + # The optional <description> child element of the <request> or <event>. + object.__setattr__(self, 'description', description) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return ('EnumEntry(name=%r, value=%r, summary=%r, since=%r,' + 'description=%r)' % (self.name, self.value, self.summary, + self.since, self.description)) + + def __hash__(self): + return hash((self.name, self.value, self.summary, self.since, + self.description)) + + def __eq__(self, other): + return ((self.name, self.value, self.summary, self.since, + self.description) == (other.enum, other.name, other.value, + other.summary, other.since, + other.description)) + + @staticmethod + def parse_xml(enum, e): + # type: (Enum, Element) -> EnumEntry: + + return EnumEntry( + enum=enum, + name=e.get('name'), + value=int(e.get('value'), 0), + summary=e.get('summary'), + since=int(e.get('since'), 0) if e.get('since') else None, + description=Description.parse_xml(e.find('description'))) + + +class Enum(object): + """Holds the data from a Wayland protocol <enum> subtree.""" + def __init__(self, interface, name, since, bitfield, description): + # type: (Interface, str, Optional[int], Optional[bool], + # Optional[Description]) -> None + + # The containing Interface, for context. + object.__setattr__(self, 'interface', interface) + + # The value of the name attribute of the <enum>. + object.__setattr__(self, 'name', name) + + # The value of the optional since attribute of the <enum>. + object.__setattr__(self, 'since', since) + + # The value of the optional bitfield attribute of the <enum>. + object.__setattr__(self, 'bitfield', bitfield) + + # The optional <description> child element of the <request> or <event>. + object.__setattr__(self, 'description', description) + + # The child <entry> elements for the <enum>. + # type: Tuple[EnumEntry, ...] + object.__setattr__(self, 'entries', ()) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return ('EnumEntry(name=%r, since=%r, bitfield=%r, description=%r, ' + 'entries=%r)' % (self.name, self.since, self.bitfield, + self.description, self.entries)) + + def __hash__(self): + return hash((self.name, self.since, self.bitfield, self.description, + self.entries)) + + def __eq__(self, other): + return ((self.name, self.since, self.bitfield, self.description, + self.entries) == (other.name, other.since, other.bitfield, + other.description, other.entries)) + + @staticmethod + def parse_xml(interface, e): + # type: (Interface, Element) -> Enum + + enum = Enum(interface=interface, + name=e.get('name'), + since=int(e.get('since'), 0) if e.get('since') else None, + bitfield=e.get('bitfield') == 'true' + if e.get('bitfield') else None, + description=Description.parse_xml(e.find('description'))) + + # Note: This is needed to finish up since the instance is frozen. + object.__setattr__( + enum, 'entries', + tuple(EnumEntry.parse_xml(enum, c) for c in e.findall('entry'))) + + return enum + + +class Interface(object): + """Holds the data from a Wayland protocol <interface> subtree.""" + def __init__(self, protocol, name, version, description): + # type: (Protocol, str, int, Optional[Description]) -> None + + # The containing Protocol, for context. + object.__setattr__(self, 'protocol', protocol) + + # The value of the name attribute of the <interface>. + object.__setattr__(self, 'name', name) + + # The value of the version attribute of the <interface>. + object.__setattr__(self, 'version', version) + + # The optional <description> child element of the <interface>. + object.__setattr__(self, 'description', description) + + # The child <request> elements for the <interface>. + # type: Tuple[Message, ...] + object.__setattr__(self, 'requests', ()) + + # The child <event> elements for the <interface>. + # type: Tuple[Message, ...] + object.__setattr__(self, 'events', ()) + + # The child <enum> elements for the <interface>. + # type: Tuple[Enum, ...] + object.__setattr__(self, 'enums', ()) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return ('Interface(name=%r, version=%r, description=%r, requests=%r, ' + 'events=%r, enums=%r)' % + (self.name, self.version, self.description, self.requests, + self.events, self.enums)) + + def __hash__(self): + return hash((self.name, self.version, self.description, self.requests, + self.events, self.enums)) + + def __eq__(self, other): + return ((self.name, self.version, self.description, self.requests, + self.events, + self.enums) == (other.name, other.version, other.description, + other.requests, other.events.other, enums)) + + @staticmethod + def parse_xml(protocol, e): + # type: (Protocol, Element) -> Interface + interface = Interface(protocol=protocol, + name=e.get('name'), + version=int(e.get('version'), 0), + description=Description.parse_xml( + e.find('description'))) + + # Note: This is needed to finish up since the instance is frozen. + object.__setattr__( + interface, 'requests', + tuple( + Message.parse_xml(interface, False, c) + for c in e.findall('request'))) + object.__setattr__( + interface, 'events', + tuple( + Message.parse_xml(interface, True, c) + for c in e.findall('event'))) + object.__setattr__( + interface, 'enums', + tuple(Enum.parse_xml(interface, c) for c in e.findall('enum'))) + + return interface + + +class Copyright(object): + """Holds the data from a Wayland protocol <copyright> subtree.""" + def __init__(self, text): + # type: (str) -> None + + # The text content of the <copyright>. + object.__setattr__(self, 'text', text) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return 'Copyright(text=%r)' % (self.text, ) + + def __hash__(self): + return hash((self.text, )) + + def __eq__(self, other): + return (self.text, ) == (other.text, ) + + @staticmethod + def parse_xml(e): + # type: (Element) -> Optional['Copyright'] + + return Copyright(text=e.text.strip()) if e is not None else None + + +class Protocol(object): + """Holds the data from a Wayland protocol <protocol> subtree.""" + def __init__(self, protocols, filename, name, copyright, description): + # type: (Protocols, str, str, Optional[Copyright], + # Optional[Description]) -> None + + # The universe of known protocols this is part of. + object.__setattr__(self, 'protocols', protocols) + + # The containing base filename (no path, no extension), for context. + object.__setattr__(self, 'filename', filename) + + # The value of the name attribute of the <protocol>. + object.__setattr__(self, 'name', name) + + # The optional <copyright> child element of the <protocol>. + object.__setattr__(self, 'copyright', copyright) + + # The optional <description> child element of the <protocol>. + object.__setattr__(self, 'description', description) + + # The child <interface> elements for the <protocol>. + # type: Tuple[Interface, ...] + object.__setattr__(self, 'interfaces', ()) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return ('Protocol(filename=%r, name=%r, copyright=%r, description=%r, ' + 'interfaces=%r)' % (self.filename, self.name, self.copyright, + self.description, self.interfaces)) + + def __hash__(self): + return hash((self.filename, self.name, self.copyright, + self.description, self.interfaces)) + + def __eq__(self, other): + return ((self.filename, self.name, self.copyright, self.description, + self.interfaces) == (other.filename, other.name, + other.copyright, other.description, + other.interfaces)) + + @staticmethod + def parse_xml(protocols, filename, e): + # type: (Protocols, str, Element) -> Protocol + + protocol = Protocol(protocols, + filename=filename, + name=e.get('name'), + copyright=Copyright.parse_xml(e.find('copyright')), + description=Description.parse_xml( + e.find('description'))) + + # Note: This is needed to finish up since the instance is frozen. + object.__setattr__( + protocol, 'interfaces', + tuple( + Interface.parse_xml(protocol, i) + for i in e.findall('interface'))) + + return protocol + + +class Protocols(object): + """Holds the data from multiple Wayland protocol files.""" + def __init__(self): + # type: () -> None + + # The parsed protocol dataclasses + # type: Tuple[Protocol, ...] + object.__setattr__(self, 'protocols', ()) + + def __setattr__(self, name, value): + raise AttributeError('Frozen instance') + + def __repr__(self): + return 'Protocols(protocols=%r)' % (self.protocols, ) + + def __hash__(self): + return hash((self.protocols, )) + + def __eq__(self, other): + return ((self.protocols, ) == (other.protocols, )) + + @staticmethod + def parse_xml_files(filenames): + # type: (Iterable[str]) -> Protocols + + protocols = Protocols() + + # Note: This is needed to finish up since the instance is frozen. + object.__setattr__( + protocols, 'protocols', + tuple( + Protocol.parse_xml( + protocols, + os.path.splitext(os.path.basename(filename))[0], + xml.etree.ElementTree.parse(filename).getroot()) + for filename in filenames)) + + return protocols
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_externals.py b/components/exo/wayland/compatibility_test/wayland_protocol_externals.py new file mode 100644 index 0000000..52717249 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_externals.py
@@ -0,0 +1,25 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import wayland_protocol_data_classes + + +def get_external_interfaces_for_protocol(protocol): + # type: (Protocol) -> Tuple[str, ...] + """Gets the names of interfaces referenced but not defined by a protocol.""" + + # Get the set of interfaces defined by the protocol + defined_interfaces = set(i.name for i in protocol.interfaces) + + # Get and store the set of interfaces that are external to the protocol + external_interface_names = set() + for i in protocol.interfaces: + external_interface_names.update( + a.interface for r in i.requests for a in r.args + if a.interface and a.interface not in defined_interfaces) + external_interface_names.update( + a.interface for e in i.events for a in e.args + if a.interface and a.interface not in defined_interfaces) + + return tuple(external_interface_names)
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_identifiers.py b/components/exo/wayland/compatibility_test/wayland_protocol_identifiers.py new file mode 100644 index 0000000..8e509de3 --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_identifiers.py
@@ -0,0 +1,109 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import collections +import functools +import itertools +import re + +import wayland_protocol_data_classes +import wayland_protocol_utils + + +def split_for_words(x): + # type: (str) -> Tuple[str, ...] + """Split underscore_seperated identifiers into a component words.""" + return tuple(w.lower() for w in x.split('_')) + + +def kebab_case(x): + # type: (str) -> str + """Convert the input identifier to kebab-case""" + return '-'.join(split_for_words(x)) + + +def pascal_case(x): + # type: (str) -> str + """Convert the input identifier to PascalCase""" + return ''.join(w.title() for w in split_for_words(x)) + + +@wayland_protocol_utils.memoize(cache={}) +def get_base_human_readable_name_map(protocols): + # type: (Iterable[Protocol]) -> Dict[str, str] + """Determines a mapping of each interface name to an identifier name.""" + + # Default to the full interface name as the identifier. + interface_identifiers = dict((interface.name, interface.name) + for protocol in protocols + for interface in protocol.interfaces) + + # Reserve the full interface names as identifiers, so nothing is + # ever shortened to another interface name. + used = set(interface_identifiers.keys()) + + def set_identifier_name_for_protocol(names, interface): + # type: (Iterable[str], Interface) -> None + """Set the first unused name in |names| as the name for |interface|""" + for name in names: + if name not in used: + used.add(name) + interface_identifiers[interface.name] = name + return + + def set_identifier_names_for_interface(interfaces): + # type: (Iterable[Interface]) -> None + """Try and set a shorter name for each interface""" + # For each interface in protocol, try and find a shorter name to use + # when representing instances of that interface. + for interface in interfaces: + name = interface.name + name_no_prefix = name.split('_', 1)[-1] + name_no_suffix = re.sub('_v\d+$', '', name) + name_no_prefix_or_suffix = re.sub(r'_v\d+$', '', name_no_prefix) + + set_identifier_name_for_protocol( + [name_no_prefix_or_suffix, name_no_prefix, name_no_suffix], + interface) + + def prioritize_interfaces(interfaces): + # type: (Iterable[Interface]) -> Tuple[Interface, ...] + + DEFAULT_STABLE_PRIORITY = 100 + DEFAULT_UNSTABLE_PRIORITY = 101 + UNSTABLE_PREFIX = 'z' + prefix_priorities = dict(wl_=0, + wp_=1, + xdg_=2, + zwl_=10, + zwp_=11, + zxdg_=12, + aura_=200, + cr_=201, + zaura_=202, + zcr_=203) + + interfaces_by_priority = collections.defaultdict(list) + + for protocol in protocols: + for interface in protocol.interfaces: + name = interface.name + priority = DEFAULT_STABLE_PRIORITY if not name.startswith( + UNSTABLE_PREFIX) else DEFAULT_UNSTABLE_PRIORITY + for prefix, prefix_priority in prefix_priorities.items(): + if name.startswith(prefix): + priority = prefix_priority + break + interfaces_by_priority[priority].append(interface) + + return tuple( + itertools.chain(*tuple(interfaces_by_priority[p] + for p in sorted(interfaces_by_priority)))) + + set_identifier_names_for_interface( + prioritize_interfaces( + tuple( + itertools.chain(*tuple(protocol.interfaces + for protocol in protocols))))) + return interface_identifiers
diff --git a/components/exo/wayland/compatibility_test/wayland_protocol_utils.py b/components/exo/wayland/compatibility_test/wayland_protocol_utils.py new file mode 100644 index 0000000..0e35efe --- /dev/null +++ b/components/exo/wayland/compatibility_test/wayland_protocol_utils.py
@@ -0,0 +1,30 @@ +# Copyright 2020 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import functools + + +# Use functools.lru_cache in Python 3 and up. +def memoize(cache): + """Minimal memoization decorator""" + def decorator(func): + def wrapper(*args): + try: + return cache[args] + except KeyError: + pass # Not found + + result = func(*args) + cache[args] = result + return result + + return functools.update_wrapper(wrapper, func) + + return decorator + + +class EnumValue(object): + """Minimal enum value wrapper to look like Python3's Enum class.""" + def __init__(self, value): + self.value = value \ No newline at end of file
diff --git a/components/find_in_page/find_result_observer.h b/components/find_in_page/find_result_observer.h index 9dde58e..1125d5d 100644 --- a/components/find_in_page/find_result_observer.h +++ b/components/find_in_page/find_result_observer.h
@@ -19,6 +19,7 @@ public: virtual void OnFindResultAvailable(content::WebContents* web_contents) = 0; + virtual void OnFindEmptyText(content::WebContents* web_contents) {} virtual void OnFindTabHelperDestroyed(FindTabHelper* helper) {} };
diff --git a/components/find_in_page/find_tab_helper.cc b/components/find_in_page/find_tab_helper.cc index 87db874..72da4ba 100644 --- a/components/find_in_page/find_tab_helper.cc +++ b/components/find_in_page/find_tab_helper.cc
@@ -51,17 +51,18 @@ const base::char16 kInvalidChars[] = {'\r', 0}; base::RemoveChars(search_string, kInvalidChars, &search_string); - // If search_string is empty, it means FindNext was pressed with a keyboard - // shortcut so unless we have something to search for we return early. - if (search_string.empty() && find_text_.empty()) { - search_string = GetInitialSearchText(); + // Keep track of what the last search was across the tabs. + if (delegate_) + delegate_->SetLastSearchText(search_string); - if (search_string.empty()) - return; + if (search_string.empty()) { + StopFinding(find_in_page::SelectionAction::kClear); + for (auto& observer : observers_) + observer.OnFindEmptyText(web_contents_); + return; } - // NB: search_string will be empty when using the FindNext keyboard shortcut. - bool new_session = (find_text_ != search_string && !search_string.empty()) || + bool new_session = find_text_ != search_string || (last_search_case_sensitive_ != case_sensitive) || find_op_aborted_; @@ -70,24 +71,16 @@ if (!new_session && !find_match) return; - // Keep track of the previous search. - previous_find_text_ = find_text_; - current_find_request_id_ = find_request_id_counter_++; if (new_session) current_find_session_id_ = current_find_request_id_; - if (!search_string.empty()) - find_text_ = search_string; + previous_find_text_ = find_text_; + find_text_ = search_string; last_search_case_sensitive_ = case_sensitive; - find_op_aborted_ = false; should_find_match_ = find_match; - // Keep track of what the last search was across the tabs. - if (delegate_) - delegate_->SetLastSearchText(find_text_); - auto options = blink::mojom::FindOptions::New(); options->forward = forward_direction; options->match_case = case_sensitive;
diff --git a/components/heap_profiling/multi_process/test_driver.cc b/components/heap_profiling/multi_process/test_driver.cc index cf61046..fb67ecb 100644 --- a/components/heap_profiling/multi_process/test_driver.cc +++ b/components/heap_profiling/multi_process/test_driver.cc
@@ -17,6 +17,7 @@ #include "base/stl_util.h" #include "base/test/bind_test_util.h" #include "base/threading/platform_thread.h" +#include "base/trace_event/heap_profiler.h" #include "base/trace_event/heap_profiler_event_filter.h" #include "base/values.h" #include "build/build_config.h"
diff --git a/components/lookalikes/core/lookalike_url_util.cc b/components/lookalikes/core/lookalike_url_util.cc index 15d92ed..c2a0cbe6 100644 --- a/components/lookalikes/core/lookalike_url_util.cc +++ b/components/lookalikes/core/lookalike_url_util.cc
@@ -34,7 +34,7 @@ namespace lookalikes { -const char kHistogramName[] = "NavigationSuggestion.Event"; +const char kHistogramName[] = "NavigationSuggestion.Event2"; void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterListPref(prefs::kLookalikeWarningAllowlistDomains);
diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java index eb9d377b..5a30a85 100644 --- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java +++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CastUtils.java
@@ -4,6 +4,10 @@ package org.chromium.components.media_router.caf; +import android.app.Application; +import android.content.Context; +import android.content.ContextWrapper; + import com.google.android.gms.cast.framework.CastContext; import org.chromium.base.ContextUtils; @@ -12,7 +16,18 @@ public class CastUtils { /** Helper method to return the {@link CastContext} instance. */ public static CastContext getCastContext() { - return CastContext.getSharedInstance(ContextUtils.getApplicationContext()); + Context context = ContextUtils.getApplicationContext(); + // The GMS Cast framework assumes the passed {@link Context} returns an instance of {@link + // Application} from {@link getApplicationContext()}, so we make sure to remove any + // wrappers. + while (!(context.getApplicationContext() instanceof Application)) { + if (context instanceof ContextWrapper) { + context = ((ContextWrapper) context).getBaseContext(); + } else { + return null; + } + } + return CastContext.getSharedInstance(context); } /**
diff --git a/components/metrics/test/demographic_metrics_test_utils.cc b/components/metrics/test/demographic_metrics_test_utils.cc index b3b056d..069a5ef 100644 --- a/components/metrics/test/demographic_metrics_test_utils.cc +++ b/components/metrics/test/demographic_metrics_test_utils.cc
@@ -8,7 +8,6 @@ #include "base/time/default_clock.h" #include "base/time/default_tick_clock.h" #include "components/metrics/log_decoder.h" -#include "components/sync/base/pref_names.h" #include "components/sync/base/user_demographics.h" #include "components/sync/engine_impl/loopback_server/persistent_unique_client_entity.h" #include "components/sync/protocol/sync.pb.h" @@ -23,13 +22,13 @@ UserDemographicsProto::Gender gender) { sync_pb::EntitySpecifics specifics; specifics.mutable_priority_preference()->mutable_preference()->set_name( - syncer::prefs::kSyncDemographics); + syncer::kSyncDemographicsPrefName); specifics.mutable_priority_preference()->mutable_preference()->set_value( base::StringPrintf("{\"birth_year\":%d,\"gender\":%d}", birth_year, static_cast<int>(gender))); fake_server->InjectEntity( syncer::PersistentUniqueClientEntity::CreateFromSpecificsForTesting( - /*non_unique_name=*/syncer::prefs::kSyncDemographics, + /*non_unique_name=*/syncer::kSyncDemographicsPrefName, /*client_tag=*/specifics.preference().name(), specifics, /*creation_time=*/0, /*last_modified_time=*/0)); @@ -79,7 +78,7 @@ int GetNoisedBirthYear(const PrefService& pref_service, int raw_birth_year) { int birth_year_offset = - pref_service.GetInteger(syncer::prefs::kSyncDemographicsBirthYearOffset); + pref_service.GetInteger(syncer::kSyncDemographicsBirthYearOffsetPrefName); return birth_year_offset + raw_birth_year; }
diff --git a/components/on_load_script_injector/browser/BUILD.gn b/components/on_load_script_injector/browser/BUILD.gn index 247857a3..8d44eab 100644 --- a/components/on_load_script_injector/browser/BUILD.gn +++ b/components/on_load_script_injector/browser/BUILD.gn
@@ -12,9 +12,13 @@ defines = [ "ON_LOAD_SCRIPT_INJECTOR_IMPLEMENTATION" ] - deps = [ + public_deps = [ "//base", "//components/on_load_script_injector:export", + "//url", + ] + + deps = [ "//components/on_load_script_injector:on_load_script_injector_mojom", "//content/public/browser", "//mojo/public/cpp/bindings",
diff --git a/components/on_load_script_injector/browser/on_load_script_injector_host.cc b/components/on_load_script_injector/browser/on_load_script_injector_host.cc index a9c4564f..c02a296 100644 --- a/components/on_load_script_injector/browser/on_load_script_injector_host.cc +++ b/components/on_load_script_injector/browser/on_load_script_injector_host.cc
@@ -6,6 +6,13 @@ #include <utility> +#include "base/numerics/safe_math.h" +#include "base/strings/utf_string_conversions.h" +#include "components/on_load_script_injector/on_load_script_injector.mojom.h" +#include "content/public/browser/render_frame_host.h" +#include "mojo/public/cpp/bindings/associated_remote.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" + namespace on_load_script_injector { OriginScopedScript::OriginScopedScript() = default; @@ -22,4 +29,104 @@ OriginScopedScript::~OriginScopedScript() = default; +template <typename ScriptId> +OnLoadScriptInjectorHost<ScriptId>::OnLoadScriptInjectorHost() = default; +template <typename ScriptId> +OnLoadScriptInjectorHost<ScriptId>::~OnLoadScriptInjectorHost() = default; + +template <typename ScriptId> +void OnLoadScriptInjectorHost<ScriptId>::AddScript( + ScriptId id, + std::vector<url::Origin> origins_to_inject, + base::StringPiece script) { + // If there is no script with the identifier |id|, then create a place for + // it at the end of the injection sequence. + if (before_load_scripts_.find(id) == before_load_scripts_.end()) + before_load_scripts_order_.push_back(id); + + // Convert script to UTF-16. + base::string16 script_utf16 = base::UTF8ToUTF16(script); + size_t script_utf16_size = + (base::CheckedNumeric<size_t>(script_utf16.size()) * sizeof(base::char16)) + .ValueOrDie(); + base::WritableSharedMemoryRegion script_shared_memory = + base::WritableSharedMemoryRegion::Create(script_utf16_size); + memcpy(script_shared_memory.Map().memory(), script_utf16.data(), + script_utf16_size); + + base::ReadOnlySharedMemoryRegion script_shared_memory_readonly = + base::WritableSharedMemoryRegion::ConvertToReadOnly( + std::move(script_shared_memory)); + CHECK(script_shared_memory_readonly.IsValid()); + + before_load_scripts_[id] = OriginScopedScript( + origins_to_inject, std::move(script_shared_memory_readonly)); +} + +template <typename ScriptId> +void OnLoadScriptInjectorHost<ScriptId>::AddScriptForAllOrigins( + ScriptId id, + base::StringPiece script) { + AddScript(id, {kMatchAllOrigins}, script); +} + +template <typename ScriptId> +void OnLoadScriptInjectorHost<ScriptId>::RemoveScript(ScriptId id) { + before_load_scripts_.erase(id); + + for (auto script_id_iter = before_load_scripts_order_.begin(); + script_id_iter != before_load_scripts_order_.end(); ++script_id_iter) { + if (*script_id_iter == id) { + before_load_scripts_order_.erase(script_id_iter); + return; + } + } + + LOG(WARNING) << "Ignoring attempt to remove unknown OnLoad script: " << id; +} + +template <typename ScriptId> +void OnLoadScriptInjectorHost<ScriptId>::InjectScriptsForURL( + const GURL& url, + content::RenderFrameHost* render_frame_host) { + DCHECK(url.is_valid()); + + mojo::AssociatedRemote<mojom::OnLoadScriptInjector> injector; + render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface(&injector); + + injector->ClearOnLoadScripts(); + + if (before_load_scripts_.empty()) + return; + + // Provision the renderer's ScriptInjector with the scripts associated with + // |url|. + for (ScriptId script_id : before_load_scripts_order_) { + const OriginScopedScript& script = before_load_scripts_[script_id]; + if (IsUrlMatchedByOriginList(url, script.origins())) + injector->AddOnLoadScript(script.script().Duplicate()); + } +} + +template <typename ScriptId> +bool OnLoadScriptInjectorHost<ScriptId>::IsUrlMatchedByOriginList( + const GURL& url, + const std::vector<url::Origin>& allowed_origins) { + url::Origin url_origin = url::Origin::Create(url); + + for (const url::Origin& allowed_origin : allowed_origins) { + if (allowed_origin == kMatchAllOrigins) + return true; + + DCHECK(!allowed_origin.opaque()); + if (url_origin.IsSameOriginWith(allowed_origin)) + return true; + } + + return false; +} + +template class OnLoadScriptInjectorHost<std::string>; +template class OnLoadScriptInjectorHost<uint64_t>; + } // namespace on_load_script_injector
diff --git a/components/on_load_script_injector/browser/on_load_script_injector_host.h b/components/on_load_script_injector/browser/on_load_script_injector_host.h index 0c7f552c..5e36a806 100644 --- a/components/on_load_script_injector/browser/on_load_script_injector_host.h +++ b/components/on_load_script_injector/browser/on_load_script_injector_host.h
@@ -10,17 +10,13 @@ #include <vector> #include "base/memory/read_only_shared_memory_region.h" -#include "base/numerics/safe_math.h" -#include "base/strings/utf_string_conversions.h" -#include "build/build_config.h" #include "components/on_load_script_injector/export.h" -#include "components/on_load_script_injector/on_load_script_injector.mojom.h" -#include "content/public/browser/navigation_handle.h" -#include "content/public/browser/render_frame_host.h" -#include "mojo/public/cpp/bindings/associated_remote.h" -#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "url/origin.h" +namespace content { +class RenderFrameHost; +} // namespace content + namespace on_load_script_injector { class ON_LOAD_SCRIPT_INJECTOR_EXPORT OriginScopedScript { @@ -44,10 +40,10 @@ // Manages the set of scripts to be injected into document just prior to // document load. template <typename ScriptId> -class OnLoadScriptInjectorHost { +class ON_LOAD_SCRIPT_INJECTOR_EXPORT OnLoadScriptInjectorHost { public: - OnLoadScriptInjectorHost() = default; - ~OnLoadScriptInjectorHost() = default; + OnLoadScriptInjectorHost(); + ~OnLoadScriptInjectorHost(); OnLoadScriptInjectorHost(const OnLoadScriptInjectorHost&) = delete; OnLoadScriptInjectorHost& operator=(const OnLoadScriptInjectorHost&) = delete; @@ -60,92 +56,23 @@ // All entries of |origins_to_inject| must be valid/not opaque. void AddScript(ScriptId id, std::vector<url::Origin> origins_to_inject, - base::StringPiece script) { - // If there is no script with the identifier |id|, then create a place for - // it at the end of the injection sequence. - if (before_load_scripts_.find(id) == before_load_scripts_.end()) - before_load_scripts_order_.push_back(id); - - // Convert script to UTF-16. - base::string16 script_utf16 = base::UTF8ToUTF16(script); - size_t script_utf16_size = - (base::CheckedNumeric<size_t>(script_utf16.size()) * - sizeof(base::char16)) - .ValueOrDie(); - base::WritableSharedMemoryRegion script_shared_memory = - base::WritableSharedMemoryRegion::Create(script_utf16_size); - memcpy(script_shared_memory.Map().memory(), script_utf16.data(), - script_utf16_size); - - base::ReadOnlySharedMemoryRegion script_shared_memory_readonly = - base::WritableSharedMemoryRegion::ConvertToReadOnly( - std::move(script_shared_memory)); - CHECK(script_shared_memory_readonly.IsValid()); - - before_load_scripts_[id] = OriginScopedScript( - origins_to_inject, std::move(script_shared_memory_readonly)); - } + base::StringPiece script); // Same as AddScript(), except that scripts are injected for all pages. - void AddScriptForAllOrigins(ScriptId id, base::StringPiece script) { - AddScript(id, {kMatchAllOrigins}, script); - } + void AddScriptForAllOrigins(ScriptId id, base::StringPiece script); // Removes the script |id|. - void RemoveScript(ScriptId id) { - before_load_scripts_.erase(id); - - for (auto script_id_iter = before_load_scripts_order_.begin(); - script_id_iter != before_load_scripts_order_.end(); ++script_id_iter) { - if (*script_id_iter == id) { - before_load_scripts_order_.erase(script_id_iter); - return; - } - } - - LOG(WARNING) << "Ignoring attempt to remove unknown OnLoad script: " << id; - } + void RemoveScript(ScriptId id); // Injects the scripts associated with the origin of |url| into the document // hosted by |render_frame_host|. void InjectScriptsForURL(const GURL& url, - content::RenderFrameHost* render_frame_host) { - DCHECK(url.is_valid()); - - mojo::AssociatedRemote<mojom::OnLoadScriptInjector> injector; - render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface(&injector); - - injector->ClearOnLoadScripts(); - - if (before_load_scripts_.empty()) - return; - - // Provision the renderer's ScriptInjector with the scripts associated with - // |url|. - for (ScriptId script_id : before_load_scripts_order_) { - const OriginScopedScript& script = before_load_scripts_[script_id]; - if (IsUrlMatchedByOriginList(url, script.origins())) - injector->AddOnLoadScript(script.script().Duplicate()); - } - } + content::RenderFrameHost* render_frame_host); private: bool IsUrlMatchedByOriginList( const GURL& url, - const std::vector<url::Origin>& allowed_origins) { - url::Origin url_origin = url::Origin::Create(url); - - for (const url::Origin& allowed_origin : allowed_origins) { - if (allowed_origin == kMatchAllOrigins) - return true; - - DCHECK(!allowed_origin.opaque()); - if (url_origin.IsSameOriginWith(allowed_origin)) - return true; - } - - return false; - } + const std::vector<url::Origin>& allowed_origins); // An opaque Origin that, when specified, allows script injection on all URLs // regardless of origin.
diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp index e4f6268b..f6ceaf2 100644 --- a/components/page_info_strings.grdp +++ b/components/page_info_strings.grdp
@@ -246,7 +246,7 @@ Background Sync </message> <message name="IDS_PAGE_INFO_TYPE_IDLE_DETECTION" desc="The label used for the idle detection permission controlls in the Page Info popup."> - User presence + Your presence </message> <message name="IDS_PAGE_INFO_TYPE_IMAGES" desc="The label used for images permission controls in the Page Info popup."> Images
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_TYPE_IDLE_DETECTION.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_TYPE_IDLE_DETECTION.png.sha1 index 7593510..cd5b425 100644 --- a/components/page_info_strings_grdp/IDS_PAGE_INFO_TYPE_IDLE_DETECTION.png.sha1 +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_TYPE_IDLE_DETECTION.png.sha1
@@ -1 +1 @@ -53f9e5e5cfe6078d4f9c94abfb7fd164bf5b19e4 \ No newline at end of file +8772f25cc08e3695b2c8915c260b81207d32bd22 \ No newline at end of file
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc index ca11748..a002f180 100644 --- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer.cc
@@ -11,7 +11,6 @@ #include "base/feature_list.h" #include "base/metrics/histogram_macros.h" -#include "base/power_monitor/power_monitor.h" #include "components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h" #include "components/page_load_metrics/browser/page_load_metrics_util.h" #include "content/public/common/process_type.h" @@ -187,11 +186,6 @@ const char kHistogramFirstContentfulPaintNoStore[] = "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NoStore"; -const char kHistogramFirstContentfulPaintOnBattery[] = - "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.OnBattery"; -const char kHistogramFirstContentfulPaintNotOnBattery[] = - "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.NotOnBattery"; - const char kHistogramFirstContentfulPaintHiddenWhileFlushing[] = "PageLoad.PaintTiming.NavigationToFirstContentfulPaint.HiddenWhileFlushing"; @@ -522,14 +516,6 @@ timing.paint_timing->first_contentful_paint.value()); } - if (base::PowerMonitor::IsOnBatteryPower()) { - PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaintOnBattery, - timing.paint_timing->first_contentful_paint.value()); - } else { - PAGE_LOAD_HISTOGRAM(internal::kHistogramFirstContentfulPaintNotOnBattery, - timing.paint_timing->first_contentful_paint.value()); - } - // TODO(bmcquade): consider adding a histogram that uses // UserInputInfo.user_input_event. if (GetDelegate().GetUserInitiatedInfo().browser_initiated ||
diff --git a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc index 2c928a3..ae87b22 100644 --- a/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/core/uma_page_load_metrics_observer_unittest.cc
@@ -43,14 +43,6 @@ void SetUp() override { page_load_metrics::PageLoadMetricsObserverContentTestHarness::SetUp(); page_load_metrics::LargestContentfulPaintHandler::SetTestMode(true); - - base::PowerMonitor::Initialize( - std::make_unique<base::PowerMonitorTestSource>()); - } - - void TearDown() override { - base::PowerMonitor::ShutdownForTesting(); - page_load_metrics::PageLoadMetricsObserverContentTestHarness::TearDown(); } void OnCpuTimingUpdate(RenderFrameHost* render_frame_host,
diff --git a/components/paint_preview/README.md b/components/paint_preview/README.md index 3215801..86de0f4 100644 --- a/components/paint_preview/README.md +++ b/components/paint_preview/README.md
@@ -2,11 +2,108 @@ _AKA Freeze Dried Tabs_ -This is a WIP directory that contains code for generating and processing paint -previews of pages. A paint preview is a collection of Skia Pictures representing -the visual contents of a page along with the links on the page. The preview can -be composited and played without a renderer process as a low-fidelity and -low-cost alternative to a tab in various contexts. +## What is a Paint Preview? + +A paint preview is a collection of Skia Pictures representing the visual +contents of a webpage along with the links on the webpage stored in a protobuf. +The preview can be composited and played without a renderer process as a +low-fidelity and low-overhead alternative to a live page in various contexts. + +## Architecture + +There are three core components to the paint preview architecture; + +* Capture - recording the content and links of a website as Skia Pictures + + metadata. +* Compositing - converting Skia Pictures into bitmap tiles. +* Player - plays back contents using native UI. + +### Capture + +A paint preview is captured using a variation of the printing system in Blink. +The contents of the frame are captured as is. Images are not manipulated, but +fonts are subset to remove unused glyphs. + +Capture supports both in-memory and file based approaches. While +performance-wise the in-memory approach should be used, on low-end devices the +memory overhead of capturing a webpage might be very expensive (100 MB+). To +circumvent this and avoid OOM scenarios, files may be used to store the Skia +Pictures. + +To handle child frames (iframes), the renderer will request the browser +coordinate with the renderer of each child frame to capture it as an independent +Skia Picture. To stitch this together later, the parent frame inserts a +placeholder into its Skia Picture with the clip region of the child frame and an +ID mapping so that the child content can be inserted correctly during +compositing. + +The child frame behavior applies to both same- and cross-process iframes so that +the content of each frame can be captured in its entirety. This allows them to +be scrollable for the purposes of playback. _Note: this only applies to +same-process iframes when they are scrollable._ + +As a side-effect of using the printing system there may be some visual +discrepencies; + +* Viewport fixed elements are flattened into their current position in the + content. +* JS driven dynamic elements will be frozen. +* Some GPU accelerated effect/animations may not be captured. +* Out-of-viewport content for which resource aren't loaded (e.g. images) may be + missing. + +### Compositing + +To maintain the [Rule Of 2](https://chromium.googlesource.com/chromium/src/+/master/docs/security/rule-of-2.md) +compositing takes place in a sandboxed utility process. The Skia Pictures are +loaded into the compositor and from those pictures bitmaps can be generated. A +caller may elect to request the contents of the frame be turned into a single +combined Skia Picture or as a collection of independent Skia Pictures. The +split approach is desirable if scrollable child frames are used. + +See `//components/services/paint_preview_compositor/` for more details. + +### Playback + +Per-architecture playback is possible to avoid the need for a renderer. Using +the bitmaps from the compoisitor in combination with links it is possible to +create a low-fidelity and lightweight representation of a webpage. + +At present there is only a player available for Android. If something akin to a +screenshot of the whole webpage is desired it is possible to just use bitmaps +for it. + +## Usage + +Capture step is intended to be completed via +[PaintPreviewBaseService::CapturePaintPreview()](https://source.chromium.org/chromium/chromium/src/+/master:components/paint_preview/browser/paint_preview_base_service.h;bpv=1;bpt=1;l=127) +, although +[PaintPreviewClient](https://source.chromium.org/chromium/chromium/src/+/master:components/paint_preview/browser/paint_preview_client.h;bpv=1;bpt=1;l=36) +can be used directly if preferred. + +Compositing should be started using [StartCompositorService()](https://source.chromium.org/chromium/chromium/src/+/master:components/paint_preview/browser/compositor_utils.h;bpv=1;bpt=1;l=16). +This should be followed by using the PaintPreviewCompositorService to create a +[PaintPreviewCompositorClient](https://source.chromium.org/chromium/chromium/src/+/master:components/paint_preview/public/paint_preview_compositor_client.h;bpv=1;bpt=1;l=24) +from which compositing can be controlled. + +See the `player/` subdirectory for more details on playback. + +## Codebase + +Within this directory + +* `browser/` - Code related to managing and requesting paint previews. +* `common/` - Shared code; mojo, protos, and C++ code. +* `features/` - Feature flags. +* `player/` - Code for playing back a preview. (Currently for Android). +* `public/` - Public interfaces for some implementations (refactoring WIP). +* `renderer/` - Code related to capturing paint previews within the renderer. + +Outside of this directory there is some feature code in + +* `chrome/android/java/src/org/chromium/chrome/browser/paint_preview/` +* `chrome/browser/paint_preview/` +* `components/services/paint_preview_compositor/` ## Why //components? @@ -21,9 +118,3 @@ NOTE: This feature depends on working with `//content` and `//third_party/blink` so it is incompatible with iOS. - -## Directory Structure (WIP) - -* `browser/` - Code related to managing and requesting paint previews. -* `common/` - Shared code; mojo, protos, and C++ code. -* `renderer/` - Code related to capturing paint previews within the renderer.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 5aaf09c..c0276a8d 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -98,6 +98,17 @@ <translation id="1160939557934457296">Menonaktifkan untuk melanjutkan dari halaman peringatan Safe Browsing</translation> <translation id="1163080558183062209">Menonaktifkan jenis printer di daftar tolak</translation> <translation id="117059611145966538">Server cetak eksternal</translation> +<translation id="1171785618439752042">Menyetel kebijakan akan menentukan jenis enkripsi yang diizinkan saat meminta tiket Kerberos dari server <ph name="MS_AD_NAME" />. + + Menyetel kebijakan ke: + + * Semua akan mengizinkan jenis enkripsi AES aes256-cts-hmac-sha1-96 dan aes128-cts-hmac-sha1-96, serta jenis enkripsi RC4 rc4-hmac. AES akan diprioritaskan jika server mendukung jenis enkripsi AES dan RC4. + + * Strong atau tidak menyetelnya hanya akan mengizinkan jenis AES. + + * Legacy hanya akan mengizinkan jenis RC4. RC4 tidak aman. RC4 seharusnya hanya diperlukan dalam keadaan yang sangat spesifik. Jika memungkinkan, konfigurasi ulang server untuk mendukung enkripsi AES. + + Lihat juga https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> <translation id="1177567780207290133">Menyetel kebijakan akan mengontrol filter URL SafeSites, yang menggunakan Google Safe Search API untuk mengklasifikasikan URL sebagai pornografi atau bukan. Saat kebijakan ini disetel ke: @@ -186,6 +197,11 @@ Jika kebijakan ini disetel ke False, <ph name="PRODUCT_NAME" /> tidak akan mengizinkan profil tamu dimulai.</translation> <translation id="1363275621236827384">Mengaktifkan kueri ke Quirks Server untuk profil hardware</translation> <translation id="1376119291123231789">Mengaktifkan mode pengisian daya baterai lanjutan</translation> +<translation id="1378850678793136128">Memungkinkan Anda menetapkan daftar pola URL yang menentukan situs mana yang otomatis diizinkan untuk mengakses perangkat USB dengan ID vendor dan produk tertentu pada layar login. Setiap item daftar harus memiliki kolom "devices" dan "urls" agar kebijakan menjadi valid. Setiap item di kolom "perangkat" dapat memiliki kolom "vendor_id" dan "product_id". Jika kolom "vendor_id" tidak ada, kebijakan akan cocok dengan perangkat apa pun. Jika kolom "product_id" tidak ada, kebijakan akan cocok dengan perangkat apa pun yang memiliki ID vendor tertentu. Kebijakan yang memiliki kolom "product_id" tanpa kolom "vendor_id" menjadi tidak valid. + + Model izin USB menggunakan URL situs peminta ("URL peminta") dan URL situs bingkai level teratas ("URL sematan") untuk memberikan izin ke URL peminta untuk mengakses perangkat USB. URL peminta mungkin berbeda dengan URL sematan saat situs peminta dimuat dalam iframe. Oleh karena itu, kolom "url" dapat berisi hingga dua string URL yang dipisahkan dengan koma, untuk menentukan masing-masing URL peminta dan URL sematan. Jika hanya ada satu URL yang ditentukan, akses ke perangkat USB yang sesuai akan diberikan saat URL situs peminta cocok dengan URL ini, terlepas dari status sematannya. URL dalam "url" harus berupa URL yang valid. Jika tidak, kebijakan akan diabaikan. + + Jika kebijakan ini tidak disetel, nilai default global akan digunakan untuk semua situs (tidak ada akses otomatis).</translation> <translation id="1384459581748403878">Referensi: <ph name="REFERENCE_URL" /></translation> <translation id="138847842893090358">Melaporkan status update OS</translation> <translation id="1390901586107713894">Memungkinkan Anda menentukan ekstensi mana yang TIDAK dapat diinstal pengguna. Ekstensi yang sudah diinstal akan dinonaktifkan jika diblokir, tanpa memberikan opsi kepada pengguna untuk mengaktifkannya. Setelah ekstensi yang dinonaktifkan dihapus dari daftar yang tidak diizinkan, ekstensi akan kembali diaktifkan secara otomatis. @@ -638,6 +654,9 @@ </translation> <translation id="2030905906517501646">Kata kunci penyedia penelusuran default</translation> <translation id="203096360153626918">Kebijakan ini tidak memengaruhi aplikasi Android. Aplikasi akan dapat memasuki mode layar penuh meski kebijakan ini disetel ke <ph name="FALSE" />.</translation> +<translation id="2036522553891755455">Jika kebijakan disetel ke Aktif, penemuan berbagi (fitur Berbagi File Jaringan untuk <ph name="PRODUCT_NAME" />) akan menggunakan <ph name="NETBIOS_PROTOCOL" /> untuk menemukan berbagi di jaringan. Jika kebijakan disetel ke Nonaktif, penemuan berbagi tidak akan menggunakan protokol ini untuk menemukan berbagi. + + Jika kebijakan tidak disetel, perilaku default akan dinonaktifkan bagi pengguna terkelola dan aktif bagi pengguna lainnya.</translation> <translation id="2037214548071298156">Jika kebijakan disetel ke Aktif atau tidak disetel, perangkat yang terdaftar akan melaporkan statistik hardware seperti penggunaan CPU/RAM. Jika kebijakan disetel ke Nonaktif, perangkat yang terdaftar tidak akan melaporkan statistik hardware.</translation> @@ -659,6 +678,7 @@ <translation id="2098658257603918882">Aktifkan laporan data penggunaan dan yang terkait error</translation> <translation id="2104418465060359056">Melaporkan informasi Ekstensi dan Plugin</translation> <translation id="2106627642643925514">Mengganti mode pencetakan PIN default. Jika mode ini tidak tersedia, kebijakan ini akan diabaikan.</translation> +<translation id="2107563874993284076">Jika kebijakan disetel ke Aktif, pengguna dapat menggunakan Berbagi File Jaringan untuk <ph name="PRODUCT_NAME" />. Jika kebijakan disetel ke Nonaktif, pengguna tidak dapat menggunakan fitur ini.</translation> <translation id="2107601598727098402"> Kebijakan ini tidak digunakan lagi di M72. Gunakan CloudManagementEnrollmentToken sebagai gantinya. </translation> @@ -783,6 +803,13 @@ Kebijakan ini tidak boleh digunakan untuk perangkat yang digunakan secara umum. Jika kebijakan disetel ke Benar (True) atau tidak disetel, notifikasi peringatan privasi di sesi tamu terkelola yang diluncurkan otomatis akan terus ditampilkan hingga pengguna menutupnya.</translation> +<translation id="228665601367357543">Memungkinkan Anda menetapkan daftar pola URL yang menentukan situs mana yang otomatis diizinkan untuk mengakses perangkat USB dengan ID vendor dan produk tertentu. Setiap item daftar harus memiliki kolom "devices" dan "urls" agar kebijakan menjadi valid. Setiap item di kolom "perangkat" dapat memiliki kolom "vendor_id" dan "product_id". Jika kolom "vendor_id" tidak ada, kebijakan akan cocok dengan perangkat apa pun. Jika kolom "product_id" tidak ada, kebijakan akan cocok dengan perangkat apa pun yang memiliki ID vendor tertentu. Kebijakan yang memiliki kolom "product_id" tanpa kolom "vendor_id" menjadi tidak valid. + + Model izin USB menggunakan URL peminta dan URL sematan (dari situs bingkai level teratas) untuk mengizinkan URL peminta mengakses perangkat USB. URL peminta mungkin berbeda dengan URL sematan saat situs peminta dimuat dalam iframe. Jadi, kolom "url" dapat berisi hingga dua string yang dipisahkan dengan koma untuk menentukan URL ini. Jika Anda hanya menentukan satu, akses ke perangkat USB terkait akan diizinkan saat URL situs peminta cocok dengan URL ini, terlepas dari status sematan. URL dalam "url" harus berupa URL yang valid. Jika tidak, kebijakan akan diabaikan. + + Tidak menyetel kebijakan berarti <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> akan berlaku, jika disetel. Jika tidak, setelan pribadi pengguna akan digunakan. + + Pola URL dalam kebijakan ini tidak boleh bertentangan dengan pola URL yang dikonfigurasi melalui <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. Jika bertentangan, kebijakan ini akan lebih diprioritaskan daripada <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> dan <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation> <translation id="2289265947759479962">Kebijakan ini mengontrol apakah informasi versi akan dilaporkan atau tidak, misalnya versi OS, platform OS, arsitektur OS, versi <ph name="PRODUCT_NAME" />, dan saluran <ph name="PRODUCT_NAME" />. Jika kebijakan <ph name="CLOUD_REPORTING_ENABLED_POLICY_NAME" /> tidak disetel atau disetel ke nonaktif, kebijakan ini akan diabaikan. @@ -1041,6 +1068,11 @@ URL hasil instan Google dapat ditentukan sebagai: <ph name="GOOGLE_INSTANT_SEARCH_URL" />. Kebijakan ini hanya diterapkan jika kebijakan 'DefaultSearchProviderEnabled' diaktifkan.</translation> +<translation id="2567227673131796227">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan kebijakan '<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />'. + + Menyetel kebijakan akan menentukan host pesan native mana yang tidak boleh dimuat. Nilai <ph name="WILDCARD_VALUE" /> untuk daftar yang ditolak berarti semua host pesan native ditolak, kecuali diizinkan secara eksplisit. + + Jika kebijakan tidak disetel, <ph name="PRODUCT_NAME" /> akan memuat semua host pesan native yang terinstal.</translation> <translation id="2571066091915960923">Mengaktifkan atau menonaktifkan proxy kompresi data dan mencegah agar pengguna tidak mengubah setelan ini. Jika Anda mengaktifkan atau menonaktifkan setelan ini, pengguna tidak dapat mengubah atau mengganti setelan ini. @@ -1143,6 +1175,9 @@ Jika setelan ini dinonaktifkan, halaman web tidak dapat menggunakan JavaScript dan pengguna tidak dapat mengubah setelan ini. Jika setelan ini diaktifkan atau tidak disetel, halaman web dapat menggunakan JavaScript, namun pengguna dapat mengubah setelan tersebut.</translation> +<translation id="2752046642026416564">Jika kebijakan disetel ke Aktif atau tidak disetel, <ph name="PRODUCT_NAME" /> dapat menggunakan host pesan native yang diinstal di tingkat pengguna. + + Menyetel kebijakan ke Nonaktif berarti <ph name="PRODUCT_NAME" /> hanya dapat menggunakan host ini jika diinstal di tingkat sistem.</translation> <translation id="2753637905605932878">Membatasi rentang port UDP lokal yang digunakan oleh WebRTC</translation> <translation id="2757054304033424106">Ketik ekstensi/aplikasi yang diizinkan untuk dipasang</translation> <translation id="2758689548159678032">Jika diaktifkan, fitur <ph name="PRODUCT_NAME" /> akan mengirimkan header permintaan terperinci yang memberikan informasi tentang browser dan lingkungan pengguna. @@ -1442,6 +1477,9 @@ Nilai kebijakan harus ditentukan dalam milidetik.</translation> <translation id="3205825995289802549">Maksimalkan jendela browser pertama di percobaan pertama</translation> +<translation id="3210408472559816322">Menyetel kebijakan akan menentukan host pesan native mana yang tidak boleh dimuat. Nilai <ph name="WILDCARD_VALUE" /> untuk daftar yang ditolak berarti semua host pesan native ditolak, kecuali diizinkan secara eksplisit. + + Jika kebijakan tidak disetel, <ph name="PRODUCT_NAME" /> akan memuat semua host pesan native yang terinstal.</translation> <translation id="3211426942294667684">Setelan login browser</translation> <translation id="3219421230122020860">Mode samaran tersedia</translation> <translation id="3220624000494482595">Jika aplikasi kios adalah aplikasi Android, aplikasi tersebut tidak akan memiliki kontrol terhadap versi <ph name="PRODUCT_OS_NAME" />, meski kebijakan ini disetel ke <ph name="TRUE" />.</translation> @@ -2239,6 +2277,7 @@ <translation id="4326288975020835343">Jika kebijakan disetel ke Aktif, histori penjelajahan tidak akan disimpan, sinkronisasi tab akan dinonaktifkan, dan pengguna tidak dapat mengubah setelan ini. Jika kebijakan disetel ke Nonaktif atau tidak disetel, histori penjelajahan akan disimpan.</translation> +<translation id="4329095223358818804">Mengizinkan Jawaban Cepat untuk mengakses konten yang dipilih</translation> <translation id="4330372709562934569">Mengizinkan situs yang terdaftar untuk membuat permintaan ke endpoint jaringan yang lebih pribadi dari konteks yang tidak aman.</translation> <translation id="4332177773549877617">Membuat log peristiwa penginstalan aplikasi Android</translation> <translation id="4341199399451274159">Jika <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> aktif, menyetel <ph name="DEFAULT_SEARCH_PROVIDER_ENCODINGS_POLICY_NAME" /> akan menentukan encoding karakter yang didukung oleh penyedia penelusuran. Encoding adalah nama halaman kode seperti UTF-8, GB2312, dan ISO-8859-1. Encoding dicoba sesuai urutan yang diberikan. @@ -2374,6 +2413,13 @@ <translation id="4578912515887794133">Jika setelan ini diaktifkan, maka host akses jarak jauh akan membandingkan nama pengguna lokal (yang dikaitkan dengan host) dengan nama akun Google yang terdaftar sebagai pemilik host (misalnya, "johan" jika host adalah milik akun Google "johan@example.com"). Host akses jarak jauh tidak akan dimulai jika nama pemilik host berbeda dengan nama pengguna lokal yang dikaitkan dengan host tersebut. Kebijakan RemoteAccessHostMatchUsername harus digunakan bersama RemoteAccessHostDomain untuk menegaskan bahwa akun Google pemilik host dikaitkan dengan domain tertentu (misalnya "example.com"). Jika setelan ini dinonaktifkan atau tidak ditetapkan, host akses jarak jauh dapat dikaitkan dengan pengguna lokal mana pun.</translation> +<translation id="4587365491100112056">Menyetel kebijakan akan menentukan masa berlaku cache data autentikasi dalam hitungan jam. Cache memiliki data tentang realm yang dipercaya oleh realm perangkat (realm terafiliasi). Oleh karena itu, cache data autentikasi akan membantu mempercepat login. Data khusus pengguna dan data untuk realm yang tidak terafiliasi tidak akan di-cache. + + Menyetel kebijakan ke 0 akan menonaktifkan penyimpanan data autentikasi ke cache. Data khusus realm diambil setiap login sehingga menonaktifkan penyimpanan data autentikasi ke cache dapat memperlambat login pengguna secara signifikan. + + Jika kebijakan tidak disetel, data autentikasi yang di-cache dapat digunakan kembali hingga selama 73 jam. + + Catatan: Memulai ulang perangkat akan menghapus cache. Bahkan, data realm pengguna singkat akan di-cache. Nonaktifkan cache untuk mencegah pelacakan realm pengguna singkat.</translation> <translation id="4591366717022345234">Sediakan Quick Fix Build untuk pengguna</translation> <translation id="4592246263545654202">Menentukan apakah pengguna dapat membuka halaman dalam mode Samaran di <ph name="PRODUCT_NAME" /> atau tidak. @@ -2482,6 +2528,7 @@ <ph name="PAGE_SIZE_NAME" /> harus berisi salah satu format yang tercantum atau 'kustom' jika ukuran kertas yang diminta tidak ada dalam daftar. Jika nilai 'kustom' ditetapkan, properti <ph name="PAGE_SIZE_CUSTOM_SIZE" /> harus ditentukan. Nilai ini menjelaskan tinggi dan lebar yang diinginkan dalam satuan mikrometer. Jika tidak, properti <ph name="PAGE_SIZE_CUSTOM_SIZE" /> tidak harus ditentukan. Kebijakan yang melanggar aturan ini akan diabaikan. Jika ukuran halaman tidak tersedia pada printer yang dipilih pengguna, kebijakan ini diabaikan.</translation> +<translation id="4790588245699320140">Mengizinkan Asisten Google mengakses konteks layar</translation> <translation id="4802744647065138872">Membatasi jumlah rekaman data pengguna yang disimpan untuk digunakan ketika terjadi rollback darurat.</translation> <translation id="4802905909524200151">Mengonfigurasi perilaku update firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" /></translation> <translation id="4804828344300125154">Selalu reboot saat pengguna logout.</translation> @@ -2589,6 +2636,15 @@ <translation id="5017369989680827157">Jika kebijakan ditetapkan ke Benar (True) atau tidak ditetapkan, pengguna akan dapat mengontrol fitur Isi otomatis alamat di UI. Jika kebijakan ditetapkan ke Salah (False), Isi otomatis tidak akan menyarankan atau mengisi informasi alamat, juga tidak akan menyimpan informasi alamat tambahan yang dikirimkan pengguna saat menjelajahi web.</translation> +<translation id="5021550478471824215">Menyetel kebijakan akan menentukan daftar berbagi file jaringan preset. Setiap item adalah objek dengan 2 properti: <ph name="SHARE_URL_FIELD_NAME" /> dan <ph name="MODE_FIELD_NAME" />. + + URL yang dibagikan harus <ph name="SHARE_URL_FIELD_NAME" />. + + Untuk <ph name="MODE_FIELD_NAME" />, harus <ph name="MODE_ENUM_DROP_DOWN" /> atau <ph name="MODE_ENUM_PRE_MOUNT" />: + + * <ph name="MODE_ENUM_DROP_DOWN" /> menunjukkan bahwa <ph name="SHARE_URL_FIELD_NAME" /> akan ditambahkan ke daftar penemuan berbagi. + + * <ph name="MODE_ENUM_PRE_MOUNT" /> menunjukkan bahwa <ph name="SHARE_URL_FIELD_NAME" /> akan dipasang.</translation> <translation id="5023555740504506178">Jika diaktifkan atau tidak dikonfigurasi (default), suatu Halaman web dapat menggunakan API berbagi layar (mis. getDisplayMedia() atau API ekstensi Desktop Capture) untuk meminta pengguna memilih tab, jendela, atau desktop yang akan direkam. Ketika kebijakan ini dinonaktifkan, setiap panggilan untuk API berbagi layar akan gagal dengan error.</translation> @@ -2736,6 +2792,11 @@ <translation id="5236882091572996759">Jika kebijakan ini ditetapkan ke True atau tidak ditetapkan, pengguna tidak dianggap menganggur selama audio diputar. Hal ini mencegah tercapainya waktu tunggu menganggur dan mencegah diambilnya tindakan menganggur. Namun, peredupan layar, penonaktifan layar, dan penguncian layar akan dilakukan setelah waktu tunggu yang dikonfigurasi tercapai, tanpa mempertimbangkan aktivitas audio. Jika kebijakan ini ditetapkan ke False, aktivitas audio tidak mencegah pengguna untuk dianggap menganggur.</translation> +<translation id="52393120393725840">Menyetel kebijakan ke Aktif berarti pengguna dapat membuat <ph name="PRODUCT_NAME" /> mengingat sandi dan memberikannya saat mereka kembali login ke situs. + + Jika kebijakan disetel ke Nonaktif, pengguna tidak dapat menyimpan sandi baru, tetapi sandi yang disimpan sebelumnya masih berfungsi. + + Jika kebijakan disetel, pengguna tidak dapat mengubahnya di <ph name="PRODUCT_NAME" />. Jika tidak disetel, pengguna dapat menonaktifkan penyimpanan sandi.</translation> <translation id="5239333626804545932">Jika kebijakan disetel ke Aktif atau tidak disetel, Pembersih Chrome akan memindai sistem secara berkala untuk menemukan software yang tidak diinginkan, dan jika ditemukan, akan menanyakan kepada pengguna apakah ia ingin menghapusnya atau tidak. Pembersih Chrome dapat dipicu secara manual dari chrome://settings. Jika kebijakan disetel ke Nonaktif, Pembersih Chrome tidak akan memindai sistem secara berkala dan pemicu manual akan dinonaktifkan. @@ -2757,6 +2818,26 @@ Jika kebijakan ditetapkan ke Salah (False) atau tidak ditetapkan, Desktop Terpadu akan dinonaktifkan dan pengguna tidak dapat mengaktifkannya.</translation> <translation id="5255162913209987122">Dapat Direkomendasikan</translation> +<translation id="5264066441613395613">Menyetel kebijakan akan mengonfigurasi setelan proxy untuk Chrome dan aplikasi ARC, yang mengabaikan semua opsi terkait proxy yang ditentukan dari command line. + + Jika kebijakan tidak disetel, pengguna dapat memilih setelan proxy mereka. + + Menyetel kebijakan <ph name="PROXY_SETTINGS_POLICY_NAME" /> akan menyetujui kolom berikut: + * <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, yang memungkinkan Anda menentukan server proxy yang digunakan oleh Chrome dan mencegah pengguna mengubah setelan proxy + * <ph name="PROXY_PAC_URL_PROXY_SETTINGS_FIELD" />, URL ke file .pac proxy + * <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" />, URL server proxy + * <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />, daftar host proxy yang diabaikan oleh <ph name="PRODUCT_NAME" /> + + Kolom <ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" /> tidak digunakan lagi dan digantikan dengan kolom <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, yang memungkinkan Anda menentukan server proxy yang digunakan oleh Chrome dan mencegah pengguna mengubah setelan proxy. + + Untuk <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, jika Anda memilih nilai: + * <ph name="PROXY_MODE_ENUM_DIRECT" />, proxy tidak akan pernah digunakan dan semua kolom lainnya akan diabaikan. + * <ph name="PROXY_MODE_ENUM_SYSTEM" />, proxy sistem akan digunakan dan semua kolom lainnya akan diabaikan. + * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" />, semua kolom lainnya akan diabaikan. + * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" />, kolom <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> dan <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> akan digunakan. + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />, kolom <ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" /> dan <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> akan digunakan. + + Catatan: Untuk contoh yang lebih mendetail, buka Project Chromium ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).</translation> <translation id="5272684451155669299">Jika disetel ke true, pengguna dapat menggunakan hardware pada perangkat Chrome untuk membuktikan identitasnya dari jarak jauh ke CA privasi melalui <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> dengan menggunakan <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Jika disetel ke false, atau tidak disetel, panggilan ke API akan gagal yang disertai kode error.</translation> @@ -3149,6 +3230,13 @@ <translation id="5697306356229823047">Laporkan pengguna perangkat</translation> <translation id="570062449808736508">Jika kebijakan ini disetel ke string yang tidak kosong, WebView akan membaca batasan URL dari penyedia konten dengan nama otoritas yang diberikan.</translation> <translation id="5708969689202733975">Mengonfigurasi mode buka kunci cepat yang diizinkan</translation> +<translation id="5715617256528927547">Menyetel kebijakan akan menentukan masa berlaku cache Objek Kebijakan Grup (GPO) dalam hitungan jam. GPO dengan durasi maksimum dapat digunakan kembali sebelum didownload ulang. Daripada mendownload ulang GPO pada setiap pengambilan kebijakan, sistem akan menggunakan kembali GPO yang di-cache selama versinya tidak berubah. + + Menyetel kebijakan ke 0 akan menonaktifkan penyimpanan GPO ke cache. Hal ini akan meningkatkan beban server karena GPO didownload ulang pada setiap pengambilan kebijakan, meskipun GPO tidak berubah. + + Jika kebijakan tidak disetel, GPO yang di-cache dapat digunakan kembali hingga selama 25 jam. + + Catatan: Memulai ulang dan logout akan menghapus cache.</translation> <translation id="572155275267014074">Setelan Android</translation> <translation id="5728154254076636808">Mengaktifkan pembuatan salinan roaming untuk data profil <ph name="PRODUCT_NAME" /></translation> <translation id="5732972008943405952">Mengimpor data formulir isi-otomatis dari browser default saat pertama kali dijalankan</translation> @@ -3196,6 +3284,11 @@ <translation id="5815129011704381141">Booting ulang otomatis setelah pembaruan</translation> <translation id="582857022372205358">Aktifkan pencetakan dupleks tepi pendek</translation> <translation id="5832274826894536455">Kebijakan yang tidak digunakan lagi</translation> +<translation id="5835253272509953988">Jika kebijakan disetel ke Aktif, pengguna dapat membuat <ph name="PRODUCT_NAME" /> memeriksa apakah nama pengguna dan sandi yang dimasukkan adalah bagian dari kebocoran. + + Jika kebijakan disetel, pengguna tidak dapat mengubahnya di <ph name="PRODUCT_NAME" />. Jika tidak disetel, pemeriksaan kebocoran kredensial akan diizinkan, tetapi pengguna dapat menonaktifkannya. + + Perilaku ini tidak akan berlaku jika Safe Browsing dinonaktifkan (oleh kebijakan ataupun pengguna). Untuk mengaktifkan paksa Safe Browsing, gunakan kebijakan <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> atau <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5836064773277134605">Batasi jangkauan port UDP yang digunakan oleh hosting akses jarak jauh</translation> <translation id="5845686745936515940">Mengizinkan Anda mengembalikan semua cookie ke perilaku <ph name="ATTRIBUTE_SAMESITE_NAME" /> lama. Pengembalian ke perilaku lama akan menyebabkan cookie yang tidak menentukan atribut <ph name="ATTRIBUTE_SAMESITE_NAME" /> dianggap sebagai "<ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />", menghapus persyaratan bagi cookie "<ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />" untuk membawa atribut "<ph name="ATTRIBUTE_SECURE_NAME" />", dan melewati perbandingan skema saat evaluasi jika dua situs adalah situs yang sama. Lihat penjelasan lengkapnya di https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies. @@ -3505,6 +3598,13 @@ Untuk mengetahui detail <ph name="CORS" />, buka: <ph name="CORS_HELP_URL" />. Perlu diketahui bahwa kebijakan ini sebelumnya diumumkan akan dihapus di <ph name="PRODUCT_NAME" /> versi 82, tetapi saat ini telah dihapus di versi 84.</translation> +<translation id="6279722058145292462">Menyetel kebijakan akan menentukan seberapa sering klien mengubah sandi akun perangkat mereka dalam hitungan hari. Sandi dibuat oleh klien secara acak dan tidak terlihat oleh pengguna. Menonaktifkan kebijakan ini atau menyetel jumlah hari yang tinggi dapat menimbulkan dampak negatif pada keamanan, karena akan memberi lebih banyak waktu bagi calon penyerang untuk menemukan dan menggunakan sandi akun perangkat. + + Jika kebijakan tidak disetel, sandi akun perangkat akan diubah setiap 30 hari. + + Menyetel kebijakan ke 0 akan menonaktifkan perubahan sandi akun perangkat. + + Catatan: Sandi mungkin menjadi lebih lama dari jumlah hari yang ditentukan jika klien offline selama jangka waktu yang lebih lama.</translation> <translation id="6281043242780654992">Mengonfigurasikan kebijakan untuk Perpesanan Asli. Hosting perpesanan asli yang dimasukkan dalam daftar hitam tidak akan diizinkan kecuali telah dimasukkan dalam daftar putih.</translation> <translation id="6282799760374509080">Izinkan atau tolak penangkapan audio</translation> <translation id="6284362063448764300">TLS 1.1</translation> @@ -3638,6 +3738,9 @@ Cara yang direkomendasikan untuk mengunci layar saat tidak ada aktivitas adalah dengan mengaktifkan penguncian layar selama penangguhan dan menangguhkan <ph name="PRODUCT_OS_NAME" /> setelah penundaan waktu tidak ada aktivitas. Kebijakan ini sebaiknya hanya digunakan jika penguncian layar terjadi pada waktu yang jauh lebih awal daripada penangguhan, atau saat penangguhan pada waktu tidak ada aktivitas tidak diinginkan sama sekali. Nilai kebijakan harus ditentukan dalam milidetik. Nilai dikunci agar kurang dari penundaan waktu tidak ada aktivitas.</translation> +<translation id="6506486086262398387">Menyetel kebijakan ke Aktif berarti fitur Berbagi File Jaringan untuk <ph name="PRODUCT_OS_NAME" /> akan menggunakan NTLM sebagai autentikasi untuk berbagi SMB jika perlu. Jika kebijakan disetel ke Nonaktif, autentikasi NTLM untuk berbagi SMB akan dinonaktifkan. + + Jika kebijakan tidak disetel, perilaku default akan dinonaktifkan bagi pengguna terkelola dan aktif bagi pengguna lainnya.</translation> <translation id="6515357889978918016">Gambar <ph name="PLUGIN_VM_NAME" /></translation> <translation id="6518102411616460786">Tunggu saluran target juga mengalami downgrade saluran rilis</translation> <translation id="6520802717075138474">Impor mesin telusur dari browser default saat pertama kali dijalankan</translation> @@ -3666,6 +3769,22 @@ Untuk informasi mendetail tentang pola URL yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="6553143066970470539">Persentase kecerahan layar</translation> <translation id="6559057113164934677">Jangan izinkan situs apa pun mengakses kamera dan mikrofon</translation> +<translation id="6559475864956112261">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="PROXY_SETTINGS_POLICY_NAME" />. + + Menyetel kebijakan ke Aktif memungkinkan Anda menentukan server proxy yang digunakan oleh Chrome dan mencegah pengguna mengubah setelan proxy. Chrome dan aplikasi ARC akan mengabaikan semua opsi terkait proxy yang ditentukan dari command line. Kebijakan ini hanya berlaku jika kebijakan <ph name="PROXY_SETTINGS_POLICY_NAME" /> tidak ditentukan. + + Opsi lain akan diabaikan jika Anda memilih: + * <ph name="PROXY_MODE_ENUM_DIRECT" /> = Jangan pernah menggunakan server proxy dan selalu hubungkan secara langsung + * <ph name="PROXY_MODE_ENUM_SYSTEM" /> = Gunakan setelan proxy sistem + * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" /> = Deteksi otomatis server proxy + + Jika Anda memilih untuk menggunakan: + * <ph name="PROXY_MODE_ENUM_FIXED_SERVERS" /> = Server proxy tetap. Anda dapat menentukan opsi lebih lanjut dengan <ph name="PROXY_SERVER_POLICY_NAME" /> dan <ph name="PROXY_BYPASS_LIST_POLICY_NAME" />. Hanya server proxy HTTP dengan prioritas tertinggi yang tersedia untuk aplikasi ARC. + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> = Skrip proxy .pac. Gunakan <ph name="PROXY_PAC_URL_POLICY_NAME" /> untuk menyetel URL ke file .pac proxy. + + Jika kebijakan tidak disetel, pengguna dapat memilih setelan proxy. + + Catatan: Untuk contoh mendetail, buka Project Chromium ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).</translation> <translation id="6561396069801924653">Tampilkan opsi aksesibilitas di menu baki sistem</translation> <translation id="6563458316362153786">Aktifkan Transisi Cepat 802.11r</translation> <translation id="6568977718979857253">Kebijakan ini tidak digunakan lagi. Gunakan kebijakan <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> untuk mengontrol ketersediaan plugin Flash dan <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> untuk mengontrol apakah penampil PDF yang terintegrasi akan digunakan untuk membuka file PDF atau tidak. @@ -4496,6 +4615,13 @@ Jika perangkat pengguna dikelola, kemampuan untuk menyetel kebijakan ini akan tergantung pada kebijakan perangkat terkait. Jika perangkat pengguna tidak dikelola, kemampuan untuk menyetel kebijakan ini akan tergantung pada apakah pengguna merupakan pemilik perangkat atau bukan.</translation> +<translation id="7570111012674064005">Menyetel kebijakan akan menentukan apakah dan bagaimana kebijakan pengguna dari Objek Kebijakan Grup (GPO) komputer diproses. + + * Default atau tidak menyetelnya akan membuat kebijakan pengguna hanya membaca dari GPO pengguna. GPO komputer akan diabaikan. + + * Merge akan menggabungkan kebijakan pengguna di GPO pengguna dengan yang ada di GPO komputer. GPO komputer akan diprioritaskan. + + * Replace akan menggantikan kebijakan pengguna di GPO pengguna dengan yang ada di GPO komputer. GPO pengguna akan diabaikan.</translation> <translation id="7570291542739287032">Khusus Cloud</translation> <translation id="757395965347379751">Jika setelan ini diaktifkan, <ph name="PRODUCT_NAME" /> mengizinkan sertifikat bertanda tangan SHA-1 selama sertifikat tersebut berhasil memvalidasi dan mengarah ke sertifikat CA yang terpasang secara lokal. @@ -5061,6 +5187,11 @@ Jika kebijakan ditetapkan ke true atau tidak ditetapkan, akses root ke penampung Crostini akan diberikan kepada pengguna. Jika kebijakan ditetapkan ke false, akses root ke penampung Crostini yang ada maupun yang baru tidak akan diberikan kepada pengguna.</translation> <translation id="8417305981081876834">Setel panjang maksimal PIN layar kunci</translation> +<translation id="841853753509411428">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan kebijakan '<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />'. + + Menyetel kebijakan akan menentukan host pesan native mana yang tidak termasuk dalam daftar yang ditolak. Nilai <ph name="WILDCARD_VALUE" /> untuk daftar yang ditolak berarti semua host pesan native ditolak, kecuali diizinkan secara eksplisit. + + Semua host pesan native diizinkan secara default. Namun, jika semua host pesan native ditolak oleh kebijakan, admin dapat menggunakan daftar yang diizinkan untuk mengubah kebijakan tersebut.</translation> <translation id="841977920223099909">Pemicu peringatan perlindungan sandi</translation> <translation id="8424255554404582727">Setel pemutaran layar default, diterapkan kembali setiap kali melakukan boot ulang</translation> <translation id="8426231401662877819">Putar layar searah jarum jam sebesar 90 derajat</translation> @@ -5279,6 +5410,9 @@ <translation id="8767743923206070405">Jika kebijakan disetel ke Aktif, tombol Beranda akan ditampilkan di toolbar <ph name="PRODUCT_NAME" />. Jika kebijakan disetel ke Nonaktif, tombol Beranda tidak akan muncul. Jika Anda menyetel kebijakan, pengguna tidak dapat mengubahnya di <ph name="PRODUCT_NAME" />. Jika tidak disetel, pengguna dapat memilih untuk menampilkan tombol Beranda atau tidak.</translation> +<translation id="8768528324886802059">Menyetel kebijakan akan menentukan host pesan native mana yang tidak termasuk dalam daftar yang ditolak. Nilai <ph name="WILDCARD_VALUE" /> untuk daftar yang ditolak berarti semua host pesan native ditolak, kecuali diizinkan secara eksplisit. + + Semua host pesan native diizinkan secara default. Namun, jika semua host pesan native ditolak oleh kebijakan, admin dapat menggunakan daftar yang diizinkan untuk mengubah kebijakan tersebut.</translation> <translation id="877185520360032968">Menyetel kebijakan akan mengubah direktori default tempat Chrome mendownload file, tetapi pengguna dapat mengubah direktori tersebut. Jika kebijakan tidak disetel, Chrome akan menggunakan direktori default khusus platform.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 7a404b2a..fd6b383 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -97,6 +97,17 @@ <translation id="1160939557934457296">Запрет перехода со страницы предупреждения Безопасного просмотра</translation> <translation id="1163080558183062209">Отключить типы принтеров, добавленные в список недопустимых</translation> <translation id="117059611145966538">Внешние серверы печати</translation> +<translation id="1171785618439752042">Правило позволяет указать, какой тип шифрования применять при запросе билетов Kerberos с сервера "<ph name="MS_AD_NAME" />". + + Укажите для правила одно из значений: + + * Значение "All" разрешает типы шифрования по алгоритму AES (aes256-cts-hmac-sha1-96 и aes128-cts-hmac-sha1-96) и RC4 (rc4-hmac). Если сервер поддерживает оба перечисленных типа, шифрование по алгоритму AES будет считаться приоритетным. + + * Значение "Strong" (а также отсутствие значения) разрешает только шифрование по алгоритму AES. + + * Значение "Legacy" разрешает только шифрование по алгоритму RC4. Шифрование по алгоритму RC4 считается ненадежным. Применяйте его только в определенных обстоятельствах. Также рекомендуем настроить сервер для поддержки шифрования по алгоритму AES. + + Дополнительную информацию можно найти здесь: https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> <translation id="1177567780207290133">Это правило устанавливает применение URL-фильтра SafeSites, использующего Google Safe Search API, который позволяет определять URL порнографических сайтов. Если в правиле выбрано "Не фильтровать сайты, содержащие контент для взрослых", сайты блокироваться не будут. @@ -184,6 +195,11 @@ Если правило отключено (значение False), <ph name="PRODUCT_NAME" /> не поддерживает вход через гостевой профиль.</translation> <translation id="1363275621236827384">Разрешить аппаратным профилям отправлять запросы на сервер Quirks</translation> <translation id="1376119291123231789">Включить расширенный режим зарядки</translation> +<translation id="1378850678793136128">Вы можете задать список шаблонов URL для указания сайтов, которым будет автоматически предоставляться доступ к USB-устройствам с определенными идентификаторами поставщика и продукта на экране входа. Каждый пункт списка должен включать устройства и URL. Для каждого устройства можно задать идентификатор поставщика "vendor_id" и идентификатор продукта "product_id". Если не заполнить поле "vendor_id", правило будет применяться для всех устройств. Правило с незаполненным полем "product_id" применяется для всех устройств с указанным идентификатором поставщика. Правило не будет работать, если заполнить только поле "product_id". + + В модели разрешения доступа к USB-устройству используется URL сайта, запрашивающего доступ (запрашивающий URL), и URL сайта из фрейма верхнего уровня (встраиваемый URL). Если сайт, запрашивающий доступ, загружается в окне iframe, эти два URL могут отличаться. Поэтому поле URL может содержать два адреса, указанные через запятую. Когда задан только один URL, доступ к USB-устройствам будет предоставлен, если этот URL совпадает с запрашивающим URL, независимо от способа встраивания. В поле URL необходимо указывать действительные адреса, иначе правило будет игнорироваться. + + Если это правило не настроено, для всех сайтов используется глобальное значение по умолчанию (автоматический доступ запрещен).</translation> <translation id="1384459581748403878">Источник: <ph name="REFERENCE_URL" /></translation> <translation id="138847842893090358">Сообщать о состоянии обновления ОС</translation> <translation id="1390901586107713894">Позволяет указать, какие расширения запрещено устанавливать пользователям. Установленные расширения будут отключены, если их внести в черный список. Пользователь не сможет включить их. Если расширение присутствовало в черном списке и было удалено из него, оно автоматически включится. @@ -626,6 +642,9 @@ </translation> <translation id="2030905906517501646">Ключевое слово для поисковой системы по умолчанию</translation> <translation id="203096360153626918">Правило не влияет на приложения Android. Они смогут переходить в полноэкранный режим, даже если для правила задано значение <ph name="FALSE" />.</translation> +<translation id="2036522553891755455">Включенное правило определяет, будет ли функция совместного доступа к файлам в сети в <ph name="PRODUCT_NAME" /> использовать протокол <ph name="NETBIOS_PROTOCOL" /> для обнаружения файлов в сети. Если правило отключено, протокол использоваться не будет. + + Если правило не задано, оно будет по умолчанию считаться выключенным для профилей, управляемых администратором, и включенным для остальных.</translation> <translation id="2037214548071298156">Если правило включено или не настроено, зарегистрированные устройства отправляют статистические данные о работе аппаратного обеспечения, например об использовании процессора или оперативной памяти. Если правило отключено, эти данные не отправляются.</translation> @@ -647,6 +666,7 @@ <translation id="2098658257603918882">Включить в отчеты данные об использовании и сбоях</translation> <translation id="2104418465060359056">Передавать информацию о расширениях и плагинах</translation> <translation id="2106627642643925514">Переопределяет режим печати с вводом PIN-кода по умолчанию. Если этот режим недоступен, правило будет игнорироваться.</translation> +<translation id="2107563874993284076">Включенное правило позволяет пользователям использовать функцию общего доступа к файлам в сети в <ph name="PRODUCT_NAME" />. В противном случае эта функция недоступна.</translation> <translation id="2107601598727098402"> Это правило не поддерживается начиная с версии M72. Вместо него используется правило CloudManagementEnrollmentToken. </translation> @@ -771,6 +791,13 @@ Это правило не подходит для устройств обычных пользователей. Если правило не настроено или для него задано значение True, предупреждение о конфиденциальности в управляемом гостевом сеансе с автоматическим запуском не исчезнет, пока пользователь не закроет его.</translation> +<translation id="228665601367357543">Вы можете задать список шаблонов URL для указания сайтов, которым будет автоматически предоставляться доступ к USB-устройствам с определенными идентификаторами поставщика и продукта. Каждый пункт списка должен включать устройства и URL. Для каждого устройства можно задать идентификатор поставщика "vendor_id" и идентификатор продукта "product_id". Если не заполнить поле "vendor_id", правило будет применяться для всех устройств. Правило с незаполненным полем "product_id" применяется для всех устройств с указанным идентификатором поставщика. Правило не будет работать, если заполнить только поле "product_id". + + В модели разрешения доступа к USB-устройству используется URL сайта, запрашивающего доступ, и URL сайта, загружаемого во фрейме верхнего уровня. Если сайт, запрашивающий доступ, загружается в окне iframe, эти два URL могут различаться. Таким образом, поле "urls" может содержать до двух строк, разделенных запятой. Если указан только один URL, доступ к нужным USB-устройствам предоставляется тогда, когда его запрашивает сайт именно с этим URL, и встраивание контента во фреймы не имеет значения. В поле "urls" необходимо указывать действительные URL, иначе правило будет игнорироваться. + + Если это правило не настроено, то применяется правило <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> при условии, что оно задано. В противном случае действуют персональные настройки пользователя. + + Шаблоны URL в этом правиле не должны противоречить шаблонам, заданным в правиле <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. При возникновении противоречия это правило считается более приоритетным, чем <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> и <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation> <translation id="2289265947759479962">Это правило определяет, сообщать ли информацию о версиях, например версию ОС, платформу и архитектуру ОС, а также версию <ph name="PRODUCT_NAME" /> и версию обновления <ph name="PRODUCT_NAME" />. Если правило <ph name="CLOUD_REPORTING_ENABLED_POLICY_NAME" /> отключено или не настроено, данное правило игнорируется. @@ -1029,6 +1056,11 @@ Чтобы включить Живой поиск в Google, введите следующий URL: <ph name="GOOGLE_INSTANT_SEARCH_URL" />. Правило действует только в том случае, если включено правило DefaultSearchProviderEnabled.</translation> +<translation id="2567227673131796227">Это правило больше не поддерживается. Используйте вместо него правило <ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />. + + Правило позволяет запретить загрузку определенных хостов обмена сообщениями с оригинальными приложениями. Если значение "<ph name="WILDCARD_VALUE" />" применено для всего списка запрещенных хостов, загружаются только явно разрешенные. + + Если это правило не настроено, <ph name="PRODUCT_NAME" /> загружает все установленные хосты обмена сообщениями с оригинальными приложениями.</translation> <translation id="2571066091915960923">Это правило позволяет включать и отключать функцию сжатия данных с помощью прокси-сервера, а также блокирует доступ пользователей к этой настройке. Если параметр задан, пользователи не смогут его отменить или изменить. @@ -1131,6 +1163,9 @@ Если отключить это правило, JavaScript на веб-страницах будет запрещен и никто кроме вас не сможет изменить эту настройку. Если включить или не настраивать это правило, JavaScript на веб-страницах будет разрешен, но у пользователей будет возможность его запретить.</translation> +<translation id="2752046642026416564">Если правило включено или не настроено, <ph name="PRODUCT_NAME" /> разрешает использование этих хостов, установленных на уровне пользователей. + + Если правило отключено, <ph name="PRODUCT_NAME" /> может использовать хосты обмена сообщениями с оригинальными приложениями только в том случае, если они установлены на уровне системы.</translation> <translation id="2753637905605932878">Ограничивать диапазон локальных портов UDP, используемых WebRTC</translation> <translation id="2757054304033424106">Типы расширений и приложений, которые разрешено устанавливать</translation> <translation id="2758689548159678032">Если функция <ph name="PRODUCT_NAME" /> включена, она отправляет заголовки запросов с высокой детализацией и со сведениями о браузере и рабочей среде пользователя. @@ -1430,6 +1465,9 @@ Значение указывается в миллисекундах.</translation> <translation id="3205825995289802549">Позволяет разворачивать первое окно браузера при изначальном запуске</translation> +<translation id="3210408472559816322">Правило позволяет запретить загрузку определенных хостов обмена сообщениями с оригинальными приложениями. Если значение "<ph name="WILDCARD_VALUE" />" применено для всего списка запрещенных хостов, загружаются только явно разрешенные. + + Если это правило не настроено, <ph name="PRODUCT_NAME" /> загружает все установленные хосты обмена сообщениями с оригинальными приложениями.</translation> <translation id="3211426942294667684">Настройки входа в браузере</translation> <translation id="3219421230122020860">Режим инкогнито доступен</translation> <translation id="3220624000494482595">Если киоск-приложение является приложением Android, оно не сможет управлять версией <ph name="PRODUCT_OS_NAME" />, даже если для правила задано значение <ph name="TRUE" />.</translation> @@ -2226,6 +2264,7 @@ <translation id="4326288975020835343">Если это правило включено, история просмотра не сохраняется, синхронизация вкладок не выполняется и пользователи не могут изменить эту настройку. Если правило отключено или не настроено, история просмотров сохраняется.</translation> +<translation id="4329095223358818804">Разрешить функции "Быстрые ответы" доступ к выбранному контенту</translation> <translation id="4330372709562934569">Разрешает сайтам из списка отправлять запросы из небезопасной среды к конечным точкам более частной сети.</translation> <translation id="4332177773549877617">Вести журнал событий, связанных с установкой приложений на Android</translation> <translation id="4341199399451274159">Если правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> включено, то параметр <ph name="DEFAULT_SEARCH_PROVIDER_ENCODINGS_POLICY_NAME" /> указывает кодировки символов, поддерживаемые поисковой системой. Они представляют собой названия кодовых страниц, например UTF-8, GB2312 или ISO-8859-1, и проверяются в заданном порядке. @@ -2364,6 +2403,13 @@ <translation id="4578912515887794133">Если параметр включен, хост удаленного доступа сравнивает имя связанного с ним локального пользователя с названием аккаунта Google, принадлежащего владельцу хоста (например, ivanpetrov, если хост принадлежит аккаунту ivanpetrov@example.com). Хост удаленного доступа не запустится, если имена владельца и локального пользователя не совпадут. Чтобы также связать аккаунт Google, принадлежащий владельцу хоста, с определенным доменом (например, example.com), вместе с RemoteAccessHostMatchUsername следует использовать правило RemoteAccessHostDomain. Если параметр отключен или не настроен, хост удаленного доступа может быть связан с любым локальным пользователем.</translation> +<translation id="4587365491100112056">Правило позволяет указать срок использования кешированных данных аутентификации. В кеше содержатся данные о тех областях, которые машинная область считает надежными. Это позволяет выполнять вход в аккаунт быстрее. Сведения пользователей и данные о других областях не кешируются. + + Если для правила указано значение "0", данные аутентификации кешироваться не будут. Так как эти сведения сохраняются после каждого входа, без них его выполнение может занять больше времени. + + Если правило не настроено, кешированные данные аутентификации могут использоваться в течение 73 часов. + + Примечание. Кеш удаляется после перезагрузки устройства. Обратите внимание, что данные об области кешируются даже для временных пользователей. Чтобы данные временных пользователей не отслеживались, отключите кеширование.</translation> <translation id="4591366717022345234">Разрешить пользователям устанавливать Quick Fix Build</translation> <translation id="4592246263545654202">Определяет, может ли пользователь просматривать страницы в <ph name="PRODUCT_NAME" /> в режиме инкогнито. @@ -2472,6 +2518,7 @@ В параметре <ph name="PAGE_SIZE_NAME" /> необходимо выбрать один из форматов, перечисленных в списке. Если необходимого размера страницы там нет, должно быть указано значение custom. Если выбрано значение custom, требуется задать свойство <ph name="PAGE_SIZE_CUSTOM_SIZE" />, которое описывает высоту и ширину в микрометрах. В противном случае значение свойства <ph name="PAGE_SIZE_CUSTOM_SIZE" /> указывать не нужно. Правило, которое нарушает эти условия, игнорируется. Если указанный размер страницы недоступен на выбранном пользователем принтере, правило не будет учитываться.</translation> +<translation id="4790588245699320140">Разрешить Google Ассистенту доступ к содержимому экрана</translation> <translation id="4802744647065138872">Ограничение количества снимков пользовательских данных, которые хранятся для выполнения вынужденного отката версии</translation> <translation id="4802905909524200151">Настройка обновления встроенного ПО для доверенного платформенного модуля (<ph name="TPM_FIRMWARE_UPDATE_TPM" />)</translation> <translation id="4804828344300125154">Всегда перезагружать устройство после выхода пользователя из системы</translation> @@ -2579,6 +2626,15 @@ <translation id="5017369989680827157">Если правило не настроено или задано значение True, пользователи смогут сами управлять автозаполнением адресов через интерфейс. Если задано значение False, функция автозаполнения никогда не будет предлагать вводить адреса. Кроме того, не будут сохраняться адреса, указываемые пользователями на веб-сайтах.</translation> +<translation id="5021550478471824215">Правило позволяет указать список настроек совместного доступа к файлам в сети. Каждый элемент – это объект с двумя свойствами: "<ph name="SHARE_URL_FIELD_NAME" />" и "<ph name="MODE_FIELD_NAME" />". + + Для URL общей папки должно быть указано значение "<ph name="SHARE_URL_FIELD_NAME" />". + + Для свойства "<ph name="MODE_FIELD_NAME" />" должно быть указано значение "<ph name="MODE_ENUM_DROP_DOWN" />" или "<ph name="MODE_ENUM_PRE_MOUNT" />": + + * "<ph name="MODE_ENUM_DROP_DOWN" />" показывает, что значение "<ph name="SHARE_URL_FIELD_NAME" />" будет добавлено в меню совместного доступа. + + * "<ph name="MODE_ENUM_PRE_MOUNT" />" показывает, что значение "<ph name="SHARE_URL_FIELD_NAME" />" будет подключено напрямую.</translation> <translation id="5023555740504506178">Если правило включено или не настроено (это значение выбрано по умолчанию), веб-страница может использовать API, предназначенные для демонстрации экрана (например, getDisplayMedia() или Desktop Capture API), чтобы предложить пользователю выбрать вкладку, окно или рабочий стол, который нужно показать. Если правило отключено, при вызове API для демонстрации экрана будет появляться сообщение об ошибке.</translation> @@ -2726,6 +2782,11 @@ <translation id="5236882091572996759">Если правило не настроено или для него задано значение True, воспроизведение аудио не считается бездействием. В этом случае при прослушивании аудио не начинает отсчитываться тайм-аут неактивности, а также не выполняется соответствующее действие. Однако воспроизведение аудио не влияет на затемнение, отключение и блокировку экрана. Если указано значение False, воспроизведение аудио также считается бездействием.</translation> +<translation id="52393120393725840">Если правило включено, <ph name="PRODUCT_NAME" /> будет запоминать введенные пароли, а также предлагать их при следующем входе. + + Если отключить правило, пользователям будут доступны только ранее сохраненные пароли, а сохранить новые будет нельзя. + + Если правило настроено, его не удастся изменить в <ph name="PRODUCT_NAME" />. В противном случае пользователи при желании смогут отключить функцию сохранения паролей.</translation> <translation id="5239333626804545932">Если правило включено или не настроено, Инструмент очистки Chrome будет периодически проверять систему и отправлять пользователю запросы на удаление обнаруженного нежелательного ПО. Ручной запуск инструмента на странице chrome://settings будет включен. Если правило отключено, то Инструмент очистки Chrome не сможет запускаться, а ручной запуск будет отключен. @@ -2747,6 +2808,26 @@ Если правило не настроено или указано значение False, режим единого рабочего стола будет отключен и пользователи не смогут его включить.</translation> <translation id="5255162913209987122">Рекомендуется</translation> +<translation id="5264066441613395613">Правило позволяет Chrome и ARC-приложениям игнорировать все настройки прокси-сервера, указанные с помощью командной строки. + + Если правило не задано, пользователи смогут самостоятельно настраивать прокси-сервер. + + Правило <ph name="PROXY_SETTINGS_POLICY_NAME" /> активирует следующие поля: + * поле "<ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />" позволяет задать прокси-сервер для Chrome и запрещает другим пользователям изменять эти настройки; + * поле "<ph name="PROXY_PAC_URL_PROXY_SETTINGS_FIELD" />" задает URL файла PAC прокси-сервера; + * поле "<ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" />" задает URL прокси-сервера; + * поле "<ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />" задает список прокси-серверов, которые <ph name="PRODUCT_NAME" /> игнорирует. + + Поле "<ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" />" заменено полем "<ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />", которое задает прокси-сервер для Chrome и запрещает другим пользователям изменять эти настройки. + + Выберите значение поля "<ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />": + * <ph name="PROXY_MODE_ENUM_DIRECT" /> – прокси-сервер никогда не будет использоваться, а значения остальных полей будут игнорироваться. + * <ph name="PROXY_MODE_ENUM_SYSTEM" /> – будут использоваться системные настройки прокси-сервера, значения остальных полей будут игнорироваться. + * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" /> – значения остальных полей будут игнорироваться. + * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" /> – будут использоваться поля "<ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" />" и "<ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />". + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> – будут использоваться поля "<ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" />" и "<ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />". + + Примечание. Подробную информацию можно найти здесь: https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.</translation> <translation id="5272684451155669299">Если вы укажете значение True, то разрешите использовать аппаратное обеспечение устройств Chrome для удаленной проверки личных данных пользователя в центре сертификации с помощью функции <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Если вы укажете значение False или не станете настраивать правило, произойдет ошибка вызова API и будет указан ее код.</translation> @@ -3136,6 +3217,13 @@ <translation id="5697306356229823047">Сообщает о пользователях устройства</translation> <translation id="570062449808736508">Если для правила указано значение, WebView распознает ограничения, установленные для URL-адресов поставщиком контента с заданным центром сертификации.</translation> <translation id="5708969689202733975">Настроить разрешенные режимы быстрой разблокировки</translation> +<translation id="5715617256528927547">Это правило определяет максимальное количество часов использования кешированных объектов групповой политики до их повторного скачивания. Вместо того чтобы скачивать объекты групповой политики при каждом получении правила, система может повторно использовать кешированные объекты, если их версия не меняется. + + Если для правила указать значение "0", кеширование будет отключено. В этом случае нагрузка на сервер возрастает, так как объекты групповой политики приходится заново скачивать при каждом получении правила, даже если они не меняются. + + Если правило не настроено, кешированные объекты групповой политики можно использовать в течение 25 часов. + + Примечание. При перезагрузке устройства или выходе из системы происходит очистка кеша.</translation> <translation id="572155275267014074">Настройки Android</translation> <translation id="5728154254076636808">Разрешить создание перемещаемых копий данных для профиля сервиса "<ph name="PRODUCT_NAME" />"</translation> <translation id="5732972008943405952">Импорт данных для автозаполнения форм из браузера по умолчанию при первом запуске</translation> @@ -3183,6 +3271,11 @@ <translation id="5815129011704381141">Автоматическая перезагрузка после обновления</translation> <translation id="582857022372205358">Включить переплет по короткому краю при двусторонней печати</translation> <translation id="5832274826894536455">Устаревшие правила</translation> +<translation id="5835253272509953988">Если параметр включен, то пользователи смогут проверять в <ph name="PRODUCT_NAME" />, не стали ли введенные ими данные (например, имена пользователей и пароли) известны посторонним в результате утечки. + + Если правило настроено, его не удастся изменить в <ph name="PRODUCT_NAME" />. В противном случае проверка также будет доступна, но при желании пользователи смогут ее отключить. + + Функция "Безопасный просмотр" может быть отключена как с помощью правила, так и самим пользователем. В таком случае действие запускаться не будет. Чтобы принудительно включить Безопасный просмотр, используйте правило <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> или <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5836064773277134605">Ограничить диапазон портов UDP, используемых хостами удаленного доступа</translation> <translation id="5845686745936515940">Позволяет восстановить ранее применявшееся поведение для всех файлов cookie с атрибутом <ph name="ATTRIBUTE_SAMESITE_NAME" />. В этом случае файлы cookie, в которых не указан атрибут <ph name="ATTRIBUTE_SAMESITE_NAME" />, будут обрабатываться как файлы с атрибутом <ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />. Кроме того, требование о наличии атрибута <ph name="ATTRIBUTE_SECURE_NAME" /> в файлах cookie с атрибутом <ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" /> будет снято, а сравнение протоколов при оценке двух одинаковых сайтов будет пропущено. Полное описание правила приведено здесь: https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies. @@ -3491,6 +3584,13 @@ Подробнее о технологии <ph name="CORS" />: <ph name="CORS_HELP_URL" />. Мы планировали удалить это правило из <ph name="PRODUCT_NAME" /> с версии 82, но удалили с версии 84.</translation> +<translation id="6279722058145292462">Правило позволяет указать, через сколько дней клиент будет изменять пароль аккаунта на компьютере. Пароль генерируется случайным образом и не виден пользователю. Чем чаще меняется пароль, тем меньше шансов у злоумышленников его подобрать и использовать в своих целях. Если отключить правило или указать большой срок, система может оказаться под угрозой. + + Если это правило не настроено, пароль аккаунта на компьютере будет меняться каждые 30 дней. + + Если для правила указано значение "0", пароль меняться не будет. + + Примечание. Если у клиента долго нет доступа к Сети, пароли могут остаться прежними, даже если их срок уже истек.</translation> <translation id="6281043242780654992">Задает правила для обмена сообщениями с оригинальными приложениями. Хосты такого обмена, включенные в черный список, будут загружаться только в том случае, если они добавлены в белый.</translation> <translation id="6282799760374509080">Включение или отключение функции захвата аудио</translation> <translation id="6284362063448764300">TLS 1.1</translation> @@ -3624,6 +3724,9 @@ Блокировку экрана в случае бездействия рекомендуется установить следующим образом: включить функцию блокировки экрана при переходе в спящий режим и настроить в <ph name="PRODUCT_OS_NAME" /> переход в этот режим по прошествии заданного периода бездействия. Это правило следует использовать, только если блокировка экрана должна включаться намного раньше перехода в спящий режим или если переход в спящий режим при бездействии не требуется вообще. Значение указывается в миллисекундах и должно быть меньше времени задержки до перехода в режим бездействия.</translation> +<translation id="6506486086262398387">Если правило включено, функция общего доступа к файлам в сети в <ph name="PRODUCT_OS_NAME" /> при необходимости будет использовать протокол NTLM для аутентификации общих папок с протоколом SMB. Если правило отключено, протокол NTLM для аутентификации применяться не будет. + + Если правило не задано, оно будет по умолчанию считаться выключенным для профилей, управляемых администратором, и включенным для остальных.</translation> <translation id="6515357889978918016">Образ <ph name="PLUGIN_VM_NAME" /></translation> <translation id="6518102411616460786">Ждать выхода той же стабильной версии</translation> <translation id="6520802717075138474">Импорт сведений о поисковых системах из браузера, используемого по умолчанию, при первом запуске.</translation> @@ -3652,6 +3755,22 @@ О допустимых шаблонах URL рассказано на странице https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="6553143066970470539">Уровень яркости экрана в процентах</translation> <translation id="6559057113164934677">Запретить сайтам доступ к камере и микрофону</translation> +<translation id="6559475864956112261">Это правило больше не поддерживается. Используйте вместо него правило <ph name="PROXY_SETTINGS_POLICY_NAME" />. + + Оно позволяет задать прокси-сервер для Chrome и запрещает пользователям менять его настройки. Chrome и ARC-приложения будут игнорировать все настройки прокси-сервера, указанные с помощью командной строки. Это правило действует, только если не настроено правило <ph name="PROXY_SETTINGS_POLICY_NAME" />. + + При выборе одного из следующих параметров остальные игнорируются: + * Параметр <ph name="PROXY_MODE_ENUM_DIRECT" /> запрещает использование прокси-сервера и устанавливает прямое соединение. + * Параметр <ph name="PROXY_MODE_ENUM_SYSTEM" /> активирует системные настройки прокси-сервера. + * Параметр <ph name="PROXY_MODE_ENUM_AUTO_DETECT" /> автоматически определяет прокси-сервер. + + Вы также можете выбрать следующий параметр: + * <ph name="PROXY_MODE_ENUM_FIXED_SERVERS" /> – использование фиксированных прокси-серверов. Дополнительные параметры определяются правилами <ph name="PROXY_SERVER_POLICY_NAME" /> и <ph name="PROXY_BYPASS_LIST_POLICY_NAME" />. ARC-приложениям будет доступен только HTTP-прокси с наивысшим приоритетом. + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> – скрипт автоконфигурации прокси. Чтобы указать URL файла PAC прокси-сервера, используйте правило <ph name="PROXY_PAC_URL_POLICY_NAME" />. + + Если правило не задано, пользователи смогут самостоятельно настраивать прокси-сервер. + + Примечание. Подробную информацию можно найти здесь: https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.</translation> <translation id="6561396069801924653">Показ специальных возможностей в меню панели задач</translation> <translation id="6563458316362153786">Включить 802.11r Fast Transition</translation> <translation id="6568977718979857253">Это правило устарело. Используйте вместо него <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> для управления доступностью Flash-плагина и <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> для настройки встроенного средства просмотра PDF-файлов. @@ -4479,6 +4598,13 @@ Если устройство пользователя является управляемым, то возможность работы с приложениями из указанной категории также зависит от заданных для устройства правил. Если устройство не находится под управлением, то возможность работы с приложениями из указанной категории также зависит от того, является ли пользователь владельцем устройства.</translation> +<translation id="7570111012674064005">Правило позволяет указать, будут ли обрабатываться правила для пользователей, входящие в состав объекта групповой политики (GPO) компьютера, а также каким образом будет происходить этот процесс. + + * Если правило не настроено или в нем указано значение "Default", то правила для пользователей считываются только из объектов групповой политики пользователя. Объекты групповой политики компьютера игнорируются. + + * Если в правиле указано значение "Merge", то правила для пользователей в объектах групповой политики пользователя объединяются с правилами для пользователей в объектах групповой политики компьютера. Предпочтение отдается объектам групповой политики компьютера. + + * Если в правиле указано значение "Replace", то правила для пользователей в объектах групповой политики пользователя замещаются правилами для пользователей объектов групповой политики компьютера. Объекты групповой политики пользователя игнорируются.</translation> <translation id="7570291542739287032">Только облачное управление</translation> <translation id="757395965347379751">Когда эта настройка включена, <ph name="PRODUCT_NAME" /> разрешает использовать сертификаты с подписью SHA-1, если они успешно прошли проверку и связаны с локальным сертификатом ЦС. @@ -5046,6 +5172,11 @@ Если правило не настроено или для него задано значение True, пользователь получит root-доступ к контейнерам Crostini. Если для правила выбрано значение False, пользователю не будет предоставлен root-доступ ни к новым, ни к существующим контейнерам Crostini.</translation> <translation id="8417305981081876834">Установить максимальную длину PIN-кода для разблокировки экрана</translation> +<translation id="841853753509411428">Это правило больше не поддерживается. Используйте вместо него правило <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />. + + Правило позволяет исключить определенные хосты обмена сообщениями с оригинальными приложениями из списка запрещенных. Если значение "<ph name="WILDCARD_VALUE" />" применено для всего списка запрещенных хостов, загружаются только явно разрешенные. + + По умолчанию все эти хосты разрешены. Хотя правило запрещает все хосты обмена сообщениями с оригинальными приложениями, администратор может изменить его, создав список разрешенных хостов.</translation> <translation id="841977920223099909">Триггер, при котором будет получено предупреждение от защиты паролем</translation> <translation id="8424255554404582727">Поворот изображения на экране по умолчанию (применяется при каждой перезагрузке)</translation> <translation id="8426231401662877819">Повернуть экран на 90 градусов по часовой стрелке</translation> @@ -5272,6 +5403,9 @@ <translation id="8767743923206070405">Если правило включено, кнопка главного экрана будет располагаться на панели инструментов <ph name="PRODUCT_NAME" />. В противном случае она будет не видна. Если правило задано, не удастся изменить эту настройку в <ph name="PRODUCT_NAME" />. В противном случае пользователи смогут добавить или скрыть кнопку главного экрана.</translation> +<translation id="8768528324886802059">Правило позволяет исключить определенные хосты обмена сообщениями с оригинальными приложениями из списка запрещенных. Если значение "<ph name="WILDCARD_VALUE" />" применено для всего списка запрещенных хостов, загружаются только явно разрешенные. + + По умолчанию все эти хосты разрешены. Хотя правило запрещает все хосты обмена сообщениями с оригинальными приложениями, администратор может изменить его, создав список разрешенных хостов.</translation> <translation id="877185520360032968">Это правило изменяет каталог, в который браузер Chrome по умолчанию скачивает файлы. Пользователи могут выбрать другой каталог. Если правило не настроено, браузер Chrome использует каталог, заданный по умолчанию в той или иной ОС.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 2a94173..ab44c4e0 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -98,6 +98,17 @@ <translation id="1160939557934457296">Vô hiệu hóa khả năng tiếp tục từ trang cảnh báo Duyệt web an toàn</translation> <translation id="1163080558183062209">Vô hiệu hóa các loại máy in trong danh sách từ chối</translation> <translation id="117059611145966538">Máy chủ máy in bên ngoài</translation> +<translation id="1171785618439752042">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định các loại mã hóa được cho phép khi yêu cầu phiếu Kerberos từ một máy chủ <ph name="MS_AD_NAME" />. + + Nếu bạn đặt chính sách này thành: + + * Tất cả, hệ thống sẽ cho phép các loại mã hóa AES aes256-cts-hmac-sha1-96 và aes128-cts-hmac-sha1-96, cũng như loại mã hóa RC4 rc4-hmac. AES sẽ được ưu tiên nếu máy chủ hỗ trợ các loại mã hóa AES và RC4. + + * Mạnh hoặc nếu bạn không đặt chính sách này, hệ thống sẽ chỉ cho phép các loại AES. + + * Cũ, hệ thống sẽ chỉ cho phép loại RC4. RC4 là loại mã hóa không an toàn. Loại mã hóa này chỉ cần đến trong các trường hợp rất cụ thể. Nếu được, hãy định lại cấu hình máy chủ để hỗ trợ loại mã hóa AES. + + Ngoài ra, hãy xem https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> <translation id="1177567780207290133">Khi bạn đặt chính sách này, hệ thống sẽ kiểm soát bộ lọc URL SafeSites. Bộ lọc này dùng API Tìm kiếm an toàn của Google để phân loại xem các URL có chứa nội dung khiêu dâm hay không. Khi bạn đặt chính sách này thành: @@ -187,6 +198,11 @@ Nếu chính sách này được đặt thành false, <ph name="PRODUCT_NAME" /> sẽ không cho phép bắt đầu hồ sơ khách.</translation> <translation id="1363275621236827384">Bật truy vấn cấu hình Máy chủ Quirks cho phần cứng</translation> <translation id="1376119291123231789">Bật chế độ sạc pin nâng cao</translation> +<translation id="1378850678793136128">Cho phép bạn thiết lập danh sách các mẫu URL để chỉ định những trang web sẽ tự động được cấp quyền truy cập vào thiết bị USB bằng mã sản phẩm và mã nhà cung cấp đã cho trên màn hình đăng nhập. Mỗi mục trong danh sách phải có trường "devices" và trường "urls" thì chính sách này mới hợp lệ. Mỗi mục trong trường "devices" có thể chứa trường "vendor_id" và "product_id". Nếu bạn bỏ qua trường "vendor_id", một chính sách sẽ áp dụng cho bất kỳ thiết bị nào. Nếu bạn bỏ qua trường "product_id", một chính sách sẽ áp dụng cho bất kỳ thiết bị nào có mã nhà cung cấp đã cho. Nếu chính sách có trường "product_id" mà không có trường "vendor_id" thì chính sách đó sẽ không hợp lệ. + + Mô hình cấp phép của USB sử dụng URL của trang web yêu cầu ("URL yêu cầu") và URL của trang web khung cấp cao nhất ("URL nhúng") để cấp cho URL yêu cầu quyền truy cập vào thiết bị USB. URL yêu cầu có thể khác với URL nhúng khi bạn tải trang web yêu cầu trong iframe. Do đó, trường "urls" có thể chứa tối đa 2 chuỗi URL phân tách bằng dấu phẩy để chỉ định URL yêu cầu và URL nhúng tương ứng. Nếu chỉ có một URL được chỉ định, quyền truy cập vào các thiết bị USB tương ứng sẽ được cấp khi URL của trang web yêu cầu khớp với URL này, bất kể trạng thái nhúng. Các URL trong trường "urls" phải là URL hợp lệ. Nếu không, chính sách này sẽ bị bỏ qua. + + Nếu bạn không đặt chính sách này, giá trị mặc định chung sẽ được dùng cho tất cả các trang web (không truy cập tự động).</translation> <translation id="1384459581748403878">Tham khảo: <ph name="REFERENCE_URL" /></translation> <translation id="138847842893090358">Báo cáo trạng thái cập nhật hệ điều hành</translation> <translation id="1390901586107713894">Cho phép bạn chỉ định những tiện ích mà người dùng KHÔNG THỂ cài đặt. Những tiện ích đã cài đặt sẽ tắt nếu bị chặn. Người dùng không có cách nào để bật những tiện ích đó. Sau khi bạn xóa một tiện ích (bị tắt do thuộc danh sách chặn) khỏi danh sách chặn, thì tiện ích này sẽ tự động được bật lại. @@ -639,6 +655,9 @@ </translation> <translation id="2030905906517501646">Từ khóa nhà cung cấp dịch vụ tìm kiếm mặc định</translation> <translation id="203096360153626918">Chính sách này không ảnh hưởng đến các ứng dụng Android. Các ứng dụng đó sẽ có thể vào chế độ toàn màn hình ngay cả khi chính sách này được đặt thành <ph name="FALSE" />.</translation> +<translation id="2036522553891755455">Nếu bạn đặt chính sách này thành Bật, tính năng khám phá lượt chia sẻ (tính năng Chia sẻ tệp trong mạng của <ph name="PRODUCT_NAME" />) sẽ sử dụng <ph name="NETBIOS_PROTOCOL" /> để khám phá các lượt chia sẻ trên mạng. Nếu bạn đặt chính sách thành Tắt, tính năng khám phá lượt chia sẻ sẽ không sử dụng giao thức này để khám phá các lượt chia sẻ. + + Nếu bạn không đặt chính sách này, chế độ hoạt động mặc định sẽ là tắt đối với người dùng được quản lý và bật đối với người dùng khác.</translation> <translation id="2037214548071298156">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì thiết bị đã đăng ký sẽ báo cáo số liệu thống kê về phần cứng, chẳng hạn như mức sử dụng CPU/RAM. Nếu bạn đặt chính sách này thành Tắt, thiết bị đã đăng ký sẽ không báo cáo số liệu thống kê về phần cứng đó.</translation> @@ -660,6 +679,7 @@ <translation id="2098658257603918882">Bật tính năng báo cáo sử dụng và dữ liệu liên quan đến sự cố</translation> <translation id="2104418465060359056">Báo cáo thông tin về Tiện ích và Plugin</translation> <translation id="2106627642643925514">Ghi đè chế độ in mã PIN mặc định. Nếu không có chế độ này, thì chính sách này sẽ bị bỏ qua.</translation> +<translation id="2107563874993284076">Nếu bạn đặt chính sách này thành Bật, người dùng sẽ có thể sử dụng tính năng Chia sẻ tệp trong mạng của <ph name="PRODUCT_NAME" />. Nếu bạn đặt chính sách này thành Tắt, người dùng sẽ không sử dụng được tính năng này.</translation> <translation id="2107601598727098402"> Chính sách này không còn dùng trong M72 nữa. Thay vào đó, hãy sử dụng CloudManagementEnrollmentToken. </translation> @@ -784,6 +804,13 @@ Bạn không nên dùng chính sách này cho các thiết bị dùng chung. Nếu bạn đặt chính sách này thành True hoặc không đặt chính sách này, thì thông báo cảnh báo quyền riêng tư trong phiên khách được quản lý tự động chạy sẽ được ghim cho đến khi người dùng đóng thông báo này.</translation> +<translation id="228665601367357543">Cho phép bạn thiết lập danh sách các mẫu URL để chỉ định những trang web sẽ tự động được cấp quyền truy cập vào thiết bị USB bằng mã sản phẩm và mã nhà cung cấp đã cho. Mỗi mục trong danh sách phải có trường "devices" và trường "urls" thì chính sách này mới hợp lệ. Mỗi mục trong trường "devices" có thể chứa trường "vendor_id" và "product_id". Nếu bạn bỏ qua trường "vendor_id", một chính sách sẽ áp dụng cho bất kỳ thiết bị nào. Nếu bạn bỏ qua trường "product_id", một chính sách sẽ áp dụng cho bất kỳ thiết bị nào có mã nhà cung cấp đã cho. Nếu chính sách có trường "product_id" mà không có trường "vendor_id" thì chính sách đó sẽ không hợp lệ. + + Mô hình quản lý quyền truy cập vào USB sử dụng URL yêu cầu và URL nhúng (của trang web khung cấp cao nhất) để cho phép URL yêu cầu truy cập vào thiết bị USB. URL yêu cầu có thể khác với URL nhúng khi trang web yêu cầu tải trong iframe. Do đó, trường "urls" có thể chứa tối đa 2 chuỗi được phân tách bằng dấu phẩy để chỉ định những URL này. Nếu bạn chỉ định duy nhất một URL, hệ thống sẽ cấp quyền truy cập vào các thiết bị USB tương ứng khi URL của trang web yêu cầu khớp với URL này, bất kể trạng thái nhúng là gì. Các URL trong trường "urls" phải là URL hợp lệ. Nếu không, chính sách này sẽ bị bỏ qua. + + Nếu bạn không đặt chính sách này, <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> (nếu được đặt) sẽ áp dụng. Nếu không, tùy chọn cài đặt cá nhân của người dùng sẽ được áp dụng. + + Các mẫu URL trong chính sách này không được xung đột với những mẫu URL đã định cấu hình thông qua <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. Nếu có xung đột, chính sách này sẽ được ưu tiên hơn <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> và <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation> <translation id="2289265947759479962">Chính sách này kiểm soát xem có báo cáo thông tin phiên bản, chẳng hạn như phiên bản hệ điều hành, nền tảng hệ điều hành, cấu trúc hệ điều hành, phiên bản <ph name="PRODUCT_NAME" /> và kênh <ph name="PRODUCT_NAME" /> hay không. Khi bạn không đặt chính sách <ph name="CLOUD_REPORTING_ENABLED_POLICY_NAME" /> hoặc đặt thành tắt, thì chính sách này sẽ bị bỏ qua. @@ -1041,6 +1068,11 @@ Có thể chỉ định URL kết quả tức thì của Google dưới dạng: <ph name="GOOGLE_INSTANT_SEARCH_URL" />. Chính sách này chỉ được áp dụng nếu chính sách 'DefaultSearchProviderEnabled' được bật.</translation> +<translation id="2567227673131796227">Chính sách này không còn dùng nữa, vui lòng sử dụng chính sách "<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />". + + Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định những máy chủ nhắn tin gốc không được phép tải. Giá trị của danh sách từ chối là <ph name="WILDCARD_VALUE" /> nghĩa là tất cả máy chủ nhắn tin gốc đều bị từ chối, trừ trường hợp các máy chủ này được cho phép một cách rõ ràng. + + Nếu bạn không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ tải tất cả máy chủ nhắn tin gốc đã cài đặt.</translation> <translation id="2571066091915960923">Bật hoặc tắt proxy nén dữ liệu và ngăn người dùng thay đổi cài đặt này. Nếu bạn bật hoặc tắt cài đặt này, người dùng không thể thay đổi hoặc ghi đè cài đặt này. @@ -1143,6 +1175,9 @@ Nếu cài đặt này tắt, các trang web không thể sử dụng JavaScript và người dùng không thể thay đổi cài đặt đó. Nếu cài đặt này bật hoặc không được thiết lập, các trang web có thể sử dụng JavaScript nhưng người dùng có thể thay đổi cài đặt đó.</translation> +<translation id="2752046642026416564">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì <ph name="PRODUCT_NAME" /> có thể sử dụng các máy chủ nhắn tin gốc đã cài đặt ở cấp người dùng. + + Nếu bạn đặt chính sách này thành Tắt, <ph name="PRODUCT_NAME" /> chỉ có thể sử dụng các máy chủ này nếu được cài đặt ở cấp hệ thống.</translation> <translation id="2753637905605932878">Hạn chế phạm vi của cổng UDP cục bộ do WebRTC sử dụng</translation> <translation id="2757054304033424106">Các loại tiện ích/ứng dụng được phép cài đặt</translation> <translation id="2758689548159678032">Khi được bật, tính năng <ph name="PRODUCT_NAME" /> sẽ gửi tiêu đề của yêu cầu chi tiết cung cấp thông tin về trình duyệt và môi trường của người dùng. @@ -1441,6 +1476,9 @@ Bạn phải chỉ định giá trị của chính sách bằng mili giây.</translation> <translation id="3205825995289802549">Mở tối đa cửa sổ trình duyệt đầu tiên trong lần chạy đầu tiên</translation> +<translation id="3210408472559816322">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định những máy chủ nhắn tin gốc không được phép tải. Giá trị của danh sách từ chối là <ph name="WILDCARD_VALUE" /> nghĩa là tất cả máy chủ nhắn tin gốc đều bị từ chối, trừ trường hợp các máy chủ này được cho phép một cách rõ ràng. + + Nếu bạn không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ tải tất cả máy chủ nhắn tin gốc đã cài đặt.</translation> <translation id="3211426942294667684">Cài đặt đăng nhập vào trình duyệt</translation> <translation id="3219421230122020860">Chế độ ẩn danh khả dụng</translation> <translation id="3220624000494482595">Nếu ứng dụng kiosk là một ứng dụng Android thì ứng dụng này không có quyền kiểm soát đối với phiên bản <ph name="PRODUCT_OS_NAME" /> ngay cả khi chính sách này được đặt thành <ph name="TRUE" />.</translation> @@ -2237,6 +2275,7 @@ <translation id="4326288975020835343">Khi bạn đặt chính sách này thành Bật, lịch sử duyệt web sẽ không được lưu, tính năng đồng bộ hóa thẻ sẽ tắt và người dùng không thể thay đổi tùy chọn cài đặt này. Khi bạn đặt thành Tắt hoặc không đặt chính sách này, lịch sử duyệt web sẽ được lưu.</translation> +<translation id="4329095223358818804">Cho phép tính năng Trả lời nhanh truy cập vào nội dung đã chọn</translation> <translation id="4330372709562934569">Cho phép các trang web có trong danh sách gửi yêu cầu từ những nguồn không an toàn đến các thiết bị đầu cuối trên mạng riêng.</translation> <translation id="4332177773549877617">Ghi lại các sự kiện cho lượt cài đặt ứng dụng Android</translation> <translation id="4341199399451274159">Nếu bạn bật <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, thì thao tác đặt <ph name="DEFAULT_SEARCH_PROVIDER_ENCODINGS_POLICY_NAME" /> sẽ chỉ định phương thức mã hóa ký tự mà nhà cung cấp dịch vụ tìm kiếm hỗ trợ. Phương thức mã hóa là tên trang mã, chẳng hạn như UTF-8, GB2312 và ISO-8859-1. Các tên này được thử theo thứ tự cung cấp. @@ -2372,6 +2411,13 @@ <translation id="4578912515887794133">Nếu bạn bật tùy chọn cài đặt này, máy chủ truy cập từ xa sẽ so sánh tên của người dùng trên máy (liên kết với máy chủ) và tên tài khoản Google được đăng ký làm chủ sở hữu máy chủ (ví dụ như "johndoe" nếu tài khoản Google "johndoe@example.com" sở hữu máy chủ này). Máy chủ truy cập từ xa sẽ không khởi động nếu tên của chủ sở hữu máy chủ khác với tên của người dùng trên máy được liên kết với máy chủ. Bạn nên sử dụng chính sách RemoteAccessHostMatchUsername cùng với chính sách RemoteAccessHostDomain để đồng thời buộc tài khoản Google của chủ sở hữu máy chủ liên kết với một miền cụ thể (ví dụ như "example.com"). Nếu bạn tắt hoặc không đặt tùy chọn cài đặt này, máy chủ truy cập từ xa có thể liên kết với bất kỳ người dùng nào trên máy.</translation> +<translation id="4587365491100112056">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định thời gian tồn tại (tính theo giờ) của bộ nhớ đệm lưu dữ liệu xác thực. Bộ nhớ đệm chứa dữ liệu về các vùng được vùng trên máy này tin cậy (vùng được liên kết). Vì vậy, việc lưu dữ liệu xác thực vào bộ nhớ đệm sẽ giúp quá trình đăng nhập diễn ra nhanh chóng. Dữ liệu dành riêng cho người dùng và dữ liệu cho các vùng chưa liên kết không được lưu vào bộ nhớ đệm. + + Nếu bạn đặt chính sách này thành 0, tính năng lưu dữ liệu xác thực vào bộ nhớ đệm sẽ bị tắt. Dữ liệu dành riêng cho vùng được hệ thống tìm nạp mỗi lần đăng nhập, nên việc tắt tính năng lưu dữ liệu xác thực vào bộ nhớ đệm có thể làm chậm đáng kể quá trình đăng nhập của người dùng. + + Nếu bạn không đặt chính sách này, hệ thống có thể sử dụng lại dữ liệu xác thực đã lưu vào bộ nhớ đệm trong tối đa 73 giờ. + + Lưu ý: Thao tác khởi động lại thiết bị sẽ xóa bộ nhớ đệm, ngay cả khi dữ liệu vùng của người dùng tạm thời đã được lưu vào bộ nhớ đệm. Hãy tắt bộ nhớ đệm để ngăn việc truy vết vùng của người dùng tạm thời.</translation> <translation id="4591366717022345234">Cung cấp Bản dựng Quick Fix cho người dùng</translation> <translation id="4592246263545654202">Chỉ định việc người dùng có thể mở trang ở chế độ ẩn danh trong <ph name="PRODUCT_NAME" /> hay không. @@ -2480,6 +2526,7 @@ <ph name="PAGE_SIZE_NAME" /> nên chứa một trong các định dạng được liệt kê hoặc giá trị "tùy chỉnh" nếu kích thước giấy bắt buộc không có trong danh sách đó. Nếu cung cấp giá trị "tùy chỉnh", thì bạn nên chỉ định thuộc tính <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Thuộc tính này mô tả chiều dài và chiều rộng mong muốn tính bằng micromet. Nếu không, bạn không nên chỉ định thuộc tính <ph name="PAGE_SIZE_CUSTOM_SIZE" />. Chính sách vi phạm những quy tắc này sẽ bị bỏ qua. Nếu kích thước trang không có sẵn trên máy in mà người dùng chọn, thì chính sách này sẽ bị bỏ qua.</translation> +<translation id="4790588245699320140">Cho phép Trợ lý Google truy cập vào ngữ cảnh màn hình</translation> <translation id="4802744647065138872">Giới hạn số lượng ảnh chụp nhanh dữ liệu người dùng được giữ lại để sử dụng trong trường hợp khôi phục khẩn cấp.</translation> <translation id="4802905909524200151">Định cấu hình hành vi của bản cập nhật chương trình cơ sở <ph name="TPM_FIRMWARE_UPDATE_TPM" /></translation> <translation id="4804828344300125154">Luôn khởi động lại khi đăng xuất người dùng.</translation> @@ -2587,6 +2634,15 @@ <translation id="5017369989680827157">Nếu bạn đặt chính sách này thành True hoặc không đặt chính sách này, thì người dùng sẽ có quyền kiểm soát tính năng Tự động điền cho địa chỉ trong giao diện người dùng. Nếu bạn đặt chính sách này thành False, thì tính năng Tự động điền sẽ không bao giờ gợi ý hoặc điền thông tin địa chỉ hay lưu thông tin địa chỉ bổ sung mà người dùng gửi trong khi duyệt web.</translation> +<translation id="5021550478471824215">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định một danh sách các lượt chia sẻ tệp trong mạng đã đặt trước. Mỗi mục là một đối tượng có 2 thuộc tính: <ph name="SHARE_URL_FIELD_NAME" /> và <ph name="MODE_FIELD_NAME" />. + + URL chia sẻ sẽ là <ph name="SHARE_URL_FIELD_NAME" />. + + Đối với <ph name="MODE_FIELD_NAME" />, chế độ sẽ là <ph name="MODE_ENUM_DROP_DOWN" /> hoặc <ph name="MODE_ENUM_PRE_MOUNT" />: + + * <ph name="MODE_ENUM_DROP_DOWN" /> cho biết rằng <ph name="SHARE_URL_FIELD_NAME" /> sẽ được thêm vào danh sách khám phá lượt chia sẻ. + + * <ph name="MODE_ENUM_PRE_MOUNT" /> cho biết rằng <ph name="SHARE_URL_FIELD_NAME" /> sẽ được liên kết.</translation> <translation id="5023555740504506178">Nếu bạn bật hoặc không định cấu hình (mặc định), thì trang web có thể dùng các API chia sẻ màn hình (ví dụ: getDisplayMedia() hoặc API tiện ích Chụp màn hình) để nhắc người dùng chọn thẻ, cửa sổ hoặc màn hình cần chụp. @@ -2740,6 +2796,11 @@ <translation id="5236882091572996759">Nếu bạn không đặt chính sách này hoặc đặt thành True, người dùng sẽ không được coi là không sử dụng khi âm thanh đang phát. Điều này ngăn đạt tới thời gian chờ khi không sử dụng và việc thực hiện hành động khi không sử dụng. Tuy nhiên, việc làm mờ màn hình, tắt màn hình và khóa màn hình sẽ vẫn được thực hiện sau khoảng thời gian chờ đã định cấu hình, bất kể hoạt động âm thanh. Nếu bạn đặt chính sách này thành False, hoạt động âm thanh sẽ không ngăn việc coi người dùng là không sử dụng.</translation> +<translation id="52393120393725840">Nếu bạn đặt chính sách này thành Bật, người dùng có thể yêu cầu <ph name="PRODUCT_NAME" /> nhớ mật khẩu và cung cấp cho họ ở lần tiếp theo họ đăng nhập vào một trang web. + + Nếu bạn đặt chính sách này thành Tắt, người dùng sẽ không thể lưu các mật khẩu mới. Tuy nhiên, những mật khẩu đã lưu trước đây sẽ vẫn có tác dụng. + + Nếu bạn đặt chính sách này, người dùng sẽ không thay đổi được trong <ph name="PRODUCT_NAME" />. Nếu bạn không đặt chính sách này, người dùng có thể tắt tính năng lưu mật khẩu.</translation> <translation id="5239333626804545932">Khi bạn đặt thành Bật hoặc không đặt chính sách này, tính năng Làm sạch Chrome sẽ định kỳ quét hệ thống để tìm ra phần mềm không mong muốn. Khi tìm thấy phần mềm không mong muốn, tính năng này sẽ hỏi người dùng xem họ có muốn xóa phần mềm đó hay không. Tính năng Làm sạch Chrome có thể được kích hoạt theo cách thủ công trên trang chrome://settings. Khi bạn đặt chính sách này thành Tắt, tính năng Làm sạch Chrome sẽ không quét định kỳ và tùy chọn kích hoạt thủ công sẽ bị tắt. @@ -2761,6 +2822,26 @@ Nếu bạn không đặt hoặc đặt chính sách này thành False, thì Màn hình hợp nhất sẽ tắt và người dùng không thể bật tính năng đó.</translation> <translation id="5255162913209987122">Có thể được đề xuất</translation> +<translation id="5264066441613395613">Việc đặt chính sách này sẽ định cấu hình các tùy chọn cài đặt proxy cho Chrome và các ứng dụng dùng App Runtime for Chrome (ARC). Chrome và các ứng dụng này sẽ bỏ qua mọi tùy chọn liên quan đến proxy được chỉ định thông qua dòng lệnh. + + Nếu bạn không đặt chính sách này, người dùng có thể chọn các tùy chọn cài đặt proxy. + + Nếu đặt chính sách <ph name="PROXY_SETTINGS_POLICY_NAME" />, bạn chấp nhận những trường sau đây: + * <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" /> cho phép bạn chỉ định máy chủ proxy mà Chrome sẽ sử dụng và ngăn người dùng thay đổi các tùy chọn cài đặt proxy + * <ph name="PROXY_PAC_URL_PROXY_SETTINGS_FIELD" /> là URL dẫn tới một tệp proxy .pac + * <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> là URL của máy chủ proxy + * <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> là danh sách các máy chủ proxy mà <ph name="PRODUCT_NAME" /> bỏ qua + + Trường <ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" /> không còn dùng nữa mà thay bằng trường <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />. Trường này cho phép bạn chỉ định máy chủ proxy mà Chrome sẽ sử dụng và ngăn người dùng thay đổi các tùy chọn cài đặt proxy. + + Đối với <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, nếu bạn chọn giá trị: + * <ph name="PROXY_MODE_ENUM_DIRECT" />, proxy sẽ không bao giờ được dùng và tất cả trường khác sẽ bị bỏ qua. + * <ph name="PROXY_MODE_ENUM_SYSTEM" />, proxy của các hệ thống sẽ được dùng và tất cả trường khác sẽ bị bỏ qua. + * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" />, tất cả trường khác sẽ bị bỏ qua. + * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" />, các trường <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> và <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> sẽ được dùng. + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />, các trường <ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" /> và <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> sẽ được dùng. + + Lưu ý: Để xem thêm ví dụ cụ thể, hãy truy cập vào trang The Chromium Projects (https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett).</translation> <translation id="5272684451155669299">Nếu true, người dùng có thể sử dụng phần cứng trên thiết bị Chrome để chứng thực từ xa danh tính của thiết bị với CA bảo mật qua <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> bằng <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Nếu cài đặt được đặt thành false hoặc chưa được đặt, cuộc gọi tới API sẽ không thực hiện được với mã lỗi.</translation> @@ -3154,6 +3235,13 @@ <translation id="5697306356229823047">Báo cáo người dùng thiết bị</translation> <translation id="570062449808736508">Khi chính sách này được đặt thành chuỗi không trống, WebView sẽ đọc hạn chế URL từ nhà cung cấp nội dung có tên tổ chức cho trước.</translation> <translation id="5708969689202733975">Định cấu hình chế độ mở khóa nhanh được phép</translation> +<translation id="5715617256528927547">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định thời gian tồn tại (tính theo giờ) của bộ nhớ đệm Đối tượng chính sách nhóm (GPO) – thời lượng tối đa có thể sử dụng lại các GPO trước khi tải các GPO này xuống lần nữa. Thay vì tải GPO xuống lần nữa trong mỗi lần tìm nạp chính sách, hệ thống có thể sử dụng lại các GPO đã lưu vào bộ nhớ đệm, miễn là phiên bản của các GPO này không thay đổi. + + Nếu bạn đặt chính sách này thành 0, tính năng lưu GPO vào bộ nhớ đệm sẽ bị tắt. Hậu quả là lượng tải trên máy chủ sẽ tăng lên vì các GPO được tải xuống lần nữa mỗi khi tìm nạp chính sách, ngay cả khi các GPO này không thay đổi. + + Nếu bạn không đặt chính sách này, hệ thống có thể sử dụng lại các GPO đã lưu vào bộ nhớ đệm trong tối đa 25 giờ. + + Lưu ý: Thao tác khởi động lại và đăng xuất sẽ xóa bộ nhớ đệm.</translation> <translation id="572155275267014074">Cài đặt Android</translation> <translation id="5728154254076636808">Bật tạo bản sao chuyển vùng cho dữ liệu hồ sơ của <ph name="PRODUCT_NAME" /></translation> <translation id="5732972008943405952">Nhập dữ liệu tự động điền vào biểu mẫu trên trình duyệt mặc định trong lần chạy đầu tiên</translation> @@ -3201,6 +3289,11 @@ <translation id="5815129011704381141">Tự động khởi động lại sau khi cập nhật</translation> <translation id="582857022372205358">Bật chế độ in hai mặt với cạnh ngắn</translation> <translation id="5832274826894536455">Chính sách không còn dùng nữa</translation> +<translation id="5835253272509953988">Nếu bạn đặt chính sách này thành Bật, người dùng có thể yêu cầu <ph name="PRODUCT_NAME" /> kiểm tra xem tên người dùng và mật khẩu đã nhập có bị rò rỉ hay không. + + Nếu bạn đặt chính sách này, người dùng sẽ không thay đổi được trong <ph name="PRODUCT_NAME" />. Nếu bạn không đặt chính sách này, hệ thống sẽ cho phép kiểm tra rò rỉ thông tin đăng nhập. Tuy nhiên, người dùng có thể tắt tính năng này. + + Hoạt động kiểm tra nói trên sẽ không bắt đầu nếu tính năng Duyệt web an toàn bị tắt (theo chính sách hoặc do người dùng). Để buộc bật tính năng Duyệt web an toàn, hãy dùng chính sách <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> hoặc chính sách <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5836064773277134605">Hạn chế phạm vi cổng UDP được máy chủ truy cập từ xa sử dụng</translation> <translation id="5845686745936515940">Cho phép bạn đưa tất cả cookie về hành vi <ph name="ATTRIBUTE_SAMESITE_NAME" /> cũ. Khi quay lại về hành vi cũ, cookie sẽ không chỉ định việc xử lý thuộc tính <ph name="ATTRIBUTE_SAMESITE_NAME" /> như thể là "<ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />" và cookie "<ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />" không cần phải mang thuộc tính "<ph name="ATTRIBUTE_SECURE_NAME" />", đồng thời hệ thống sẽ bỏ qua quy trình so sánh lược đồ khi đánh giá liệu 2 trang web có phải là một hay không. Để xem thông tin chi tiết, vui lòng truy cập https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies. @@ -3510,6 +3603,13 @@ Để biết thông tin chi tiết về <ph name="CORS" />, hãy truy cập: <ph name="CORS_HELP_URL" />. Xin lưu ý rằng chúng tôi đã thông báo việc loại bỏ chính sách này trong <ph name="PRODUCT_NAME" /> phiên bản 82. Tuy nhiên, chính sách này sẽ bị loại bỏ trong phiên bản 84.</translation> +<translation id="6279722058145292462">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định tần suất (tính theo ngày) mà một máy khách sẽ thay đổi mật khẩu tài khoản cho máy của mình. Mật khẩu do máy khách tạo ngẫu nhiên và không hiển thị với người dùng. Việc tắt chính sách này hoặc đặt một giá trị lớn cho số ngày có thể ảnh hưởng tiêu cực đến tính bảo mật vì kẻ tấn công sẽ có thêm thời gian tìm ra mật khẩu tài khoản của máy và sử dụng mật khẩu đó. + + Nếu bạn không đặt chính sách này thì cứ sau 30 ngày, mật khẩu tài khoản của máy sẽ được thay đổi 1 lần. + + Nếu bạn đặt chính sách này thành 0, hệ thống sẽ tắt tùy chọn thay đổi mật khẩu tài khoản của máy. + + Lưu ý: Mật khẩu có thể tồn tại lâu hơn số ngày đã chỉ định nếu máy khách không kết nối mạng trong một thời gian dài.</translation> <translation id="6281043242780654992">Định cấu hình chính sách cho Nhắn tin gốc. Máy chủ nhắn tin gốc được đưa vào danh sách cấm sẽ không được phép trừ khi chúng được đưa vào danh sách cho phép.</translation> <translation id="6282799760374509080">Cho phép hoặc từ chối ghi âm</translation> <translation id="6284362063448764300">TLS 1.1</translation> @@ -3643,6 +3743,9 @@ Để khóa màn hình khi ở chế độ tạm vắng, bạn nên bật phương thức khóa màn hình khi tạm ngưng và đặt <ph name="PRODUCT_OS_NAME" /> tạm ngưng sau thời gian chờ khi ở chế độ tạm vắng. Bạn chỉ nên sử dụng chính sách này khi muốn khóa màn hình sớm hơn đáng kể so với thời gian tạm ngưng hoặc khi không muốn tạm ngưng ở chế độ tạm vắng. Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn thời gian chờ khi ở chế độ tạm vắng.</translation> +<translation id="6506486086262398387">Nếu bạn đặt chính sách này thành Bật, tính năng Chia sẻ tệp trong mạng của <ph name="PRODUCT_OS_NAME" /> sẽ sử dụng NTLM để xác thực các lượt chia sẻ SMB nếu cần. Nếu bạn đặt chính sách này thành Tắt, tính năng xác thực bằng NTLM cho các lượt chia sẻ SMB sẽ bị tắt. + + Nếu bạn không đặt chính sách này, chế độ hoạt động mặc định sẽ là tắt đối với người dùng được quản lý và bật đối với người dùng khác.</translation> <translation id="6515357889978918016">Hình ảnh <ph name="PLUGIN_VM_NAME" /></translation> <translation id="6518102411616460786">Chờ để kênh đích bắt kịp phiên bản hiện tại trong quá trình hạ cấp kênh</translation> <translation id="6520802717075138474">Nhập công cụ tìm kiếm từ trình duyệt mặc định trong lần chạy đầu tiên</translation> @@ -3671,6 +3774,22 @@ Để biết thông tin chi tiết về mẫu URL hợp lệ, vui lòng xem tại https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="6553143066970470539">Phần trăm độ sáng màn hình</translation> <translation id="6559057113164934677">Không cho phép bất kỳ trang web nào truy cập vào máy ảnh và micrô</translation> +<translation id="6559475864956112261">Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PROXY_SETTINGS_POLICY_NAME" />. + + Nếu đặt chính sách này thành Bật, bạn có thể chỉ định máy chủ proxy mà Chrome sẽ sử dụng và ngăn người dùng thay đổi tùy chọn cài đặt proxy. Chrome và các ứng dụng dùng App Runtime for Chrome (ARC) sẽ bỏ qua mọi tùy chọn liên quan đến proxy được chỉ định thông qua dòng lệnh. Chính sách này chỉ có hiệu lực nếu bạn chưa chỉ định chính sách <ph name="PROXY_SETTINGS_POLICY_NAME" />. + + Hệ thống sẽ bỏ qua những tùy chọn khác nếu bạn chọn: + * <ph name="PROXY_MODE_ENUM_DIRECT" /> = Không bao giờ sử dụng máy chủ proxy và luôn kết nối trực tiếp + * <ph name="PROXY_MODE_ENUM_SYSTEM" /> = Sử dụng tùy chọn cài đặt proxy của hệ thống + * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" /> = Tự động phát hiện máy chủ proxy + + Nếu bạn chọn sử dụng: + * <ph name="PROXY_MODE_ENUM_FIXED_SERVERS" /> = Máy chủ proxy cố định. Bạn có thể chỉ định thêm tùy chọn trong <ph name="PROXY_SERVER_POLICY_NAME" /> và <ph name="PROXY_BYPASS_LIST_POLICY_NAME" />. Chỉ máy chủ proxy HTTP có mức ưu tiên cao nhất mới dùng được cho các ứng dụng dùng App Runtime for Chrome (ARC). + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> = Một tập lệnh proxy .pac. Sử dụng <ph name="PROXY_PAC_URL_POLICY_NAME" /> để thiết lập URL dẫn tới một tệp proxy .pac. + + Nếu bạn không đặt chính sách này, người dùng có thể chọn các tùy chọn cài đặt proxy. + + Lưu ý: Để xem các ví dụ cụ thể, hãy truy cập vào trang The Chromium Projects (https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett).</translation> <translation id="6561396069801924653">Hiển thị tùy chọn trợ năng trong menu của khay hệ thống</translation> <translation id="6563458316362153786">Bật tính năng Chuyển đổi nhanh 802.11r</translation> <translation id="6568977718979857253">Chính sách này không còn dùng nữa. Vui lòng dùng <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> để kiểm soát khả năng cung cấp plugin Flash và <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> để kiểm soát xem có phải dùng trình xem PDF tích hợp để mở tệp PDF hay không. @@ -4505,6 +4624,13 @@ Nếu người dùng sử dụng thiết bị được quản lý, thì khả năng đặt chính sách này sẽ còn phụ thuộc vào chính sách tương ứng của thiết bị. Nếu người dùng sử dụng thiết bị không được quản lý, thì khả năng đặt chính sách này sẽ còn phụ thuộc vào việc người dùng có phải là chủ sở hữu thiết bị hay không.</translation> +<translation id="7570111012674064005">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định liệu chính sách người dùng trong Đối tượng chính sách nhóm trên máy tính (GPO) có được xử lý hay không và cách xử lý. + + * Nếu bạn đặt chính sách này thành Mặc định hoặc không đặt chính sách này, thì hệ thống sẽ chỉ đọc chính sách người dùng trong GPO của người dùng. Các GPO trên máy tính sẽ bị bỏ qua. + + * Nếu bạn đặt chính sách này thành Hợp nhất, hệ thống sẽ hợp nhất chính sách người dùng trong GPO của người dùng với chính sách người dùng trong GPO trên máy tính. Các GPO trên máy tính sẽ được ưu tiên. + + * Nếu bạn đặt chính sách này thành Thay thế, hệ thống sẽ thay thế chính sách người dùng trong GPO của người dùng bằng chính sách người dùng trong GPO trên máy tính. Các GPO của người dùng sẽ bị bỏ qua.</translation> <translation id="7570291542739287032">Chỉ trên đám mây</translation> <translation id="757395965347379751">Khi bạn bật cài đặt này, <ph name="PRODUCT_NAME" /> sẽ cho phép các chứng chỉ có chữ ký SHA-1 miễn là các chứng chỉ xác thực thành công và cung cấp đến chứng chỉ CA được cài đặt cục bộ. @@ -5080,6 +5206,11 @@ Nếu bạn không đặt hoặc đặt chính sách này thành true, thì người dùng này sẽ có quyền truy cập cấp gốc vào vùng chứa Crostini. Nếu bạn đặt chính sách này thành false, thì người dùng này sẽ không có quyền truy cập cấp gốc vào cả vùng chứa Crostini hiện có lẫn vùng chứa Crostini mới.</translation> <translation id="8417305981081876834">Đặt độ dài tối đa của mã PIN màn hình khóa</translation> +<translation id="841853753509411428">Chính sách này không còn dùng nữa, vui lòng sử dụng chính sách "<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />". + + Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định những máy chủ nhắn tin gốc không phải tuân theo danh sách từ chối. Giá trị của danh sách từ chối là <ph name="WILDCARD_VALUE" /> nghĩa là tất cả máy chủ nhắn tin gốc đều bị từ chối, trừ trường hợp các máy chủ này được cho phép một cách rõ ràng. + + Theo mặc định, tất cả máy chủ nhắn tin gốc đều được cho phép. Tuy nhiên, nếu tất cả máy chủ nhắn tin gốc đều bị từ chối theo chính sách, quản trị viên có thể sử dụng danh sách cho phép để thay đổi chính sách đó.</translation> <translation id="841977920223099909">Trình kích hoạt cảnh báo bảo vệ mật khẩu</translation> <translation id="8424255554404582727">Đặt chế độ xoay màn hình mặc định, được áp dụng lại mỗi lần khởi động lại</translation> <translation id="8426231401662877819">Xoay màn hình 90 độ theo chiều kim đồng hồ</translation> @@ -5306,6 +5437,9 @@ <translation id="8767743923206070405">Việc đặt chính sách này thành Bật sẽ hiển thị nút Trang chủ trên thanh công cụ của <ph name="PRODUCT_NAME" />. Nếu bạn đặt chính sách này thành Tắt, nút Trang chủ sẽ không xuất hiện. Nếu bạn đặt chính sách này, người dùng sẽ không thay đổi được trong <ph name="PRODUCT_NAME" />. Nếu bạn không đặt chính sách này, người dùng sẽ chọn liệu có hiển thị nút Trang chủ hay không.</translation> +<translation id="8768528324886802059">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định những máy chủ nhắn tin gốc không phải tuân theo danh sách từ chối. Giá trị của danh sách từ chối là <ph name="WILDCARD_VALUE" /> nghĩa là tất cả máy chủ nhắn tin gốc đều bị từ chối, trừ trường hợp các máy chủ này được cho phép một cách rõ ràng. + + Theo mặc định, tất cả máy chủ nhắn tin gốc đều được cho phép. Tuy nhiên, nếu tất cả máy chủ nhắn tin gốc đều bị từ chối theo chính sách, quản trị viên có thể sử dụng danh sách cho phép để thay đổi chính sách đó.</translation> <translation id="877185520360032968">Nếu bạn đặt chính sách này, thì thư mục mặc định mà Chrome dùng để lưu tệp tải xuống sẽ thay đổi, nhưng người dùng có thể thay đổi thư mục đó. Nếu bạn không đặt chính sách này, thì Chrome sẽ sử dụng thư mục mặc định dành riêng cho nền tảng của Chrome.
diff --git a/components/services/heap_profiling/public/cpp/profiling_client.cc b/components/services/heap_profiling/public/cpp/profiling_client.cc index ff58a17..d39fdb8 100644 --- a/components/services/heap_profiling/public/cpp/profiling_client.cc +++ b/components/services/heap_profiling/public/cpp/profiling_client.cc
@@ -14,6 +14,7 @@ #include "base/sampling_heap_profiler/sampling_heap_profiler.h" #include "base/task/post_task.h" #include "base/task/thread_pool.h" +#include "base/trace_event/heap_profiler_allocation_context_tracker.h" #include "base/trace_event/heap_profiler_event_filter.h" #include "base/trace_event/malloc_dump_provider.h" #include "base/trace_event/memory_dump_manager.h"
diff --git a/components/shared_highlighting/core/common/shared_highlighting_metrics.cc b/components/shared_highlighting/core/common/shared_highlighting_metrics.cc index 78470fd..653cc9e 100644 --- a/components/shared_highlighting/core/common/shared_highlighting_metrics.cc +++ b/components/shared_highlighting/core/common/shared_highlighting_metrics.cc
@@ -46,4 +46,18 @@ base::UmaHistogramCounts100("TextFragmentAnchor.SelectorCount", count); } +void LogGenerateErrorTabHidden() { + base::UmaHistogramEnumeration("SharedHighlights.LinkGenerated.Error", + LinkGenerationError::kTabHidden); +} + +void LogGenerateErrorOmniboxNavigation() { + base::UmaHistogramEnumeration("SharedHighlights.LinkGenerated.Error", + LinkGenerationError::kOmniboxNavigation); +} + +void LogGenerateErrorTabCrash() { + base::UmaHistogramEnumeration("SharedHighlights.LinkGenerated.Error", + LinkGenerationError::kTabCrash); +} } // namespace shared_highlighting
diff --git a/components/shared_highlighting/core/common/shared_highlighting_metrics.h b/components/shared_highlighting/core/common/shared_highlighting_metrics.h index 14a12cc..cb1e9826 100644 --- a/components/shared_highlighting/core/common/shared_highlighting_metrics.h +++ b/components/shared_highlighting/core/common/shared_highlighting_metrics.h
@@ -18,7 +18,11 @@ kContextLimitReached, kEmptySelection, - kMaxValue = kEmptySelection, + kTabHidden, + kOmniboxNavigation, + kTabCrash, + + kMaxValue = kTabCrash }; // Update corresponding |TextFragmentLinkOpenSource| in enums.xml. @@ -45,6 +49,15 @@ // Records the total |count| of text fragment selectors in the URL param. void LogTextFragmentSelectorCount(int count); +// Records when tab is hidden before generation is complete. +void LogGenerateErrorTabHidden(); + +// Records when new navigation happens on the tab by user typing in the omnibox. +void LogGenerateErrorOmniboxNavigation(); + +// Records when tab crashes before generation is complete. +void LogGenerateErrorTabCrash(); + } // namespace shared_highlighting #endif // COMPONENTS_SHARED_HIGHLIGHTING_CORE_COMMON_SHARED_HIGHLIGHTING_METRICS_H_ \ No newline at end of file
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index 79608746..2e07156 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Grootte 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">Foto</translation> +<translation id="4631649115723685955">Kontantterugbetaling is gekoppel</translation> <translation id="464342062220857295">Soekkenmerke</translation> <translation id="4644670975240021822">Omgekeerde volgorde, voorkant na onder</translation> <translation id="4646534391647090355">Vat my nou soontoe</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index eb0afbcd..2ab9fcbf 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -899,6 +899,7 @@ <translation id="4597348597567598915">መጠን 8</translation> <translation id="4600854749408232102">C6/C5 (የደብዳቤ ፖስታ)</translation> <translation id="4628948037717959914">ፎቶ</translation> +<translation id="4631649115723685955">ከተመላሽ ገንዘብ ጋር ተገናኝቷል</translation> <translation id="464342062220857295">ባህሪያትን ይፈልጉ</translation> <translation id="4644670975240021822">ተቃራኒ ቅደም-ተከተል ፊቱ ወደ ታች</translation> <translation id="4646534391647090355">አሁን ወደዚያ ውሰደኝ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index c1cd742..137aa195 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -1897,6 +1897,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">متوفِّر</translation> <translation id="868922510921656628">عدد الصفحات في كل مجموعة</translation> +<translation id="8697373104056314601">للحصول على أعلى مستوى من الحماية في متصفِّح Chrome، يمكنك <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />تفعيل "الحماية المُحسَّنة"<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">تاريخ انتهاء الصلاحية</translation> <translation id="8699041776323235191">جهاز HID</translation> <translation id="8703575177326907206">الاتصال بالموقع <ph name="DOMAIN" /> غير محميّ بنظام ترميز.</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index 397423ba6..48896fd3 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Veličina 8</translation> <translation id="4600854749408232102">C6/C5 (Koverta)</translation> <translation id="4628948037717959914">Fotografija</translation> +<translation id="4631649115723685955">Usluga povrata novca je povezana</translation> <translation id="464342062220857295">Funkcije pretraživanja</translation> <translation id="4644670975240021822">Obrnuti redoslijed s odštampanom stranom prema dolje</translation> <translation id="4646534391647090355">Odvedi me tamo sada</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 240ebba..13b0029 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -898,6 +898,7 @@ <translation id="4597348597567598915">Mida 8</translation> <translation id="4600854749408232102">C6/C5 (sobre)</translation> <translation id="4628948037717959914">Foto</translation> +<translation id="4631649115723685955">Devolució de diners associada</translation> <translation id="464342062220857295">Funcions de cerca</translation> <translation id="4644670975240021822">Ordre invers de cara avall</translation> <translation id="4646534391647090355">Porta-m'hi ara</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 0773574..b6f02501 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -910,6 +910,7 @@ <translation id="4597348597567598915">Μέγεθος 8</translation> <translation id="4600854749408232102">C6/C5 (Φάκελος)</translation> <translation id="4628948037717959914">Φωτογραφία</translation> +<translation id="4631649115723685955">Συνδέθηκε επιστροφή μετρητών</translation> <translation id="464342062220857295">Λειτουργίες αναζήτησης</translation> <translation id="4644670975240021822">Αντίστροφη σειρά με την πρόσοψη προς τα κάτω</translation> <translation id="4646534391647090355">Μετάβαση εκεί τώρα</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 761b473..ca88717df 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -908,6 +908,7 @@ <translation id="4597348597567598915">Size 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">Photo</translation> +<translation id="4631649115723685955">Cashback linked</translation> <translation id="464342062220857295">Search features</translation> <translation id="4644670975240021822">Reverse order face down</translation> <translation id="4646534391647090355">Take me there now</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 3908c6d..0429a9b 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -124,7 +124,7 @@ <translation id="1405567553485452995">سبز روشن</translation> <translation id="1407135791313364759">باز کردن همه</translation> <translation id="1408787208417187241">سه منگنه در بالا</translation> -<translation id="1413809658975081374">خطای حریم خصوصی</translation> +<translation id="1413809658975081374">خطای حریمخصوصی</translation> <translation id="1426410128494586442">بله</translation> <translation id="1428146450423315676">پشتهساز ۷</translation> <translation id="1430915738399379752">چاپ</translation> @@ -907,6 +907,7 @@ <translation id="4597348597567598915">اندازه ۸</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">عکس</translation> +<translation id="4631649115723685955">بازگشت نقدی پیوند داده شده است</translation> <translation id="464342062220857295">ویژگیهای جستجو</translation> <translation id="4644670975240021822">روبهپایین بهترتیب معکوس</translation> <translation id="4646534391647090355">اکنون من را به آنجا ببر</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index bcc8b4c..93166d34 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -1894,6 +1894,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Disponible</translation> <translation id="868922510921656628">Pages par ensemble</translation> +<translation id="8697373104056314601">Pour bénéficier du niveau de sécurité le plus élevé de Chrome, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />activez la protection renforcée<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Date d'expiration</translation> <translation id="8699041776323235191">Appareil HID</translation> <translation id="8703575177326907206">Votre connexion à <ph name="DOMAIN" /> n'est pas chiffrée.</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index d5983b6..524b16c 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -1893,6 +1893,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Dispoñible</translation> <translation id="868922510921656628">Páxinas por xogo</translation> +<translation id="8697373104056314601">Para gozar do máximo nivel de seguranza de Chrome, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />activa a protección mellorada<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Data de vencemento</translation> <translation id="8699041776323235191">Dispositivo HID</translation> <translation id="8703575177326907206">A túa conexión con <ph name="DOMAIN" /> non está cifrada.</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 55216b1d..b160e5b 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Veličina 8</translation> <translation id="4600854749408232102">C6/C5 (omotnica)</translation> <translation id="4628948037717959914">Fotografija</translation> +<translation id="4631649115723685955">Povezano s gotovinskim povratom</translation> <translation id="464342062220857295">Značajke pretraživanja</translation> <translation id="4644670975240021822">Suprotnim redoslijedom prema dolje</translation> <translation id="4646534391647090355">Otvori odmah</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 0562b90b..a93fbe48 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -905,6 +905,7 @@ <translation id="4597348597567598915">Méret: 8</translation> <translation id="4600854749408232102">C6/C5 (boríték)</translation> <translation id="4628948037717959914">Fénykép</translation> +<translation id="4631649115723685955">Pénzvisszatérítéssel összekapcsolva</translation> <translation id="464342062220857295">Funkciók keresése</translation> <translation id="4644670975240021822">Fordított sorrend, lefelé fordítva</translation> <translation id="4646534391647090355">Megnézem most</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index a038688e..97c7a2b 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -1882,6 +1882,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Tersedia</translation> <translation id="868922510921656628">Halaman per set</translation> +<translation id="8697373104056314601">Untuk mendapatkan tingkat keamanan tertinggi Chrome, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />aktifkan perlindungan yang disempurnakan<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Masa berlaku</translation> <translation id="8699041776323235191">Perangkat HID</translation> <translation id="8703575177326907206">Sambungan ke <ph name="DOMAIN" /> tidak dienkripsi.</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index 6663c3a..cc5d185 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -910,6 +910,7 @@ <translation id="4597348597567598915">Stærð 8</translation> <translation id="4600854749408232102">C6/C5 (umslag)</translation> <translation id="4628948037717959914">Mynd</translation> +<translation id="4631649115723685955">Fjárvildarkerfi tengt</translation> <translation id="464342062220857295">Leitareiginleikar</translation> <translation id="4644670975240021822">Öfug röð, snýr niður</translation> <translation id="4646534391647090355">Fara þangað núna</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 1091a6d..b281030 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -1883,6 +1883,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">ಲಭ್ಯವಿದೆ</translation> <translation id="868922510921656628">ಪ್ರತಿ ಸೆಟ್ಗೆ ಪುಟಗಳು</translation> +<translation id="8697373104056314601">Chrome ನ ಉನ್ನತ ಮಟ್ಟದ ಸುರಕ್ಷತೆಯನ್ನು ಪಡೆಯಲು, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />ವರ್ಧಿತ ಸುರಕ್ಷತೆಯನ್ನು ಆನ್ ಮಾಡಿ<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">ಅವಧಿ ಮುಗಿಯುವ ದಿನಾಂಕ</translation> <translation id="8699041776323235191">HID ಸಾಧನ</translation> <translation id="8703575177326907206"><ph name="DOMAIN" /> ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಎನ್ಕ್ರಿಪ್ಟ್ ಆಗಿಲ್ಲ.</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index 08fa648..b272191 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -231,7 +231,7 @@ сайттын операторлору тарабынан сайттын коопсуздугун жана башка касиеттерин конфигурациялоо үчүн колдонулат.</translation> <translation id="1778646502362731194">JIS B0 (1030mm x 1456mm)</translation> <translation id="1783075131180517613">Шайкештештирүү купуя сөз айкашыңызды жаңыртыңыз.</translation> -<translation id="1787142507584202372">Ачылган өтмөктөр бул жерден көрүнөт</translation> +<translation id="1787142507584202372">Ачылган өтмөктөр бул жерде көрүнөт</translation> <translation id="1791429645902722292">Google Smart Lock</translation> <translation id="1798447301915465742"><ph name="MULTIPLE_ACTIONS_FOCUSED_FRIENDLY_MATCH_TEXT" />, бир нече аракет жеткиликтүү, Tab баскычын басып, аларды карап чыгыңыз</translation> <translation id="1800473098294731951">B9</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 640dac71..b66bcd7 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -910,6 +910,7 @@ <translation id="4597348597567598915">Dydis: 8</translation> <translation id="4600854749408232102">C6 / C5 (vokas)</translation> <translation id="4628948037717959914">Nuotrauka</translation> +<translation id="4631649115723685955">Grynųjų grąžinimas susietas</translation> <translation id="464342062220857295">Paieškos funkcijos</translation> <translation id="4644670975240021822">Atvirkštine tvarka, gerąja puse į apačią</translation> <translation id="4646534391647090355">Eiti dabar</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 2d01628..a721739e 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -906,6 +906,7 @@ <translation id="4597348597567598915">8. izmērs</translation> <translation id="4600854749408232102">C6/C5 (aploksne)</translation> <translation id="4628948037717959914">Fotoattēls</translation> +<translation id="4631649115723685955">Saistīta skaidras naudas atmaksa</translation> <translation id="464342062220857295">Meklēšanas funkcijas</translation> <translation id="4644670975240021822">Pretēja secība, virspuse uz leju</translation> <translation id="4646534391647090355">Doties uz turieni tagad</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 7034b972..34e36a7 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Големина 8</translation> <translation id="4600854749408232102">C6/C5 (плик)</translation> <translation id="4628948037717959914">Фотографија</translation> +<translation id="4631649115723685955">Со поврат на готовина</translation> <translation id="464342062220857295">Функции за пребарување</translation> <translation id="4644670975240021822">Обратен редослед со лицето надолу</translation> <translation id="4646534391647090355">Однеси ме таму сега</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index c1d405e..4208570 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -903,6 +903,7 @@ <translation id="4597348597567598915">വലുപ്പം 8</translation> <translation id="4600854749408232102">C6/C5 (എൻവലപ്പ്)</translation> <translation id="4628948037717959914">ഫോട്ടോ</translation> +<translation id="4631649115723685955">ക്യാഷ് ബാക്ക് ലിങ്ക് ചെയ്തു</translation> <translation id="464342062220857295">തിരയൽ ഫീച്ചറുകൾ</translation> <translation id="4644670975240021822">വിപരീത ക്രമത്തിൽ ഫേസ് ഡൗൺ</translation> <translation id="4646534391647090355">എന്നെ ഇപ്പോൾ അവിടെയെത്തിക്കൂ</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 2539b28..17f3acfe 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -1892,6 +1892,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">उपलब्ध</translation> <translation id="868922510921656628">प्रति समूह पृष्ठको सङ्ख्या</translation> +<translation id="8697373104056314601">Chrome को सबैभन्दा उच्च स्तरको सुरक्षा सुविधा प्रयोग गर्न <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />परिष्कृत सुरक्षा<ph name="END_ENHANCED_PROTECTION_LINK" /> अन गर्नुहोस्।</translation> <translation id="869891660844655955">समाप्ति मिति</translation> <translation id="8699041776323235191">HID यन्त्र</translation> <translation id="8703575177326907206"><ph name="DOMAIN" /> सँग तपाईंको जडान गुप्तलिखित छैन।</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 2d96cbc..f489dc5 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Størrelse 8</translation> <translation id="4600854749408232102">C6/C5 (konvolutt)</translation> <translation id="4628948037717959914">Bilde</translation> +<translation id="4631649115723685955">Penger tilbake er tilknyttet</translation> <translation id="464342062220857295">Søkefunksjoner</translation> <translation id="4644670975240021822">Motsatt rekkefølge – forsiden ned</translation> <translation id="4646534391647090355">Gå dit nå</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 16bd185..0f0798d 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -900,6 +900,7 @@ <translation id="4597348597567598915">Rozmiar 8</translation> <translation id="4600854749408232102">C6/C5 (koperta)</translation> <translation id="4628948037717959914">Zdjęcie</translation> +<translation id="4631649115723685955">Połączone ze zwrotem za zakupy</translation> <translation id="464342062220857295">Funkcje wyszukiwarki</translation> <translation id="4644670975240021822">Odwrotna kolejność, strona do drukowania skierowana w dół</translation> <translation id="4646534391647090355">Przejdź tam teraz</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index e0ffc2a68..781430017 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -898,6 +898,7 @@ <translation id="4597348597567598915">Tamanho 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">Foto</translation> +<translation id="4631649115723685955">Reembolso vinculado</translation> <translation id="464342062220857295">Recursos de pesquisa</translation> <translation id="4644670975240021822">Ordem reversa virada para baixo</translation> <translation id="4646534391647090355">Acessar agora</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 4874e5d..fae1f1d 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Tamanho 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">Fotografia</translation> +<translation id="4631649115723685955">Reembolso associado</translation> <translation id="464342062220857295">Funcionalidades de pesquisa</translation> <translation id="4644670975240021822">Ordem inversa, com orientação para baixo</translation> <translation id="4646534391647090355">Aceder agora</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 5b83876..13f240f 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -1884,6 +1884,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Свободно</translation> <translation id="868922510921656628">Число страниц в наборе</translation> +<translation id="8697373104056314601">Чтобы браузер Chrome стал максимально безопасным, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />включите режим "Улучшенная защита"<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Срок действия</translation> <translation id="8699041776323235191">HID-устройство</translation> <translation id="8703575177326907206">Соединение с <ph name="DOMAIN" /> не зашифровано.</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 76c6faa..043663e3 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Velikost 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">Fotografija</translation> +<translation id="4631649115723685955">Vključuje vračilo gotovine</translation> <translation id="464342062220857295">Funkcije iskanja</translation> <translation id="4644670975240021822">V obratnem vrstnem redu s tiskom na spodnji strani</translation> <translation id="4646534391647090355">Odpri zdaj</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index c072d5d..3b1d9c9 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -904,6 +904,7 @@ <translation id="4597348597567598915">Madhësia 8</translation> <translation id="4600854749408232102">C6/C5 (Zarf)</translation> <translation id="4628948037717959914">Fotografia</translation> +<translation id="4631649115723685955">Oferta e kthimit të parave është e lidhur</translation> <translation id="464342062220857295">Veçoritë e kërkimit</translation> <translation id="4644670975240021822">Renditja e kundërt e kthyer poshtë</translation> <translation id="4646534391647090355">Më ço atje tani</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb index ca3d0215..a73b4e0 100644 --- a/components/strings/components_strings_sr-Latn.xtb +++ b/components/strings/components_strings_sr-Latn.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Veličina 8</translation> <translation id="4600854749408232102">C6/C5 (koverat)</translation> <translation id="4628948037717959914">Slika</translation> +<translation id="4631649115723685955">Povezan je povraćaj gotovine</translation> <translation id="464342062220857295">Funkcije pretrage</translation> <translation id="4644670975240021822">Obrnutim redosledom sa odštampanom stranom nadole</translation> <translation id="4646534391647090355">Odvedi me tamo</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index 4e7df1f9..07edb0e 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Величина 8</translation> <translation id="4600854749408232102">C6/C5 (коверат)</translation> <translation id="4628948037717959914">Слика</translation> +<translation id="4631649115723685955">Повезан је повраћај готовине</translation> <translation id="464342062220857295">Функције претраге</translation> <translation id="4644670975240021822">Обрнутим редоследом са одштампаном страном надоле</translation> <translation id="4646534391647090355">Одведи ме тамо</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index da1bafa..50fc40c2 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">Storlek 8</translation> <translation id="4600854749408232102">C6/C5 (kuvert)</translation> <translation id="4628948037717959914">Foto</translation> +<translation id="4631649115723685955">Cashback länkad</translation> <translation id="464342062220857295">Sökfunktioner</translation> <translation id="4644670975240021822">Motsatt ordning – framsidan nedåt</translation> <translation id="4646534391647090355">Gå dit nu</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 40a032a..da41a76 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -903,6 +903,7 @@ <translation id="4597348597567598915">அளவு: 8</translation> <translation id="4600854749408232102">C6/C5 (என்வலப்)</translation> <translation id="4628948037717959914">படம்</translation> +<translation id="4631649115723685955">கேஷ்பேக் ஆஃபர் உள்ளது</translation> <translation id="464342062220857295">தேடல் அம்சங்கள்</translation> <translation id="4644670975240021822">பின்னோக்கிய வரிசையில் கீழ்நோக்கிய பாணி</translation> <translation id="4646534391647090355">அங்கே செல்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 96481134..cbe0524 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -1896,6 +1896,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">అందుబాటులో ఉంది</translation> <translation id="868922510921656628">ఒక సెట్లో ఉన్న పేజీలు</translation> +<translation id="8697373104056314601">Chrome అత్యధిక స్థాయి రక్షణను పొందడానికి, <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />మెరుగుపరిచిన ఫీచర్లను ఆన్ చేయండి<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">గడువు తేదీ</translation> <translation id="8699041776323235191">HID పరికరం</translation> <translation id="8703575177326907206"><ph name="DOMAIN" />కు మీ కనెక్షన్ ఎన్క్రిప్ట్ చేయబడలేదు.</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 72b6534..13e3e025 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -1888,6 +1888,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Kullanılabilir</translation> <translation id="868922510921656628">Grup başına sayfa</translation> +<translation id="8697373104056314601">Chrome’un sağladığı en yüksek güvenlik düzeyinden faydalanmak için <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />gelişmiş korumayı açın<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Son kullanma tarihi</translation> <translation id="8699041776323235191">HID cihazı</translation> <translation id="8703575177326907206"><ph name="DOMAIN" /> bağlantınız şifrelenmedi.</translation>
diff --git a/components/strings/components_strings_uz.xtb b/components/strings/components_strings_uz.xtb index fcb6d47f..e694b7b 100644 --- a/components/strings/components_strings_uz.xtb +++ b/components/strings/components_strings_uz.xtb
@@ -1890,6 +1890,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Bo‘sh</translation> <translation id="868922510921656628">Majmuadagi sahifalar soni</translation> +<translation id="8697373104056314601">Chrome brauzerining yuqori darajadagi xavfsizligidan foydalanish uchun <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />kengaytirilgan himoyani yoqing<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Tugash muddati</translation> <translation id="8699041776323235191">HID qurilmasi</translation> <translation id="8703575177326907206"><ph name="DOMAIN" /> domeniga ulanish shifrlanmagan.</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index bdc6976..35fb835 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -1897,6 +1897,7 @@ <translation id="8685155993131031756">Prc-16K</translation> <translation id="8688672835843460752">Có sẵn</translation> <translation id="868922510921656628">Số trang mỗi tập</translation> +<translation id="8697373104056314601">Để tận dụng mức bảo mật cao nhất của Chrome, hãy <ph name="BEGIN_ENHANCED_PROTECTION_LINK" />bật chế độ bảo vệ tăng cường<ph name="END_ENHANCED_PROTECTION_LINK" />.</translation> <translation id="869891660844655955">Ngày hết hạn</translation> <translation id="8699041776323235191">Thiết bị HID</translation> <translation id="8703575177326907206">Kết nối của bạn đến <ph name="DOMAIN" /> không được mã hóa.</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index c4aeafb1..763f93e 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -906,6 +906,7 @@ <translation id="4597348597567598915">Usayizi 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">Isithombe</translation> +<translation id="4631649115723685955">Imbuyiselo ixhunyanisiwe</translation> <translation id="464342062220857295">Sesha izici</translation> <translation id="4644670975240021822">I-oda elingemuva libheke phansi</translation> <translation id="4646534391647090355">Ngimikise lapho manje</translation>
diff --git a/components/sync/BUILD.gn b/components/sync/BUILD.gn index 382ffe76..ea23647 100644 --- a/components/sync/BUILD.gn +++ b/components/sync/BUILD.gn
@@ -101,8 +101,6 @@ "engine_impl/commit_processor.h", "engine_impl/commit_util.cc", "engine_impl/commit_util.h", - "engine_impl/cycle/data_type_debug_info_emitter.cc", - "engine_impl/cycle/data_type_debug_info_emitter.h", "engine_impl/cycle/data_type_tracker.cc", "engine_impl/cycle/data_type_tracker.h", "engine_impl/cycle/debug_info_getter.h",
diff --git a/components/sync/base/pref_names.cc b/components/sync/base/pref_names.cc index 4976db3..496c9189 100644 --- a/components/sync/base/pref_names.cc +++ b/components/sync/base/pref_names.cc
@@ -105,35 +105,6 @@ // flag is present. const char kLocalSyncBackendDir[] = "sync.local_sync_backend_dir"; -// Root dictionary pref to store the user's birth year and gender that are -// provided by the sync server. This is a read-only syncable priority pref, sent -// from the sync server to the client. -const char kSyncDemographics[] = "sync.demographics"; - -// This pref value is subordinate to the kSyncDemographics dictionary pref and -// is synced to the client. It stores the self-reported birth year of the -// syncing user. as provided by the sync server. This value should not be logged -// to UMA directly; instead, it should be summed with the -// kSyncDemographicsBirthYearNoiseOffset. -const char kSyncDemographics_BirthYearPath[] = "birth_year"; - -// This pref value is subordinate to the kSyncDemographics dictionary pref and -// is synced to the client. It stores the self-reported gender of the syncing -// user, as provided by the sync server. The gender is encoded using the Gender -// enum defined in metrics::UserDemographicsProto -// (see third_party/metrics_proto/user_demographics.proto). -const char kSyncDemographics_GenderPath[] = "gender"; - -// Stores a "secret" offset that is used to randomize the birth year for metrics -// reporting. This value should not be logged to UMA directly; instead, it -// should be summed with the kSyncDemographicsBirthYear. This value is generated -// locally on the client the first time a user begins to merge birth year data -// into their UMA reports. The value is synced to the user's other devices so -// that the user consistently uses the same offset across login/logout events -// and after clearing their other browser data. -const char kSyncDemographicsBirthYearOffset[] = - "sync.demographics_birth_year_offset"; - #if defined(OS_ANDROID) // Stores whether sync should no longer respect the state of master toggle for // this user.
diff --git a/components/sync/base/pref_names.h b/components/sync/base/pref_names.h index 2884201..e451390 100644 --- a/components/sync/base/pref_names.h +++ b/components/sync/base/pref_names.h
@@ -57,17 +57,10 @@ extern const char kEnableLocalSyncBackend[]; extern const char kLocalSyncBackendDir[]; -extern const char kSyncDemographics[]; -extern const char kSyncDemographicsBirthYearOffset[]; - #if defined(OS_ANDROID) extern const char kSyncDecoupledFromAndroidMasterSync[]; #endif // defined(OS_ANDROID) -// These are not prefs, they are paths inside of kSyncDemographics. -extern const char kSyncDemographics_BirthYearPath[]; -extern const char kSyncDemographics_GenderPath[]; - } // namespace prefs } // namespace syncer
diff --git a/components/sync/base/sync_prefs.cc b/components/sync/base/sync_prefs.cc index 1e8d1e6..0e9d19b 100644 --- a/components/sync/base/sync_prefs.cc +++ b/components/sync/base/sync_prefs.cc
@@ -114,108 +114,6 @@ } } -// Gets an offset to add noise to the birth year. If not present in prefs, the -// offset will be randomly generated within the offset range and cached in -// syncable prefs. -int GetBirthYearOffset(PrefService* pref_service) { - int offset = - pref_service->GetInteger(prefs::kSyncDemographicsBirthYearOffset); - if (offset == kUserDemographicsBirthYearNoiseOffsetDefaultValue) { - // Generate a random offset when not cached in prefs. - offset = base::RandInt(-kUserDemographicsBirthYearNoiseOffsetRange, - kUserDemographicsBirthYearNoiseOffsetRange); - pref_service->SetInteger(prefs::kSyncDemographicsBirthYearOffset, offset); - } - return offset; -} - -// Determines whether the synced user has provided a birth year to Google which -// is eligible, once aggregated and anonymized, to measure usage of Chrome -// features by age groups. See doc of metrics::DemographicMetricsProvider in -// components/metrics/demographic_metrics_provider.h for more details. -bool HasEligibleBirthYear(base::Time now, int user_birth_year, int offset) { - // Compute user age. - base::Time::Exploded exploded_now_time; - now.LocalExplode(&exploded_now_time); - int user_age = exploded_now_time.year - (user_birth_year + offset); - - // Verify if the synced user's age has a population size in the age - // distribution of the society that is big enough to not raise the entropy of - // the demographics too much. At a certain point, as the age increase, the - // size of the population starts declining sharply as you can see in this - // approximate representation of the age distribution: - // | ________ max age - // |______/ \_________ | - // | |\ - // | | \ - // +--------------------------|--------- - // 0 10 20 30 40 50 60 70 80 90 100+ - if (user_age > kUserDemographicsMaxAgeInYears) - return false; - - // Verify if the synced user is old enough. Use > rather than >= because we - // want to be sure that the user is at least |kUserDemographicsMinAgeInYears| - // without disclosing their birth date, which requires to add an extra year - // margin to the minimal age to be safe. For example, if we are in 2019-07-10 - // (now) and the user was born in 1999-08-10, the user is not yet 20 years old - // (minimal age) but we cannot know that because we only have access to the - // year of the dates (2019 and 1999 respectively). If we make sure that the - // minimal age (computed at year granularity) is at least 21, we are 100% sure - // that the user will be at least 20 years old when providing the user’s birth - // year and gender. - return user_age > kUserDemographicsMinAgeInYears; -} - -// Gets the synced user's birth year from synced prefs, see doc of -// metrics::DemographicMetricsProvider in -// components/metrics/demographic_metrics_provider.h for more details. -base::Optional<int> GetUserBirthYear( - const base::DictionaryValue* demographics) { - const base::Value* value = - demographics->FindPath(prefs::kSyncDemographics_BirthYearPath); - int birth_year = (value != nullptr && value->is_int()) - ? value->GetInt() - : kUserDemographicsBirthYearDefaultValue; - - // Verify that there is a birth year. - if (birth_year == kUserDemographicsBirthYearDefaultValue) - return base::nullopt; - - return birth_year; -} - -// Gets the synced user's gender from synced prefs, see doc of -// metrics::DemographicMetricsProvider in -// components/metrics/demographic_metrics_provider.h for more details. -base::Optional<metrics::UserDemographicsProto_Gender> GetUserGender( - const base::DictionaryValue* demographics) { - const base::Value* value = - demographics->FindPath(prefs::kSyncDemographics_GenderPath); - int gender_int = (value != nullptr && value->is_int()) - ? value->GetInt() - : kUserDemographicsGenderDefaultValue; - - // Verify that the gender is not default. - if (gender_int == kUserDemographicsGenderDefaultValue) - return base::nullopt; - - // Verify that the gender number is a valid UserDemographicsProto_Gender - // encoding. - if (!metrics::UserDemographicsProto_Gender_IsValid(gender_int)) - return base::nullopt; - - auto gender = metrics::UserDemographicsProto_Gender(gender_int); - - // Verify that the gender is in a large enough population set to preserve - // anonymity. - if (gender != metrics::UserDemographicsProto::GENDER_FEMALE && - gender != metrics::UserDemographicsProto::GENDER_MALE) { - return base::nullopt; - } - - return gender; -} - } // namespace CryptoSyncPrefs::~CryptoSyncPrefs() {} @@ -293,14 +191,7 @@ false); #endif // defined(OS_ANDROID) - // Demographic prefs. - registry->RegisterDictionaryPref( - prefs::kSyncDemographics, - user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); - registry->RegisterIntegerPref( - prefs::kSyncDemographicsBirthYearOffset, - kUserDemographicsBirthYearNoiseOffsetDefaultValue, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); + RegisterDemographicsProfilePrefs(registry); // Obsolete prefs that will be removed after a grace period. RegisterObsoleteUserTypePrefs(registry); @@ -327,12 +218,7 @@ void SyncPrefs::ClearLocalSyncTransportData() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - // Clear user's birth year and gender. - // Note that we retain kSyncDemographicsBirthYearOffset. If the user resumes - // syncing, causing these prefs to be recreated, we don't want them to start - // reporting a different randomized birth year as this could narrow down or - // even reveal their true birth year. - pref_service_->ClearPref(prefs::kSyncDemographics); + ClearDemographicsPrefs(pref_service_); pref_service_->ClearPref(prefs::kSyncLastSyncedTime); pref_service_->ClearPref(prefs::kSyncLastPollTime); @@ -727,55 +613,6 @@ return local_sync_enabled_; } -UserDemographicsResult SyncPrefs::GetUserNoisedBirthYearAndGender( - base::Time now) { - // Verify that the now time is available. There are situations where the now - // time cannot be provided. - if (now.is_null()) { - return UserDemographicsResult::ForStatus( - UserDemographicsStatus::kCannotGetTime); - } - - // Get the synced user’s noised birth year and gender from synced prefs. Only - // one error status code should be used to represent the case where - // demographics are ineligible, see doc of UserDemographicsStatus in - // components/sync/base/user_demographics.h for more details. - - // Get the pref that contains the user's birth year and gender. - const base::DictionaryValue* demographics = - pref_service_->GetDictionary(prefs::kSyncDemographics); - DCHECK(demographics != nullptr); - - // Get the user's birth year. - base::Optional<int> birth_year = GetUserBirthYear(demographics); - if (!birth_year.has_value()) { - return UserDemographicsResult::ForStatus( - UserDemographicsStatus::kIneligibleDemographicsData); - } - - // Get the user's gender. - base::Optional<metrics::UserDemographicsProto_Gender> gender = - GetUserGender(demographics); - if (!gender.has_value()) { - return UserDemographicsResult::ForStatus( - UserDemographicsStatus::kIneligibleDemographicsData); - } - - // Get the offset and do one last check that the birth year is eligible. - int offset = GetBirthYearOffset(pref_service_); - if (!HasEligibleBirthYear(now, *birth_year, offset)) { - return UserDemographicsResult::ForStatus( - UserDemographicsStatus::kIneligibleDemographicsData); - } - - // Set gender and noised birth year in demographics. - UserDemographics user_demographics; - user_demographics.gender = *gender; - user_demographics.birth_year = *birth_year + offset; - - return UserDemographicsResult::ForValue(std::move(user_demographics)); -} - void MigrateSessionsToProxyTabsPrefs(PrefService* pref_service) { if (pref_service->GetUserPrefValue(prefs::kSyncTabs) == nullptr && pref_service->GetUserPrefValue(kSyncSessions) != nullptr &&
diff --git a/components/sync/base/sync_prefs.h b/components/sync/base/sync_prefs.h index 6c9bd564..f6910211 100644 --- a/components/sync/base/sync_prefs.h +++ b/components/sync/base/sync_prefs.h
@@ -198,12 +198,6 @@ // Gets the local sync backend enabled state. bool IsLocalSyncEnabled() const; - // Gets the synced user’s birth year and gender from synced prefs and adds - // noise to the birth year, see doc of UserDemographicsStatus in - // components/sync/base/user_demographics.h for more details. You need to - // provide an accurate |now| time that represents the current time. - UserDemographicsResult GetUserNoisedBirthYearAndGender(base::Time now); - private: static void RegisterTypeSelectedPref(user_prefs::PrefRegistrySyncable* prefs, UserSelectableType type);
diff --git a/components/sync/base/sync_prefs_unittest.cc b/components/sync/base/sync_prefs_unittest.cc index 0a1e83f..3129d1c 100644 --- a/components/sync/base/sync_prefs_unittest.cc +++ b/components/sync/base/sync_prefs_unittest.cc
@@ -14,12 +14,10 @@ #include "components/prefs/pref_value_store.h" #include "components/prefs/testing_pref_service.h" #include "components/sync/base/pref_names.h" -#include "components/sync/base/user_demographics.h" #include "components/sync/base/user_selectable_type.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/metrics_proto/user_demographics.pb.h" namespace syncer { @@ -40,30 +38,11 @@ sync_prefs_ = std::make_unique<SyncPrefs>(&pref_service_); } - void SetDemographics(int birth_year, - metrics::UserDemographicsProto::Gender gender) { - base::DictionaryValue dict; - dict.SetIntPath(prefs::kSyncDemographics_BirthYearPath, birth_year); - dict.SetIntPath(prefs::kSyncDemographics_GenderPath, - static_cast<int>(gender)); - pref_service_.Set(prefs::kSyncDemographics, dict); - } - base::test::SingleThreadTaskEnvironment task_environment_; sync_preferences::TestingPrefServiceSyncable pref_service_; std::unique_ptr<SyncPrefs> sync_prefs_; }; -// Gets the now time used for testing demographics. -base::Time GetNowTime() { - constexpr char kNowTimeInStringFormat[] = "22 Jul 2019 00:00:00 UDT"; - - base::Time now; - bool result = base::Time::FromString(kNowTimeInStringFormat, &now); - DCHECK(result); - return now; -} - // Verify that invalidation versions are persisted and loaded correctly. TEST_F(SyncPrefsTest, InvalidationVersions) { std::map<ModelType, int64_t> versions; @@ -174,73 +153,6 @@ sync_prefs_->GetEncryptionBootstrapToken()); } -TEST_F(SyncPrefsTest, ReadDemographicsWithRandomOffset) { - int user_demographics_birth_year = 1983; - metrics::UserDemographicsProto_Gender user_demographics_gender = - metrics::UserDemographicsProto::GENDER_MALE; - - // Set user demographic prefs. - SetDemographics(user_demographics_birth_year, user_demographics_gender); - - int provided_birth_year; - { - UserDemographicsResult demographics_result = - sync_prefs_->GetUserNoisedBirthYearAndGender(GetNowTime()); - ASSERT_TRUE(demographics_result.IsSuccess()); - EXPECT_EQ(user_demographics_gender, demographics_result.value().gender); - // Verify that the provided birth year is within the range. - provided_birth_year = demographics_result.value().birth_year; - int delta = provided_birth_year - user_demographics_birth_year; - EXPECT_LE(delta, kUserDemographicsBirthYearNoiseOffsetRange); - EXPECT_GE(delta, -kUserDemographicsBirthYearNoiseOffsetRange); - } - - // Verify that the offset is cached and that the randomized birth year is the - // same when doing more that one read of the birth year. - { - ASSERT_TRUE( - pref_service_.HasPrefPath(prefs::kSyncDemographicsBirthYearOffset)); - UserDemographicsResult demographics_result = - sync_prefs_->GetUserNoisedBirthYearAndGender(GetNowTime()); - ASSERT_TRUE(demographics_result.IsSuccess()); - EXPECT_EQ(provided_birth_year, demographics_result.value().birth_year); - } -} - -TEST_F(SyncPrefsTest, ReadAndClearUserDemographicPreferences) { - // Verify demographic prefs are not available when there is nothing set. - ASSERT_FALSE( - sync_prefs_->GetUserNoisedBirthYearAndGender(GetNowTime()).IsSuccess()); - - // Set demographic prefs directly from the pref service interface because - // demographic prefs will only be set on the server-side. The SyncPrefs - // interface cannot set demographic prefs. - SetDemographics(1983, metrics::UserDemographicsProto::GENDER_FEMALE); - - // Set birth year noise offset to not have it randomized. - pref_service_.SetInteger(prefs::kSyncDemographicsBirthYearOffset, 2); - - // Verify that demographics are provided. - { - UserDemographicsResult demographics_result = - sync_prefs_->GetUserNoisedBirthYearAndGender(GetNowTime()); - ASSERT_TRUE(demographics_result.IsSuccess()); - } - - sync_prefs_->ClearLocalSyncTransportData(); - - // Verify that demographics are not provided and kSyncDemographics is cleared. - // Note that we retain kSyncDemographicsBirthYearOffset. If the user resumes - // syncing, causing these prefs to be recreated, we don't want them to start - // reporting a different randomized birth year as this could narrow down or - // even reveal their true birth year. - EXPECT_FALSE( - sync_prefs_->GetUserNoisedBirthYearAndGender(GetNowTime()).IsSuccess()); - EXPECT_FALSE(pref_service_.HasPrefPath(prefs::kSyncDemographics)); - EXPECT_TRUE( - pref_service_.HasPrefPath(prefs::kSyncDemographicsBirthYearOffset)); -} - TEST_F(SyncPrefsTest, Basic) { EXPECT_FALSE(sync_prefs_->IsFirstSetupComplete()); sync_prefs_->SetFirstSetupComplete(); @@ -584,130 +496,6 @@ ::testing::Values(PREF_FALSE, PREF_TRUE, PREF_UNSET), ::testing::Values(PREF_FALSE, PREF_TRUE, PREF_UNSET))); -struct DemographicsTestParam { - // Birth year of the user. - int birth_year = kUserDemographicsBirthYearDefaultValue; - - // Non-random offset to apply to |birth_year| as noise. - int birth_year_offset = kUserDemographicsBirthYearNoiseOffsetDefaultValue; - - // Gender of the user. - metrics::UserDemographicsProto_Gender gender = - kUserDemographicGenderDefaultEnumValue; - - // Status of the retrieval of demographics. - UserDemographicsStatus status = UserDemographicsStatus::kMaxValue; -}; - -// Extend SyncPrefsTest fixture for parameterized tests on demographics. -class SyncPrefsDemographicsTest - : public SyncPrefsTest, - public testing::WithParamInterface<DemographicsTestParam> {}; - -TEST_P(SyncPrefsDemographicsTest, ReadDemographics_OffsetIsNotRandom) { - DemographicsTestParam param = GetParam(); - - // Set user demographic prefs. - SetDemographics(param.birth_year, param.gender); - - // Set birth year noise offset to not have it randomized. - pref_service_.SetInteger(prefs::kSyncDemographicsBirthYearOffset, - param.birth_year_offset); - - // Verify provided demographics for the different parameterized test cases. - UserDemographicsResult demographics_result = - sync_prefs_->GetUserNoisedBirthYearAndGender(GetNowTime()); - if (param.status == UserDemographicsStatus::kSuccess) { - ASSERT_TRUE(demographics_result.IsSuccess()); - EXPECT_EQ(param.birth_year + param.birth_year_offset, - demographics_result.value().birth_year); - EXPECT_EQ(param.gender, demographics_result.value().gender); - } else { - ASSERT_FALSE(demographics_result.IsSuccess()); - EXPECT_EQ(param.status, demographics_result.status()); - } -} - -// Test suite composed of different test cases of getting user demographics. -// The now time in each test case is "22 Jul 2019 00:00:00 UDT" which falls into -// the year bucket of 2018. Users need at most a |birth_year| + -// |birth_year_offset| of 1998 to be able to provide demographics. -INSTANTIATE_TEST_SUITE_P( - All, - SyncPrefsDemographicsTest, - ::testing::Values( - // Test where birth year should not be provided because |birth_year| + 2 - // > 1998. - DemographicsTestParam{ - /*birth_year=*/1997, - /*birth_year_offset=*/2, - /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, - /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, - // Test where birth year should not be provided because |birth_year| - 2 - // > 1998. - DemographicsTestParam{ - /*birth_year=*/2001, - /*birth_year_offset=*/-2, - /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, - /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, - // Test where birth year should not be provided because age of user is - // |kUserDemographicsMaxAge| + 1, which is over the max age. - DemographicsTestParam{ - /*birth_year=*/1933, - /*birth_year_offset=*/0, - /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, - /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, - // Test where gender should not be provided because it has a low - // population that can have their privacy compromised because of high - // entropy. - DemographicsTestParam{ - /*birth_year=*/1986, - /*birth_year_offset=*/0, - /*gender=*/metrics::UserDemographicsProto::GENDER_CUSTOM_OR_OTHER, - /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, - // Test where birth year can be provided because |birth_year| + 2 == - // 1998. - DemographicsTestParam{ - /*birth_year=*/1996, - /*birth_year_offset=*/2, - /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, - /*status=*/UserDemographicsStatus::kSuccess}, - // Test where birth year can be provided because |birth_year| - 2 == - // 1998. - DemographicsTestParam{ - /*birth_year=*/2000, - /*birth_year_offset=*/-2, - /*gender=*/metrics::UserDemographicsProto::GENDER_MALE, - /*status=*/UserDemographicsStatus::kSuccess}, - // Test where birth year can be provided because |birth_year| + 2 < - // 1998. - DemographicsTestParam{ - /*birth_year=*/1995, - /*birth_year_offset=*/2, - /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, - /*status=*/UserDemographicsStatus::kSuccess}, - // Test where birth year can be provided because |birth_year| - 2 < - // 1998. - DemographicsTestParam{ - /*birth_year=*/1999, - /*birth_year_offset=*/-2, - /*gender=*/metrics::UserDemographicsProto::GENDER_MALE, - /*status=*/UserDemographicsStatus::kSuccess}, - // Test where gender can be provided because it is part of a large - // population with a low entropy. - DemographicsTestParam{ - /*birth_year=*/1986, - /*birth_year_offset=*/0, - /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, - /*status=*/UserDemographicsStatus::kSuccess}, - // Test where gender can be provided because it is part of a large - // population with a low entropy. - DemographicsTestParam{ - /*birth_year=*/1986, - /*birth_year_offset=*/0, - /*gender=*/metrics::UserDemographicsProto::GENDER_MALE, - /*status=*/UserDemographicsStatus::kSuccess})); - } // namespace } // namespace syncer
diff --git a/components/sync/base/user_demographics.cc b/components/sync/base/user_demographics.cc index 06a887d..23a8a42d 100644 --- a/components/sync/base/user_demographics.cc +++ b/components/sync/base/user_demographics.cc
@@ -7,9 +7,149 @@ #include <utility> #include "base/check.h" +#include "base/optional.h" +#include "base/rand_util.h" +#include "base/values.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_service.h" namespace syncer { +// Root dictionary pref to store the user's birth year and gender that are +// provided by the sync server. This is a read-only syncable priority pref, sent +// from the sync server to the client. +const char kSyncDemographicsPrefName[] = "sync.demographics"; + +// Stores a "secret" offset that is used to randomize the birth year for metrics +// reporting. This value should not be logged to UMA directly; instead, it +// should be summed with the kSyncDemographicsBirthYear. This value is generated +// locally on the client the first time a user begins to merge birth year data +// into their UMA reports. The value is synced to the user's other devices so +// that the user consistently uses the same offset across login/logout events +// and after clearing their other browser data. +const char kSyncDemographicsBirthYearOffsetPrefName[] = + "sync.demographics_birth_year_offset"; + +// This pref value is subordinate to the kSyncDemographics dictionary pref and +// is synced to the client. It stores the self-reported birth year of the +// syncing user. as provided by the sync server. This value should not be logged +// to UMA directly; instead, it should be summed with the +// kSyncDemographicsBirthYearNoiseOffset. +const char kSyncDemographicsBirthYearPath[] = "birth_year"; + +// This pref value is subordinate to the kSyncDemographics dictionary pref and +// is synced to the client. It stores the self-reported gender of the syncing +// user, as provided by the sync server. The gender is encoded using the Gender +// enum defined in metrics::UserDemographicsProto +// (see third_party/metrics_proto/user_demographics.proto). +const char kSyncDemographicsGenderPath[] = "gender"; + +namespace { + +// Gets an offset to add noise to the birth year. If not present in prefs, the +// offset will be randomly generated within the offset range and cached in +// syncable prefs. +int GetBirthYearOffset(PrefService* pref_service) { + int offset = + pref_service->GetInteger(kSyncDemographicsBirthYearOffsetPrefName); + if (offset == kUserDemographicsBirthYearNoiseOffsetDefaultValue) { + // Generate a random offset when not cached in prefs. + offset = base::RandInt(-kUserDemographicsBirthYearNoiseOffsetRange, + kUserDemographicsBirthYearNoiseOffsetRange); + pref_service->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, offset); + } + return offset; +} + +// Determines whether the synced user has provided a birth year to Google which +// is eligible, once aggregated and anonymized, to measure usage of Chrome +// features by age groups. See doc of metrics::DemographicMetricsProvider in +// components/metrics/demographic_metrics_provider.h for more details. +bool HasEligibleBirthYear(base::Time now, int user_birth_year, int offset) { + // Compute user age. + base::Time::Exploded exploded_now_time; + now.LocalExplode(&exploded_now_time); + int user_age = exploded_now_time.year - (user_birth_year + offset); + + // Verify if the synced user's age has a population size in the age + // distribution of the society that is big enough to not raise the entropy of + // the demographics too much. At a certain point, as the age increase, the + // size of the population starts declining sharply as you can see in this + // approximate representation of the age distribution: + // | ________ max age + // |______/ \_________ | + // | |\ + // | | \ + // +--------------------------|--------- + // 0 10 20 30 40 50 60 70 80 90 100+ + if (user_age > kUserDemographicsMaxAgeInYears) + return false; + + // Verify if the synced user is old enough. Use > rather than >= because we + // want to be sure that the user is at least |kUserDemographicsMinAgeInYears| + // without disclosing their birth date, which requires to add an extra year + // margin to the minimal age to be safe. For example, if we are in 2019-07-10 + // (now) and the user was born in 1999-08-10, the user is not yet 20 years old + // (minimal age) but we cannot know that because we only have access to the + // year of the dates (2019 and 1999 respectively). If we make sure that the + // minimal age (computed at year granularity) is at least 21, we are 100% sure + // that the user will be at least 20 years old when providing the user’s birth + // year and gender. + return user_age > kUserDemographicsMinAgeInYears; +} + +// Gets the synced user's birth year from synced prefs, see doc of +// metrics::DemographicMetricsProvider in +// components/metrics/demographic_metrics_provider.h for more details. +base::Optional<int> GetUserBirthYear( + const base::DictionaryValue* demographics) { + const base::Value* value = + demographics->FindPath(kSyncDemographicsBirthYearPath); + int birth_year = (value != nullptr && value->is_int()) + ? value->GetInt() + : kUserDemographicsBirthYearDefaultValue; + + // Verify that there is a birth year. + if (birth_year == kUserDemographicsBirthYearDefaultValue) + return base::nullopt; + + return birth_year; +} + +// Gets the synced user's gender from synced prefs, see doc of +// metrics::DemographicMetricsProvider in +// components/metrics/demographic_metrics_provider.h for more details. +base::Optional<metrics::UserDemographicsProto_Gender> GetUserGender( + const base::DictionaryValue* demographics) { + const base::Value* value = + demographics->FindPath(kSyncDemographicsGenderPath); + int gender_int = (value != nullptr && value->is_int()) + ? value->GetInt() + : kUserDemographicsGenderDefaultValue; + + // Verify that the gender is not default. + if (gender_int == kUserDemographicsGenderDefaultValue) + return base::nullopt; + + // Verify that the gender number is a valid UserDemographicsProto_Gender + // encoding. + if (!metrics::UserDemographicsProto_Gender_IsValid(gender_int)) + return base::nullopt; + + auto gender = metrics::UserDemographicsProto_Gender(gender_int); + + // Verify that the gender is in a large enough population set to preserve + // anonymity. + if (gender != metrics::UserDemographicsProto::GENDER_FEMALE && + gender != metrics::UserDemographicsProto::GENDER_MALE) { + return base::nullopt; + } + + return gender; +} + +} // namespace + // static UserDemographicsResult UserDemographicsResult::ForValue( UserDemographics value) { @@ -40,4 +180,74 @@ UserDemographicsStatus status) : value_(std::move(value)), status_(status) {} +void RegisterDemographicsProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterDictionaryPref( + kSyncDemographicsPrefName, + user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); + registry->RegisterIntegerPref( + kSyncDemographicsBirthYearOffsetPrefName, + kUserDemographicsBirthYearNoiseOffsetDefaultValue, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); +} + +void ClearDemographicsPrefs(PrefService* pref_service) { + // Clear user's birth year and gender. + // Note that we retain kSyncDemographicsBirthYearOffset. If the user resumes + // syncing, causing these prefs to be recreated, we don't want them to start + // reporting a different randomized birth year as this could narrow down or + // even reveal their true birth year. + pref_service->ClearPref(kSyncDemographicsPrefName); +} + +UserDemographicsResult GetUserNoisedBirthYearAndGenderFromPrefs( + base::Time now, + PrefService* pref_service) { + // Verify that the now time is available. There are situations where the now + // time cannot be provided. + if (now.is_null()) { + return UserDemographicsResult::ForStatus( + UserDemographicsStatus::kCannotGetTime); + } + + // Get the synced user’s noised birth year and gender from synced prefs. Only + // one error status code should be used to represent the case where + // demographics are ineligible, see doc of UserDemographicsStatus in + // components/sync/base/user_demographics.h for more details. + + // Get the pref that contains the user's birth year and gender. + const base::DictionaryValue* demographics = + pref_service->GetDictionary(kSyncDemographicsPrefName); + DCHECK(demographics != nullptr); + + // Get the user's birth year. + base::Optional<int> birth_year = GetUserBirthYear(demographics); + if (!birth_year.has_value()) { + return UserDemographicsResult::ForStatus( + UserDemographicsStatus::kIneligibleDemographicsData); + } + + // Get the user's gender. + base::Optional<metrics::UserDemographicsProto_Gender> gender = + GetUserGender(demographics); + if (!gender.has_value()) { + return UserDemographicsResult::ForStatus( + UserDemographicsStatus::kIneligibleDemographicsData); + } + + // Get the offset and do one last check that the birth year is eligible. + int offset = GetBirthYearOffset(pref_service); + if (!HasEligibleBirthYear(now, *birth_year, offset)) { + return UserDemographicsResult::ForStatus( + UserDemographicsStatus::kIneligibleDemographicsData); + } + + // Set gender and noised birth year in demographics. + UserDemographics user_demographics; + user_demographics.gender = *gender; + user_demographics.birth_year = *birth_year + offset; + + return UserDemographicsResult::ForValue(std::move(user_demographics)); +} + } // namespace syncer
diff --git a/components/sync/base/user_demographics.h b/components/sync/base/user_demographics.h index cffe3caf..b957cda 100644 --- a/components/sync/base/user_demographics.h +++ b/components/sync/base/user_demographics.h
@@ -5,8 +5,15 @@ #ifndef COMPONENTS_SYNC_BASE_USER_DEMOGRAPHICS_H_ #define COMPONENTS_SYNC_BASE_USER_DEMOGRAPHICS_H_ +#include "base/time/time.h" #include "third_party/metrics_proto/user_demographics.pb.h" +class PrefService; + +namespace user_prefs { +class PrefRegistrySyncable; +} + namespace syncer { // Default value for user gender when no value has been set. @@ -36,6 +43,14 @@ // Max user age to provide demopgrahics for. constexpr int kUserDemographicsMaxAgeInYears = 85; +// Syncable preference names, exposed publicly for testing. +extern const char kSyncDemographicsPrefName[]; +extern const char kSyncDemographicsBirthYearOffsetPrefName[]; + +// These are not prefs, they are paths inside of kSyncDemographics. +extern const char kSyncDemographicsBirthYearPath[]; +extern const char kSyncDemographicsGenderPath[]; + // Container of user demographics. struct UserDemographics { int birth_year = 0; @@ -102,6 +117,25 @@ UserDemographicsStatus status_ = UserDemographicsStatus::kMaxValue; }; +// Registers the profile preferences that are needed to persist demographics +// information exposed via GetUserNoisedBirthYearAndGenderFromPrefs(). +void RegisterDemographicsProfilePrefs( + user_prefs::PrefRegistrySyncable* registry); + +// Clears the profile's demographics-related preferences containing user data. +// This excludes the internal bith year offset. +void ClearDemographicsPrefs(PrefService* pref_service); + +// Gets the synced user’s noised birth year and gender from preferences, see doc +// of metrics::DemographicMetricsProvider in +// components/metrics/demographic_metrics_provider.h for more details. Returns +// an error status with an empty value when the user's birth year or gender +// cannot be provided. You need to provide an accurate |now| time that +// represents the current time. +UserDemographicsResult GetUserNoisedBirthYearAndGenderFromPrefs( + base::Time now, + PrefService* pref_service); + } // namespace syncer #endif // COMPONENTS_SYNC_BASE_USER_DEMOGRAPHICS_H_
diff --git a/components/sync/base/user_demographics_unittest.cc b/components/sync/base/user_demographics_unittest.cc index e8f665e..37a8a43 100644 --- a/components/sync/base/user_demographics_unittest.cc +++ b/components/sync/base/user_demographics_unittest.cc
@@ -6,11 +6,26 @@ #include <utility> +#include "components/sync_preferences/testing_pref_service_syncable.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/user_demographics.pb.h" namespace syncer { +namespace { + +// Gets the now time used for testing demographics. +base::Time GetNowTime() { + constexpr char kNowTimeInStringFormat[] = "22 Jul 2019 00:00:00 UDT"; + + base::Time now; + bool result = base::Time::FromString(kNowTimeInStringFormat, &now); + DCHECK(result); + return now; +} + +} // namespace + TEST(UserDemographicsTest, UserDemographicsResult_ForValue) { int user_birth_year = 1982; metrics::UserDemographicsProto_Gender user_gender = @@ -39,4 +54,215 @@ EXPECT_EQ(error_status, user_demographics_result.status()); } +class UserDemographicsPrefsTest : public testing::Test { + protected: + UserDemographicsPrefsTest() { + RegisterDemographicsProfilePrefs(pref_service_.registry()); + } + + void SetDemographics(int birth_year, + metrics::UserDemographicsProto::Gender gender) { + base::DictionaryValue dict; + dict.SetIntPath(kSyncDemographicsBirthYearPath, birth_year); + dict.SetIntPath(kSyncDemographicsGenderPath, static_cast<int>(gender)); + pref_service_.Set(kSyncDemographicsPrefName, dict); + } + + sync_preferences::TestingPrefServiceSyncable pref_service_; +}; + +TEST_F(UserDemographicsPrefsTest, ReadDemographicsWithRandomOffset) { + int user_demographics_birth_year = 1983; + metrics::UserDemographicsProto_Gender user_demographics_gender = + metrics::UserDemographicsProto::GENDER_MALE; + + // Set user demographic prefs. + SetDemographics(user_demographics_birth_year, user_demographics_gender); + + int provided_birth_year; + { + UserDemographicsResult demographics_result = + GetUserNoisedBirthYearAndGenderFromPrefs(GetNowTime(), &pref_service_); + ASSERT_TRUE(demographics_result.IsSuccess()); + EXPECT_EQ(user_demographics_gender, demographics_result.value().gender); + // Verify that the provided birth year is within the range. + provided_birth_year = demographics_result.value().birth_year; + int delta = provided_birth_year - user_demographics_birth_year; + EXPECT_LE(delta, kUserDemographicsBirthYearNoiseOffsetRange); + EXPECT_GE(delta, -kUserDemographicsBirthYearNoiseOffsetRange); + } + + // Verify that the offset is cached and that the randomized birth year is the + // same when doing more that one read of the birth year. + { + ASSERT_TRUE( + pref_service_.HasPrefPath(kSyncDemographicsBirthYearOffsetPrefName)); + UserDemographicsResult demographics_result = + GetUserNoisedBirthYearAndGenderFromPrefs(GetNowTime(), &pref_service_); + ASSERT_TRUE(demographics_result.IsSuccess()); + EXPECT_EQ(provided_birth_year, demographics_result.value().birth_year); + } +} + +TEST_F(UserDemographicsPrefsTest, ReadAndClearUserDemographicPreferences) { + // Verify demographic prefs are not available when there is nothing set. + ASSERT_FALSE( + GetUserNoisedBirthYearAndGenderFromPrefs(GetNowTime(), &pref_service_) + .IsSuccess()); + + // Set demographic prefs directly from the pref service interface because + // demographic prefs will only be set on the server-side. The SyncPrefs + // interface cannot set demographic prefs. + SetDemographics(1983, metrics::UserDemographicsProto::GENDER_FEMALE); + + // Set birth year noise offset to not have it randomized. + pref_service_.SetInteger(kSyncDemographicsBirthYearOffsetPrefName, 2); + + // Verify that demographics are provided. + { + UserDemographicsResult demographics_result = + GetUserNoisedBirthYearAndGenderFromPrefs(GetNowTime(), &pref_service_); + ASSERT_TRUE(demographics_result.IsSuccess()); + } + + ClearDemographicsPrefs(&pref_service_); + + // Verify that demographics are not provided and kSyncDemographics is cleared. + // Note that we retain kSyncDemographicsBirthYearOffset. If the user resumes + // syncing, causing these prefs to be recreated, we don't want them to start + // reporting a different randomized birth year as this could narrow down or + // even reveal their true birth year. + EXPECT_FALSE( + GetUserNoisedBirthYearAndGenderFromPrefs(GetNowTime(), &pref_service_) + .IsSuccess()); + EXPECT_FALSE(pref_service_.HasPrefPath(kSyncDemographicsPrefName)); + EXPECT_TRUE( + pref_service_.HasPrefPath(kSyncDemographicsBirthYearOffsetPrefName)); +} + +struct DemographicsTestParam { + // Birth year of the user. + int birth_year = kUserDemographicsBirthYearDefaultValue; + + // Non-random offset to apply to |birth_year| as noise. + int birth_year_offset = kUserDemographicsBirthYearNoiseOffsetDefaultValue; + + // Gender of the user. + metrics::UserDemographicsProto_Gender gender = + kUserDemographicGenderDefaultEnumValue; + + // Status of the retrieval of demographics. + UserDemographicsStatus status = UserDemographicsStatus::kMaxValue; +}; + +// Extend UserDemographicsPrefsTest fixture for parameterized tests on +// demographics. +class UserDemographicsPrefsTestWithParam + : public UserDemographicsPrefsTest, + public testing::WithParamInterface<DemographicsTestParam> {}; + +TEST_P(UserDemographicsPrefsTestWithParam, ReadDemographics_OffsetIsNotRandom) { + DemographicsTestParam param = GetParam(); + + // Set user demographic prefs. + SetDemographics(param.birth_year, param.gender); + + // Set birth year noise offset to not have it randomized. + pref_service_.SetInteger(kSyncDemographicsBirthYearOffsetPrefName, + param.birth_year_offset); + + // Verify provided demographics for the different parameterized test cases. + UserDemographicsResult demographics_result = + GetUserNoisedBirthYearAndGenderFromPrefs(GetNowTime(), &pref_service_); + if (param.status == UserDemographicsStatus::kSuccess) { + ASSERT_TRUE(demographics_result.IsSuccess()); + EXPECT_EQ(param.birth_year + param.birth_year_offset, + demographics_result.value().birth_year); + EXPECT_EQ(param.gender, demographics_result.value().gender); + } else { + ASSERT_FALSE(demographics_result.IsSuccess()); + EXPECT_EQ(param.status, demographics_result.status()); + } +} + +// Test suite composed of different test cases of getting user demographics. +// The now time in each test case is "22 Jul 2019 00:00:00 UDT" which falls into +// the year bucket of 2018. Users need at most a |birth_year| + +// |birth_year_offset| of 1998 to be able to provide demographics. +INSTANTIATE_TEST_SUITE_P( + All, + UserDemographicsPrefsTestWithParam, + ::testing::Values( + // Test where birth year should not be provided because |birth_year| + 2 + // > 1998. + DemographicsTestParam{ + /*birth_year=*/1997, + /*birth_year_offset=*/2, + /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, + /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, + // Test where birth year should not be provided because |birth_year| - 2 + // > 1998. + DemographicsTestParam{ + /*birth_year=*/2001, + /*birth_year_offset=*/-2, + /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, + /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, + // Test where birth year should not be provided because age of user is + // |kUserDemographicsMaxAge| + 1, which is over the max age. + DemographicsTestParam{ + /*birth_year=*/1933, + /*birth_year_offset=*/0, + /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, + /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, + // Test where gender should not be provided because it has a low + // population that can have their privacy compromised because of high + // entropy. + DemographicsTestParam{ + /*birth_year=*/1986, + /*birth_year_offset=*/0, + /*gender=*/metrics::UserDemographicsProto::GENDER_CUSTOM_OR_OTHER, + /*status=*/UserDemographicsStatus::kIneligibleDemographicsData}, + // Test where birth year can be provided because |birth_year| + 2 == + // 1998. + DemographicsTestParam{ + /*birth_year=*/1996, + /*birth_year_offset=*/2, + /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, + /*status=*/UserDemographicsStatus::kSuccess}, + // Test where birth year can be provided because |birth_year| - 2 == + // 1998. + DemographicsTestParam{ + /*birth_year=*/2000, + /*birth_year_offset=*/-2, + /*gender=*/metrics::UserDemographicsProto::GENDER_MALE, + /*status=*/UserDemographicsStatus::kSuccess}, + // Test where birth year can be provided because |birth_year| + 2 < + // 1998. + DemographicsTestParam{ + /*birth_year=*/1995, + /*birth_year_offset=*/2, + /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, + /*status=*/UserDemographicsStatus::kSuccess}, + // Test where birth year can be provided because |birth_year| - 2 < + // 1998. + DemographicsTestParam{ + /*birth_year=*/1999, + /*birth_year_offset=*/-2, + /*gender=*/metrics::UserDemographicsProto::GENDER_MALE, + /*status=*/UserDemographicsStatus::kSuccess}, + // Test where gender can be provided because it is part of a large + // population with a low entropy. + DemographicsTestParam{ + /*birth_year=*/1986, + /*birth_year_offset=*/0, + /*gender=*/metrics::UserDemographicsProto::GENDER_FEMALE, + /*status=*/UserDemographicsStatus::kSuccess}, + // Test where gender can be provided because it is part of a large + // population with a low entropy. + DemographicsTestParam{ + /*birth_year=*/1986, + /*birth_year_offset=*/0, + /*gender=*/metrics::UserDemographicsProto::GENDER_MALE, + /*status=*/UserDemographicsStatus::kSuccess})); + } // namespace syncer
diff --git a/components/sync/driver/about_sync_util.cc b/components/sync/driver/about_sync_util.cc index 7f0fd70..0188967 100644 --- a/components/sync/driver/about_sync_util.cc +++ b/components/sync/driver/about_sync_util.cc
@@ -80,16 +80,19 @@ const char kUninitialized[] = "Uninitialized"; +const char kUninitializedCSSClass[] = "uninitialized"; +const char kBadStateCSSClass[] = "in_bad_state"; + // This class represents one field in chrome://sync-internals. It gets // serialized into a dictionary with entries for 'stat_name', 'stat_value' and -// 'is_valid'. +// 'stat_status'. class StatBase { public: base::Value ToValue() const { base::Value result(base::Value::Type::DICTIONARY); result.SetKey("stat_name", base::Value(key_)); result.SetKey("stat_value", value_.Clone()); - result.SetKey("is_valid", base::Value(is_valid_)); + result.SetKey("stat_status", base::Value(status_)); return result; } @@ -97,15 +100,15 @@ StatBase(const std::string& key, base::Value default_value) : key_(key), value_(std::move(default_value)) {} - void SetFromValue(base::Value value) { + void SetFromValue(base::Value value, bool is_good) { value_ = std::move(value); - is_valid_ = true; + status_ = is_good ? "" : kBadStateCSSClass; } private: std::string key_; base::Value value_; - bool is_valid_ = false; + std::string status_ = kUninitializedCSSClass; }; template <typename T> @@ -114,7 +117,9 @@ Stat(const std::string& key, const T& default_value) : StatBase(key, base::Value(default_value)) {} - void Set(const T& value) { SetFromValue(base::Value(value)); } + void Set(const T& value, bool is_good = true) { + SetFromValue(base::Value(value), is_good); + } }; // A section for display on chrome://sync-internals, consisting of a title and a @@ -470,9 +475,12 @@ feature_enabled->Set(service->IsSyncFeatureEnabled()); setup_in_progress->Set(service->IsSetupInProgress()); std::string auth_error_str = service->GetAuthError().ToString(); - auth_error->Set(base::StringPrintf( - "%s since %s", (auth_error_str.empty() ? "OK" : auth_error_str).c_str(), - GetTimeStr(service->GetAuthErrorTime(), "browser startup").c_str())); + auth_error->Set( + base::StringPrintf( + "%s since %s", + (auth_error_str.empty() ? "OK" : auth_error_str).c_str(), + GetTimeStr(service->GetAuthErrorTime(), "browser startup").c_str()), + /*is_good=*/auth_error_str.empty()); SyncStatus full_status; bool is_status_valid = @@ -502,13 +510,17 @@ token_request_time->Set(GetTimeStr(token_status.token_request_time, "n/a")); token_response_time->Set(GetTimeStr(token_status.token_response_time, "n/a")); std::string err = token_status.last_get_token_error.error_message(); - last_token_request_result->Set(err.empty() ? "OK" : err); + last_token_request_result->Set(err.empty() ? "OK" : err, + /*is_good=*/err.empty()); has_token->Set(token_status.has_token); next_token_request->Set( GetTimeStr(token_status.next_token_request_time, "not scheduled")); // Local State. - server_connection->Set(GetConnectionStatus(token_status)); + server_connection->Set( + GetConnectionStatus(token_status), + /*is_good=*/token_status.connection_status == CONNECTION_NOT_ATTEMPTED || + token_status.connection_status == CONNECTION_OK); last_synced->Set( GetLastSyncedTimeString(service->GetLastSyncedTimeForDebugging())); is_setup_complete->Set(service->GetUserSettings()->IsFirstSetupComplete()); @@ -526,7 +538,9 @@ "Scheduler is not in backoff or throttled")); } if (is_status_valid) - are_notifications_enabled->Set(full_status.notifications_enabled); + are_notifications_enabled->Set( + full_status.notifications_enabled, + /*is_good=*/full_status.notifications_enabled); // Encryption. if (service->IsSyncFeatureActive()) { @@ -553,11 +567,18 @@ if (snapshot.get_updates_origin() != sync_pb::SyncEnums::UNKNOWN_ORIGIN) { session_source->Set(ProtoEnumToString(snapshot.get_updates_origin())); } - get_key_result->Set( - snapshot.model_neutral_state().last_get_key_result.ToString()); - download_result->Set( - snapshot.model_neutral_state().last_download_updates_result.ToString()); - commit_result->Set(snapshot.model_neutral_state().commit_result.ToString()); + SyncerError get_key_result_err = + snapshot.model_neutral_state().last_get_key_result; + get_key_result->Set(get_key_result_err.ToString(), + /*is_good=*/!get_key_result_err.IsActualError()); + SyncerError download_result_err = + snapshot.model_neutral_state().last_download_updates_result; + download_result->Set(download_result_err.ToString(), + /*is_good=*/!download_result_err.IsActualError()); + SyncerError commit_result_err = + snapshot.model_neutral_state().commit_result; + commit_result->Set(commit_result_err.ToString(), + /*is_good=*/!commit_result_err.IsActualError()); } // Running Totals.
diff --git a/components/sync/driver/glue/sync_engine_impl.cc b/components/sync/driver/glue/sync_engine_impl.cc index 5283b8b..8c612e6 100644 --- a/components/sync/driver/glue/sync_engine_impl.cc +++ b/components/sync/driver/glue/sync_engine_impl.cc
@@ -11,8 +11,6 @@ #include "base/feature_list.h" #include "base/location.h" #include "base/logging.h" -#include "base/task/task_traits.h" -#include "base/task/thread_pool.h" #include "base/task_runner_util.h" #include "build/build_config.h" #include "components/invalidation/impl/invalidation_switches.h" @@ -43,10 +41,9 @@ invalidation::InvalidationService* invalidator, SyncInvalidationsService* sync_invalidations_service, const base::WeakPtr<SyncPrefs>& sync_prefs, - const base::FilePath& sync_data_folder) - : sync_task_runner_(base::ThreadPool::CreateSequencedTaskRunner( - {base::MayBlock(), base::TaskPriority::USER_VISIBLE, - base::TaskShutdownBehavior::BLOCK_SHUTDOWN})), + const base::FilePath& sync_data_folder, + scoped_refptr<base::SequencedTaskRunner> sync_task_runner) + : sync_task_runner_(std::move(sync_task_runner)), name_(name), sync_prefs_(sync_prefs), invalidator_(invalidator),
diff --git a/components/sync/driver/glue/sync_engine_impl.h b/components/sync/driver/glue/sync_engine_impl.h index 9776192b..6ca4bd7 100644 --- a/components/sync/driver/glue/sync_engine_impl.h +++ b/components/sync/driver/glue/sync_engine_impl.h
@@ -55,7 +55,8 @@ invalidation::InvalidationService* invalidator, SyncInvalidationsService* sync_invalidations_service, const base::WeakPtr<SyncPrefs>& sync_prefs, - const base::FilePath& sync_data_folder); + const base::FilePath& sync_data_folder, + scoped_refptr<base::SequencedTaskRunner> sync_task_runner); ~SyncEngineImpl() override; // SyncEngine implementation.
diff --git a/components/sync/driver/glue/sync_engine_impl_unittest.cc b/components/sync/driver/glue/sync_engine_impl_unittest.cc index 10d1446..2087d5d 100644 --- a/components/sync/driver/glue/sync_engine_impl_unittest.cc +++ b/components/sync/driver/glue/sync_engine_impl_unittest.cc
@@ -17,6 +17,8 @@ #include "base/location.h" #include "base/run_loop.h" #include "base/synchronization/waitable_event.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/test/test_timeouts.h" @@ -182,10 +184,14 @@ sync_prefs_ = std::make_unique<SyncPrefs>(&pref_service_); ON_CALL(invalidator_, UpdateInterestedTopics(_, _)) .WillByDefault(testing::Return(true)); + auto sync_task_runner = base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::TaskPriority::USER_VISIBLE, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); backend_ = std::make_unique<SyncEngineImpl>( "dummyDebugName", &invalidator_, GetSyncInvalidationsService(), sync_prefs_->AsWeakPtr(), - temp_dir_.GetPath().Append(base::FilePath(kTestSyncDir))); + temp_dir_.GetPath().Append(base::FilePath(kTestSyncDir)), + sync_task_runner); fake_manager_factory_ = std::make_unique<FakeSyncManagerFactory>( &fake_manager_, network::TestNetworkConnectionTracker::GetInstance());
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc index 54d2c84..80e4c48 100644 --- a/components/sync/driver/profile_sync_service.cc +++ b/components/sync/driver/profile_sync_service.cc
@@ -18,8 +18,6 @@ #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/rand_util.h" -#include "base/task/post_task.h" -#include "base/task/thread_pool.h" #include "base/time/time.h" #include "build/build_config.h" #include "components/invalidation/public/invalidation_service.h" @@ -28,7 +26,6 @@ #include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "components/signin/public/identity_manager/primary_account_mutator.h" -#include "components/sync/base/legacy_directory_deletion.h" #include "components/sync/base/model_type.h" #include "components/sync/base/stop_source.h" #include "components/sync/base/sync_base_switches.h" @@ -634,12 +631,8 @@ // certain codepaths such as the user being signed out). To avoid that, // SyncPrefs is used to determine whether it's worth it. if (!sync_prefs_.GetCacheGuid().empty()) { - base::ThreadPool::PostTask( - FROM_HERE, - {base::TaskPriority::USER_VISIBLE, base::MayBlock(), - base::TaskShutdownBehavior::BLOCK_SHUTDOWN}, - base::BindOnce(&DeleteLegacyDirectoryFilesAndNigoriStorage, - sync_client_->GetSyncDataPath())); + sync_client_->GetSyncApiComponentFactory() + ->DeleteLegacyDirectoryFilesAndNigoriStorage(); } sync_prefs_.ClearLocalSyncTransportData(); } @@ -1795,7 +1788,8 @@ UserDemographicsStatus::kSyncNotEnabled); } - return sync_prefs_.GetUserNoisedBirthYearAndGender(now); + return GetUserNoisedBirthYearAndGenderFromPrefs( + now, sync_client_->GetPrefService()); } base::WeakPtr<JsController> ProfileSyncService::GetJsController() {
diff --git a/components/sync/driver/profile_sync_service_unittest.cc b/components/sync/driver/profile_sync_service_unittest.cc index 0a76957fc..bbb281b 100644 --- a/components/sync/driver/profile_sync_service_unittest.cc +++ b/components/sync/driver/profile_sync_service_unittest.cc
@@ -317,26 +317,25 @@ void SetDemographics(int birth_year, metrics::UserDemographicsProto_Gender gender) { base::DictionaryValue dict; - dict.SetIntPath(prefs::kSyncDemographics_BirthYearPath, birth_year); - dict.SetIntPath(prefs::kSyncDemographics_GenderPath, - static_cast<int>(gender)); - prefs()->Set(prefs::kSyncDemographics, dict); + dict.SetIntPath(kSyncDemographicsBirthYearPath, birth_year); + dict.SetIntPath(kSyncDemographicsGenderPath, static_cast<int>(gender)); + prefs()->Set(kSyncDemographicsPrefName, dict); } static bool HasBirthYearDemographic(const PrefService* pref_service) { - return pref_service->HasPrefPath(prefs::kSyncDemographics) && - pref_service->GetDictionary(prefs::kSyncDemographics) - ->FindIntPath(prefs::kSyncDemographics_BirthYearPath); + return pref_service->HasPrefPath(kSyncDemographicsPrefName) && + pref_service->GetDictionary(kSyncDemographicsPrefName) + ->FindIntPath(kSyncDemographicsBirthYearPath); } static bool HasGenderDemographic(const PrefService* pref_service) { - return pref_service->HasPrefPath(prefs::kSyncDemographics) && - pref_service->GetDictionary(prefs::kSyncDemographics) - ->FindIntPath(prefs::kSyncDemographics_GenderPath); + return pref_service->HasPrefPath(kSyncDemographicsPrefName) && + pref_service->GetDictionary(kSyncDemographicsPrefName) + ->FindIntPath(kSyncDemographicsGenderPath); } static bool HasBirthYearOffset(const PrefService* pref_service) { - return pref_service->HasPrefPath(prefs::kSyncDemographicsBirthYearOffset); + return pref_service->HasPrefPath(kSyncDemographicsBirthYearOffsetPrefName); } private: @@ -949,8 +948,8 @@ metrics::UserDemographicsProto_Gender_GENDER_FEMALE); // Set the birth year offset pref that would be normally set when calling - // SyncPrefs::GetUserNoisedBirthYearAndGender(). - prefs()->SetInteger(prefs::kSyncDemographicsBirthYearOffset, 2); + // GetUserNoisedBirthYearAndGenderFromPrefs(). + prefs()->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, 2); // Verify that the demographics prefs exist (i.e., that the test is set up). ASSERT_TRUE(HasBirthYearDemographic(prefs())); @@ -969,7 +968,7 @@ EXPECT_NE(service()->GetLastSyncedTimeForDebugging(), last_synced_time); // Check that the demographic prefs are cleared. - EXPECT_FALSE(prefs()->HasPrefPath(prefs::kSyncDemographics)); + EXPECT_FALSE(prefs()->HasPrefPath(kSyncDemographicsPrefName)); EXPECT_FALSE(HasBirthYearDemographic(prefs())); EXPECT_FALSE(HasGenderDemographic(prefs())); @@ -989,8 +988,8 @@ metrics::UserDemographicsProto_Gender_GENDER_FEMALE); // Set the birth year offset pref that would be normally set when calling - // SyncPrefs::GetUserNoisedBirthYearAndGender(). - prefs()->SetInteger(prefs::kSyncDemographicsBirthYearOffset, 2); + // GetUserNoisedBirthYearAndGenderFromPrefs(). + prefs()->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, 2); // Verify that the demographics prefs exist (i.e., that the test is set up). ASSERT_TRUE(HasBirthYearDemographic(prefs())); @@ -1003,7 +1002,7 @@ InitializeForNthSync(); // Verify that the demographic prefs are cleared. - EXPECT_FALSE(prefs()->HasPrefPath(prefs::kSyncDemographics)); + EXPECT_FALSE(prefs()->HasPrefPath(kSyncDemographicsPrefName)); EXPECT_FALSE(HasBirthYearDemographic(prefs())); EXPECT_FALSE(HasGenderDemographic(prefs())); @@ -1372,7 +1371,7 @@ // Directly set birth year offset in demographic prefs to avoid it being set // with a random value when calling GetUserNoisedBirthYearAndGender(). - prefs()->SetInteger(prefs::kSyncDemographicsBirthYearOffset, + prefs()->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, birth_year_offset); UserDemographicsResult user_demographics_result = @@ -1429,8 +1428,8 @@ SetDemographics(user_demographics_birth_year, user_demographics_gender); // Set birth year noise offset that is usually set when calling - // SyncPrefs::GetUserNoisedBirthYearAndGender(). - prefs()->SetInteger(prefs::kSyncDemographicsBirthYearOffset, + // GetUserNoisedBirthYearAndGenderFromPrefs(). + prefs()->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, static_cast<int>(birth_year_offset)); // Verify that demographic prefs exist (i.e., the test is set up). @@ -1479,8 +1478,8 @@ metrics::UserDemographicsProto_Gender_GENDER_FEMALE); // Set birth year noise offset that is usually set when calling - // SyncPrefs::GetUserNoisedBirthYearAndGender(). - prefs()->SetInteger(prefs::kSyncDemographicsBirthYearOffset, 2); + // GetUserNoisedBirthYearAndGenderFromPrefs(). + prefs()->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, 2); // Verify that demographic prefs exist (i.e., the test is set up). ASSERT_TRUE(HasBirthYearDemographic(prefs())); @@ -1526,8 +1525,8 @@ metrics::UserDemographicsProto_Gender_GENDER_FEMALE); // Set birth year noise offset that is usually set when calling - // SyncPrefs::GetUserNoisedBirthYearAndGender(). - prefs()->SetInteger(prefs::kSyncDemographicsBirthYearOffset, 2); + // GetUserNoisedBirthYearAndGenderFromPrefs(). + prefs()->SetInteger(kSyncDemographicsBirthYearOffsetPrefName, 2); // Verify that demographic prefs exist (i.e., the test is set up). ASSERT_TRUE(HasBirthYearDemographic(prefs()));
diff --git a/components/sync/driver/resources/about.css b/components/sync/driver/resources/about.css index 50357f64..c739c81 100644 --- a/components/sync/driver/resources/about.css +++ b/components/sync/driver/resources/about.css
@@ -85,6 +85,10 @@ color: #7f7f7f; } +.about-details .in_bad_state { + color: red; +} + #status { margin-left: auto; margin-right: auto;
diff --git a/components/sync/driver/resources/about.html b/components/sync/driver/resources/about.html index 30a1f10..1cea1fa8 100644 --- a/components/sync/driver/resources/about.html +++ b/components/sync/driver/resources/about.html
@@ -17,7 +17,7 @@ <h2 jscontent="title"></h2> <table class="about-details"> <tr jsselect="data" - jsvalues="class:$this.is_valid ? '' : 'uninitialized'" + jsvalues="class:$this.stat_status" jseval='chrome.sync.about_tab.highlightIfChanged(this, this.children[1].innerText, stat_value)'> <td class="detail" jscontent="stat_name" width=50%></td> <td class="value" jscontent="stat_value" width=50%></td>
diff --git a/components/sync/driver/sync_api_component_factory.h b/components/sync/driver/sync_api_component_factory.h index fe6655cd..cc6d7a4 100644 --- a/components/sync/driver/sync_api_component_factory.h +++ b/components/sync/driver/sync_api_component_factory.h
@@ -52,6 +52,14 @@ invalidation::InvalidationService* invalidator, syncer::SyncInvalidationsService* sync_invalidation_service, const base::WeakPtr<SyncPrefs>& sync_prefs) = 0; + + // Deletes the directory database files from the sync data folder to cleanup + // all files. The main purpose is to delete the legacy Directory files + // (sqlite) but it also currently deletes the files corresponding to the + // modern NigoriStorageImpl. + // Upon calling this, the deletion is guaranteed to finish before a new engine + // returned by |CreateSyncEngine()| can do any proper work. + virtual void DeleteLegacyDirectoryFilesAndNigoriStorage() = 0; }; } // namespace syncer
diff --git a/components/sync/driver/sync_api_component_factory_mock.h b/components/sync/driver/sync_api_component_factory_mock.h index b512623..5b5b016 100644 --- a/components/sync/driver/sync_api_component_factory_mock.h +++ b/components/sync/driver/sync_api_component_factory_mock.h
@@ -38,6 +38,7 @@ invalidation::InvalidationService* invalidator, syncer::SyncInvalidationsService* sync_invalidations_service, const base::WeakPtr<SyncPrefs>& sync_prefs)); + MOCK_METHOD0(DeleteLegacyDirectoryFilesAndNigoriStorage, void()); }; } // namespace syncer
diff --git a/components/sync/driver/sync_client.h b/components/sync/driver/sync_client.h index eb248dfa..d9f755e 100644 --- a/components/sync/driver/sync_client.h +++ b/components/sync/driver/sync_client.h
@@ -48,8 +48,6 @@ virtual signin::IdentityManager* GetIdentityManager() = 0; - virtual base::FilePath GetSyncDataPath() = 0; - // Returns the path to the folder used for storing the local sync database. // It is only used when sync is running against a local backend. virtual base::FilePath GetLocalSyncBackendFolder() = 0;
diff --git a/components/sync/driver/sync_client_mock.h b/components/sync/driver/sync_client_mock.h index 3acc0d3..3f085e26 100644 --- a/components/sync/driver/sync_client_mock.h +++ b/components/sync/driver/sync_client_mock.h
@@ -18,7 +18,6 @@ MOCK_METHOD0(GetPrefService, PrefService*()); MOCK_METHOD0(GetIdentityManager, signin::IdentityManager*()); - MOCK_METHOD0(GetSyncDataPath, base::FilePath()); MOCK_METHOD0(GetLocalSyncBackendFolder, base::FilePath()); MOCK_METHOD1(CreateDataTypeControllers, DataTypeController::TypeVector(SyncService* sync_service));
diff --git a/components/sync/engine_impl/commit.cc b/components/sync/engine_impl/commit.cc index 8a4ac8b..dd190de 100644 --- a/components/sync/engine_impl/commit.cc +++ b/components/sync/engine_impl/commit.cc
@@ -80,12 +80,9 @@ ExtensionsActivity::Records extensions_activity_buffer) : contributions_(std::move(contributions)), message_(message), - extensions_activity_buffer_(extensions_activity_buffer), - cleaned_up_(false) {} + extensions_activity_buffer_(extensions_activity_buffer) {} -Commit::~Commit() { - DCHECK(cleaned_up_); -} +Commit::~Commit() = default; // static std::unique_ptr<Commit> Commit::Init(ModelTypeSet enabled_types, @@ -243,14 +240,6 @@ return contributed_data_types; } -void Commit::CleanUp() { - for (ContributionMap::const_iterator it = contributions_.begin(); - it != contributions_.end(); ++it) { - it->second->CleanUp(); - } - cleaned_up_ = true; -} - void Commit::ReportFullCommitFailure(SyncerError syncer_error) { const SyncCommitError commit_error = GetSyncCommitError(syncer_error); for (auto& model_type_and_contribution : contributions_) {
diff --git a/components/sync/engine_impl/commit.h b/components/sync/engine_impl/commit.h index c893cd1..14aaaf0a 100644 --- a/components/sync/engine_impl/commit.h +++ b/components/sync/engine_impl/commit.h
@@ -42,7 +42,6 @@ const sync_pb::ClientToServerMessage& message, ExtensionsActivity::Records extensions_activity_buffer); - // This destructor will DCHECK if CleanUp() has not been called. ~Commit(); // |extensions_activity| may be null. @@ -63,10 +62,6 @@ ModelTypeSet GetContributingDataTypes() const; - // Cleans up state associated with this commit. Must be called before the - // destructor. - void CleanUp(); - private: // Report commit failure to each contribution. void ReportFullCommitFailure(SyncerError syncer_error); @@ -76,9 +71,6 @@ sync_pb::ClientToServerMessage message_; ExtensionsActivity::Records extensions_activity_buffer_; - // Debug only flag used to indicate if it's safe to destruct the object. - bool cleaned_up_; - DISALLOW_COPY_AND_ASSIGN(Commit); };
diff --git a/components/sync/engine_impl/commit_contribution.h b/components/sync/engine_impl/commit_contribution.h index b31117d..301c6413 100644 --- a/components/sync/engine_impl/commit_contribution.h +++ b/components/sync/engine_impl/commit_contribution.h
@@ -47,10 +47,6 @@ // was never called. virtual void ProcessCommitFailure(SyncCommitError commit_error) = 0; - // Cleans up any temporary state associated with the commit. Must be called - // before destruction. - virtual void CleanUp() = 0; - // Returns the number of entries included in this contribution. virtual size_t GetNumEntries() const = 0; };
diff --git a/components/sync/engine_impl/commit_contribution_impl.cc b/components/sync/engine_impl/commit_contribution_impl.cc index 23c10e2..932ecd18 100644 --- a/components/sync/engine_impl/commit_contribution_impl.cc +++ b/components/sync/engine_impl/commit_contribution_impl.cc
@@ -37,12 +37,9 @@ passphrase_type_(passphrase_type), context_(context), commit_requests_(std::move(commit_requests)), - cleaned_up_(false), only_commit_specifics_(only_commit_specifics) {} -CommitContributionImpl::~CommitContributionImpl() { - DCHECK(cleaned_up_); -} +CommitContributionImpl::~CommitContributionImpl() = default; void CommitContributionImpl::AddToCommitMessage( sync_pb::ClientToServerMessage* msg) { @@ -186,11 +183,6 @@ on_commit_response_callback_.Reset(); } -void CommitContributionImpl::CleanUp() { - // TODO(crbug.com/1137896): Remove this method, is has no use anymore. - cleaned_up_ = true; -} - size_t CommitContributionImpl::GetNumEntries() const { return commit_requests_.size(); }
diff --git a/components/sync/engine_impl/commit_contribution_impl.h b/components/sync/engine_impl/commit_contribution_impl.h index 009797c..86f50e1 100644 --- a/components/sync/engine_impl/commit_contribution_impl.h +++ b/components/sync/engine_impl/commit_contribution_impl.h
@@ -51,7 +51,6 @@ const sync_pb::ClientToServerResponse& response, StatusController* status) override; void ProcessCommitFailure(SyncCommitError commit_error) override; - void CleanUp() override; size_t GetNumEntries() const override; // Public for testing. @@ -93,10 +92,6 @@ // added. Used to correlate per-item requests with per-item responses. size_t entries_start_index_; - // A flag used to ensure this object's contract is respected. Helps to check - // that CleanUp() is called before the object is destructed. - bool cleaned_up_; - // Don't send any metadata to server, only specifics. This is needed for // commit only types to save bandwidth. bool only_commit_specifics_;
diff --git a/components/sync/engine_impl/commit_contribution_impl_unittest.cc b/components/sync/engine_impl/commit_contribution_impl_unittest.cc index d20dd0aa..9f63bd6 100644 --- a/components/sync/engine_impl/commit_contribution_impl_unittest.cc +++ b/components/sync/engine_impl/commit_contribution_impl_unittest.cc
@@ -179,7 +179,6 @@ sync_pb::ClientToServerMessage msg; contribution.AddToCommitMessage(&msg); - contribution.CleanUp(); ASSERT_EQ(1, msg.commit().entries().size()); SyncEntity entity = msg.commit().entries(0); @@ -242,7 +241,6 @@ sync_pb::ClientToServerMessage msg; contribution.AddToCommitMessage(&msg); - contribution.CleanUp(); ASSERT_EQ(1, msg.commit().entries().size()); SyncEntity entity = msg.commit().entries(0); @@ -311,7 +309,6 @@ StatusController status; contribution.ProcessCommitResponse(response, &status); - contribution.CleanUp(); ASSERT_EQ(1u, actual_error_response_list.size()); FailedCommitResponseData failed_item = actual_error_response_list[0]; @@ -335,7 +332,6 @@ /*only_commit_specifics=*/false); contribution.ProcessCommitFailure(SyncCommitError::kNetworkError); - contribution.CleanUp(); } } // namespace
diff --git a/components/sync/engine_impl/commit_processor_unittest.cc b/components/sync/engine_impl/commit_processor_unittest.cc index 7f0cbd1..9951eb8e 100644 --- a/components/sync/engine_impl/commit_processor_unittest.cc +++ b/components/sync/engine_impl/commit_processor_unittest.cc
@@ -42,7 +42,6 @@ return SyncerError(); } void ProcessCommitFailure(SyncCommitError commit_error) override {} - void CleanUp() override {} size_t GetNumEntries() const override { return num_entries_; } private:
diff --git a/components/sync/engine_impl/cycle/data_type_debug_info_emitter.cc b/components/sync/engine_impl/cycle/data_type_debug_info_emitter.cc deleted file mode 100644 index f0fe2583..0000000 --- a/components/sync/engine_impl/cycle/data_type_debug_info_emitter.cc +++ /dev/null
@@ -1,43 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/sync/engine_impl/cycle/data_type_debug_info_emitter.h" - -#include <string> - -#include "base/metrics/histogram.h" - -namespace syncer { - -DataTypeDebugInfoEmitter::DataTypeDebugInfoEmitter(ModelType type) {} - -DataTypeDebugInfoEmitter::~DataTypeDebugInfoEmitter() {} - -const CommitCounters& DataTypeDebugInfoEmitter::GetCommitCounters() const { - return commit_counters_; -} - -CommitCounters* DataTypeDebugInfoEmitter::GetMutableCommitCounters() { - return &commit_counters_; -} - -void DataTypeDebugInfoEmitter::EmitCommitCountersUpdate() { - // Mark the current state of the counters as uploaded to UMA. - emitted_commit_counters_ = commit_counters_; -} - -const UpdateCounters& DataTypeDebugInfoEmitter::GetUpdateCounters() const { - return update_counters_; -} - -UpdateCounters* DataTypeDebugInfoEmitter::GetMutableUpdateCounters() { - return &update_counters_; -} - -void DataTypeDebugInfoEmitter::EmitUpdateCountersUpdate() { - // Mark the current state of the counters as uploaded to UMA. - emitted_update_counters_ = update_counters_; -} - -} // namespace syncer
diff --git a/components/sync/engine_impl/cycle/data_type_debug_info_emitter.h b/components/sync/engine_impl/cycle/data_type_debug_info_emitter.h deleted file mode 100644 index e8943df..0000000 --- a/components/sync/engine_impl/cycle/data_type_debug_info_emitter.h +++ /dev/null
@@ -1,90 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_SYNC_ENGINE_IMPL_CYCLE_DATA_TYPE_DEBUG_INFO_EMITTER_H_ -#define COMPONENTS_SYNC_ENGINE_IMPL_CYCLE_DATA_TYPE_DEBUG_INFO_EMITTER_H_ - -#include <memory> - -#include "base/macros.h" -#include "components/sync/base/model_type.h" - -namespace syncer { - -// A class to maintain counts related to sync commit requests and responses. -struct CommitCounters { - CommitCounters() = default; - ~CommitCounters() = default; - - // Counters updated before sending a commit message to the server. - int num_creation_commits_attempted = 0; - int num_deletion_commits_attempted = 0; - int num_update_commits_attempted = 0; -}; - -// A class to maintain counts related to the update requests and responses for -// a particular sync type. -struct UpdateCounters { - UpdateCounters() = default; - ~UpdateCounters() = default; - - int num_initial_updates_received = 0; - int num_non_initial_updates_received = 0; - int num_non_initial_tombstone_updates_received = 0; -}; - -// Supports various kinds of debugging requests for a certain directory type. -// -// TODO(crbug.com/1102849): Rename Emit*() methods to mention UMA, and update -// the documentation to not mention any observers. -// The Emit*() functions send updates to registered TypeDebugInfoObservers. -// The DataTypeDebugInfoEmitter does not directly own that list; it is -// managed by the ModelTypeRegistry. -// -// For Update and Commit counters, the job of keeping the counters up to date -// is delegated to the UpdateHandler and CommitContributors. For the Stats -// counters, the emitter will let sub class to fetch all the required -// information on demand. -// TODO(crbug.com/1137896): This class is unused, remove it. -class DataTypeDebugInfoEmitter { - public: - explicit DataTypeDebugInfoEmitter(ModelType type); - - virtual ~DataTypeDebugInfoEmitter(); - - // Returns a reference to the current commit counters. - const CommitCounters& GetCommitCounters() const; - - // Allows others to mutate the commit counters. - CommitCounters* GetMutableCommitCounters(); - - // Triggers a commit counters update to registered observers. - void EmitCommitCountersUpdate(); - - // Returns a reference to the current update counters. - const UpdateCounters& GetUpdateCounters() const; - - // Allows others to mutate the update counters. - UpdateCounters* GetMutableUpdateCounters(); - - // Triggers an update counters update to registered observers. - void EmitUpdateCountersUpdate(); - - private: - // The actual up-to-date counters. - CommitCounters commit_counters_; - UpdateCounters update_counters_; - - // The last state of the counters emitted to UMA. In the next round of - // emitting to UMA, we only need to upload the diff between the actual - // counters and the counts here. - CommitCounters emitted_commit_counters_; - UpdateCounters emitted_update_counters_; - - DISALLOW_COPY_AND_ASSIGN(DataTypeDebugInfoEmitter); -}; - -} // namespace syncer - -#endif // COMPONENTS_SYNC_ENGINE_IMPL_CYCLE_DATA_TYPE_DEBUG_INFO_EMITTER_H_
diff --git a/components/sync/engine_impl/model_type_registry.cc b/components/sync/engine_impl/model_type_registry.cc index 400ed60..723a5f2 100644 --- a/components/sync/engine_impl/model_type_registry.cc +++ b/components/sync/engine_impl/model_type_registry.cc
@@ -15,7 +15,6 @@ #include "components/sync/engine/commit_queue.h" #include "components/sync/engine/data_type_activation_response.h" #include "components/sync/engine/model_type_processor.h" -#include "components/sync/engine_impl/cycle/data_type_debug_info_emitter.h" #include "components/sync/engine_impl/model_type_worker.h" #include "components/sync/nigori/cryptographer.h" #include "components/sync/nigori/keystore_keys_handler.h" @@ -237,15 +236,6 @@ } } -DataTypeDebugInfoEmitter* ModelTypeRegistry::GetEmitter(ModelType type) { - DataTypeDebugInfoEmitter* raw_emitter = nullptr; - auto it = data_type_debug_info_emitter_map_.find(type); - if (it != data_type_debug_info_emitter_map_.end()) { - raw_emitter = it->second.get(); - } - return raw_emitter; -} - ModelTypeSet ModelTypeRegistry::GetEnabledDataTypes() const { ModelTypeSet enabled_types; for (const auto& worker : model_type_workers_) {
diff --git a/components/sync/engine_impl/model_type_registry.h b/components/sync/engine_impl/model_type_registry.h index 959931a..bab0f1e1 100644 --- a/components/sync/engine_impl/model_type_registry.h +++ b/components/sync/engine_impl/model_type_registry.h
@@ -23,7 +23,6 @@ class CancelationSignal; class CommitContributor; -class DataTypeDebugInfoEmitter; class KeystoreKeysHandler; class ModelTypeWorker; class UpdateHandler; @@ -85,14 +84,8 @@ base::WeakPtr<ModelTypeConnector> AsWeakPtr(); private: - using DataTypeDebugInfoEmitterMap = - std::map<ModelType, std::unique_ptr<DataTypeDebugInfoEmitter>>; - void OnEncryptionStateChanged(); - // DebugInfoEmitters are never deleted. Returns an existing one if we have it. - DataTypeDebugInfoEmitter* GetEmitter(ModelType type); - ModelTypeSet GetEnabledDataTypes() const; // Enabled proxy types, which don't have a worker. @@ -105,9 +98,6 @@ UpdateHandlerMap update_handler_map_; CommitContributorMap commit_contributor_map_; - // Map of DebugInfoEmitters for sync data types. Does not own its contents. - DataTypeDebugInfoEmitterMap data_type_debug_info_emitter_map_; - // A copy of the most recent cryptographer. std::unique_ptr<Cryptographer> cryptographer_;
diff --git a/components/sync/engine_impl/model_type_worker.cc b/components/sync/engine_impl/model_type_worker.cc index 926a055f..cd9e5d20 100644 --- a/components/sync/engine_impl/model_type_worker.cc +++ b/components/sync/engine_impl/model_type_worker.cc
@@ -168,17 +168,6 @@ const sync_pb::DataTypeContext& mutated_context, const SyncEntityList& applicable_updates, StatusController* status) { - return ProcessGetUpdatesResponse(progress_marker, mutated_context, - applicable_updates, - /*from_uss_migrator=*/false, status); -} - -SyncerError ModelTypeWorker::ProcessGetUpdatesResponse( - const sync_pb::DataTypeProgressMarker& progress_marker, - const sync_pb::DataTypeContext& mutated_context, - const SyncEntityList& applicable_updates, - bool from_uss_migrator, - StatusController* status) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); const bool is_initial_sync = !model_type_state_.initial_sync_done(); @@ -188,14 +177,10 @@ *model_type_state_.mutable_progress_marker() = progress_marker; for (const sync_pb::SyncEntity* update_entity : applicable_updates) { - // TODO(crbug.com/1137896): The USS migrator doesn't exist anymore, remove - // this parameter. - if (!from_uss_migrator) { - RecordEntityChangeMetrics( - type_, is_initial_sync - ? ModelTypeEntityChange::kRemoteInitialUpdate - : ModelTypeEntityChange::kRemoteNonInitialUpdate); - } + RecordEntityChangeMetrics( + type_, is_initial_sync + ? ModelTypeEntityChange::kRemoteInitialUpdate + : ModelTypeEntityChange::kRemoteNonInitialUpdate); if (update_entity->deleted()) { status->increment_num_tombstone_updates_downloaded_by(1);
diff --git a/components/sync/engine_impl/model_type_worker.h b/components/sync/engine_impl/model_type_worker.h index ca878d6..4ff2648a 100644 --- a/components/sync/engine_impl/model_type_worker.h +++ b/components/sync/engine_impl/model_type_worker.h
@@ -102,16 +102,6 @@ std::unique_ptr<CommitContribution> GetContribution( size_t max_entries) override; - // Extended overload of ProcessGetUpdatesResponse() that allows specifying - // whether the updates are coming from the USS migrator, which influences how - // UMA metrics are logged. - SyncerError ProcessGetUpdatesResponse( - const sync_pb::DataTypeProgressMarker& progress_marker, - const sync_pb::DataTypeContext& mutated_context, - const SyncEntityList& applicable_updates, - bool from_uss_migrator, - StatusController* status); - bool HasLocalChangesForTest() const; // An alternative way to drive sending data to the processor, that should be
diff --git a/components/sync/engine_impl/model_type_worker_unittest.cc b/components/sync/engine_impl/model_type_worker_unittest.cc index 7529a14..46729c15 100644 --- a/components/sync/engine_impl/model_type_worker_unittest.cc +++ b/components/sync/engine_impl/model_type_worker_unittest.cc
@@ -391,17 +391,7 @@ void PumpModelThread() { processor()->RunQueuedTasks(); } // Returns true if the |worker_| is ready to commit something. - bool WillCommit() { - std::unique_ptr<CommitContribution> contribution( - worker()->GetContribution(INT_MAX)); - - if (contribution) { - contribution->CleanUp(); // Gracefully abort the commit. - return true; - } else { - return false; - } - } + bool WillCommit() { return worker()->GetContribution(INT_MAX) != nullptr; } // Pretend to successfully commit all outstanding unsynced items. // It is safe to call this only if WillCommit() returns true. @@ -421,7 +411,6 @@ server()->DoSuccessfulCommit(message); contribution->ProcessCommitResponse(response, &status_controller_); - contribution->CleanUp(); } void DoCommitFailure() { @@ -430,7 +419,6 @@ DCHECK(contribution); contribution->ProcessCommitFailure(SyncCommitError::kNetworkError); - contribution->CleanUp(); } // Callback when processor got disconnected with sync.
diff --git a/components/sync/engine_impl/syncer.cc b/components/sync/engine_impl/syncer.cc index f62d424..7b696ec 100644 --- a/components/sync/engine_impl/syncer.cc +++ b/components/sync/engine_impl/syncer.cc
@@ -165,7 +165,6 @@ base::UmaHistogramEnumeration(kPrefix + ModelTypeToHistogramSuffix(type), error.value()); } - commit->CleanUp(); if (error.value() != SyncerError::SYNCER_OK) { return error; }
diff --git a/components/timers/alarm_timer_chromeos.cc b/components/timers/alarm_timer_chromeos.cc index af98c065..bd3947c 100644 --- a/components/timers/alarm_timer_chromeos.cc +++ b/components/timers/alarm_timer_chromeos.cc
@@ -17,6 +17,7 @@ #include "base/memory/ptr_util.h" #include "base/pending_task.h" #include "base/task/common/task_annotator.h" +#include "base/trace_event/task_execution_macros.h" #include "base/trace_event/trace_event.h" namespace timers {
diff --git a/components/tracing/test/trace_event_perftest.cc b/components/tracing/test/trace_event_perftest.cc index 5f93f59c..c2317ce 100644 --- a/components/tracing/test/trace_event_perftest.cc +++ b/components/tracing/test/trace_event_perftest.cc
@@ -11,6 +11,7 @@ #include "base/run_loop.h" #include "base/test/task_environment.h" #include "base/threading/thread.h" +#include "base/trace_event/task_execution_macros.h" #include "base/trace_event/trace_event.h" #include "base/trace_event/traced_value.h" #include "perf_test_helpers.h"
diff --git a/components/ui_devtools/views/view_element.cc b/components/ui_devtools/views/view_element.cc index 6115ce9..bee4ca7 100644 --- a/components/ui_devtools/views/view_element.cc +++ b/components/ui_devtools/views/view_element.cc
@@ -10,6 +10,7 @@ #include "components/ui_devtools/ui_element_delegate.h" #include "components/ui_devtools/views/element_utility.h" #include "ui/gfx/color_utils.h" +#include "ui/views/metadata/metadata_types.h" #include "ui/views/widget/widget.h" namespace ui_devtools { @@ -119,10 +120,12 @@ base::UTF16ToUTF8((*member)->GetValueAsString(view_)), &color)) class_properties.emplace_back("--" + (*member)->member_name(), color_utils::SkColorToRgbaString(color)); - } else + } else if (!!((*member)->GetPropertyFlags() & + views::metadata::PropertyFlags::kSerializable)) { class_properties.emplace_back( (*member)->member_name(), base::UTF16ToUTF8((*member)->GetValueAsString(view_))); + } if (member.IsLastMember()) { ret.emplace_back(member.GetCurrentCollectionName(), class_properties); @@ -187,6 +190,8 @@ } } + DCHECK(!!(member->GetPropertyFlags() & + views::metadata::PropertyFlags::kSerializable)); member->SetValueAsString(view_, base::UTF8ToUTF16(property_value)); property_set = true; }
diff --git a/components/ui_devtools/views/view_element_unittest.cc b/components/ui_devtools/views/view_element_unittest.cc index accd649..588080e 100644 --- a/components/ui_devtools/views/view_element_unittest.cc +++ b/components/ui_devtools/views/view_element_unittest.cc
@@ -7,6 +7,7 @@ #include "base/strings/utf_string_conversions.h" #include "components/ui_devtools/Protocol.h" #include "components/ui_devtools/ui_devtools_unittest_utils.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/test/views_test_base.h" namespace ui_devtools {
diff --git a/components/viz/service/display_embedder/output_presenter_fuchsia.cc b/components/viz/service/display_embedder/output_presenter_fuchsia.cc index e7a452a4..d1b8c285 100644 --- a/components/viz/service/display_embedder/output_presenter_fuchsia.cc +++ b/components/viz/service/display_embedder/output_presenter_fuchsia.cc
@@ -230,11 +230,13 @@ // the ImagePipe. fuchsia::sysmem::BufferCollectionTokenSyncPtr collection_token; sysmem_allocator_->AllocateSharedCollection(collection_token.NewRequest()); + collection_token->SetName(100u, "ChromiumOutput"); + collection_token->SetDebugClientInfo("vulkan", 0u); - fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken> - token_for_scenic; + fuchsia::sysmem::BufferCollectionTokenSyncPtr token_for_scenic; collection_token->Duplicate(ZX_RIGHT_SAME_RIGHTS, token_for_scenic.NewRequest()); + token_for_scenic->SetDebugClientInfo("scenic", 0u); zx_status_t status = collection_token->Sync(); if (status != ZX_OK) {
diff --git a/components/viz/service/display_embedder/skia_output_device_gl.cc b/components/viz/service/display_embedder/skia_output_device_gl.cc index 703a3d4..3dd38d85 100644 --- a/components/viz/service/display_embedder/skia_output_device_gl.cc +++ b/components/viz/service/display_embedder/skia_output_device_gl.cc
@@ -4,11 +4,11 @@ #include "components/viz/service/display_embedder/skia_output_device_gl.h" -#include <tuple> #include <utility> #include "base/bind_helpers.h" #include "base/debug/alias.h" +#include "build/build_config.h" #include "components/viz/common/gpu/context_lost_reason.h" #include "components/viz/service/display/dc_layer_overlay.h" #include "gpu/command_buffer/common/swap_buffers_complete_params.h" @@ -49,51 +49,6 @@ } // namespace -// Holds reference needed to keep overlay textures alive. Can either hold a -// shared image or legacy GL texture. -// TODO(kylechar): Merge with SkiaOutputDeviceBufferQueue::OverlayData when we -// dont need to support TexturePassthrough anymore. -class SkiaOutputDeviceGL::OverlayData { - public: - // TODO(crbug.com/1011555): Remove ability to hold TexturePassthrough after - // all Window video paths use shared image API. - explicit OverlayData(scoped_refptr<gpu::gles2::TexturePassthrough> texture) - : texture_(std::move(texture)) {} - - OverlayData( - std::unique_ptr<gpu::SharedImageRepresentationOverlay> representation, - std::unique_ptr<gpu::SharedImageRepresentationOverlay::ScopedReadAccess> - scoped_read_access) - : representation_(std::move(representation)), - scoped_read_access_(std::move(scoped_read_access)) {} - - ~OverlayData() = default; - OverlayData(OverlayData&& other) = default; - OverlayData& operator=(OverlayData&& other) { - texture_ = std::move(other.texture_); - // Must happen in the same order as destruction to avoid having - // |scoped_read_access_| outlive |representation_|. - scoped_read_access_ = std::move(other.scoped_read_access_); - representation_ = std::move(other.representation_); - return *this; - } - - scoped_refptr<gl::GLImage> GetImage() { - if (texture_) - return texture_->GetLevelImage(texture_->target(), 0); - - DCHECK(scoped_read_access_); - return scoped_read_access_->gl_image(); - } - - private: - std::unique_ptr<gpu::SharedImageRepresentationOverlay> representation_; - std::unique_ptr<gpu::SharedImageRepresentationOverlay::ScopedReadAccess> - scoped_read_access_; - - scoped_refptr<gpu::gles2::TexturePassthrough> texture_; -}; - SkiaOutputDeviceGL::SkiaOutputDeviceGL( gpu::MailboxManager* mailbox_manager, gpu::SharedImageRepresentationFactory* shared_image_representation_factory, @@ -292,14 +247,14 @@ gfx::Size(sk_surface_->width(), sk_surface_->height()); if (supports_async_swap_) { - auto callback = base::BindOnce( - &SkiaOutputDeviceGL::DoFinishSwapBuffersAsync, - weak_ptr_factory_.GetWeakPtr(), surface_size, std::move(latency_info)); + auto callback = base::BindOnce(&SkiaOutputDeviceGL::DoFinishSwapBuffers, + weak_ptr_factory_.GetWeakPtr(), surface_size, + std::move(latency_info)); gl_surface_->SwapBuffersAsync(std::move(callback), std::move(feedback)); } else { gfx::SwapResult result = gl_surface_->SwapBuffers(std::move(feedback)); - DoFinishSwapBuffers(surface_size, std::move(latency_info), - gfx::SwapCompletionResult(result)); + FinishSwapBuffers(gfx::SwapCompletionResult(result), surface_size, + std::move(latency_info)); } } @@ -313,17 +268,17 @@ gfx::Size(sk_surface_->width(), sk_surface_->height()); if (supports_async_swap_) { - auto callback = base::BindOnce( - &SkiaOutputDeviceGL::DoFinishSwapBuffersAsync, - weak_ptr_factory_.GetWeakPtr(), surface_size, std::move(latency_info)); + auto callback = base::BindOnce(&SkiaOutputDeviceGL::DoFinishSwapBuffers, + weak_ptr_factory_.GetWeakPtr(), surface_size, + std::move(latency_info)); gl_surface_->PostSubBufferAsync(rect.x(), rect.y(), rect.width(), rect.height(), std::move(callback), std::move(feedback)); } else { gfx::SwapResult result = gl_surface_->PostSubBuffer( rect.x(), rect.y(), rect.width(), rect.height(), std::move(feedback)); - DoFinishSwapBuffers(surface_size, std::move(latency_info), - gfx::SwapCompletionResult(result)); + FinishSwapBuffers(gfx::SwapCompletionResult(result), surface_size, + std::move(latency_info)); } } @@ -336,43 +291,24 @@ gfx::Size(sk_surface_->width(), sk_surface_->height()); if (supports_async_swap_) { - auto callback = base::BindOnce( - &SkiaOutputDeviceGL::DoFinishSwapBuffersAsync, - weak_ptr_factory_.GetWeakPtr(), surface_size, std::move(latency_info)); + auto callback = base::BindOnce(&SkiaOutputDeviceGL::DoFinishSwapBuffers, + weak_ptr_factory_.GetWeakPtr(), surface_size, + std::move(latency_info)); gl_surface_->CommitOverlayPlanesAsync(std::move(callback), std::move(feedback)); } else { - gfx::SwapResult result = - gl_surface_->CommitOverlayPlanes(std::move(feedback)); - DoFinishSwapBuffers(surface_size, std::move(latency_info), - gfx::SwapCompletionResult(result)); + FinishSwapBuffers( + gfx::SwapCompletionResult( + gl_surface_->CommitOverlayPlanes(std::move(feedback))), + surface_size, std::move(latency_info)); } } -void SkiaOutputDeviceGL::DoFinishSwapBuffersAsync( - const gfx::Size& size, - std::vector<ui::LatencyInfo> latency_info, - gfx::SwapCompletionResult result) { - DCHECK(!result.gpu_fence); - FinishSwapBuffers(std::move(result), size, latency_info); -} - void SkiaOutputDeviceGL::DoFinishSwapBuffers( const gfx::Size& size, std::vector<ui::LatencyInfo> latency_info, gfx::SwapCompletionResult result) { DCHECK(!result.gpu_fence); - - // Remove entries from |overlays_| for textures that weren't scheduled as an - // overlay this frame. - if (!overlays_.empty()) { - base::EraseIf(overlays_, [this](auto& entry) { - const gpu::Mailbox& mailbox = entry.first; - return !scheduled_overlay_mailboxes_.contains(mailbox); - }); - scheduled_overlay_mailboxes_.clear(); - } - FinishSwapBuffers(std::move(result), size, latency_info); } @@ -397,17 +333,15 @@ // Get GLImages for DC layer textures. bool success = true; for (size_t i = 0; i < DCLayerOverlay::kNumResources; ++i) { - const gpu::Mailbox& mailbox = dc_layer.mailbox[i]; - if (i > 0 && mailbox.IsZero()) + if (i > 0 && dc_layer.mailbox[i].IsZero()) break; - auto image = GetGLImageForMailbox(mailbox); + auto image = GetGLImageForMailbox(dc_layer.mailbox[i]); if (!image) { success = false; break; } - scheduled_overlay_mailboxes_.insert(mailbox); image->SetColorSpace(dc_layer.color_space); params.images[i] = std::move(image); } @@ -452,39 +386,38 @@ scoped_refptr<gl::GLImage> SkiaOutputDeviceGL::GetGLImageForMailbox( const gpu::Mailbox& mailbox) { - auto it = overlays_.find(mailbox); - if (it != overlays_.end()) - return it->second.GetImage(); - // TODO(crbug.com/1005306): Stop using MailboxManager for lookup once all // clients are using SharedImageInterface to create textures. // For example, the legacy mailbox still uses GL textures (no overlay) // and is still used. - if (!mailbox.IsSharedImage()) { - auto* texture_base = mailbox_manager_->ConsumeTexture(mailbox); - if (!texture_base) + auto* texture_base = mailbox_manager_->ConsumeTexture(mailbox); + if (!texture_base) { + auto overlay = + shared_image_representation_factory_->ProduceOverlay(mailbox); + if (!overlay) return nullptr; - DCHECK_EQ(texture_base->GetType(), gpu::TextureBase::Type::kPassthrough); - std::tie(it, std::ignore) = overlays_.try_emplace( - mailbox, - base::WrapRefCounted( - static_cast<gpu::gles2::TexturePassthrough*>(texture_base))); - return it->second.GetImage(); + // Return GLImage since the ScopedReadAccess isn't being held by anyone. + // TODO(crbug.com/1011555): Have SkiaOutputSurfaceImplOnGpu hold on to the + // ScopedReadAccess for overlays like it does for PromiseImage based + // resources. + std::unique_ptr<gpu::SharedImageRepresentationOverlay::ScopedReadAccess> + scoped_overlay_read_access = + overlay->BeginScopedReadAccess(/*need_gl_image=*/true); + DCHECK(scoped_overlay_read_access); + return scoped_overlay_read_access->gl_image(); } - auto overlay = shared_image_representation_factory_->ProduceOverlay(mailbox); - if (!overlay) - return nullptr; - - std::unique_ptr<gpu::SharedImageRepresentationOverlay::ScopedReadAccess> - scoped_overlay_read_access = - overlay->BeginScopedReadAccess(/*need_gl_image=*/true); - DCHECK(scoped_overlay_read_access); - - std::tie(it, std::ignore) = overlays_.try_emplace( - mailbox, std::move(overlay), std::move(scoped_overlay_read_access)); - return it->second.GetImage(); + if (texture_base->GetType() == gpu::TextureBase::Type::kPassthrough) { + gpu::gles2::TexturePassthrough* texture = + static_cast<gpu::gles2::TexturePassthrough*>(texture_base); + return texture->GetLevelImage(texture->target(), 0); + } else { + DCHECK_EQ(texture_base->GetType(), gpu::TextureBase::Type::kValidated); + gpu::gles2::Texture* texture = + static_cast<gpu::gles2::Texture*>(texture_base); + return texture->GetLevelImage(texture->target(), 0); + } } } // namespace viz
diff --git a/components/viz/service/display_embedder/skia_output_device_gl.h b/components/viz/service/display_embedder/skia_output_device_gl.h index aa3fe9f..edd572e 100644 --- a/components/viz/service/display_embedder/skia_output_device_gl.h +++ b/components/viz/service/display_embedder/skia_output_device_gl.h
@@ -8,8 +8,6 @@ #include <memory> #include <vector> -#include "base/containers/flat_map.h" -#include "base/containers/flat_set.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" @@ -69,18 +67,11 @@ void EndPaint() override; private: - class OverlayData; - - // Use instead of calling FinishSwapBuffers() directly. On Windows this cleans - // up old entries in |overlays_|. + // Used as callback for SwapBuffersAsync and PostSubBufferAsync to finish + // operation void DoFinishSwapBuffers(const gfx::Size& size, std::vector<ui::LatencyInfo> latency_info, gfx::SwapCompletionResult result); - // Used as callback for SwapBuffersAsync and PostSubBufferAsync to finish - // operation - void DoFinishSwapBuffersAsync(const gfx::Size& size, - std::vector<ui::LatencyInfo> latency_info, - gfx::SwapCompletionResult result); scoped_refptr<gl::GLImage> GetGLImageForMailbox(const gpu::Mailbox& mailbox); @@ -95,12 +86,6 @@ sk_sp<SkSurface> sk_surface_; - // Mailboxes of overlays scheduled in the current frame. - base::flat_set<gpu::Mailbox> scheduled_overlay_mailboxes_; - - // Holds references to overlay textures so they aren't destroyed while in use. - base::flat_map<gpu::Mailbox, OverlayData> overlays_; - uint64_t backbuffer_estimated_size_ = 0; base::WeakPtrFactory<SkiaOutputDeviceGL> weak_ptr_factory_{this};
diff --git a/components/viz/service/display_embedder/skia_output_device_vulkan.cc b/components/viz/service/display_embedder/skia_output_device_vulkan.cc index d68844e..12cfa7dd 100644 --- a/components/viz/service/display_embedder/skia_output_device_vulkan.cc +++ b/components/viz/service/display_embedder/skia_output_device_vulkan.cc
@@ -200,6 +200,8 @@ vk_image_info.fImageTiling = VK_IMAGE_TILING_OPTIMAL; vk_image_info.fImageLayout = scoped_write_->image_layout(); vk_image_info.fFormat = surface_format; + vk_image_info.fImageUsageFlags = scoped_write_->image_usage(); + vk_image_info.fSampleCount = 1; vk_image_info.fLevelCount = 1; vk_image_info.fCurrentQueueFamily = VK_QUEUE_FAMILY_IGNORED; vk_image_info.fProtected =
diff --git a/components/web_package/mojom/web_bundle_parser.mojom b/components/web_package/mojom/web_bundle_parser.mojom index ce98234..de20598 100644 --- a/components/web_package/mojom/web_bundle_parser.mojom +++ b/components/web_package/mojom/web_bundle_parser.mojom
@@ -4,7 +4,7 @@ module web_package.mojom; -import "mojo/public/mojom/base/file.mojom"; +import "mojo/public/mojom/base/read_only_file.mojom"; import "url/mojom/url.mojom"; // Factory interface to create WebBundleParser for the passed |file| @@ -12,7 +12,7 @@ interface WebBundleParserFactory { // Constructs a parser for the passed |file|. GetParserForFile(pending_receiver<WebBundleParser> receiver, - mojo_base.mojom.File file); + mojo_base.mojom.ReadOnlyFile file); // Constructs a parser for the passed |data_source|. GetParserForDataSource(pending_receiver<WebBundleParser> receiver,
diff --git a/content/browser/accessibility/accessibility_action_browsertest.cc b/content/browser/accessibility/accessibility_action_browsertest.cc index 3f24d421..6a103f4 100644 --- a/content/browser/accessibility/accessibility_action_browsertest.cc +++ b/content/browser/accessibility/accessibility_action_browsertest.cc
@@ -115,14 +115,14 @@ const std::string& name_or_value) { const std::string& name = node.GetStringAttribute(ax::mojom::StringAttribute::kName); - // Note that in the case of a text field, "BrowserAccessibility::GetValue" - // has the added functionality of computing the value of an ARIA text box - // from its inner text. + // Note that in the case of a text field, + // "BrowserAccessibility::GetValueForControl" has the added functionality + // of computing the value of an ARIA text box from its inner text. // // <div contenteditable="true" role="textbox">Hello world.</div> // Will expose no HTML value attribute, but some screen readers, such as // Jaws, VoiceOver and Talkback, require one to be computed. - const std::string& value = base::UTF16ToUTF8(node.GetValue()); + const std::string value = base::UTF16ToUTF8(node.GetValueForControl()); if (node.GetRole() == role && (name == name_or_value || value == name_or_value)) { return &node; @@ -427,8 +427,7 @@ BrowserAccessibility* target = FindNode(ax::mojom::Role::kTextField, "Answer"); ASSERT_NE(nullptr, target); - EXPECT_EQ("Before", - target->GetStringAttribute(ax::mojom::StringAttribute::kValue)); + EXPECT_EQ(base::ASCIIToUTF16("Before"), target->GetValueForControl()); AccessibilityNotificationWaiter waiter2(shell()->web_contents(), ui::kAXModeComplete, @@ -436,8 +435,7 @@ GetManager()->SetValue(*target, "After"); waiter2.WaitForNotification(); - EXPECT_EQ("After", - target->GetStringAttribute(ax::mojom::StringAttribute::kValue)); + EXPECT_EQ(base::ASCIIToUTF16("After"), target->GetValueForControl()); } IN_PROC_BROWSER_TEST_F(AccessibilityActionBrowserTest, TextareaSetValue) { @@ -448,8 +446,7 @@ BrowserAccessibility* target = FindNode(ax::mojom::Role::kTextField, "Answer"); ASSERT_NE(nullptr, target); - EXPECT_EQ("Before", - target->GetStringAttribute(ax::mojom::StringAttribute::kValue)); + EXPECT_EQ(base::ASCIIToUTF16("Before"), target->GetValueForControl()); AccessibilityNotificationWaiter waiter2(shell()->web_contents(), ui::kAXModeComplete, @@ -457,8 +454,7 @@ GetManager()->SetValue(*target, "Line1\nLine2"); waiter2.WaitForNotification(); - EXPECT_EQ("Line1\nLine2", - target->GetStringAttribute(ax::mojom::StringAttribute::kValue)); + EXPECT_EQ(base::ASCIIToUTF16("Line1\nLine2"), target->GetValueForControl()); // TODO(dmazzoni): On Android we use an ifdef to disable inline text boxes, // which contain all of the line break information. @@ -483,8 +479,7 @@ BrowserAccessibility* target = FindNode(ax::mojom::Role::kGenericContainer, "Answer"); ASSERT_NE(nullptr, target); - EXPECT_EQ("Before", - target->GetStringAttribute(ax::mojom::StringAttribute::kValue)); + EXPECT_EQ(base::ASCIIToUTF16("Before"), target->GetValueForControl()); AccessibilityNotificationWaiter waiter2( shell()->web_contents(), ui::kAXModeComplete, @@ -492,8 +487,7 @@ GetManager()->SetValue(*target, "Line1\nLine2"); waiter2.WaitForNotification(); - EXPECT_EQ("Line1\nLine2", - target->GetStringAttribute(ax::mojom::StringAttribute::kValue)); + EXPECT_EQ(base::ASCIIToUTF16("Line1\nLine2"), target->GetValueForControl()); // TODO(dmazzoni): On Android we use an ifdef to disable inline text boxes, // which contain all of the line break information.
diff --git a/content/browser/accessibility/accessibility_content_browsertest.cc b/content/browser/accessibility/accessibility_content_browsertest.cc index 302d73b..d2ade53 100644 --- a/content/browser/accessibility/accessibility_content_browsertest.cc +++ b/content/browser/accessibility/accessibility_content_browsertest.cc
@@ -113,14 +113,14 @@ const std::string& name_or_value) const { const std::string& name = node->GetStringAttribute(ax::mojom::StringAttribute::kName); - // Note that in the case of a text field, "BrowserAccessibility::GetValue" has - // the added functionality of computing the value of an ARIA text box from its - // inner text. + // Note that in the case of a text field, + // "BrowserAccessibility::GetValueForControl" has the added functionality of + // computing the value of an ARIA text box from its inner text. // // <div contenteditable="true" role="textbox">Hello world.</div> // Will expose no HTML value attribute, but some screen readers, such as Jaws, // VoiceOver and Talkback, require one to be computed. - const std::string& value = base::UTF16ToUTF8(node->GetValue()); + const std::string value = base::UTF16ToUTF8(node->GetValueForControl()); if (node->GetRole() == role && (name == name_or_value || value == name_or_value)) { return node;
diff --git a/content/browser/accessibility/accessibility_tree_formatter_android.cc b/content/browser/accessibility/accessibility_tree_formatter_android.cc index cb63d72..d6e72a1 100644 --- a/content/browser/accessibility/accessibility_tree_formatter_android.cc +++ b/content/browser/accessibility/accessibility_tree_formatter_android.cc
@@ -217,7 +217,7 @@ dict->SetBoolean("link", android_node->IsLink()); dict->SetBoolean("multiline", android_node->IsMultiLine()); dict->SetBoolean("multiselectable", android_node->IsMultiselectable()); - dict->SetBoolean("range", android_node->IsRangeType()); + dict->SetBoolean("range", android_node->GetData().IsRangeValueSupported()); dict->SetBoolean("password", android_node->IsPasswordField()); dict->SetBoolean("scrollable", android_node->IsScrollable()); dict->SetBoolean("selected", android_node->IsSelected());
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc index c51b7566..33c8a17 100644 --- a/content/browser/accessibility/accessibility_win_browsertest.cc +++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -469,15 +469,14 @@ const std::string& name_or_value) { const std::string& name = node.GetStringAttribute(ax::mojom::StringAttribute::kName); - // Note that in the case of a text field, "BrowserAccessibility::GetValue" has - // the added functionality of computing the value of an ARIA text box from its - // inner text. + // Note that in the case of a text field, + // "BrowserAccessibility::GetValueForControl" has the added functionality of + // computing the value of an ARIA text box from its inner text. // // <div contenteditable="true" role="textbox">Hello world.</div> // Will expose no HTML value attribute, but some screen readers, such as Jaws, // VoiceOver and Talkback, require one to be computed. - const std::string& value = - node.GetStringAttribute(ax::mojom::StringAttribute::kValue); + const std::string value = base::UTF16ToUTF8(node.GetValueForControl()); if (node.GetRole() == role && (name == name_or_value || value == name_or_value)) { return &node;
diff --git a/content/browser/accessibility/ax_platform_node_textprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textprovider_win_browsertest.cc index 1823e3d..89e1360 100644 --- a/content/browser/accessibility/ax_platform_node_textprovider_win_browsertest.cc +++ b/content/browser/accessibility/ax_platform_node_textprovider_win_browsertest.cc
@@ -130,14 +130,14 @@ const std::string& name_or_value) { const std::string& name = node.GetStringAttribute(ax::mojom::StringAttribute::kName); - // Note that in the case of a text field, "BrowserAccessibility::GetValue" - // has the added functionality of computing the value of an ARIA text box - // from its inner text. + // Note that in the case of a text field, + // "BrowserAccessibility::GetValueForControl" has the added functionality + // of computing the value of an ARIA text box from its inner text. // // <div contenteditable="true" role="textbox">Hello world.</div> // Will expose no HTML value attribute, but some screen readers, such as // Jaws, VoiceOver and Talkback, require one to be computed. - const std::string& value = base::UTF16ToUTF8(node.GetValue()); + const std::string value = base::UTF16ToUTF8(node.GetValueForControl()); if (node.GetRole() == role && (name == name_or_value || value == name_or_value)) { return &node;
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc index 563d565..21adc2b 100644 --- a/content/browser/accessibility/browser_accessibility.cc +++ b/content/browser/accessibility/browser_accessibility.cc
@@ -799,17 +799,6 @@ return bounds; } -base::string16 BrowserAccessibility::GetValue() const { - base::string16 value = - GetString16Attribute(ax::mojom::StringAttribute::kValue); - // Some screen readers like Jaws and VoiceOver require a value to be set in - // text fields with rich content, even though the same information is - // available on the children. - if (value.empty() && IsRichTextField()) - return BrowserAccessibility::GetInnerText(); - return value; -} - BrowserAccessibility* BrowserAccessibility::ApproximateHitTest( const gfx::Point& blink_screen_point) { // The best result found that's a child of this object. @@ -1099,6 +1088,10 @@ return base::UTF8ToUTF16(node()->GetInnerText()); } +base::string16 BrowserAccessibility::GetValueForControl() const { + return base::UTF8ToUTF16(node()->GetValueForControl()); +} + gfx::Rect BrowserAccessibility::RelativeToAbsoluteBounds( gfx::RectF bounds, const ui::AXCoordinateSystem coordinate_system,
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h index 9cf722b..134ce361 100644 --- a/content/browser/accessibility/browser_accessibility.h +++ b/content/browser/accessibility/browser_accessibility.h
@@ -235,21 +235,6 @@ const ui::AXClippingBehavior clipping_behavior, ui::AXOffscreenResult* offscreen_result = nullptr) const; - // Returns the value of a control, such as the value of a text field, a slider - // or a scrollbar. - // - // For text fields, computes the value of the field from its internal - // representation in the accessibility tree if necessary. - // - // This is to handle the cases such as ARIA textbox, where the value should - // be calculated from the object's inner text, as well as all text fields - // originating from Blink where the HTML value attribute cannot always be - // trusted. - // - // TODO(nektar): Move this method to AXNode when AXNodePosition and - // BrowserAccessibilityPosition are merged into one class. - virtual base::string16 GetValue() const; - // This is an approximate hit test that only uses the information in // the browser process to compute the correct result. It will not return // correct results in many cases of z-index, overflow, and absolute @@ -449,6 +434,7 @@ base::string16 GetHypertext() const override; bool SetHypertextSelection(int start_offset, int end_offset) override; base::string16 GetInnerText() const override; + base::string16 GetValueForControl() const override; gfx::Rect GetBoundsRect( const ui::AXCoordinateSystem coordinate_system, const ui::AXClippingBehavior clipping_behavior,
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index 802633f..7dc456d 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -91,29 +91,6 @@ manager->FireLocationChanged(this); } -base::string16 BrowserAccessibilityAndroid::GetValue() const { - base::string16 value = BrowserAccessibility::GetValue(); - - // Optionally replace entered password text with bullet characters - // based on a user preference. - if (IsPasswordField()) { - auto* manager = - static_cast<BrowserAccessibilityManagerAndroid*>(this->manager()); - if (manager->ShouldRespectDisplayedPasswordText()) { - // In the Chrome accessibility tree, the value of a password node is - // unobscured. However, if ShouldRespectDisplayedPasswordText() returns - // true we should try to expose whatever's actually visually displayed, - // whether that's the actual password or dots or whatever. To do this - // we rely on the password field's shadow dom. - value = BrowserAccessibility::GetInnerText(); - } else if (!manager->ShouldExposePasswordText()) { - value = base::string16(value.size(), ui::kSecurePasswordBullet); - } - } - - return value; -} - bool BrowserAccessibilityAndroid::IsCheckable() const { return GetData().HasCheckedState(); } @@ -257,14 +234,6 @@ return HasState(ax::mojom::State::kMultiselectable); } -bool BrowserAccessibilityAndroid::IsRangeType() const { - return (GetRole() == ax::mojom::Role::kProgressIndicator || - GetRole() == ax::mojom::Role::kMeter || - GetRole() == ax::mojom::Role::kScrollBar || - GetRole() == ax::mojom::Role::kSlider || - (GetRole() == ax::mojom::Role::kSplitter && IsFocusable())); -} - bool BrowserAccessibilityAndroid::IsReportingCheckable() const { // To communicate kMixed state Checkboxes, we will rely on state description, // so we will not report node as checkable to avoid duplicate utterances. @@ -278,7 +247,8 @@ bool BrowserAccessibilityAndroid::IsSeekControl() const { // Range types should have seek control options, except progress bars. - return IsRangeType() && (GetRole() != ax::mojom::Role::kProgressIndicator); + return GetData().IsRangeValueSupported() && + (GetRole() != ax::mojom::Role::kProgressIndicator); } bool BrowserAccessibilityAndroid::IsSelected() const { @@ -482,7 +452,7 @@ // First, always return the |value| attribute if this is an // input field. - base::string16 value = GetValue(); + base::string16 value = GetValueForControl(); if (ShouldExposeValueAsName()) return value; @@ -529,6 +499,29 @@ return text; } +base::string16 BrowserAccessibilityAndroid::GetValueForControl() const { + base::string16 value = BrowserAccessibility::GetValueForControl(); + + // Optionally replace entered password text with bullet characters + // based on a user preference. + if (IsPasswordField()) { + auto* manager = + static_cast<BrowserAccessibilityManagerAndroid*>(this->manager()); + if (manager->ShouldRespectDisplayedPasswordText()) { + // In the Chrome accessibility tree, the value of a password node is + // unobscured. However, if ShouldRespectDisplayedPasswordText() returns + // true we should try to expose whatever's actually visually displayed, + // whether that's the actual password or dots or whatever. To do this + // we rely on the password field's shadow dom. + value = BrowserAccessibility::GetInnerText(); + } else if (!manager->ShouldExposePasswordText()) { + value = base::string16(value.size(), ui::kSecurePasswordBullet); + } + } + + return value; +} + base::string16 BrowserAccessibilityAndroid::GetHint() const { std::vector<base::string16> strings; @@ -1292,7 +1285,7 @@ int BrowserAccessibilityAndroid::GetItemIndex() const { int index = 0; - if (IsRangeType()) { + if (GetData().IsRangeValueSupported()) { // Return a percentage here for live feedback in an AccessibilityEvent. // The exact value is returned in RangeCurrentValue. float min = GetFloatAttribute(ax::mojom::FloatAttribute::kMinValueForRange); @@ -1310,7 +1303,7 @@ int BrowserAccessibilityAndroid::GetItemCount() const { int count = 0; - if (IsRangeType()) { + if (GetData().IsRangeValueSupported()) { // An AccessibilityEvent can only return integer information about a // seek control, so we return a percentage. The real range is returned // in RangeMin and RangeMax. @@ -1595,8 +1588,9 @@ } int BrowserAccessibilityAndroid::GetEditableTextLength() const { - base::string16 value = GetValue(); - return value.length(); + if (IsTextField()) + return int{GetValueForControl().size()}; + return 0; } int BrowserAccessibilityAndroid::AndroidInputType() const { @@ -1894,7 +1888,7 @@ } bool BrowserAccessibilityAndroid::HasNonEmptyValue() const { - return IsTextField() && !GetValue().empty(); + return IsTextField() && !GetValueForControl().empty(); } bool BrowserAccessibilityAndroid::HasCharacterLocations() const { @@ -1952,18 +1946,22 @@ case ax::mojom::Role::kDate: case ax::mojom::Role::kDateTime: return true; + case ax::mojom::Role::kColorWell: + return false; default: break; } + if (GetData().IsRangeValueSupported()) + return false; + if (IsTextField()) return true; - if (GetValue().empty()) - return false; - - if (GetRole() == ax::mojom::Role::kPopUpButton) + if (GetRole() == ax::mojom::Role::kPopUpButton && + !GetValueForControl().empty()) { return true; + } return false; } @@ -1972,7 +1970,7 @@ BrowserAccessibility::OnDataChanged(); if (IsTextField()) { - base::string16 value = GetValue(); + base::string16 value = GetValueForControl(); if (value != new_value_) { old_value_ = new_value_; new_value_ = value;
diff --git a/content/browser/accessibility/browser_accessibility_android.h b/content/browser/accessibility/browser_accessibility_android.h index cc6f164..e99ea62b 100644 --- a/content/browser/accessibility/browser_accessibility_android.h +++ b/content/browser/accessibility/browser_accessibility_android.h
@@ -26,7 +26,6 @@ // Overrides from BrowserAccessibility. void OnDataChanged() override; void OnLocationChanged() override; - base::string16 GetValue() const override; bool IsCheckable() const; bool IsChecked() const; @@ -46,7 +45,6 @@ bool IsLink() const; bool IsMultiLine() const; bool IsMultiselectable() const; - bool IsRangeType() const; bool IsReportingCheckable() const; bool IsScrollable() const; bool IsSeekControl() const; @@ -85,6 +83,7 @@ bool IsChildOfLeaf() const override; bool IsLeaf() const override; base::string16 GetInnerText() const override; + base::string16 GetValueForControl() const override; base::string16 GetHint() const; std::string GetRoleString() const;
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index 0e8257d..b4486c1 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -1750,10 +1750,9 @@ } - (NSNumber*)numberOfCharacters { - if (![self instanceActive]) - return nil; - base::string16 value = _owner->GetValue(); - return [NSNumber numberWithUnsignedInt:value.size()]; + if ([self instanceActive] && _owner->IsTextField()) + return @(int{_owner->GetValueForControl().size()}); + return nil; } // The origin of this accessibility object in the page's document. @@ -1885,11 +1884,14 @@ // TODO(nektar): Merge this method with // |BrowserAccessibilityAndroid::CommonEndLengths|. - (content::AXTextEdit)computeTextEdit { + if (!_owner->IsTextField()) + return content::AXTextEdit(); + // Starting from macOS 10.11, if the user has edited some text we need to // dispatch the actual text that changed on the value changed notification. // We run this code on all macOS versions to get the highest test coverage. base::string16 oldValue = _oldValue; - base::string16 newValue = _owner->GetValue(); + base::string16 newValue = _owner->GetValueForControl(); _oldValue = newValue; if (oldValue.empty() && newValue.empty()) return content::AXTextEdit(); @@ -2517,6 +2519,10 @@ } return [NSNumber numberWithInt:value]; } else if (_owner->GetData().IsRangeValueSupported()) { + // Objects that support range values include progress bars, sliders, and + // steppers. Only the native value or aria-valuenow should be exposed, not + // the aria-valuetext. Aria-valuetext is exposed via + // "accessibilityValueDescription". float floatValue; if (_owner->GetFloatAttribute(ax::mojom::FloatAttribute::kValueForRange, &floatValue)) { @@ -2533,7 +2539,7 @@ green / 255., blue / 255.]; } - return base::SysUTF16ToNSString(_owner->GetValue()); + return base::SysUTF16ToNSString(_owner->GetValueForControl()); } - (NSNumber*)valueAutofillAvailable { @@ -2554,18 +2560,25 @@ //} - (NSString*)valueDescription { - if (![self instanceActive]) + if (![self instanceActive] || !_owner->GetData().IsRangeValueSupported()) return nil; - if (_owner) - return base::SysUTF16ToNSString(_owner->GetValue()); - return nil; + + // This method is only for exposing aria-valuetext to VoiceOver if present. + // Blink places the value of aria-valuetext in + // ax::mojom::StringAttribute::kValue for objects that support range values, + // i.e., progress bars, sliders and steppers. + return base::SysUTF8ToNSString( + _owner->GetStringAttribute(ax::mojom::StringAttribute::kValue)); } - (NSValue*)visibleCharacterRange { - if (![self instanceActive]) - return nil; - base::string16 value = _owner->GetValue(); - return [NSValue valueWithRange:NSMakeRange(0, value.size())]; + if ([self instanceActive] && _owner->IsTextField() && + !_owner->IsPasswordField()) { + return [NSValue + valueWithRange:NSMakeRange(0, + int{_owner->GetValueForControl().size()})]; + } + return nil; } - (NSArray*)visibleCells { @@ -2642,9 +2655,7 @@ if (![self instanceActive]) return nil; - base::string16 innerText = _owner->GetValue(); - if (innerText.empty()) - innerText = _owner->GetInnerText(); + base::string16 innerText = _owner->GetInnerText(); if (NSMaxRange(range) > innerText.length()) return nil; @@ -2659,9 +2670,7 @@ if (![self instanceActive]) return nil; - base::string16 innerText = _owner->GetValue(); - if (innerText.empty()) - innerText = _owner->GetInnerText(); + base::string16 innerText = _owner->GetInnerText(); if (NSMaxRange(range) > innerText.length()) return nil; @@ -2748,12 +2757,13 @@ if ([attribute isEqualToString:NSAccessibilityRangeForLineParameterizedAttribute]) { + if (!_owner->IsTextField()) + return nil; + int lineIndex = [(NSNumber*)parameter intValue]; const std::vector<int> lineBreaks = _owner->GetLineStartOffsets(); - base::string16 value = _owner->GetValue(); - if (value.empty()) - value = _owner->GetInnerText(); - int valueLength = static_cast<int>(value.size()); + base::string16 value = _owner->GetValueForControl(); + int valueLength = int{value.size()}; int lineCount = static_cast<int>(lineBreaks.size()) + 1; if (lineIndex < 0 || lineIndex >= lineCount)
diff --git a/content/browser/accessibility/browser_accessibility_cocoa_browsertest.mm b/content/browser/accessibility/browser_accessibility_cocoa_browsertest.mm index 7ba7665..a0d073ec 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa_browsertest.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa_browsertest.mm
@@ -551,4 +551,5 @@ EXPECT_NSEQ(@"AXRow", [row_nodes[1] role]); EXPECT_NSEQ(@"row2", [row_nodes[1] descriptionForAccessibility]); } + } // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc index d844523..82d9419 100644 --- a/content/browser/accessibility/browser_accessibility_com_win.cc +++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -1428,17 +1428,12 @@ // as the MSAA role. if (!win_attributes_->ia2_role) win_attributes_->ia2_role = win_attributes_->ia_role; - win_attributes_->ia2_state = ComputeIA2State(); win_attributes_->ia2_attributes = ComputeIA2Attributes(); - win_attributes_->name = owner()->GetNameAsString16(); - win_attributes_->description = owner()->GetString16Attribute(ax::mojom::StringAttribute::kDescription); - - win_attributes_->value = GetValue(); - + win_attributes_->value = GetValueForControl(); win_attributes_->ignored = owner()->IsIgnored(); }
diff --git a/content/browser/accessibility/browser_accessibility_mac_unittest.mm b/content/browser/accessibility/browser_accessibility_mac_unittest.mm index 4a417e2..482ea5b 100644 --- a/content/browser/accessibility/browser_accessibility_mac_unittest.mm +++ b/content/browser/accessibility/browser_accessibility_mac_unittest.mm
@@ -172,8 +172,13 @@ } TEST_F(BrowserAccessibilityMacTest, TestComputeTextEdit) { - BrowserAccessibility* owner = [accessibility_ owner]; - ASSERT_NE(nullptr, owner); + root_ = ui::AXNodeData(); + root_.id = 1; + root_.role = ax::mojom::Role::kTextField; + manager_.reset( + new BrowserAccessibilityManagerMac(MakeAXTreeUpdate(root_), nullptr)); + accessibility_.reset( + [ToBrowserAccessibilityCocoa(manager_->GetRoot()) retain]); // Insertion but no deletion.
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc index 0031785..46cd95a1 100644 --- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc +++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -126,14 +126,14 @@ const std::string& name_or_value) { const std::string& name = node.GetStringAttribute(ax::mojom::StringAttribute::kName); - // Note that in the case of a text field, "BrowserAccessibility::GetValue" - // has the added functionality of computing the value of an ARIA text box - // from its inner text. + // Note that in the case of a text field, + // "BrowserAccessibility::GetValueForControl" has the added functionality + // of computing the value of an ARIA text box from its inner text. // // <div contenteditable="true" role="textbox">Hello world.</div> // Will expose no HTML value attribute, but some screen readers, such as // Jaws, VoiceOver and Talkback, require one to be computed. - const std::string& value = base::UTF16ToUTF8(node.GetValue()); + const std::string& value = base::UTF16ToUTF8(node.GetValueForControl()); if ((name == name_or_value || value == name_or_value)) { return &node; } @@ -340,8 +340,7 @@ GetAttr(text, ax::mojom::StringAttribute::kHtmlTag).c_str()); EXPECT_EQ(0, GetIntAttr(text, ax::mojom::IntAttribute::kTextSelStart)); EXPECT_EQ(0, GetIntAttr(text, ax::mojom::IntAttribute::kTextSelEnd)); - EXPECT_STREQ("Hello, world.", - GetAttr(text, ax::mojom::StringAttribute::kValue).c_str()); + EXPECT_STREQ("Hello, world.", text->GetValueForControl().c_str()); // TODO(dmazzoni): as soon as more accessibility code is cross-platform, // this code should test that the accessible info is dynamically updated @@ -371,8 +370,7 @@ GetAttr(text, ax::mojom::StringAttribute::kHtmlTag).c_str()); EXPECT_EQ(0, GetIntAttr(text, ax::mojom::IntAttribute::kTextSelStart)); EXPECT_EQ(13, GetIntAttr(text, ax::mojom::IntAttribute::kTextSelEnd)); - EXPECT_STREQ("Hello, world.", - GetAttr(text, ax::mojom::StringAttribute::kValue).c_str()); + EXPECT_STREQ("Hello, world.", text->GetValueForControl().c_str()); } IN_PROC_BROWSER_TEST_F(CrossPlatformAccessibilityBrowserTest,
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.cc b/content/browser/accessibility/one_shot_accessibility_tree_search.cc index ab9e0e55..fad2c35 100644 --- a/content/browser/accessibility/one_shot_accessibility_tree_search.cc +++ b/content/browser/accessibility/one_shot_accessibility_tree_search.cc
@@ -21,18 +21,16 @@ // attributes that might be relevant for a text search. void GetNodeStrings(BrowserAccessibility* node, std::vector<base::string16>* strings) { - if (node->HasStringAttribute(ax::mojom::StringAttribute::kName)) - strings->push_back( - node->GetString16Attribute(ax::mojom::StringAttribute::kName)); - if (node->HasStringAttribute(ax::mojom::StringAttribute::kDescription)) - strings->push_back( - node->GetString16Attribute(ax::mojom::StringAttribute::kDescription)); - if (node->HasStringAttribute(ax::mojom::StringAttribute::kValue)) - strings->push_back( - node->GetString16Attribute(ax::mojom::StringAttribute::kValue)); - if (node->HasStringAttribute(ax::mojom::StringAttribute::kPlaceholder)) - strings->push_back( - node->GetString16Attribute(ax::mojom::StringAttribute::kPlaceholder)); + base::string16 value; + if (node->GetString16Attribute(ax::mojom::StringAttribute::kName, &value)) + strings->push_back(value); + if (node->GetString16Attribute(ax::mojom::StringAttribute::kDescription, + &value)) { + strings->push_back(value); + } + value = node->GetValueForControl(); + if (!value.empty()) + strings->push_back(value); } OneShotAccessibilityTreeSearch::OneShotAccessibilityTreeSearch(
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc index 3672f09..31121ef0 100644 --- a/content/browser/accessibility/web_contents_accessibility_android.cc +++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -840,7 +840,7 @@ env, obj, info, node->RowIndex(), node->RowSpan(), node->ColumnIndex(), node->ColumnSpan(), node->IsHeading()); } - if (node->IsRangeType()) { + if (node->GetData().IsRangeValueSupported()) { Java_WebContentsAccessibilityImpl_setAccessibilityNodeInfoRangeInfo( env, obj, info, node->AndroidRangeType(), node->RangeMin(), node->RangeMax(), node->RangeCurrentValue()); @@ -1300,7 +1300,7 @@ BrowserAccessibilityAndroid* android_node = static_cast<BrowserAccessibilityAndroid*>(node); - if (!android_node->IsRangeType()) + if (!android_node->GetData().IsRangeValueSupported()) return false; float min =
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_vk_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_aura_vk_browsertest.cc index 309df309..f3d1bbb 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_vk_browsertest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_vk_browsertest.cc
@@ -250,7 +250,7 @@ const std::string& name_or_value) { const std::string& name = node.GetStringAttribute(ax::mojom::StringAttribute::kName); - const std::string& value = base::UTF16ToUTF8(node.GetValue()); + const std::string value = base::UTF16ToUTF8(node.GetValueForControl()); if (node.GetRole() == role && (name == name_or_value || value == name_or_value)) { return &node;
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc index b9cfd23..bf4cf9f 100644 --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc
@@ -189,6 +189,9 @@ !sandboxed_data_dir.empty() && !single_process_mode && !g_force_in_process_storage_service; if (oop_storage_enabled) { + DCHECK(sandboxed_data_dir.IsAbsolute()) + << "Storage Service data directory must be an absolute path, but \"" + << sandboxed_data_dir << "\" is not an absolute path."; remote = ServiceProcessHost::Launch<storage::mojom::StorageService>( ServiceProcessHost::Options() .WithDisplayName("Storage Service")
diff --git a/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java b/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java index 336e396..242595f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java
@@ -30,7 +30,7 @@ import org.chromium.mojo.system.Core; import org.chromium.mojo.system.MojoException; import org.chromium.mojo.system.impl.CoreImpl; -import org.chromium.mojo_base.mojom.File; +import org.chromium.mojo_base.mojom.ReadOnlyFile; import org.chromium.services.service_manager.InterfaceFactory; import java.io.IOException; @@ -163,7 +163,7 @@ // Post synchronous font request to background worker thread. PostTask.postTask(TaskTraits.USER_BLOCKING, () -> { - File file = null; + ReadOnlyFile file = null; ParcelFileDescriptor fileDescriptor = tryFetchFont(fontUniqueName); if (fileDescriptor == null) { @@ -171,12 +171,12 @@ mExpectedFonts.remove(fontUniqueName); } else { // Wrap file descriptor as an opened Mojo file handle. - file = new File(); + file = new ReadOnlyFile(); file.fd = core.wrapFileDescriptor(fileDescriptor); file.async = false; } - final File result = file; + final ReadOnlyFile result = file; RecordHistogram.recordTimesHistogram(MATCH_LOCAL_FONT_BY_UNIQUE_NAME_HISTOGRAM, SystemClock.elapsedRealtime() - startTimeMs); executor.execute(() -> callback.call(result));
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index 56e30e0..4f9381f 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h
@@ -1700,9 +1700,9 @@ int64_t recv_bytes, int64_t sent_bytes); - // Returns the path to a root directory to which sandboxed out-of-process - // Storage Service instances should be confined. By default this is empty, - // and the browser cannot create sandboxed Storage Service instances. + // Returns the absolute path to a directory in which sandboxed out-of-process + // Storage Service instances should be confined. By default this is empty, and + // the browser cannot create sandboxed Storage Service instances. virtual base::FilePath GetSandboxedStorageServiceDataDirectory(); // Returns true if the audio service should be sandboxed. false otherwise.
diff --git a/content/public/renderer/render_view.h b/content/public/renderer/render_view.h index 6db89cd..81f191f4 100644 --- a/content/public/renderer/render_view.h +++ b/content/public/renderer/render_view.h
@@ -7,9 +7,6 @@ #include <stddef.h> -#include <string> - -#include "base/strings/string16.h" #include "build/build_config.h" #include "content/common/content_export.h" #include "ipc/ipc_sender.h" @@ -76,14 +73,6 @@ // Returns the associated WebView. May return NULL when the view is closing. virtual blink::WebView* GetWebView() = 0; - // Whether content state (such as form state, scroll position and page - // contents) should be sent to the browser immediately. This is normally - // false, but set to true by some tests. - virtual bool GetContentStateImmediately() = 0; - - // Returns |renderer_preferences_.accept_languages| value. - virtual const std::string& GetAcceptLanguages() = 0; - protected: ~RenderView() override {}
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index b292cfd..b431212 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -478,11 +478,6 @@ // RenderWidgetOwnerDelegate ----------------------------------------- -void RenderViewImpl::SetActiveForWidget(bool active) { - if (GetWebView()) - GetWebView()->SetIsActive(active); -} - bool RenderViewImpl::SupportsMultipleWindowsForWidget() { return webview_->GetWebPreferences().supports_multiple_windows; } @@ -899,10 +894,6 @@ return true; } -const std::string& RenderViewImpl::GetAcceptLanguages() { - return renderer_preferences_.accept_languages; -} - blink::WebString RenderViewImpl::AcceptLanguages() { return WebString::FromUTF8(renderer_preferences_.accept_languages); } @@ -942,10 +933,6 @@ return webview_; } -bool RenderViewImpl::GetContentStateImmediately() { - return send_content_state_immediately_; -} - void RenderViewImpl::OnSetRendererPrefs( const blink::mojom::RendererPreferences& renderer_prefs) { std::string old_accept_languages = renderer_preferences_.accept_languages; @@ -999,11 +986,6 @@ GetWebView()->CancelPagePopup(); } -void RenderViewImpl::SetPageFrozen(bool frozen) { - if (GetWebView()) - GetWebView()->SetPageFrozen(frozen); -} - #if defined(OS_ANDROID) void RenderViewImpl::SuspendVideoCaptureDevices(bool suspend) { if (!main_render_frame_)
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 0fe67786..427d2004 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h
@@ -172,10 +172,6 @@ // RenderView is the currently active RenderView of a WebContents. unsigned GetLocalSessionHistoryLengthForTesting() const; - void UpdateBrowserControlsState(BrowserControlsState constraints, - BrowserControlsState current, - bool animate); - // Registers a watcher to observe changes in the // blink::mojom::RendererPreferences. void RegisterRendererPreferenceWatcher( @@ -229,17 +225,11 @@ void SetBlinkPreferences( const blink::web_pref::WebPreferences& preferences) override; blink::WebView* GetWebView() override; - bool GetContentStateImmediately() override; - const std::string& GetAcceptLanguages() override; // Please do not add your stuff randomly to the end here. If there is an // appropriate section, add it there. If not, there are some random functions // nearer to the top you can add it to. - base::WeakPtr<RenderViewImpl> GetWeakPtr() { - return weak_ptr_factory_.GetWeakPtr(); - } - bool renderer_wide_named_frame_lookup() { return renderer_wide_named_frame_lookup_; } @@ -325,7 +315,6 @@ // RenderWidgetDelegate implementation ---------------------------------- - void SetActiveForWidget(bool active) override; bool SupportsMultipleWindowsForWidget() override; void DidCommitCompositorFrameForWidget() override; @@ -341,28 +330,9 @@ static WindowOpenDisposition NavigationPolicyToDisposition( blink::WebNavigationPolicy policy); - // IPC message handlers ------------------------------------------------------ - // - // The documentation for these functions should be in - // content/common/*_messages.h for the message that the function is handling. - void OnExecuteEditCommand(const std::string& name, const std::string& value); - void OnAllowScriptToClose(bool script_can_close); - void OnCancelDownload(int32_t download_id); - - void OnDeterminePageLanguage(); - void OnDisableScrollbarsForSmallWindows( - const gfx::Size& disable_scrollbars_size_limit); void OnMoveOrResizeStarted(); - void OnExitFullscreen(); void OnSetRendererPrefs( const blink::mojom::RendererPreferences& renderer_prefs); - void OnSuppressDialogsUntilSwapOut(); - - // Page message handlers ----------------------------------------------------- - void SetPageFrozen(bool frozen); - - // Adding a new message handler? Please add it in alphabetical order above - // and put it in the same position in the .cc file. // Misc private functions ---------------------------------------------------- @@ -383,15 +353,6 @@ // update to inform the browser process. void SendFrameStateUpdates(); - // RenderFrameImpl accessible state ------------------------------------------ - // The following section is the set of methods that RenderFrameImpl needs - // to access RenderViewImpl state. The set of state variables are page-level - // specific, so they don't belong in RenderFrameImpl and should remain in - // this object. - base::ObserverList<RenderViewObserver>::Unchecked& observers() { - return observers_; - } - // Platform specific theme preferences if any are updated here. #if defined(OS_WIN) void UpdateThemePrefs();
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc index 469883c..c6ac08e8 100644 --- a/content/renderer/render_widget.cc +++ b/content/renderer/render_widget.cc
@@ -339,11 +339,6 @@ layer_tree_host_->SetNeedsCommitWithForcedRedraw(); } -void RenderWidget::SetActive(bool active) { - if (delegate()) - delegate()->SetActiveForWidget(active); -} - void RenderWidget::DidCommitCompositorFrame(base::TimeTicks commit_start_time) { if (delegate()) delegate()->DidCommitCompositorFrameForWidget();
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h index 03b3fb4..0b42c12 100644 --- a/content/renderer/render_widget.h +++ b/content/renderer/render_widget.h
@@ -233,8 +233,6 @@ void DidNavigate(ukm::SourceId source_id, const GURL& url); - void SetActive(bool active); - // Forces a redraw and invokes the callback once the frame's been displayed // to the user in the display compositor. using PresentationTimeCallback =
diff --git a/content/renderer/render_widget_delegate.h b/content/renderer/render_widget_delegate.h index 12df7a98..08247c6 100644 --- a/content/renderer/render_widget_delegate.h +++ b/content/renderer/render_widget_delegate.h
@@ -18,9 +18,6 @@ public: virtual ~RenderWidgetDelegate() = default; - // See comment in RenderWidgetHost::SetActive(). - virtual void SetActiveForWidget(bool active) = 0; - // Returns whether multiple windows are allowed for the widget. If true, then // Show() may be called more than once. virtual bool SupportsMultipleWindowsForWidget() = 0;
diff --git a/content/renderer/webgraphicscontext3d_provider_impl.cc b/content/renderer/webgraphicscontext3d_provider_impl.cc index 48db7ae3..f8822bad 100644 --- a/content/renderer/webgraphicscontext3d_provider_impl.cc +++ b/content/renderer/webgraphicscontext3d_provider_impl.cc
@@ -185,7 +185,7 @@ std::make_unique<cc::GpuImageDecodeCache>( provider_.get(), use_transfer_cache, color_type, kMaxWorkingSetBytes, provider_->ContextCapabilities().max_texture_size, - cc::PaintImage::kDefaultGeneratorClientId)); + cc::PaintImage::kDefaultGeneratorClientId, nullptr)); DCHECK(insertion_result.second); cache_iterator = insertion_result.first; return cache_iterator->second.get();
diff --git a/content/test/data/accessibility/aria/aria-orientation-expected-android.txt b/content/test/data/accessibility/aria/aria-orientation-expected-android.txt index 5ebdabd5..1d2edbf4 100644 --- a/content/test/data/accessibility/aria/aria-orientation-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-orientation-expected-android.txt
@@ -14,12 +14,12 @@ ++android.view.View role_description='radio group' ++android.view.View role_description='radio group' ++android.view.View role_description='radio group' -++android.view.View role_description='scroll bar' clickable range item_index=50 item_count=100 range_max=100 range_current_value=50 -++android.view.View role_description='scroll bar' clickable range item_index=50 item_count=100 range_max=100 range_current_value=50 -++android.view.View role_description='scroll bar' clickable range item_index=50 item_count=100 range_max=100 range_current_value=50 -++android.widget.SeekBar role_description='slider' clickable range item_index=50 item_count=100 range_max=100 range_current_value=50 -++android.widget.SeekBar role_description='slider' clickable range item_index=50 item_count=100 range_max=100 range_current_value=50 -++android.widget.SeekBar role_description='slider' clickable range item_index=50 item_count=100 range_max=100 range_current_value=50 +++android.view.View role_description='scroll bar' clickable range name='50' item_index=50 item_count=100 range_max=100 range_current_value=50 +++android.view.View role_description='scroll bar' clickable range name='50' item_index=50 item_count=100 range_max=100 range_current_value=50 +++android.view.View role_description='scroll bar' clickable range name='50' item_index=50 item_count=100 range_max=100 range_current_value=50 +++android.widget.SeekBar role_description='slider' clickable range name='50' item_index=50 item_count=100 range_max=100 range_current_value=50 +++android.widget.SeekBar role_description='slider' clickable range name='50' item_index=50 item_count=100 range_max=100 range_current_value=50 +++android.widget.SeekBar role_description='slider' clickable range name='50' item_index=50 item_count=100 range_max=100 range_current_value=50 ++android.view.View role_description='splitter' ++android.view.View role_description='splitter' ++android.view.View role_description='splitter' @@ -32,6 +32,6 @@ ++android.view.View role_description='tree' collection hierarchical ++android.view.View role_description='tree' collection hierarchical ++android.view.View role_description='tree' collection hierarchical -++android.widget.GridView role_description='tree grid' collection -++android.widget.GridView role_description='tree grid' collection -++android.widget.GridView role_description='tree grid' collection +++android.widget.GridView role_description='tree grid' clickable collection +++android.widget.GridView role_description='tree grid' clickable collection +++android.widget.GridView role_description='tree grid' clickable collection
diff --git a/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt b/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt index 5bee9ea2..9b3b8ad4 100644 --- a/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-progressbar-expected-android.txt
@@ -1,4 +1,4 @@ android.webkit.WebView focusable focused scrollable -++android.widget.ProgressBar role_description='progress indicator' range item_index=5 item_count=100 range_min=1 range_max=37 range_current_value=3 +++android.widget.ProgressBar role_description='progress indicator' range name='3' item_index=5 item_count=100 range_min=1 range_max=37 range_current_value=3 ++android.widget.ProgressBar role_description='progress indicator' range name='three' item_index=2 item_count=100 range_min=1 range_max=96 range_current_value=3 -++android.widget.ProgressBar role_description='progress indicator' range item_count=100 range_max=10 \ No newline at end of file +++android.widget.ProgressBar role_description='progress indicator' range item_count=100 range_max=10
diff --git a/content/test/data/accessibility/aria/aria-readonly-expected-android.txt b/content/test/data/accessibility/aria/aria-readonly-expected-android.txt index 1ef7302..f18f609 100644 --- a/content/test/data/accessibility/aria/aria-readonly-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-readonly-expected-android.txt
@@ -16,8 +16,8 @@ ++android.widget.ListView role_description='list box' clickable collection disabled name='Readonly listbox' ++android.view.View role_description='radio group' disabled name='Readonly radiogroup' ++android.widget.SeekBar role_description='slider' clickable disabled range name='Readonly slider' item_index=50 item_count=100 range_max=100 range_current_value=50 -++android.widget.EditText role_description='spin button' clickable disabled name='Readonly spinbutton' +++android.widget.EditText role_description='spin button' clickable disabled range name='Readonly spinbutton' item_count=100 ++android.view.MenuItem role_description='checkbox' checkable clickable disabled name='Readonly menuitemcheckbox' ++android.view.MenuItem role_description='radio button' checkable clickable disabled name='Readonly menuitemradio' ++android.widget.EditText role_description='search text field' clickable disabled editable_text hint='Readonly searchbox' -++android.widget.CheckBox role_description='switch' checkable clickable disabled name='Readonly switch' \ No newline at end of file +++android.widget.CheckBox role_description='switch' checkable clickable disabled name='Readonly switch'
diff --git a/content/test/data/accessibility/aria/aria-scrollbar-expected-android.txt b/content/test/data/accessibility/aria/aria-scrollbar-expected-android.txt index a067574..66707e3 100644 --- a/content/test/data/accessibility/aria/aria-scrollbar-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-scrollbar-expected-android.txt
@@ -1,3 +1,3 @@ android.webkit.WebView focusable focused scrollable -++android.view.View role_description='scroll bar' clickable focusable range item_index=55 item_count=100 range_max=100 range_current_value=55 -++android.view.View role_description='scroll bar' clickable focusable range item_index=55 item_count=100 range_max=100 range_current_value=55 \ No newline at end of file +++android.view.View role_description='scroll bar' clickable focusable range name='55' item_index=55 item_count=100 range_max=100 range_current_value=55 +++android.view.View role_description='scroll bar' clickable focusable range name='55' item_index=55 item_count=100 range_max=100 range_current_value=55
diff --git a/content/test/data/accessibility/aria/aria-separator-expected-android.txt b/content/test/data/accessibility/aria/aria-separator-expected-android.txt index 874bf36..2d4f74e 100644 --- a/content/test/data/accessibility/aria/aria-separator-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-separator-expected-android.txt
@@ -1,5 +1,5 @@ android.webkit.WebView focusable focused scrollable ++android.widget.TextView name='Before' ++android.view.View role_description='splitter' -++android.view.View role_description='splitter' clickable focusable range item_count=100 range_min=1 range_max=3 range_current_value=1 -++android.widget.TextView name='After' \ No newline at end of file +++android.view.View role_description='splitter' clickable focusable range name='1' item_count=100 range_min=1 range_max=3 range_current_value=1 +++android.widget.TextView name='After'
diff --git a/content/test/data/accessibility/aria/aria-slider-expected-android.txt b/content/test/data/accessibility/aria/aria-slider-expected-android.txt index ef9c424..49e12e1 100644 --- a/content/test/data/accessibility/aria/aria-slider-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-slider-expected-android.txt
@@ -1,2 +1,2 @@ android.webkit.WebView focusable focused scrollable -++android.widget.SeekBar role_description='slider' clickable range item_index=44 item_count=100 range_min=1 range_max=10 range_current_value=5 \ No newline at end of file +++android.widget.SeekBar role_description='slider' clickable range name='5' item_index=44 item_count=100 range_min=1 range_max=10 range_current_value=5
diff --git a/content/test/data/accessibility/aria/aria-spinbutton-expected-android.txt b/content/test/data/accessibility/aria/aria-spinbutton-expected-android.txt index 6c8e6bc6..6391da2a 100644 --- a/content/test/data/accessibility/aria/aria-spinbutton-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-spinbutton-expected-android.txt
@@ -1,3 +1,3 @@ android.webkit.WebView focusable focused scrollable -++android.widget.EditText role_description='spin button' clickable focusable name='Inner text' range_current_value=5 -++android.widget.EditText role_description='spin button' clickable focusable name='Inner text' range_min=1 range_max=10 range_current_value=5 +++android.widget.EditText role_description='spin button' clickable focusable range name='5' item_count=100 range_current_value=5 +++android.widget.EditText role_description='spin button' clickable focusable range name='5' item_index=44 item_count=100 range_min=1 range_max=10 range_current_value=5
diff --git a/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt b/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt index e9e15b6..8a3d42a 100644 --- a/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-treegrid-expected-android.txt
@@ -1,10 +1,10 @@ android.webkit.WebView focusable focused scrollable -++android.widget.GridView role_description='tree grid' collection row_count=2 column_count=1 +++android.widget.GridView role_description='tree grid' clickable collection row_count=2 column_count=1 ++++android.view.View ++++++android.view.View collection_item name='Cell at level 1' row_span=1 column_span=1 ++++android.view.View ++++++android.view.View collection_item name='Cell at level 2' row_index=1 row_span=1 column_span=1 -++android.widget.GridView role_description='tree grid' collection row_count=1 column_count=1 +++android.widget.GridView role_description='tree grid' clickable collection row_count=1 column_count=1 ++++android.view.View ++++++android.view.View ++++++++android.view.View collection_item name='Cell at level 1' row_span=1 column_span=1
diff --git a/content/test/data/accessibility/aria/aria-valuemax-expected-android.txt b/content/test/data/accessibility/aria/aria-valuemax-expected-android.txt index ac771216..39c35ec 100644 --- a/content/test/data/accessibility/aria/aria-valuemax-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-valuemax-expected-android.txt
@@ -1,5 +1,5 @@ android.webkit.WebView focusable focused scrollable -++android.widget.ProgressBar role_description='progress indicator' range item_index=50 item_count=100 range_min=1 range_max=101 range_current_value=51 -++android.view.View role_description='scroll bar' clickable range item_index=50 item_count=100 range_min=2 range_max=102 range_current_value=52 -++android.widget.SeekBar role_description='slider' clickable range item_index=50 item_count=100 range_min=3 range_max=103 range_current_value=53 -++android.widget.EditText role_description='spin button' clickable name='Spin' range_min=4 range_max=104 range_current_value=54 \ No newline at end of file +++android.widget.ProgressBar role_description='progress indicator' range name='51' item_index=50 item_count=100 range_min=1 range_max=101 range_current_value=51 +++android.view.View role_description='scroll bar' clickable range name='52' item_index=50 item_count=100 range_min=2 range_max=102 range_current_value=52 +++android.widget.SeekBar role_description='slider' clickable range name='53' item_index=50 item_count=100 range_min=3 range_max=103 range_current_value=53 +++android.widget.EditText role_description='spin button' clickable range name='54' item_index=50 item_count=100 range_min=4 range_max=104 range_current_value=54
diff --git a/content/test/data/accessibility/aria/aria-valuemin-expected-android.txt b/content/test/data/accessibility/aria/aria-valuemin-expected-android.txt index ac771216..39c35ec 100644 --- a/content/test/data/accessibility/aria/aria-valuemin-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-valuemin-expected-android.txt
@@ -1,5 +1,5 @@ android.webkit.WebView focusable focused scrollable -++android.widget.ProgressBar role_description='progress indicator' range item_index=50 item_count=100 range_min=1 range_max=101 range_current_value=51 -++android.view.View role_description='scroll bar' clickable range item_index=50 item_count=100 range_min=2 range_max=102 range_current_value=52 -++android.widget.SeekBar role_description='slider' clickable range item_index=50 item_count=100 range_min=3 range_max=103 range_current_value=53 -++android.widget.EditText role_description='spin button' clickable name='Spin' range_min=4 range_max=104 range_current_value=54 \ No newline at end of file +++android.widget.ProgressBar role_description='progress indicator' range name='51' item_index=50 item_count=100 range_min=1 range_max=101 range_current_value=51 +++android.view.View role_description='scroll bar' clickable range name='52' item_index=50 item_count=100 range_min=2 range_max=102 range_current_value=52 +++android.widget.SeekBar role_description='slider' clickable range name='53' item_index=50 item_count=100 range_min=3 range_max=103 range_current_value=53 +++android.widget.EditText role_description='spin button' clickable range name='54' item_index=50 item_count=100 range_min=4 range_max=104 range_current_value=54
diff --git a/content/test/data/accessibility/aria/aria-valuenow-expected-android.txt b/content/test/data/accessibility/aria/aria-valuenow-expected-android.txt index b2bf7df2..d6fbc4e8 100644 --- a/content/test/data/accessibility/aria/aria-valuenow-expected-android.txt +++ b/content/test/data/accessibility/aria/aria-valuenow-expected-android.txt
@@ -1,2 +1,2 @@ android.webkit.WebView focusable focused scrollable -++android.widget.ProgressBar role_description='progress indicator' range item_count=100 range_current_value=3 \ No newline at end of file +++android.widget.ProgressBar role_description='progress indicator' range name='3' item_count=100 range_current_value=3
diff --git a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt index 86bf5ac1..2338f66 100644 --- a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt +++ b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-mac.txt
@@ -6,5 +6,5 @@ ++++AXGroup AXTitle='<newline>' ++++AXTextArea AXValue='But this one is.' ++++++AXStaticText AXValue='But this one is.' -++++AXGroup AXValue='So is this one.' +++++AXGroup ++++++AXStaticText AXValue='So is this one.'
diff --git a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt index a74662b..4f7b7de9 100644 --- a/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt +++ b/content/test/data/accessibility/html/contenteditable-with-embedded-contenteditables-expected-win.txt
@@ -6,5 +6,5 @@ ++++ROLE_SYSTEM_WHITESPACE name='<newline>' ia2_hypertext='<newline>' n_selections=0 ++++IA2_ROLE_PARAGRAPH value='But this one is.' FOCUSABLE IA2_STATE_EDITABLE IA2_STATE_MULTI_LINE ia2_hypertext='But this one is.' n_selections=0 ++++++ROLE_SYSTEM_STATICTEXT name='But this one is.' IA2_STATE_EDITABLE ia2_hypertext='But this one is.' n_selections=0 -++++IA2_ROLE_PARAGRAPH value='So is this one.' IA2_STATE_EDITABLE ia2_hypertext='So is this one.' n_selections=0 +++++IA2_ROLE_PARAGRAPH IA2_STATE_EDITABLE ia2_hypertext='So is this one.' n_selections=0 ++++++ROLE_SYSTEM_STATICTEXT name='So is this one.' IA2_STATE_EDITABLE ia2_hypertext='So is this one.' n_selections=0
diff --git a/content/test/data/accessibility/html/input-number-expected-android.txt b/content/test/data/accessibility/html/input-number-expected-android.txt index 28fe070..eeff4e8 100644 --- a/content/test/data/accessibility/html/input-number-expected-android.txt +++ b/content/test/data/accessibility/html/input-number-expected-android.txt
@@ -1,4 +1,4 @@ android.webkit.WebView focusable focused scrollable ++android.view.View -++++android.widget.EditText role_description='spin button' clickable editable_text focusable has_non_empty_value name='1' input_type=2 range_current_value=1 text_change_added_count=1 -++++android.widget.EditText role_description='spin button' clickable editable_text focusable has_non_empty_value name='6' input_type=2 range_min=5 range_max=10 range_current_value=6 text_change_added_count=1 +++++android.widget.EditText role_description='spin button' clickable editable_text focusable has_non_empty_value range name='1' item_count=100 input_type=2 range_current_value=1 text_change_added_count=1 +++++android.widget.EditText role_description='spin button' clickable editable_text focusable has_non_empty_value range name='6' item_index=20 item_count=100 input_type=2 range_min=5 range_max=10 range_current_value=6 text_change_added_count=1
diff --git a/content/test/data/accessibility/html/input-types-expected-android.txt b/content/test/data/accessibility/html/input-types-expected-android.txt index abca36dc..7d97f1e 100644 --- a/content/test/data/accessibility/html/input-types-expected-android.txt +++ b/content/test/data/accessibility/html/input-types-expected-android.txt
@@ -21,7 +21,7 @@ ++++++android.widget.Button role_description='button' clickable focusable name='Image:' ++++android.view.View ++++++android.widget.TextView name='Number: ' -++++++android.widget.EditText role_description='spin button' clickable editable_text focusable hint='Number:' input_type=2 +++++++android.widget.EditText role_description='spin button' clickable editable_text focusable range name='Number:' item_count=100 input_type=2 ++++android.view.View ++++++android.widget.TextView name='Password: ' ++++++android.widget.EditText clickable editable_text focusable password hint='Password:' input_type=225 @@ -46,4 +46,4 @@ ++++++android.widget.EditText clickable editable_text focusable hint='Text:' input_type=1 ++++android.view.View ++++++android.widget.TextView name='Url: ' -++++++android.widget.EditText clickable editable_text focusable hint='Url:' input_type=17 \ No newline at end of file +++++++android.widget.EditText clickable editable_text focusable hint='Url:' input_type=17
diff --git a/content/test/data/accessibility/html/meter-expected-android.txt b/content/test/data/accessibility/html/meter-expected-android.txt index 7118047..bba8c7e 100644 --- a/content/test/data/accessibility/html/meter-expected-android.txt +++ b/content/test/data/accessibility/html/meter-expected-android.txt
@@ -1,3 +1,3 @@ android.webkit.WebView focusable focused scrollable ++android.view.View -++++android.widget.ProgressBar role_description='meter' range item_index=11 item_count=100 range_min=1 range_max=10 range_current_value=2 \ No newline at end of file +++++android.widget.ProgressBar role_description='meter' range name='2' item_index=11 item_count=100 range_min=1 range_max=10 range_current_value=2
diff --git a/content/test/data/accessibility/html/optgroup-expected-android.txt b/content/test/data/accessibility/html/optgroup-expected-android.txt index 99f4ce6..78a997d7 100644 --- a/content/test/data/accessibility/html/optgroup-expected-android.txt +++ b/content/test/data/accessibility/html/optgroup-expected-android.txt
@@ -1,7 +1,7 @@ android.webkit.WebView focusable focused scrollable ++android.view.View ++++android.widget.Spinner role_description='pop up button' clickable focusable -++++++android.view.View clickable invisible +++++++android.view.View invisible ++++++++android.view.View clickable focusable invisible name='One' ++++++++android.view.View clickable focusable invisible name='Two' item_index=1 row_index=1 ++++++++android.view.View clickable focusable invisible name='Three' item_index=2 row_index=2
diff --git a/content/test/data/accessibility/html/output-expected-android.txt b/content/test/data/accessibility/html/output-expected-android.txt index 5ecae8e..7fc3b7f 100644 --- a/content/test/data/accessibility/html/output-expected-android.txt +++ b/content/test/data/accessibility/html/output-expected-android.txt
@@ -1,7 +1,7 @@ android.webkit.WebView focusable focused scrollable ++android.view.View -++++android.widget.EditText role_description='spin button' clickable editable_text focusable input_type=2 +++++android.widget.EditText role_description='spin button' clickable editable_text focusable range item_count=100 input_type=2 ++++android.widget.TextView name=' + ' -++++android.widget.EditText role_description='spin button' clickable editable_text focusable input_type=2 +++++android.widget.EditText role_description='spin button' clickable editable_text focusable range item_count=100 input_type=2 ++++android.widget.TextView name=' =' -++++android.view.View role_description='status' live_region_type=1 \ No newline at end of file +++++android.view.View role_description='status' live_region_type=1
diff --git a/content/test/data/accessibility/html/progress-expected-android.txt b/content/test/data/accessibility/html/progress-expected-android.txt index d8dc5c8..edf860f 100644 --- a/content/test/data/accessibility/html/progress-expected-android.txt +++ b/content/test/data/accessibility/html/progress-expected-android.txt
@@ -1,4 +1,4 @@ android.webkit.WebView focusable focused scrollable ++android.view.View -++++android.widget.ProgressBar role_description='progress indicator' range item_index=22 item_count=100 range_max=100 range_current_value=22 +++++android.widget.ProgressBar role_description='progress indicator' range name='22' item_index=22 item_count=100 range_max=100 range_current_value=22 ++++android.widget.ProgressBar role_description='progress indicator' range item_count=100 range_max=1
diff --git a/content/web_test/renderer/test_runner.cc b/content/web_test/renderer/test_runner.cc index 3cf443f..4036f6b 100644 --- a/content/web_test/renderer/test_runner.cc +++ b/content/web_test/renderer/test_runner.cc
@@ -3156,7 +3156,11 @@ // This path simulates losing focus on the window, without moving it to // another window. if (widget->GetWebWidget()->HasFocus()) { - widget->SetActive(false); + auto* view_proxy = frame_proxy->GetWebViewTestProxy(); + // TODO(dtapuska): We should call the exact IPC the browser + // calls. ie. WebFrameWidgetBase::SetActive but that isn't + // exposed outside of blink. + view_proxy->GetWebView()->SetIsActive(false); widget->GetWebWidget()->SetFocus(false); } return; @@ -3167,7 +3171,11 @@ if (other_main_frame != main_frame) { RenderWidget* other_widget = other_main_frame->GetLocalRootRenderWidget(); if (other_widget->GetWebWidget()->HasFocus()) { - other_widget->SetActive(false); + auto* other_view_proxy = other_main_frame->GetWebViewTestProxy(); + // TODO(dtapuska): We should call the exact IPC the browser + // calls. ie. WebFrameWidgetBase::SetActive but that isn't + // exposed outside of blink. + other_view_proxy->GetWebView()->SetIsActive(false); other_widget->GetWebWidget()->SetFocus(false); } } @@ -3175,7 +3183,6 @@ if (!widget->GetWebWidget()->HasFocus()) { widget->GetWebWidget()->SetFocus(true); - widget->SetActive(true); } }
diff --git a/docs/patterns/inversion-of-control.md b/docs/patterns/inversion-of-control.md new file mode 100644 index 0000000..d9516f7 --- /dev/null +++ b/docs/patterns/inversion-of-control.md
@@ -0,0 +1,376 @@ +## Inversion of Control + +"Inversion of control" is a design pattern used to allow users of a framework +or library (often called clients) to customize the behavior of the framework. + +### Our Example + +Examples in this document will be given by extending or modifying this example +API, which is hopefully self-explanatory: + + class StringKVStore { + public: + StringKVStore(); + virtual ~StringKVStore(); + + using KeyPredicate = base::RepeatingCallback<bool(const string&)>; + + void Put(const string& key, const string& value); + void Remove(const string& key); + void Clear(); + + string Get(const string& key) const; + set<string> GetKeys() const; + set<string> GetKeysMatching(const KeyPredicate& predicate) const; + + void SaveToPersistentStore(); + }; + +### What is inversion of control? + +Normally, client code calls into the library to do operations, so control flows +from a high-level class to a low-level class: + + void YourFunction() { + // GetKeys() calls into the StringKVStore library + for (const auto& key : kv_store_.GetKeys()) { + ... + } + } + +In "inverted" control flow, the library calls back into your code after you +call into it, so control flows back from a low-level class to a high-level +class: + + bool IsKeyInteresting(const string& key) { ... } + + void YourFunction() { + StringKVStore::KeyPredicate predicate = + base::BindRepeating(&IsKeyInteresting); + // GetKeysMatching() calls into the StringKVStore library, but it calls + // back into IsKeyInteresting defined in this file! + for (const auto& key : kv_store_.GetKeysMatching(predicate)) { + ... + } + } + +It is also often inverted in the Chromium dependency sense. For example, in +Chromium, code in //content can't call, link against, or generally be aware of +code in //chrome - the normal flow of data and control is only in one direction, +from //chrome "down" to //content. When //content calls back into //chrome, that +is an inversion of control. + +Abstractly, inversion of control is defined by a low-level class defining an +interface that a high-level class supplies an implementation of. In the example +fragment given above, `StringKVStore` defines an interface called +`StringKVStore::KeyPredicate`, and `YourFunction` supplies an implementation of +that interface - namely the bound instance of `IsKeyInteresting`. This allows +the low-level class to use functionality of the high-level class without being +aware of the specific high-level class's existence, or a high-level class to +plug logic into a low-level class. + +There are a few main ways this is done in Chromium: + +* Callbacks +* Observers +* Listeners +* Delegates + +**Inversion of control should not be your first resort. It is sometimes useful +for solving specific problems, but in general it is overused in Chromium.** + +### Callbacks + +Callbacks are one of the simplest ways to do inversion of control, and often are +all you need. Callbacks can be used to split out part of the framework's logic +into the client, like so: + + void StringKVStore::GetKeysMatching(const KeyPredicate& predicate) { + set<string> keys; + for (const auto& key : internal_keys()) { + if (predicate.Run(key)) + keys.insert(key); + } + return keys; + } + +where `predicate` was supplied by the client of +`StringKVStore::GetKeysMatching`. They can also be used for the framework +library to notify clients of events, like so: + + void StringKVStore::Put(const string& key, const string& value) { + ... + // In real code you would use CallbackList instead, but for explanatory + // purposes: + for (const auto& callback : key_changed_callbacks_) + callback.Run(...); + } + +making use of [Subscription]. + +Callbacks can also be used to supply an implementation of something deliberately +omitted, like so: + + class StringKVStore { + using SaveCallback = base::RepeatingCallback<void(string, string)>; + void SaveToPersistentStore(const SaveCallback& callback); + }; + +### Observers + +An "observer" receives notifications of events happening on an object. For +example, an interface like this might exist: + + class StringKVStore::Observer { + public: + virtual void OnKeyChanged(StringKVStore* store, + const string& key, + const string& from_value, + const string& to_value) {} + virtual void OnKeyRemoved(StringKVStore* store, + const string& key, + const string& old_value) {} + ... + } + +and then on the StringKVStore class: + + class StringKVStore { + public: + ... + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + } + +So an example of a `StringKVStore::Observer` might be: + + class HelloKeyWatcher : public StringKVStore::Observer { + public: + void OnKeyChanged(StringKVStore* store, + const string& key, + const string& from_value, + const string& to_value) override { + if (key == "hello") + ++hello_changes_; + } + void OnKeyRemoved(StringKVStore* store, + const string& key, + const string& old_value) override { + if (key == "hello") + hello_changes_ = 0; + } + } + +where the `StringKVStore` arranges to call the relevant method on each +`StringKVStore::Observer` that has been added to it whenever a matching event +happens. + +Use an observer when: + +* More than one client may care to listen to events happening +* Clients passively observe, but do not modify, the state of the framework + object being observed + +### Listeners + +A listener is an observer that only observes a single type of event. These were +very common in C++ and Java before the introduction of lambdas, but these days +are not as commonly seen, and you probably should not introduce new listeners - +instead, use a plain [Callback]. + +Here's an example: + + class StringKVStore::ClearListener { + public: + virtual void OnCleared(StringKVStore* store) = 0; + } + +Use a listener when: + +* There is only a single client listener instance at most per framework object +* There is only a single event being listened for + +### Delegates + +A delegate is responsible for implementing part of the framework that is +deliberately missing. While observers and listeners are generally passive with +respect to the framework object they are attached to, delegates are generally +active. + +One very common use of delegates is to allow clients to make policy decisions, +like so: + + class StringKVStore::Delegate { + public: + virtual bool ShouldPersistKey(StringKVStore* store, const string& key); + virtual bool IsValidValueForKey(StringKVStore* store, + const string& key, + const string& proposed_value); + }; + +Another common use is to allow clients to inject their own subclasses of +framework objects that need to be constructed by the framework, by putting +a factory method on the delegate: + + class StringKVStore::Delegate { + public: + virtual unique_ptr<StringKVStoreBackend> + CreateBackend(StringKVStore* store); + } + +And then these might exist: + + class MemoryBackedStringKVStoreDelegate : public StringKVStore::Delegate; + class DiskBackedStringKVStoreDelegate : public StringKVStore::Delegate; + ... + +Use a delegate when: + +* There needs to be logic that happens synchronously with what's happening in + the framework +* It does not make sense to have a decision made statically per instance of a + framework object + +### Observer vs Listener vs Delegate + +If every call to the client could be made asynchronous and the API would still +work fine for your use case, you have an observer or listener, not a delegate. + +If there might be multiple interested client objects instead of one, you have an +observer, not a listener or delegate. + +If any method on your interface has any return type other than `void`, you have +a delegate, not an observer or listener. + +You can think of it this way: an observer or listener interface *notifies* the +observer or listener of a change to a framework object, while a delegate usually +helps *cause* the change to the framework object. + +### Callbacks vs Observers/Listeners/Delegates + +Callbacks have advantages: + +* No separate interface is needed +* Header files for client classes are not cluttered with the interfaces or + methods from them +* Client methods don't need to use specific names, so the name-collision + problems above aren't present +* Client methods can be bound (using [Bind]) with any needed state, including + which object they are attached to, so there is no need to pass the framework + object of interest back into them +* The handler for an event is placed in object setup, rather than being implicit + in the presence of a separate method +* They sometimes save creation of "trampoline" methods that simply discard or + add extra parameters before invoking the real handling logic for an event +* Forwarding event handlers is a lot easier, since callbacks can easily be + passed around by themselves +* They avoid multiple inheritance + +They also have disadvantages: + +* They can lead to deeply-nested setup code +* Callback objects are heavyweight (performance and memory wise) compared to + virtual method calls + +### Design Tips + +1. Observers should have empty method bodies in the header, rather than having + their methods as pure virtuals. This has two benefits: client classes can + implement only the methods for events they care to observe, and it is + obvious from the header that the base observer methods do not need to be + called. + +2. Similarly, delegates should have sensible base implementations of every + method whenever this is feasible, so that client classes (subclasses of the + delegate class) can concern themselves only with the parts that are + relevant to their use case. + +3. When inverting control, always pass the framework object of interest back to + the observer/listener/delegate; that allows the client, if it wants to, to + reuse the same object as the observer/listener/delegate for multiple + framework objects. For example, if ButtonListener (given above) didn't pass + the button in, the same ButtonListener instance could not be used to listen + to two buttons simultaneously, since there would be no way to tell which + button received the click. + +4. Large inversion-of-control interfaces should be split into smaller + interfaces when it makes sense to do so. One notorious Chromium example + is [WebContentsObserver], which observes dozens of different events. + Whenever *any* of these events happens, *every* registered + WebContentsObserver has to be notified, even though virtually none of them + might care about this specific event. Using smaller interfaces helps with + this problem and makes the intent of installing a specific observer clearer. + +5. The framework class *should not* take ownership of observers or listeners. + For delegates the decision is less clear, but in general, err on the side of + not taking ownership of delegates either. It is common to hold raw pointers + to observers and listeners, and raw or weak pointers to delegates, with + lifetime issues managed via AddObserver/RemoveObserver or the helper classes + discussed below. + +6. Depending on your application and how widely-used you expect your observer, + listener, or delegate to be, you should probably use names that are longer + and more specific than you might otherwise. This is because client classes + may be implementing multiple inversion-of-control interfaces, so it is + important that their method names not collide with each other. For example, + instead of having `PageObserver::OnLoadStarted`, you might have + `PageObserver::OnPageLoadStarted` to reduce the odds of an unpleasant + collision with `NetworkRequestObserver::OnLoadStarted` (or similar). Note + that callbacks entirely avoid this problem. + +7. A callback is probably a better fit for what you're trying to do than one + of the other patterns given above! + +### Inversion of Control in Chromium + +Some key classes in `//base`: + +* [ScopedObserver] +* [ObserverList] and [CheckedObserver] +* [Subscription] and [CallbackList] + +And some production examples: + +* [WebContentsObserver] and [WebContentsDelegate] +* [BrowserListObserver] +* [URLRequestJobFactory::ProtocolHandler] +* [WidgetObserver] and [ViewObserver] + +### When Not To Use This Pattern + +Inverted control can be harder to reason about, and more expensive at runtime, +than other approaches. In particular, beware of using delegates when static data +would be appropriate. For example, consider this hypothetical interface: + + class StringKVStore::Delegate { + virtual bool ShouldSaveAtDestruction() { return true; } + } + +It should be clear from the naming that this method will only be called once per +StringKVStore instance and that its value cannot meaningfully change within the +lifetime of a given instance; in this case, "should save at destruction" should +instead be a parameter given to StringKVStore directly. + +A good rule of thumb is that any method on a delegate that: + +* Will only be called once for a given framework object, or +* Has a value that can't meaningfully change for a given framework object, and +* Serves primarily to return that value, rather than doing some other work + like constructing a helper object + +should be a property on the framework object instead of a delegate method. + +[Bind]: ../../base/bind.h +[BrowserListObserver]: ../../chrome/browser/ui/browser_list_observer.h +[CallbackList]: ../../base/callback_list.h +[Callback]: ../../base/callback.h +[CheckedObserver]: ../../base/observer_list_types.h +[ObserverList]: ../../base/observer_list.h +[ScopedObserver]: ../../base/scoped_observer.h +[Subscription]: ../../base/callback_list.h +[URLRequestJobFactory::ProtocolHandler]: ../../net/url_request/url_request_job_factory.h +[Unretained]: ../../base/bind.h +[ViewObserver]: ../../ui/views/view_observer.h +[WebContentsDelegate]: ../../content/public/browser/web_contents_delegate.h +[WebContentsObserver]: ../../content/public/browser/web_contents_observer.h +[WidgetObserver]: ../../ui/views/widget/widget_observer.h
diff --git a/extensions/renderer/bindings/api_binding.cc b/extensions/renderer/bindings/api_binding.cc index d36a7f9..ba842f9 100644 --- a/extensions/renderer/bindings/api_binding.cc +++ b/extensions/renderer/bindings/api_binding.cc
@@ -78,9 +78,8 @@ dict->FindKeyOfType("returns_async", base::Value::Type::DICTIONARY); SignaturePair result; - bool supports_promises = returns_async != nullptr; - result.method_signature = std::make_unique<APISignature>( - *params, supports_promises, access_checker); + result.method_signature = + std::make_unique<APISignature>(*params, returns_async, access_checker); // If response validation is enabled, parse the callback signature. Otherwise, // there's no reason to, so don't bother. if (result.method_signature->has_callback() && @@ -92,7 +91,7 @@ "parameters", base::Value::Type::LIST); if (callback_params) { result.callback_signature = std::make_unique<APISignature>( - *callback_params, false /*api_supports_promises*/, + *callback_params, nullptr /*returns_async*/, nullptr /*access_checker*/); } }
diff --git a/extensions/renderer/bindings/api_binding_js_util.cc b/extensions/renderer/bindings/api_binding_js_util.cc index baa29af..1b4ba76 100644 --- a/extensions/renderer/bindings/api_binding_js_util.cc +++ b/extensions/renderer/bindings/api_binding_js_util.cc
@@ -295,8 +295,7 @@ type_refs_->AddCustomSignature( custom_signature_name, - std::make_unique<APISignature>(*base_signature, - false /*api_supports_promises*/, + std::make_unique<APISignature>(*base_signature, nullptr /*returns_async*/, nullptr /*access_checker*/)); }
diff --git a/extensions/renderer/bindings/api_binding_unittest.cc b/extensions/renderer/bindings/api_binding_unittest.cc index e779962..81987cb 100644 --- a/extensions/renderer/bindings/api_binding_unittest.cc +++ b/extensions/renderer/bindings/api_binding_unittest.cc
@@ -1697,6 +1697,18 @@ 'name': 'strResult', 'type': 'string' } + }, + { + 'name': 'callbackOptional', + 'parameters': [{ + 'name': 'int', + 'type': 'integer' + }], + "returns_async": { + 'name': 'strResult', + 'optional': true, + 'type': 'string' + } }])"; SetFunctions(kFunctions); @@ -1766,7 +1778,7 @@ context->Global(), context, "callbackResult")); } // If the context doesn't support promises, there should be an error if a - // callback isn't supplied. + // required callback isn't supplied. context_allows_promises = false; { constexpr char kPromiseFunctionCall[] = @@ -1784,7 +1796,8 @@ RunFunctionAndExpectError(promise_api_call, context, base::size(args), args, expected_error); } - // Test that callbacks still work when the context doesn't support promises. + // Test that required callbacks still work when the context doesn't support + // promises. { constexpr char kFunctionCall[] = R"((function(api) { @@ -1805,6 +1818,24 @@ EXPECT_EQ(R"("foo")", GetStringPropertyFromObject( context->Global(), context, "callbackResult")); } + // If a returns_async field is marked as optional, then a context which + // doesn't support promises should be able to leave it off of the call. + { + constexpr char kCallbackOptionalFunctionCall[] = + R"((function(api) { + this.callbackOptionalResult = api.callbackOptional(3); + }))"; + v8::Local<v8::Function> promise_api_call = + FunctionFromString(context, kCallbackOptionalFunctionCall); + v8::Local<v8::Value> args[] = {binding_object}; + RunFunctionOnGlobal(promise_api_call, context, base::size(args), args); + + ASSERT_TRUE(last_request()); + + v8::Local<v8::Value> api_result = GetPropertyFromObject( + context->Global(), context, "callbackOptionalResult"); + ASSERT_TRUE(api_result->IsNullOrUndefined()); + } } } // namespace extensions
diff --git a/extensions/renderer/bindings/api_signature.cc b/extensions/renderer/bindings/api_signature.cc index 9d23e3cd..3a957a5 100644 --- a/extensions/renderer/bindings/api_signature.cc +++ b/extensions/renderer/bindings/api_signature.cc
@@ -29,7 +29,8 @@ std::vector<std::unique_ptr<ArgumentSpec>> ValueListToArgumentSpecs( const base::Value& specification_list, - bool supports_promises) { + const base::Value* returns_async) { + bool supports_promises = returns_async != nullptr; std::vector<std::unique_ptr<ArgumentSpec>> signature; auto size = specification_list.GetList().size() + (supports_promises ? 1 : 0); signature.reserve(size); @@ -39,10 +40,16 @@ } if (supports_promises) { + CHECK(returns_async->is_dict()); // To allow promise supporting APIs that use the returns_async format to // instead take a callback, we add an allowed function to the end of the // signature. auto callback = std::make_unique<ArgumentSpec>(ArgumentType::FUNCTION); + const base::Value* callback_optional = + returns_async->FindKeyOfType("optional", base::Value::Type::BOOLEAN); + if (callback_optional) { + callback->set_optional(callback_optional->GetBool()); + } callback->set_name("callback"); signature.push_back(std::move(callback)); } @@ -421,12 +428,11 @@ JSONParseResult&& other) = default; APISignature::APISignature(const base::Value& specification_list, - bool api_supports_promises, + const base::Value* returns_async, BindingAccessChecker* access_checker) - : APISignature( - ValueListToArgumentSpecs(specification_list, api_supports_promises), - api_supports_promises, - access_checker) {} + : APISignature(ValueListToArgumentSpecs(specification_list, returns_async), + returns_async != nullptr /*api_supports_promises*/, + access_checker) {} APISignature::APISignature(std::vector<std::unique_ptr<ArgumentSpec>> signature) : APISignature(std::move(signature),
diff --git a/extensions/renderer/bindings/api_signature.h b/extensions/renderer/bindings/api_signature.h index 82a743df..dd5bffc5 100644 --- a/extensions/renderer/bindings/api_signature.h +++ b/extensions/renderer/bindings/api_signature.h
@@ -35,7 +35,7 @@ class APISignature { public: APISignature(const base::Value& specification_list, - bool api_supports_promises, + const base::Value* returns_async, BindingAccessChecker* access_checker); explicit APISignature(std::vector<std::unique_ptr<ArgumentSpec>> signature); APISignature(std::vector<std::unique_ptr<ArgumentSpec>> signature,
diff --git a/fuchsia/cast_streaming/cast_streaming_session.cc b/fuchsia/cast_streaming/cast_streaming_session.cc index 3561e302..8446cd3 100644 --- a/fuchsia/cast_streaming/cast_streaming_session.cc +++ b/fuchsia/cast_streaming/cast_streaming_session.cc
@@ -22,10 +22,74 @@ namespace { -// TODO(b/156117766): Remove these when Open Screen returns enum values rather -// than strings. -constexpr char kVideoCodecH264[] = "h264"; -constexpr char kVideoCodecVp8[] = "vp8"; +media::AudioDecoderConfig AudioCaptureConfigToAudioDecoderConfig( + const openscreen::cast::AudioCaptureConfig& audio_capture_config) { + // Gather data for the audio decoder config. + media::AudioCodec media_audio_codec = media::AudioCodec::kUnknownAudioCodec; + switch (audio_capture_config.codec) { + case openscreen::cast::AudioCodec::kAac: + media_audio_codec = media::AudioCodec::kCodecAAC; + break; + case openscreen::cast::AudioCodec::kOpus: + media_audio_codec = media::AudioCodec::kCodecOpus; + break; + default: + NOTREACHED(); + break; + } + + return media::AudioDecoderConfig( + media_audio_codec, media::SampleFormat::kSampleFormatF32, + media::GuessChannelLayout(audio_capture_config.channels), + audio_capture_config.sample_rate /* samples_per_second */, + media::EmptyExtraData(), media::EncryptionScheme::kUnencrypted); +} + +media::VideoDecoderConfig VideoCaptureConfigToVideoDecoderConfig( + const openscreen::cast::VideoCaptureConfig& video_capture_config) { + // Gather data for the video decoder config. + uint32_t video_width = video_capture_config.resolutions[0].width; + uint32_t video_height = video_capture_config.resolutions[0].height; + gfx::Size video_size(video_width, video_height); + gfx::Rect video_rect(video_width, video_height); + + media::VideoCodec media_video_codec = media::VideoCodec::kUnknownVideoCodec; + media::VideoCodecProfile video_codec_profile = + media::VideoCodecProfile::VIDEO_CODEC_PROFILE_UNKNOWN; + switch (video_capture_config.codec) { + case openscreen::cast::VideoCodec::kH264: + media_video_codec = media::VideoCodec::kCodecH264; + video_codec_profile = media::VideoCodecProfile::H264PROFILE_BASELINE; + break; + case openscreen::cast::VideoCodec::kVp8: + media_video_codec = media::VideoCodec::kCodecVP8; + video_codec_profile = media::VideoCodecProfile::VP8PROFILE_MIN; + break; + case openscreen::cast::VideoCodec::kHevc: + case openscreen::cast::VideoCodec::kVp9: + default: + NOTREACHED(); + break; + } + + return media::VideoDecoderConfig( + media_video_codec, video_codec_profile, + media::VideoDecoderConfig::AlphaMode::kIsOpaque, media::VideoColorSpace(), + media::VideoTransformation(), video_size, video_rect, video_size, + media::EmptyExtraData(), media::EncryptionScheme::kUnencrypted); +} + +bool CreateDataPipeForStreamType(media::DemuxerStream::Type type, + mojo::ScopedDataPipeProducerHandle* producer, + mojo::ScopedDataPipeConsumerHandle* consumer) { + const MojoCreateDataPipeOptions data_pipe_options{ + sizeof(MojoCreateDataPipeOptions), MOJO_CREATE_DATA_PIPE_FLAG_NONE, + 1u /* element_num_bytes */, + media::GetDefaultDecoderBufferConverterCapacity(type)}; + MojoResult result = + mojo::CreateDataPipe(&data_pipe_options, producer, consumer); + return result == MOJO_RESULT_OK; +} // Timeout to end the Session when no offer message is sent. constexpr base::TimeDelta kInitTimeout = base::TimeDelta::FromSeconds(5); @@ -81,10 +145,72 @@ void OnInitializationTimeout() { DVLOG(1) << __func__; DCHECK(!is_initialized_); - client_->OnInitializationFailure(); + client_->OnSessionEnded(); is_initialized_ = true; } + // Initializes the audio consumer with |audio_capture_config|. Returns an + // empty Optional on failure. + base::Optional<AudioStreamInfo> InitializeAudioConsumer( + openscreen::cast::Receiver* audio_receiver, + const openscreen::cast::AudioCaptureConfig& audio_capture_config) { + DCHECK(audio_receiver); + + // Create the audio data pipe. + mojo::ScopedDataPipeProducerHandle data_pipe_producer; + mojo::ScopedDataPipeConsumerHandle data_pipe_consumer; + if (!CreateDataPipeForStreamType(media::DemuxerStream::Type::AUDIO, + &data_pipe_producer, + &data_pipe_consumer)) { + return base::nullopt; + } + + // We can use unretained pointers here because StreamConsumer is owned by + // this object and |client_| is guaranteed to outlive this object. + audio_consumer_ = std::make_unique<StreamConsumer>( + audio_receiver, std::move(data_pipe_producer), + base::BindRepeating( + &CastStreamingSession::Client::OnAudioBufferReceived, + base::Unretained(client_)), + base::BindOnce(&CastStreamingSession::Internal::OnDataTimeout, + base::Unretained(this))); + + return AudioStreamInfo{ + AudioCaptureConfigToAudioDecoderConfig(audio_capture_config), + std::move(data_pipe_consumer)}; + } + + // Initializes the video consumer with |video_capture_config|. Returns an + // empty Optional on failure. + base::Optional<VideoStreamInfo> InitializeVideoConsumer( + openscreen::cast::Receiver* video_receiver, + const openscreen::cast::VideoCaptureConfig& video_capture_config) { + DCHECK(video_receiver); + + // Creare the video data pipe. + mojo::ScopedDataPipeProducerHandle data_pipe_producer; + mojo::ScopedDataPipeConsumerHandle data_pipe_consumer; + if (!CreateDataPipeForStreamType(media::DemuxerStream::Type::VIDEO, + &data_pipe_producer, + &data_pipe_consumer)) { + return base::nullopt; + } + + // We can use unretained pointers here because StreamConsumer is owned by + // this object and |client_| is guaranteed to outlive this object. + video_consumer_ = std::make_unique<StreamConsumer>( + video_receiver, std::move(data_pipe_producer), + base::BindRepeating( + &CastStreamingSession::Client::OnVideoBufferReceived, + base::Unretained(client_)), + base::BindOnce(&CastStreamingSession::Internal::OnDataTimeout, + base::Unretained(this))); + + return VideoStreamInfo{ + VideoCaptureConfigToVideoDecoderConfig(video_capture_config), + std::move(data_pipe_consumer)}; + } + // openscreen::cast::ReceiverSession::Client implementation. void OnNegotiated( const openscreen::cast::ReceiverSession* session, @@ -93,144 +219,88 @@ DCHECK_EQ(session, receiver_session_.get()); init_timeout_timer_.Stop(); - if (is_initialized_) { - // TODO(crbug.com/1116185): Handle multiple offer messages properly. - return; - } + bool is_new_offer = is_initialized_; + if (is_new_offer) { + // This is a second offer message, reinitialize the streams. + bool existing_session_has_audio = audio_consumer_ != nullptr; + bool existing_session_has_video = video_consumer_ != nullptr; + audio_consumer_.reset(); + video_consumer_.reset(); - base::Optional<AudioStreamInfo> audio_stream_info; - if (receivers.audio) { - // Creare the audio data pipe. - const MojoCreateDataPipeOptions data_pipe_options{ - sizeof(MojoCreateDataPipeOptions), MOJO_CREATE_DATA_PIPE_FLAG_NONE, - 1u /* element_num_bytes */, - media::GetDefaultDecoderBufferConverterCapacity( - media::DemuxerStream::Type::AUDIO)}; - mojo::ScopedDataPipeProducerHandle data_pipe_producer; - mojo::ScopedDataPipeConsumerHandle data_pipe_consumer; - MojoResult result = mojo::CreateDataPipe( - &data_pipe_options, &data_pipe_producer, &data_pipe_consumer); - if (result != MOJO_RESULT_OK) { - client_->OnInitializationFailure(); + bool new_offer_has_audio = receivers.audio_receiver != nullptr; + bool new_offer_has_video = receivers.video_receiver != nullptr; + + if (new_offer_has_audio != existing_session_has_audio || + new_offer_has_video != existing_session_has_video) { + // Different audio/video configuration than in the first offer message. + // Return early here. + client_->OnSessionEnded(); return; } + } - // Initialize the audio consumer. - // We can use unretained pointers here because StreamConsumer is owned by - // this object and |client_| is guaranteed to outlive this object. - audio_consumer_ = std::make_unique<StreamConsumer>( - receivers.audio->receiver, std::move(data_pipe_producer), - base::BindRepeating( - &CastStreamingSession::Client::OnAudioBufferReceived, - base::Unretained(client_)), - base::BindOnce(&CastStreamingSession::Internal::OnDataTimeout, - base::Unretained(this))); + // Set |is_initialized_| now so we can return early on failure. + is_initialized_ = true; - // Gather data for the audio decoder config. - media::ChannelLayout channel_layout = - media::GuessChannelLayout(receivers.audio->receiver_config.channels); - const std::string& audio_codec = - receivers.audio->selected_stream.stream.codec_name; - media::AudioCodec media_audio_codec = - media::StringToAudioCodec(audio_codec); - int samples_per_second = receivers.audio->receiver_config.rtp_timebase; - - audio_stream_info.emplace(AudioStreamInfo{ - media::AudioDecoderConfig( - media_audio_codec, media::SampleFormat::kSampleFormatF32, - channel_layout, samples_per_second, media::EmptyExtraData(), - media::EncryptionScheme::kUnencrypted), - std::move(data_pipe_consumer)}); - - DVLOG(1) << "Initialized audio stream. " - << audio_stream_info->decoder_config.AsHumanReadableString(); + base::Optional<AudioStreamInfo> audio_stream_info; + if (receivers.audio_receiver) { + audio_stream_info = InitializeAudioConsumer(receivers.audio_receiver, + receivers.audio_config); + if (audio_stream_info) { + DVLOG(1) << "Initialized audio stream. " + << audio_stream_info->decoder_config.AsHumanReadableString(); + } else { + client_->OnSessionEnded(); + return; + } } base::Optional<VideoStreamInfo> video_stream_info; - if (receivers.video) { - // Creare the video data pipe. - const MojoCreateDataPipeOptions data_pipe_options{ - sizeof(MojoCreateDataPipeOptions), MOJO_CREATE_DATA_PIPE_FLAG_NONE, - 1u /* element_num_bytes */, - media::GetDefaultDecoderBufferConverterCapacity( - media::DemuxerStream::Type::VIDEO)}; - mojo::ScopedDataPipeProducerHandle data_pipe_producer; - mojo::ScopedDataPipeConsumerHandle data_pipe_consumer; - MojoResult result = mojo::CreateDataPipe( - &data_pipe_options, &data_pipe_producer, &data_pipe_consumer); - if (result != MOJO_RESULT_OK) { - client_->OnInitializationFailure(); + if (receivers.video_receiver) { + video_stream_info = InitializeVideoConsumer(receivers.video_receiver, + receivers.video_config); + if (video_stream_info) { + DVLOG(1) << "Initialized video stream. " + << video_stream_info->decoder_config.AsHumanReadableString(); + } else { + audio_consumer_.reset(); + audio_stream_info.reset(); + client_->OnSessionEnded(); return; } - - // Initialize the video consumer. - // We can use unretained pointers here because StreamConsumer is owned by - // this object and |client_| is guaranteed to outlive this object. - video_consumer_ = std::make_unique<StreamConsumer>( - receivers.video->receiver, std::move(data_pipe_producer), - base::BindRepeating( - &CastStreamingSession::Client::OnVideoBufferReceived, - base::Unretained(client_)), - base::BindOnce(&CastStreamingSession::Internal::OnDataTimeout, - base::Unretained(this))); - - // Gather data for the video decoder config. - const std::string& video_codec = - receivers.video->selected_stream.stream.codec_name; - uint32_t video_width = - receivers.video->selected_stream.resolutions[0].width; - uint32_t video_height = - receivers.video->selected_stream.resolutions[0].height; - gfx::Size video_size(video_width, video_height); - gfx::Rect video_rect(video_width, video_height); - - media::VideoCodec media_video_codec = - media::VideoCodec::kUnknownVideoCodec; - media::VideoCodecProfile video_codec_profile = - media::VideoCodecProfile::VIDEO_CODEC_PROFILE_UNKNOWN; - - if (video_codec == kVideoCodecH264) { - media_video_codec = media::VideoCodec::kCodecH264; - video_codec_profile = media::VideoCodecProfile::H264PROFILE_BASELINE; - } else if (video_codec == kVideoCodecVp8) { - media_video_codec = media::VideoCodec::kCodecVP8; - video_codec_profile = media::VideoCodecProfile::VP8PROFILE_MIN; - } else { - NOTREACHED(); - } - - video_stream_info.emplace(VideoStreamInfo{ - media::VideoDecoderConfig( - media_video_codec, video_codec_profile, - media::VideoDecoderConfig::AlphaMode::kIsOpaque, - media::VideoColorSpace(), media::VideoTransformation(), - video_size, video_rect, video_size, media::EmptyExtraData(), - media::EncryptionScheme::kUnencrypted), - std::move(data_pipe_consumer)}); - - DVLOG(1) << "Initialized video stream. " - << video_stream_info->decoder_config.AsHumanReadableString(); } + // This is necessary in case the offer message had no audio and no video + // stream. if (!audio_stream_info && !video_stream_info) { - client_->OnInitializationFailure(); + client_->OnSessionEnded(); + return; + } + + if (is_new_offer) { + client_->OnSessionReinitialization(std::move(audio_stream_info), + std::move(video_stream_info)); } else { - client_->OnInitializationSuccess(std::move(audio_stream_info), + client_->OnSessionInitialization(std::move(audio_stream_info), std::move(video_stream_info)); } - is_initialized_ = true; } - // TODO(https://crbug.com/1116185): Handle |reason| and reset streams on a - // new offer message. void OnReceiversDestroying(const openscreen::cast::ReceiverSession* session, ReceiversDestroyingReason reason) final { // This can be called when |receiver_session_| is being destroyed, so we // do not sanity-check |session| here. DVLOG(1) << __func__; - audio_consumer_.reset(); - video_consumer_.reset(); - client_->OnReceiverSessionEnded(); + + switch (reason) { + case ReceiversDestroyingReason::kEndOfSession: + audio_consumer_.reset(); + video_consumer_.reset(); + client_->OnSessionEnded(); + break; + case ReceiversDestroyingReason::kRenegotiated: + break; + } } void OnError(const openscreen::cast::ReceiverSession* session, @@ -238,7 +308,7 @@ DCHECK_EQ(session, receiver_session_.get()); LOG(ERROR) << error; if (!is_initialized_) { - client_->OnInitializationFailure(); + client_->OnSessionEnded(); is_initialized_ = true; } } @@ -256,8 +326,8 @@ bool is_initialized_ = false; CastStreamingSession::Client* const client_; - std::unique_ptr<openscreen::cast::Receiver::Consumer> audio_consumer_; - std::unique_ptr<openscreen::cast::Receiver::Consumer> video_consumer_; + std::unique_ptr<StreamConsumer> audio_consumer_; + std::unique_ptr<StreamConsumer> video_consumer_; }; CastStreamingSession::Client::~Client() = default;
diff --git a/fuchsia/cast_streaming/public/cast_streaming_session.h b/fuchsia/cast_streaming/public/cast_streaming_session.h index bb67039..fd41cd7 100644 --- a/fuchsia/cast_streaming/public/cast_streaming_session.h +++ b/fuchsia/cast_streaming/public/cast_streaming_session.h
@@ -5,10 +5,10 @@ #ifndef FUCHSIA_CAST_STREAMING_PUBLIC_CAST_STREAMING_SESSION_H_ #define FUCHSIA_CAST_STREAMING_PUBLIC_CAST_STREAMING_SESSION_H_ -#include <memory> - #include <fuchsia/web/cpp/fidl.h> +#include <memory> + #include "base/callback.h" #include "base/optional.h" #include "base/sequenced_task_runner.h" @@ -35,7 +35,7 @@ // Sets the NetworkContextGetter. This must be called before any call to // Start() and must only be called once. If the NetworkContext crashes, any // existing Cast Streaming Session will eventually terminate and call - // OnReceiverSessionEnded(). + // OnSessionEnded(). static void SetNetworkContextGetter(NetworkContextGetter getter); template <class T> @@ -51,25 +51,28 @@ // Called when the Cast Streaming Session has been successfully initialized. // It is guaranteed that at least one of |audio_stream_info| or // |video_stream_info| will be set. - virtual void OnInitializationSuccess( + virtual void OnSessionInitialization( base::Optional<AudioStreamInfo> audio_stream_info, base::Optional<VideoStreamInfo> video_stream_info) = 0; - // Called when the Cast Stream Session failed to initialize. - virtual void OnInitializationFailure() = 0; - - // Called on every new audio buffer after OnInitializationSuccess(). The + // Called on every new audio buffer after OnSessionInitialization(). The // frame data must be accessed via the |data_pipe| property in StreamInfo. virtual void OnAudioBufferReceived( media::mojom::DecoderBufferPtr buffer) = 0; - // Called on every new video buffer after OnInitializationSuccess(). The + // Called on every new video buffer after OnSessionInitialization(). The // frame data must be accessed via the |data_pipe| property in StreamInfo. virtual void OnVideoBufferReceived( media::mojom::DecoderBufferPtr buffer) = 0; + // Called on receiver session reinitialization. It is guaranteed that at + // least one of |audio_stream_info| or |video_stream_info| will be set. + virtual void OnSessionReinitialization( + base::Optional<AudioStreamInfo> audio_stream_info, + base::Optional<VideoStreamInfo> video_stream_info) = 0; + // Called when the Cast Streaming Session has ended. - virtual void OnReceiverSessionEnded() = 0; + virtual void OnSessionEnded() = 0; protected: virtual ~Client(); @@ -84,10 +87,12 @@ // Starts the Cast Streaming Session. This can only be called once during the // lifespan of this object. |client| must not be null and must outlive this // object. - // * On success, OnInitializationSuccess() will be called and + // * On success, OnSessionInitialization() will be called and // OnAudioFrameReceived() and/or OnVideoFrameReceived() will be called on // every subsequent Frame. - // * On failure, OnInitializationFailure() will be called. + // * On failure, OnSessionEnded() will be called. + // * When a new offer is sent by the Cast Streaming Sender, + // OnSessionReinitialization() will be called. void Start( Client* client, fidl::InterfaceRequest<fuchsia::web::MessagePort> message_port_request,
diff --git a/fuchsia/engine/browser/cast_streaming_session_client.cc b/fuchsia/engine/browser/cast_streaming_session_client.cc index 5c0508a..e81d8f16 100644 --- a/fuchsia/engine/browser/cast_streaming_session_client.cc +++ b/fuchsia/engine/browser/cast_streaming_session_client.cc
@@ -37,7 +37,7 @@ base::SequencedTaskRunnerHandle::Get()); } -void CastStreamingSessionClient::OnInitializationSuccess( +void CastStreamingSessionClient::OnSessionInitialization( base::Optional<cast_streaming::CastStreamingSession::AudioStreamInfo> audio_stream_info, base::Optional<cast_streaming::CastStreamingSession::VideoStreamInfo> @@ -65,11 +65,6 @@ std::move(mojo_audio_stream_info), std::move(mojo_video_stream_info)); } -void CastStreamingSessionClient::OnInitializationFailure() { - DVLOG(1) << __func__; - cast_streaming_receiver_.reset(); -} - void CastStreamingSessionClient::OnAudioBufferReceived( media::mojom::DecoderBufferPtr buffer) { DVLOG(3) << __func__; @@ -84,7 +79,26 @@ video_remote_->ProvideBuffer(std::move(buffer)); } -void CastStreamingSessionClient::OnReceiverSessionEnded() { +void CastStreamingSessionClient::OnSessionReinitialization( + base::Optional<cast_streaming::CastStreamingSession::AudioStreamInfo> + audio_stream_info, + base::Optional<cast_streaming::CastStreamingSession::VideoStreamInfo> + video_stream_info) { + DVLOG(1) << __func__; + DCHECK(audio_stream_info || video_stream_info); + + if (audio_stream_info) { + audio_remote_->OnNewAudioConfig(audio_stream_info->decoder_config, + std::move(audio_stream_info->data_pipe)); + } + + if (video_stream_info) { + video_remote_->OnNewVideoConfig(video_stream_info->decoder_config, + std::move(video_stream_info->data_pipe)); + } +} + +void CastStreamingSessionClient::OnSessionEnded() { DVLOG(1) << __func__; // Tear down the Mojo connection. @@ -108,8 +122,8 @@ return; } - // Close the Cast Streaming Session. This will eventually call - // OnReceiverSessionEnded(), which will tear down the Mojo connection. + // Close the Cast Streaming Session. OnSessionEnded() will be called as part + // of the Session shutdown, which will tear down the Mojo connection. cast_streaming_session_.Stop(); // Tear down all remaining Mojo objects.
diff --git a/fuchsia/engine/browser/cast_streaming_session_client.h b/fuchsia/engine/browser/cast_streaming_session_client.h index f502a77e..231aeb2 100644 --- a/fuchsia/engine/browser/cast_streaming_session_client.h +++ b/fuchsia/engine/browser/cast_streaming_session_client.h
@@ -36,15 +36,19 @@ void OnReceiverEnabled(); // cast_streaming::CastStreamingSession::Client implementation. - void OnInitializationSuccess( + void OnSessionInitialization( base::Optional<cast_streaming::CastStreamingSession::AudioStreamInfo> audio_stream_info, base::Optional<cast_streaming::CastStreamingSession::VideoStreamInfo> video_stream_info) final; - void OnInitializationFailure() final; void OnAudioBufferReceived(media::mojom::DecoderBufferPtr buffer) final; void OnVideoBufferReceived(media::mojom::DecoderBufferPtr buffer) final; - void OnReceiverSessionEnded() final; + void OnSessionReinitialization( + base::Optional<cast_streaming::CastStreamingSession::AudioStreamInfo> + audio_stream_info, + base::Optional<cast_streaming::CastStreamingSession::VideoStreamInfo> + video_stream_info) final; + void OnSessionEnded() final; fidl::InterfaceRequest<fuchsia::web::MessagePort> message_port_request_; mojo::AssociatedRemote<mojom::CastStreamingReceiver> cast_streaming_receiver_;
diff --git a/fuchsia/engine/cast_streaming_session.mojom b/fuchsia/engine/cast_streaming_session.mojom index 33af21c..d94b83c 100644 --- a/fuchsia/engine/cast_streaming_session.mojom +++ b/fuchsia/engine/cast_streaming_session.mojom
@@ -13,6 +13,18 @@ // from AudioStreamInfo or VideoStreamInfo. // This is called for every new buffer pushed in the associated |data_pipe|. ProvideBuffer(media.mojom.DecoderBuffer buffer); + + // Signals the audio decoder configuration has changed. After this call, + // CastStreamingBufferReceiver.ProvideBuffer() will be called on every new + // frame. The buffer data itself is on |data_pipe|. + OnNewAudioConfig(media.mojom.AudioDecoderConfig decoder_config, + handle<data_pipe_consumer> data_pipe); + + // Signals the video configuration has changed. After this call, + // CastStreamingBufferReceiver.ProvideBuffer() will be called on every new + // frame. The buffer data itself is on |data_pipe|. + OnNewVideoConfig(media.mojom.VideoDecoderConfig decoder_config, + handle<data_pipe_consumer> data_pipe); }; // Information about a Cast Streaming audio stream.
diff --git a/fuchsia/engine/renderer/cast_streaming_demuxer.cc b/fuchsia/engine/renderer/cast_streaming_demuxer.cc index 2f7bc6de..33872c1a 100644 --- a/fuchsia/engine/renderer/cast_streaming_demuxer.cc +++ b/fuchsia/engine/renderer/cast_streaming_demuxer.cc
@@ -27,7 +27,8 @@ pending_receiver, mojo::ScopedDataPipeConsumerHandle consumer) : receiver_(this, std::move(pending_receiver)), - decoder_buffer_reader_(std::move(consumer)) { + decoder_buffer_reader_(std::make_unique<media::MojoDecoderBufferReader>( + std::move(consumer))) { DVLOG(1) << __func__; // Mojo service disconnection means the Cast Streaming Session ended and no @@ -55,11 +56,40 @@ std::move(pending_read_cb_).Run(Status::kAborted, nullptr); } + protected: + void ChangeDataPipe(mojo::ScopedDataPipeConsumerHandle data_pipe) { + DVLOG(1) << __func__; + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + pending_config_change_ = true; + + // Reset the buffer reader and the current buffer. Data from the old pipe is + // no longer valid. + current_buffer_.reset(); + decoder_buffer_reader_ = + std::make_unique<media::MojoDecoderBufferReader>(std::move(data_pipe)); + CompletePendingConfigChange(); + } + + void CompletePendingConfigChange() { + DVLOG(1) << __func__; + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(pending_config_change_); + + if (!pending_read_cb_) + return; + + std::move(pending_read_cb_).Run(Status::kConfigChanged, nullptr); + pending_config_change_ = false; + } + + // True when this stream is undergoing a decoder configuration change. + bool pending_config_change_ = false; + private: void CompletePendingRead() { DVLOG(3) << __func__; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!pending_read_cb_ || !current_buffer_) + if (pending_config_change_ || !pending_read_cb_ || !current_buffer_) return; if (current_buffer_->end_of_stream()) { @@ -81,7 +111,7 @@ media::mojom::DecoderBufferPtr buffer = std::move(pending_buffer_metadata_.front()); pending_buffer_metadata_.pop_front(); - decoder_buffer_reader_.ReadDecoderBuffer( + decoder_buffer_reader_->ReadDecoderBuffer( std::move(buffer), base::BindOnce(&CastStreamingDemuxerStream::OnBufferRead, base::Unretained(this))); @@ -91,6 +121,11 @@ DVLOG(3) << __func__; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // The pending buffer reads are cancelled when we reset the data pipe on a + // configuration change. Just ignore them and return early here. + if (!buffer) + return; + // Stop processing the pending buffer. OnMojoDisconnect() will trigger // sending kAborted on subsequent Read() calls. This can happen if this // object was in the process of reading a buffer off the data pipe when the @@ -118,14 +153,18 @@ DVLOG(3) << __func__; DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(pending_read_cb_.is_null()); + pending_read_cb_ = std::move(read_cb); - CompletePendingRead(); + if (pending_config_change_) + CompletePendingConfigChange(); + else + CompletePendingRead(); } Liveness liveness() const final { return Liveness::LIVENESS_LIVE; } - bool SupportsConfigChanges() final { return false; } + bool SupportsConfigChanges() final { return true; } mojo::Receiver<CastStreamingBufferReceiver> receiver_; - media::MojoDecoderBufferReader decoder_buffer_reader_; + std::unique_ptr<media::MojoDecoderBufferReader> decoder_buffer_reader_; ReadCB pending_read_cb_; base::circular_deque<media::mojom::DecoderBufferPtr> pending_buffer_metadata_; @@ -150,6 +189,20 @@ ~CastStreamingAudioDemuxerStream() final = default; private: + // CastStreamingBufferReceiver implementation. + void OnNewAudioConfig(const media::AudioDecoderConfig& decoder_config, + mojo::ScopedDataPipeConsumerHandle data_pipe) final { + config_ = decoder_config; + DVLOG(1) << __func__ + << ": config info: " << config_.AsHumanReadableString(); + ChangeDataPipe(std::move(data_pipe)); + } + + void OnNewVideoConfig(const media::VideoDecoderConfig& decoder_config, + mojo::ScopedDataPipeConsumerHandle data_pipe) final { + NOTREACHED(); + } + // DemuxerStream implementation. media::AudioDecoderConfig audio_decoder_config() final { return config_; } media::VideoDecoderConfig video_decoder_config() final { @@ -175,6 +228,20 @@ ~CastStreamingVideoDemuxerStream() final = default; private: + // CastStreamingBufferReceiver implementation. + void OnNewAudioConfig(const media::AudioDecoderConfig& decoder_config, + mojo::ScopedDataPipeConsumerHandle data_pipe) final { + NOTREACHED(); + } + + void OnNewVideoConfig(const media::VideoDecoderConfig& decoder_config, + mojo::ScopedDataPipeConsumerHandle data_pipe) final { + config_ = decoder_config; + DVLOG(1) << __func__ + << ": config info: " << config_.AsHumanReadableString(); + ChangeDataPipe(std::move(data_pipe)); + } + // DemuxerStream implementation. media::AudioDecoderConfig audio_decoder_config() final { NOTREACHED();
diff --git a/gpu/command_buffer/service/external_vk_image_backing.cc b/gpu/command_buffer/service/external_vk_image_backing.cc index 904692df..a5f0412 100644 --- a/gpu/command_buffer/service/external_vk_image_backing.cc +++ b/gpu/command_buffer/service/external_vk_image_backing.cc
@@ -227,6 +227,12 @@ VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; } + if (usage & SHARED_IMAGE_USAGE_DISPLAY) { + // Skia currently requires all VkImages it uses to support transfers + vk_usage |= + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + } + auto* vulkan_implementation = context_state->vk_context_provider()->GetVulkanImplementation(); VkImageCreateFlags vk_flags = 0;
diff --git a/gpu/command_buffer/service/external_vk_image_factory_unittest.cc b/gpu/command_buffer/service/external_vk_image_factory_unittest.cc index f682f81..36587be2 100644 --- a/gpu/command_buffer/service/external_vk_image_factory_unittest.cc +++ b/gpu/command_buffer/service/external_vk_image_factory_unittest.cc
@@ -208,6 +208,7 @@ auto sk_image = SkImage::MakeFromTexture( context_state_->gr_context(), backend_texture, kTopLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType, kOpaque_SkAlphaType, nullptr); + EXPECT_TRUE(sk_image); const SkImageInfo dst_info = SkImageInfo::Make(size.width(), size.height(), kRGBA_8888_SkColorType, @@ -385,4 +386,4 @@ #endif // BUILDFLAG(USE_DAWN) } // anonymous namespace -} // namespace gpu \ No newline at end of file +} // namespace gpu
diff --git a/gpu/command_buffer/service/skia_utils.cc b/gpu/command_buffer/service/skia_utils.cc index c8f00902..58455e4 100644 --- a/gpu/command_buffer/service/skia_utils.cc +++ b/gpu/command_buffer/service/skia_utils.cc
@@ -219,6 +219,8 @@ image_info.fImageTiling = image->image_tiling(); image_info.fImageLayout = image->image_layout(); image_info.fFormat = image->format(); + image_info.fImageUsageFlags = image->usage(); + image_info.fSampleCount = 1; image_info.fLevelCount = 1; image_info.fCurrentQueueFamily = image->queue_family_index(); image_info.fProtected = is_protected ? GrProtected::kYes : GrProtected::kNo;
diff --git a/gpu/vulkan/demo/vulkan_demo.cc b/gpu/vulkan/demo/vulkan_demo.cc index c2fe838..cef0156 100644 --- a/gpu/vulkan/demo/vulkan_demo.cc +++ b/gpu/vulkan/demo/vulkan_demo.cc
@@ -120,6 +120,8 @@ vk_image_info.fImageLayout = scoped_write_->image_layout(); vk_image_info.fImageTiling = VK_IMAGE_TILING_OPTIMAL; vk_image_info.fFormat = VK_FORMAT_B8G8R8A8_UNORM; + vk_image_info.fImageUsageFlags = scoped_write_->image_usage(); + vk_image_info.fSampleCount = 1; vk_image_info.fLevelCount = 1; const auto& size = vulkan_surface_->image_size(); GrBackendRenderTarget render_target(size.width(), size.height(), 0,
diff --git a/gpu/vulkan/vulkan_image_android.cc b/gpu/vulkan/vulkan_image_android.cc index 7d64386a..2939879 100644 --- a/gpu/vulkan/vulkan_image_android.cc +++ b/gpu/vulkan/vulkan_image_android.cc
@@ -100,6 +100,11 @@ return false; } + // Skia currently requires all wrapped VkImages to have transfer src and dst + // usage. Additionally all AHB support these usages when imported into vulkan. + usage_flags |= + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; + VkImageCreateFlags create_flags = 0; if (ahb_desc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT) { create_flags = VK_IMAGE_CREATE_PROTECTED_BIT;
diff --git a/gpu/vulkan/vulkan_swap_chain.cc b/gpu/vulkan/vulkan_swap_chain.cc index 198fd0f..1fdfc3de 100644 --- a/gpu/vulkan/vulkan_swap_chain.cc +++ b/gpu/vulkan/vulkan_swap_chain.cc
@@ -234,6 +234,8 @@ base::TaskShutdownBehavior::BLOCK_SHUTDOWN, base::MayBlock()}); } + image_usage_ = image_usage_flags; + return true; } @@ -290,6 +292,7 @@ bool VulkanSwapChain::BeginWriteCurrentImage(VkImage* image, uint32_t* image_index, VkImageLayout* image_layout, + VkImageUsageFlags* image_usage, VkSemaphore* begin_semaphore, VkSemaphore* end_semaphore) { base::AutoLock auto_lock(lock_); @@ -297,6 +300,7 @@ DCHECK(image); DCHECK(image_index); DCHECK(image_layout); + DCHECK(image_usage); DCHECK(begin_semaphore); DCHECK(end_semaphore); DCHECK(!is_writing_); @@ -327,6 +331,7 @@ *image = current_image_data.image; *image_index = *acquired_image_; *image_layout = current_image_data.image_layout; + *image_usage = image_usage_; *begin_semaphore = current_image_data.acquire_semaphore; *end_semaphore = current_image_data.present_semaphore; is_writing_ = true; @@ -568,7 +573,7 @@ VulkanSwapChain::ScopedWrite::ScopedWrite(VulkanSwapChain* swap_chain) : swap_chain_(swap_chain) { success_ = swap_chain_->BeginWriteCurrentImage( - &image_, &image_index_, &image_layout_, &begin_semaphore_, + &image_, &image_index_, &image_layout_, &image_usage_, &begin_semaphore_, &end_semaphore_); if (LIKELY(success_)) { DCHECK(begin_semaphore_ != VK_NULL_HANDLE); @@ -590,4 +595,4 @@ } } -} // namespace gpu \ No newline at end of file +} // namespace gpu
diff --git a/gpu/vulkan/vulkan_swap_chain.h b/gpu/vulkan/vulkan_swap_chain.h index 5f94fca1..b4ecf51 100644 --- a/gpu/vulkan/vulkan_swap_chain.h +++ b/gpu/vulkan/vulkan_swap_chain.h
@@ -42,6 +42,7 @@ VkImage image() const { return image_; } uint32_t image_index() const { return image_index_; } VkImageLayout image_layout() const { return image_layout_; } + VkImageUsageFlags image_usage() const { return image_usage_; } VkSemaphore begin_semaphore() const { return begin_semaphore_; } VkSemaphore end_semaphore() const { return end_semaphore_; } @@ -51,6 +52,7 @@ VkImage image_ = VK_NULL_HANDLE; uint32_t image_index_ = 0; VkImageLayout image_layout_ = VK_IMAGE_LAYOUT_UNDEFINED; + VkImageUsageFlags image_usage_ = 0; VkSemaphore begin_semaphore_ = VK_NULL_HANDLE; VkSemaphore end_semaphore_ = VK_NULL_HANDLE; @@ -134,6 +136,7 @@ bool BeginWriteCurrentImage(VkImage* image, uint32_t* image_index, VkImageLayout* layout, + VkImageUsageFlags* usage, VkSemaphore* begin_semaphore, VkSemaphore* end_semaphore); void EndWriteCurrentImage(); @@ -163,6 +166,8 @@ // Images in the swap chain. std::vector<ImageData> images_ GUARDED_BY(lock_); + VkImageUsageFlags image_usage_ = 0; + // True if BeginWriteCurrentImage() is called, but EndWriteCurrentImage() is // not. bool is_writing_ GUARDED_BY(lock_) = false; @@ -204,4 +209,4 @@ } // namespace gpu -#endif // GPU_VULKAN_VULKAN_SWAP_CHAIN_H_ \ No newline at end of file +#endif // GPU_VULKAN_VULKAN_SWAP_CHAIN_H_
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 9816cb7..bd2086a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ar.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">تعذّر على Chromium البحث عن تحديثات. يُرجى إعادة المحاولة لاحقًا.</translation> <translation id="8252885722420466166">احصل على تجربة أفضل لاستخدام Google في Chromium استنادًا إلى موقعك.</translation> <translation id="8586442755830160949">حقوق الطبع والنشر لعام <ph name="YEAR" /> لصالح The Chromium Authors. جميع الحقوق محفوظة.</translation> +<translation id="8663480472502753423">تحديث متصفِّح Chromium باستمرار</translation> <translation id="8776843108004031667">ستتم إزالة هذا الحساب بالإضافة إلى أي بيانات لم يتم حفظها من Chromium.</translation> <translation id="9022552996538154597">تسجيل الدخول إلى Chromium</translation> <translation id="9089354809943900324">إصدار Chromium قديم</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 b9081a3c..df8897a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fa.xtb
@@ -26,7 +26,7 @@ <translation id="3344973607274501920">Chromium نمیتواند گذرواژههایتان را بررسی کند. اتصال اینترنت را بررسی کنید.</translation> <translation id="3472200483164753384">در Chromium Canary پشتیبانی نمیشود</translation> <translation id="3639997914391704523">Chromium زمانی میتواند گذرواژههایتان را بررسی کند که با «حساب Google» خود به سیستم وارد شوید.</translation> -<translation id="3805899903892079518">Chromium به عکسها یا ویدیوهای شما دسترسی ندارد. با رفتن به تنظیمات iOS > حریم خصوصی > عکسها دسترسی را فعال کنید.</translation> +<translation id="3805899903892079518">Chromium به عکسها یا ویدیوهای شما دسترسی ندارد. با رفتن به تنظیمات iOS > حریمخصوصی > عکسها دسترسی را فعال کنید.</translation> <translation id="4099085513035183040">در «Chromium بتا» پشتیبانی نمیشود</translation> <translation id="4166206055865952171">Chromium را مرورگر پیشفرض کنید</translation> <translation id="4555020257205549924">وقتی این قابلیت روشن است، Chromium ترجمه صفحات نوشتهشده به سایر زبانها را با استفاده از مترجم Google پیشنهاد میدهد. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> @@ -58,7 +58,7 @@ <translation id="7357211569052832586">دادههای انتخابشده از Chromium و دستگاههای همگامسازیشده حذف شدهاند. ممکن است اشکال دیگری از سابقه مرورتان (مانند جستجوها و فعالیت دیگر سرویسهای Google در history.google.com) در حساب Google شما وجود داشته باشد.</translation> <translation id="7400689562045506105">استفاده از Chromium در همهجا</translation> <translation id="766897673682622022">گذرواژهتان بهدلیل نقض داده لو رفته است. Chromium توصیه میکند همینحالا گذرواژه را تغییر دهید.</translation> -<translation id="7674213385180944843">Settings (تنظیمات) > Privacy (حریم خصوصی) > Camera (دوربین) > Chromium را باز کنید و دوربین را روشن کنید.</translation> +<translation id="7674213385180944843">Settings (تنظیمات) > Privacy (حریمخصوصی) > Camera (دوربین) > Chromium را باز کنید و دوربین را روشن کنید.</translation> <translation id="7746854981345936341">نکته Chromium. بعضی از دکمهها مثل Back (برگشت)، Forward (به جلو) و Search (جستجو) اکنون در پایین صفحه هستند.</translation> <translation id="786327964234957808">هماکنون درحال تغییر حسابهای همگامسازی از <ph name="USER_EMAIL1" /> به <ph name="USER_EMAIL2" /> هستید. دادههای موجود Chromium شما توسط <ph name="DOMAIN" /> مدیریت میشوند. با این کار، دادههایتان از این دستگاه حذف میشود اما همچنان در <ph name="USER_EMAIL1" /> باقی میماند.</translation> <translation id="7890287942691234100">شروع استفاده از اسکنر Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb index 2cc8660..38dafbe3 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium n'est pas parvenu à rechercher les mises à jour. Réessayez plus tard.</translation> <translation id="8252885722420466166">Améliorez votre expérience Google dans Chromium grâce à votre position.</translation> <translation id="8586442755830160949">Copyright Auteurs de Chromium <ph name="YEAR" />. Tous droits réservés.</translation> +<translation id="8663480472502753423">Garder Chromium à jour</translation> <translation id="8776843108004031667">Ce compte et les données non enregistrées seront supprimés de Chromium.</translation> <translation id="9022552996538154597">Se connecter à Chromium</translation> <translation id="9089354809943900324">Version de Chromium obsolète</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 eea50372..4493094 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium non puido buscar actualizacións. Téntao máis tarde.</translation> <translation id="8252885722420466166">Obtén unha mellor experiencia de Google en Chromium baseada na túa localización.</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. Reservados todos os dereitos.</translation> +<translation id="8663480472502753423">Mantén Chromium actualizado</translation> <translation id="8776843108004031667">Esta conta e os datos que estean sen gardar quitaranse de Chromium.</translation> <translation id="9022552996538154597">Iniciar sesión en Chromium</translation> <translation id="9089354809943900324">Chromium está desactualizado</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 c998e62..1cf0eedd 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
@@ -23,10 +23,10 @@ <translation id="2977470724722393594">क्रोमियम अप टू डेट है</translation> <translation id="3256316712990552818">क्रोमियम पर कॉपी किया गया</translation> <translation id="3344973607274501920">क्रोमियम आपके पासवर्ड की जांच नहीं कर सका. अपने इंटरनेट कनेक्शन की जांच करें.</translation> -<translation id="3472200483164753384">यह ऐप्लिकेशन क्रोमियम के कैनरी वर्शन पर काम नहीं करता</translation> +<translation id="3472200483164753384">यह सुविधा क्रोमियम के कैनरी वर्शन पर काम नहीं करती</translation> <translation id="3639997914391704523">जब आप Google खाते से साइन इन करते हैं, तब क्रोमियम आपके पासवर्ड की जांच कर सकता है.</translation> <translation id="3805899903892079518">Chromium के पास आपकी फ़ोटो या वीडियो का एक्सेस नहीं है. iOS सेटिंग > गोपनीयता > फ़ोटो में एक्सेस चालू करें.</translation> -<translation id="4099085513035183040">यह ऐप्लिकेशन क्रोमियम के बीटा वर्शन पर काम नहीं करता</translation> +<translation id="4099085513035183040">यह सुविधा क्रोमियम के बीटा वर्शन पर काम नहीं करती</translation> <translation id="4166206055865952171">क्रोमियम को अपना डिफ़ॉल्ट ब्राउज़र बनाएं</translation> <translation id="4555020257205549924">जब यह सुविधा चालू होती है, तो क्रोमियम अन्य भाषा में लिखे पृष्ठों को Google अनुवाद का उपयोग करके अनुवाद करने के लिए ऑफ़र करेगा. <ph name="BEGIN_LINK" />ज़्यादा जानें<ph name="END_LINK" /></translation> <translation id="4681781466797808448">अपना क्रोमियम स्कैनर चालू करें</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 0c5da57..ef66cad4b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium tidak dapat memeriksa update. Coba lagi nanti.</translation> <translation id="8252885722420466166">Dapatkan pengalaman menggunakan Google yang lebih baik di Chromium berdasarkan lokasi Anda.</translation> <translation id="8586442755830160949">Hak Cipta <ph name="YEAR" /> Pengarang Chromium. Semua hak dilindungi undang-undang.</translation> +<translation id="8663480472502753423">Pastikan Chromium selalu terupdate</translation> <translation id="8776843108004031667">Akun ini dan semua data yang tidak disimpan akan dihapus dari Chromium.</translation> <translation id="9022552996538154597">Login ke Chromium</translation> <translation id="9089354809943900324">Chromium terlalu lawas</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 9778863..83b94fc 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">ಅಪ್ಡೇಟ್ಗಳಿವೆಯೇ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಲು Chromium ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="8252885722420466166">ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಆಧರಿಸಿ Chromium ನಲ್ಲಿ ಉತ್ತಮ Google ಅನುಭವವನ್ನು ಪಡೆಯಿರಿ.</translation> <translation id="8586442755830160949">ಹಕ್ಕುಸ್ವಾಮ್ಯ <ph name="YEAR" /> Chromium ಲೇಖಕರು. ಎಲ್ಲಾ ಹಕ್ಕುಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ.</translation> +<translation id="8663480472502753423">Chromium ಅನ್ನು ಅಪ್ ಟು ಡೇಟ್ ಆಗಿರಿಸಿ</translation> <translation id="8776843108004031667">ಈ ಖಾತೆ ಮತ್ತು ಯಾವುದೇ ಉಳಿಸದ ಡೇಟಾವನ್ನು Chromium ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.</translation> <translation id="9022552996538154597">Chromium ಗೆ ಸೈನ್ ಇನ್ ಆಗಿ</translation> <translation id="9089354809943900324">Chromium ನ ಅವಧಿ ಮುಗಿದಿದೆ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb index 2bc28e7..7f216994 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
@@ -68,6 +68,7 @@ <translation id="8240981428553046115">Chromium ले अपडेटहरू उपलब्ध छन् कि छैनन् भन्ने कुरा जाँच गर्न सकेन। पछि फेरि प्रयास गर्नुहोस्।</translation> <translation id="8252885722420466166">तपाईँको स्थानमा आधारित Chrome मा उत्तम Google अनुभव प्राप्त गर्नुहोस्।</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> क्रोमियम लेखक। सबै अधिकार सुरक्षित।</translation> +<translation id="8663480472502753423">Chromium अपडेट राख्नुहोस्</translation> <translation id="8776843108004031667">यो खाता र सुरक्षित नगरिएका सबै डेटा Chromium बाट हटाइने छन्।</translation> <translation id="9022552996538154597">क्रोमियममा साइन इन हुनुहोस्</translation> <translation id="9089354809943900324">क्रोमियमको म्याद सकिएको छ</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 8053c6a..52450f0 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Браузеру Chromium не удалось проверить наличие обновлений. Повторите попытку позже.</translation> <translation id="8252885722420466166">Используйте дополнительные возможности Google в Chrome, сообщив свое местоположение.</translation> <translation id="8586442755830160949">© The Chromium Authors, <ph name="YEAR" /> . Все права защищены.</translation> +<translation id="8663480472502753423">Обновляет Chromium до последней версии</translation> <translation id="8776843108004031667">Этот аккаунт и все несохраненные данные будут удалены из Chromium.</translation> <translation id="9022552996538154597">Войти в Chromium</translation> <translation id="9089354809943900324">Версия Chromium устарела</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb index 34e320b..61b6b16 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium అప్డేట్లు ఏమైనా ఉన్నాయో లేదో చెక్ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation> <translation id="8252885722420466166">మీ స్థానం ఆధారంగా Chromiumలో మెరుగైన Google అనుభవాన్ని పొందండి.</translation> <translation id="8586442755830160949">కాపీరైట్ <ph name="YEAR" /> Chromium రచయితలు. అన్ని హక్కులు రిజర్వ్ చేయబడ్డాయి.</translation> +<translation id="8663480472502753423">Chromiumను అప్డేట్గా ఉంచండి</translation> <translation id="8776843108004031667">ఈ ఖాతా, ఇంకా ఏదైనా సేవ్ చేయని డేటా Chromium నుండి తీసివేయబడతాయి.</translation> <translation id="9022552996538154597">Chromiumకు సైన్ ఇన్ చేయండి</translation> <translation id="9089354809943900324">Chromium కాలం చెల్లినది</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb index dac8cb7..3ff69b96 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium, güncellemeleri denetleyemedi. Daha sonra tekrar deneyin.</translation> <translation id="8252885722420466166">Chromium'da, konumunuza dayalı olarak daha iyi bir Google deneyimi yaşayın.</translation> <translation id="8586442755830160949">Telif Hakkı <ph name="YEAR" /> The Chromium Authors. Tüm hakları saklıdır.</translation> +<translation id="8663480472502753423">Chromium'u güncel tutun</translation> <translation id="8776843108004031667">Bu hesap ve kaydedilmemiş tüm veriler Chromium'dan kaldırılacak.</translation> <translation id="9022552996538154597">Chromium'da oturum aç</translation> <translation id="9089354809943900324">Chromium sürümü eski</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb index 0a3edfc..818e7eb 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_uz.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium yangilanishlar chiqqanini tekshira olmadi. Keyinroq qayta urining.</translation> <translation id="8252885722420466166">O‘z joylashuvingiz haqidagi ma’lumotlarni taqdim etish orqali Chrome brauzerida Google’ning qo‘shimcha imkoniyatlaridan foydalaning.</translation> <translation id="8586442755830160949">© The Chromium Authors, <ph name="YEAR" />. Barcha huquqlar himoyalangan.</translation> +<translation id="8663480472502753423">Chromium brauzerini yangilab boring</translation> <translation id="8776843108004031667">Bu hisob va uning barcha saqlanmagan maʼlumotlari Chromiumdan olib tashlanadi.</translation> <translation id="9022552996538154597">Chromium‘ga kirish</translation> <translation id="9089354809943900324">Chromium versiyasi eskirdi</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 fe7fc72..bc29fee3 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -69,6 +69,7 @@ <translation id="8240981428553046115">Chromium không thể kiểm tra xem có bản cập nhật mới nào không. Hãy thử lại sau.</translation> <translation id="8252885722420466166">Có được trải nghiệm Google tốt hơn trong Chromium dựa trên vị trí của bạn.</translation> <translation id="8586442755830160949">Bản quyền <ph name="YEAR" /> Tác giả Chromium. Mọi quyền được bảo lưu.</translation> +<translation id="8663480472502753423">Giữ cho Chromium luôn cập nhật</translation> <translation id="8776843108004031667">Tài khoản này và mọi dữ liệu chưa lưu sẽ bị xóa khỏi Chromium.</translation> <translation id="9022552996538154597">Đăng nhập vào Chromium</translation> <translation id="9089354809943900324">Chromium đã lỗi thời</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 1cd80a0..c5b1b97 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
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">يتم تسجيل دخولك باستخدام حساب يتم إدارته من خلال <ph name="DOMAIN" /> ومنح مشرفه الحق في التحكم في بياناتك على Chrome. سيؤدي ذلك إلى جعل بياناتك مرتبطة دائمًا بهذا الحساب. كما سيؤدي تسجيل الخروج من Chrome إلى حذف بياناتك من هذا الجهاز، ولكن ستظل هذه البيانات مخزنة على حسابك في Google.</translation> <translation id="6676840375528380067">هل تريد محو بيانات Chrome من هذا الجهاز؟</translation> <translation id="6822673484890854830">تعذّر على متصفِّح Chrome التحقُّق من جميع كلمات المرور. يُرجى إعادة المحاولة لاحقًا.</translation> +<translation id="7124339256045485976">تحديث متصفِّح Chrome باستمرار</translation> <translation id="7161390184744336561">إصدار Google Chrome قديم.</translation> <translation id="7165736900384873061">بدء استخدام الماسح الضوئي للاستجابة السريعة في Google Chrome</translation> <translation id="7172660552945675509">نصيحة: <ph name="BEGIN_LINK" />نقل Chrome إلى شريط الإرساء<ph name="END_LINK" /></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 93decb0..2704a86 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
@@ -30,7 +30,7 @@ <translation id="3706101708757577809">اکنون میتوانید با ضربه زدن روی پیوندهای موجود در پیامها، اسناد و دیگر برنامهها، از Chrome استفاده کنید.</translation> <translation id="384394811301901750">Google Chrome اکنون نمیتواند از دوربین استفاده کند</translation> <translation id="3980220367029651214">هماکنون حسابهای همگامسازی را از <ph name="USER_EMAIL1" /> به <ph name="USER_EMAIL2" /> تغییر میدهید. دادههای موجود Chrome شما توسط <ph name="DOMAIN" /> مدیریت میشود. با این کار، دادههایتان از این دستگاه حذف میشود اما همچنان در <ph name="USER_EMAIL1" /> باقی میماند.</translation> -<translation id="3988789688219830639">Google Chrome به عکسها یا ویدیوهای شما دسترسی ندارد. با رفتن به تنظیمات iOS > حریم خصوصی > عکسها دسترسی را فعال کنید.</translation> +<translation id="3988789688219830639">Google Chrome به عکسها یا ویدیوهای شما دسترسی ندارد. با رفتن به تنظیمات iOS > حریمخصوصی > عکسها دسترسی را فعال کنید.</translation> <translation id="4099578267706723511">با ارسال آمار کاربرد و گزارشهای خرابی به Google، به بهتر شدن Chrome کمک کنید.</translation> <translation id="415767770115540173">با Chrome تجربه بهتری از Google براساس موقعیت مکانیتان داشته باشید.</translation> <translation id="417201473131094001">در Chrome Canary پشتیبانی نمیشود</translation> @@ -43,7 +43,7 @@ <translation id="5030102366287574140">Chrome میتواند به محافظت از شما دربرابر نقض داده، وبسایتهای ناامن، و موارد دیگر کمک کند.</translation> <translation id="5162467219239570114">نسخه Chrome قدیمی است. اگر بهروزرسانیای در <ph name="BEGIN_LINK" />فروشگاه برنامه<ph name="END_LINK" /> دردسترس نیست، احتمالاً دستگاهتان نسخههای جدید Chrome را دیگر پشتیبانی نمیکند.</translation> <translation id="5389212809648216794">Google Chrome نمیتواند از دوربین استفاده کند زیرا برنامه دیگری از آن استفاده میکند</translation> -<translation id="5639704535586432836">Settings (تنظیمات) > Privacy (حریم خصوصی) > Camera (دوربین) > Google Chrome را باز کنید و دوربین را روشن کنید.</translation> +<translation id="5639704535586432836">Settings (تنظیمات) > Privacy (حریمخصوصی) > Camera (دوربین) > Google Chrome را باز کنید و دوربین را روشن کنید.</translation> <translation id="5642200033778930880">Google Chrome نمیتواند از دوربین درحالت «نمای تقسیمشده» استفاده کند</translation> <translation id="5690427481109656848">Google LLC</translation> <translation id="571296537125272375">آفلاین هستید، Chrome نمیتواند بهروزرسانیها را بررسی کند.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb index 5b6f80b..769cbcdd 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">Vous vous connectez avec un compte géré par <ph name="DOMAIN" />, ce qui permettra à son administrateur de contrôler vos données Chrome. Celles-ci seront définitivement associées à ce compte. Si vous vous déconnectez de Chrome, vos données seront supprimées de cet appareil, mais elles seront conservées dans votre compte Google.</translation> <translation id="6676840375528380067">Supprimer vos données Chrome sur cet appareil ?</translation> <translation id="6822673484890854830">Chrome n'a pas pu vérifier tous les mots de passe. Réessayez plus tard.</translation> +<translation id="7124339256045485976">Garder Chrome à jour</translation> <translation id="7161390184744336561">La version de Google Chrome est obsolète</translation> <translation id="7165736900384873061">Commencer à utiliser le lecteur de code QR Google Chrome</translation> <translation id="7172660552945675509">Conseil : <ph name="BEGIN_LINK" />Placez Chrome dans le dock.<ph name="END_LINK" /></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 d5da352..0c675e36 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
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">Estás iniciando sesión cunha conta xestionada por <ph name="DOMAIN" /> e proporcionándolle ao seu administrador o control dos teus datos de Chrome, que quedarán ligados permanentemente a esta conta. Se pechas sesión en Chrome, eliminaranse os teus datos deste dispositivo, pero seguirán almacenados na túa conta de Google.</translation> <translation id="6676840375528380067">Queres borrar os teus datos de Chrome deste dispositivo?</translation> <translation id="6822673484890854830">Chrome non puido comprobar todos os contrasinais. Téntao de novo máis tarde.</translation> +<translation id="7124339256045485976">Mantén Chrome actualizado</translation> <translation id="7161390184744336561">A versión de Google Chrome está desactualizada</translation> <translation id="7165736900384873061">Comeza a usar o escáner de códigos QR de Google Chrome</translation> <translation id="7172660552945675509">Consello: <ph name="BEGIN_LINK" />Engade Chrome á túa barra de aplicacións<ph name="END_LINK" /></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 26fc8f55f..95b055a 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
@@ -33,13 +33,13 @@ <translation id="3988789688219830639">Google Chrome के पास आपकी फ़ोटो या वीडियो का एक्सेस नहीं है. iOS सेटिंग > निजता > फ़ोटो में जाकर एक्सेस चालू करें.</translation> <translation id="4099578267706723511">Google को इस्तेमाल के आंकड़े और खराबी रिपोर्ट भेजकर Chrome को बेहतर बनाने में मदद करें.</translation> <translation id="415767770115540173">अपने स्थान के आधार पर Chrome में एक बेहतर Google अनुभव पाएं.</translation> -<translation id="417201473131094001">यह ऐप्लिकेशन Chrome के कैनरी वर्शन पर काम नहीं करता</translation> +<translation id="417201473131094001">यह सुविधा Chrome के कैनरी वर्शन पर काम नहीं करती</translation> <translation id="424864128008805179">Chrome से साइन आउट करें?</translation> <translation id="4249068189593983585">Chrome इस्तेमाल करने के लिए सलाह. ज़्यादा टैब विकल्पों के लिए, टूलबार में 'टैब दिखाएं' बटन को दबाकर रखें. यह बटन आपकी स्क्रीन के सबसे नीचे या सबसे ऊपर मिलेगा.</translation> <translation id="4523886039239821078">कुछ ऐड-ऑन के कारण Chrome बंद हो जा रहा है. कृपया उन्हें अनइंस्टॉल करें:</translation> <translation id="4633328489441962921">Chrome अपडेट की जांच नहीं कर सका</translation> <translation id="4698415050768537821">Chrome सभी पासवर्ड की जांच नहीं कर सका. कल कोशिश करें या <ph name="BEGIN_LINK" />अपने Google खाते में सेव किए गए पासवर्ड की जांच करें.<ph name="END_LINK" /></translation> -<translation id="484033449593719797">यह ऐप्लिकेशन Chrome के बीटा वर्शन पर काम नहीं करता</translation> +<translation id="484033449593719797">यह सुविधा Chrome के बीटा वर्शन पर काम नहीं करती</translation> <translation id="5030102366287574140">Chrome आपको डेटा के गलत इस्तेमाल, नुकसान पहुंचाने वाली वेबसाइटों वगैरह से सुरक्षित रखने में मदद कर सकता है.</translation> <translation id="5162467219239570114">Chrome का यह वर्शन पुराना हो गया है. अगर <ph name="BEGIN_LINK" />App Store<ph name="END_LINK" /> में कोई अपडेट उपलब्ध नहीं है, तो हो सकता है कि आपका डिवाइस अब Chrome के नए वर्शन के साथ काम नहीं करता.</translation> <translation id="5389212809648216794">Google 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 9107c60..405711a9 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
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">Anda login dengan akun terkelola oleh <ph name="DOMAIN" /> dan memberikan kontrol kepada administratornya atas data Chrome Anda. Data Anda akan terikat dengan akun ini secara permanen. Dengan logout dari Chrome, Anda akan menghapus data dari perangkat ini, tetapi data akan tetap tersimpan di Akun Google.</translation> <translation id="6676840375528380067">Hapus data Chrome Anda dari perangkat ini?</translation> <translation id="6822673484890854830">Chrome tidak dapat memeriksa semua sandi. Coba lagi nanti.</translation> +<translation id="7124339256045485976">Pastikan Chrome selalu terupdate</translation> <translation id="7161390184744336561">Versi Google Chrome sudah usang</translation> <translation id="7165736900384873061">Mulai menggunakan pemindai QR Google Chrome</translation> <translation id="7172660552945675509">Kiat: <ph name="BEGIN_LINK" />Pindahkan Chrome ke dok<ph name="END_LINK" /></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 6fb0adf5..1ddd77b6 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
@@ -55,6 +55,7 @@ <translation id="6648150602980899529"><ph name="DOMAIN" /> ನಿರ್ವಹಿಸಿದ ಖಾತೆಯ ಮೂಲಕ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡುತ್ತಿರುವಿರಿ ಮತ್ತು ಅದರ ನಿರ್ವಾಹಕ ನಿಯಂತ್ರಣವನ್ನು ನಿಮ್ಮ Chrome ಡೇಟಾದ ಮೂಲಕ ನೀಡುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಈ ಖಾತೆಯೊಂದಿಗೆ ಜೋಡಿಸಲಾಗುತ್ತದೆ. Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದರಿಂದ ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ, ಆದರೆ ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿ ಉಳಿದಿರುತ್ತದೆ.</translation> <translation id="6676840375528380067">ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ Chrome ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ?</translation> <translation id="6822673484890854830">ಎಲ್ಲಾ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು Chrome ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="7124339256045485976">Chrome ಅನ್ನು ಅಪ್ ಟು ಡೇಟ್ ಆಗಿರಿಸಿ</translation> <translation id="7161390184744336561">Google Chrome ನ ಅವಧಿ ಮುಗಿದಿದೆ</translation> <translation id="7165736900384873061">Google Chrome QR ಸ್ಕ್ಯಾನರ್ ಬಳಕೆಯನ್ನು ಪ್ರಾರಂಭಿಸಿ</translation> <translation id="7172660552945675509">ಸುಳಿವು: <ph name="BEGIN_LINK" />Chrome ಅನ್ನು ನಿಮ್ಮ ಡಾಕ್ಗೆ ಸರಿಸಿ<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb index dde8d0d9..3a2424e8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">तपाईं <ph name="DOMAIN" /> द्वारा व्यवस्थापन गरिएका खातामार्फत साइन इन गर्दै हुनुहुन्छ र त्यसको प्रशासकलाई तपाईंको Chrome को डेटालाई नियन्त्रण गर्न दिँदै हुनुहुन्छ। तपाईंको डेटा यस खातामा स्थायी रूपमा बाँधिनेछ। Chrome बाट साइन आउट गर्नाले तपाईंको डेटा यस यन्त्रबाट मेटिनेछ, तर यो तपाईंको Google खातामा भण्डारण गरिएको अवस्थामा रहनेछ।</translation> <translation id="6676840375528380067">यस यन्त्रबाट तपाईंको Chrome को डेटा हटाउने हो?</translation> <translation id="6822673484890854830">Chrome ले सबै पासवर्डहरू जाँच्न सकेन। पछि फेरि प्रयास गर्नुहोस्।</translation> +<translation id="7124339256045485976">Chrome अपडेट राख्नुहोस्</translation> <translation id="7161390184744336561">Google Chrome पुरानो भइसकेको छ</translation> <translation id="7165736900384873061">Google Chrome QR स्क्यानरको प्रयोग गर्न थाल्नुहोस्</translation> <translation id="7172660552945675509">सुझाव: <ph name="BEGIN_LINK" />Chrome लाई आफ्नो डकमा सार्नुहोस्<ph name="END_LINK" /></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 ef82eb6..2a0415f 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
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">Вы входите в аккаунт, которым управляет администратор домена <ph name="DOMAIN" />. Он может контролировать ваши данные Chrome, причем теперь они будут связаны с управляемым аккаунтом. При выходе из системы все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.</translation> <translation id="6676840375528380067">Удалить данные Chrome с этого устройства?</translation> <translation id="6822673484890854830">Браузеру Chrome не удается проверить все пароли. Повторите попытку позже.</translation> +<translation id="7124339256045485976">Обновляет Chrome до последней версии</translation> <translation id="7161390184744336561">Версия Google Chrome устарела.</translation> <translation id="7165736900384873061">Используйте QR-сканер в Google Chrome</translation> <translation id="7172660552945675509">Совет. <ph name="BEGIN_LINK" />Добавьте Chrome в Dock.<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb index 0c4b4ca..24897ef8a6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">మీరు <ph name="DOMAIN" /> నిర్వహణలో ఉన్న ఖాతా నుండి సైన్ ఇన్ చేస్తున్నారు. దీని నిర్వాహకుడికి మీ Chrome డేటాపై నియంత్రణను అందిస్తున్నారు. మీ డేటా శాశ్వతంగా ఈ ఖాతాకు అనుబంధించబడుతుంది. Chrome నుండి సైన్ అవుట్ చేయడం వల్ల ఈ పరికరం నుండి మీ డేటా తొలగించబడుతుంది. కానీ ఇది మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది.</translation> <translation id="6676840375528380067">ఈ పరికరం నుండి మీ Chrome డేటాని తీసివేయాలా?</translation> <translation id="6822673484890854830">Chrome అన్ని పాస్వర్డ్లను చెక్ చేయలేకపోయింది. తర్వాత మళ్లీ ట్రై చేయండి.</translation> +<translation id="7124339256045485976">Chromeను అప్డేట్గా ఉంచండి</translation> <translation id="7161390184744336561">Google Chrome వెర్షన్ కాలం చెల్లింది</translation> <translation id="7165736900384873061">Google Chrome QR స్కానర్ని వినియోగించండి</translation> <translation id="7172660552945675509">చిట్కా: <ph name="BEGIN_LINK" />Chromeను మీ డాక్కు తరలించండి<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb index 0ced6e0..742ebb8 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_tr.xtb
@@ -55,6 +55,7 @@ <translation id="6648150602980899529"><ph name="DOMAIN" /> tarafından yönetilen bir hesapla oturum açıyorsunuz ve yöneticiye tüm Chrome verileriniz üzerinde denetim olanağı veriyorsunuz. Verileriniz kalıcı olarak bu hesaba bağlanacaktır. Chrome'da oturumu kapattığınızda verileriniz bu cihazdan silinir ancak Google Hesabınızda kalmaya devam eder.</translation> <translation id="6676840375528380067">Chrome verileriniz bu cihazdan temizlensin mi?</translation> <translation id="6822673484890854830">Chrome, şifrelerin tümünü kontrol edemedi. Daha sonra tekrar deneyin.</translation> +<translation id="7124339256045485976">Chrome'u güncel tutun</translation> <translation id="7161390184744336561">Google Chrome güncel değil</translation> <translation id="7165736900384873061">Google Chrome QR tarayıcısını kullanmaya başlayın</translation> <translation id="7172660552945675509">İpucu: <ph name="BEGIN_LINK" />Chrome'u yuva bölümüne taşıyın<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb index aa59d2d..99a2d2d7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_uz.xtb
@@ -55,6 +55,7 @@ <translation id="6648150602980899529"><ph name="DOMAIN" /> domenida boshqariladigan hisobga kirish bilan siz administratorga Chrome ma’lumotlaringizni boshqarishiga rozilik bildirasiz. Barcha Chrome ma’lumotlaringiz bu hisobga butunlay bog‘langan. Agar hisobdan chiqadigan bo‘lsangiz, bu qurilmadagi barcha ma’lumotlaringiz o‘chib ketadi, lekin Google hisobingizda saqlanib qoladi.</translation> <translation id="6676840375528380067">Chrome maʼlumotlaringiz bu qurilmadan tozalansinmi?</translation> <translation id="6822673484890854830">Chrome ayrim parollarni tekshira olmadi. Keyinroq qayta urining.</translation> +<translation id="7124339256045485976">Chrome brauzerini yangilab boring</translation> <translation id="7161390184744336561">Google Chrome versiyasi eskirdi</translation> <translation id="7165736900384873061">Google Chrome QR-kod skaneridan foydalaning</translation> <translation id="7172660552945675509">Maslahat: <ph name="BEGIN_LINK" />Chrome brauzerini sevimli ilovalar paneliga qadab oling<ph name="END_LINK" /></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 e48b6b3f..54af17f 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
@@ -55,6 +55,7 @@ <translation id="6648150602980899529">Bạn đang đăng nhập bằng tài khoản do <ph name="DOMAIN" /> quản lý và cấp cho quản trị viên quyền kiểm soát dữ liệu Chrome của bạn. Dữ liệu của bạn sẽ được liên kết vĩnh viễn với tài khoản này. Việc đăng xuất khỏi Chrome sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu đó sẽ vẫn được lưu trữ trong Tài khoản Google.</translation> <translation id="6676840375528380067">Xóa dữ liệu Chrome của bạn khỏi thiết bị này?</translation> <translation id="6822673484890854830">Chrome không thể kiểm tra một số mật khẩu. Hãy thử lại sau.</translation> +<translation id="7124339256045485976">Giữ cho Chrome luôn cập nhật</translation> <translation id="7161390184744336561">Google Chrome đã lỗi thời</translation> <translation id="7165736900384873061">Bắt đầu dùng trình quét QR của Chrome</translation> <translation id="7172660552945675509">Mẹo: <ph name="BEGIN_LINK" />Di chuyển Chrome sang thanh dock<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 2031265..0593f5b4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">فحص رمز الاستجابة السريعة</translation> <translation id="1552525382687785070">تم إيقاف المزامنة من قِبل المشرف</translation> <translation id="1554477036522844996">نافذة جديدة</translation> +<translation id="1580715474678097352">الحماية من المواقع الإلكترونية الضارّة</translation> <translation id="1580783302095112590">تم إرسال البريد.</translation> <translation id="1582732959743469162">سيؤدي ذلك إلى إيقاف تقدّم جميع عمليات التنزيل الحالية.</translation> <translation id="1605405588277479165">غير مفعّل - (غير مستحسَن)</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">كلمة المرور المقترحة في Chrome:</translation> <translation id="9094033019050270033">تحديث كلمة المرور</translation> <translation id="9100610230175265781">عبارة المرور مطلوبة</translation> +<translation id="9107664647686727385">التحقُّق من كلمات المرور المحتمَل تعرّضها للاختراق</translation> <translation id="9137526406337347448">خدمات Google</translation> <translation id="9148126808321036104">تسجيل الدخول مرة أخرى</translation> <translation id="9152539721251340337">إنشاء رمز استجابة سريعة</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index f41d17ed..0b6324ea 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -202,7 +202,7 @@ <translation id="3181954750937456830">Beskyttet browsing (beskytter dig og din enhed mod farlige websites)</translation> <translation id="3196681740617426482">Websites kan bruge cookies til at forbedre din browseroplevelse ved f.eks. at sørge for, at du forbliver logget ind, eller ved at huske varerne i din kurv. -Når du er i Inkognito, kan websites ikke bruge cookies til at se din browserhistorik på forskellige websites for f.eks. at tilpasse annoncer.</translation> +Når du er i inkognito, kan websites ikke bruge cookies til at se din browserhistorik på forskellige websites for f.eks. at tilpasse annoncer.</translation> <translation id="3207960819495026254">Gemt som bogmærke</translation> <translation id="3224641773458703735">Angiv en adgangskode på din enhed, før du kan eksportere adgangskoder.</translation> <translation id="3240426699337459095">Linket er kopieret</translation> @@ -254,7 +254,7 @@ <translation id="3670030362669914947">Nummer</translation> <translation id="3691593122358196899">Bogmærket er gemt i <ph name="FOLDER_TITLE" /></translation> <translation id="3709582977625132201">Markér som ulæst</translation> -<translation id="3740397331642243698">Åbner de angivne webadresser i Google Chrome i Inkognito.</translation> +<translation id="3740397331642243698">Åbner de angivne webadresser i Google Chrome i inkognito.</translation> <translation id="3771033907050503522">Inkognitofaner</translation> <translation id="3775743491439407556">Synkronisering fungerer ikke</translation> <translation id="3779810277399252432">Ingen internetforbindelse.</translation> @@ -514,7 +514,7 @@ <translation id="6585618849026997638">Du kan vende tilbage til en side, der er vigtig for dig, ved at tilføje et bogmærke</translation> <translation id="6610002944194042868">Valgmuligheder for oversættelse</translation> <translation id="6620279676667515405">Annuller</translation> -<translation id="6624219055418309072">Bloker i Inkognito</translation> +<translation id="6624219055418309072">Bloker i inkognito</translation> <translation id="6628106477656132239">Udløbsdatoen er ugyldig</translation> <translation id="6638511529934826365">Zoom ind/ud på tekst…</translation> <translation id="6639730758971422557">Åbn <ph name="BEGIN_LINK" />Synkronisering og Google-tjenester<ph name="END_LINK" />, og tryk på Beskyttet browsing for at aktivere Beskyttet browsing.</translation> @@ -647,7 +647,7 @@ <translation id="8027581147000338959">Åbn i nyt vindue</translation> <translation id="804427445359061970">Her kan du se dine faner fra andre enheder</translation> <translation id="8059533439631660104">Skjuler sektionen.</translation> -<translation id="8065292699993359127">Åbn webadresser i Chrome i Inkognito</translation> +<translation id="8065292699993359127">Åbn webadresser i Chrome i inkognito</translation> <translation id="806745655614357130">Hold mine data adskilt</translation> <translation id="8073670137947914548">Downloaden er fuldført</translation> <translation id="8073872304774253879">Gør søgninger og browsing endnu bedre</translation> @@ -690,7 +690,7 @@ <translation id="8548878600947630424">Find på siden...</translation> <translation id="8574235780160508979">Servicevilkårene for Chrome ændres den 31. marts <ph name="BEGIN_LINK" />Gennemgå dem<ph name="END_LINK" /></translation> <translation id="8588404856427128947">Fra</translation> -<translation id="8591976964826315682">Bloker tredjepartscookies i Inkognito</translation> +<translation id="8591976964826315682">Bloker tredjepartscookies i inkognito</translation> <translation id="8605219856220328675">Luk fane.</translation> <translation id="8620640915598389714">Rediger</translation> <translation id="8636825310635137004">Aktivér synkronisering for at få adgang til dine faner på dine andre enheder.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index e69351a..73c396d5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -308,7 +308,7 @@ <translation id="4375040482473363939">جستجوی رمزینه پاسخسریع</translation> <translation id="4378154925671717803">تلفن</translation> <translation id="4389019817280890563">برای تغییر زبان، ضربه بزنید.</translation> -<translation id="441868831736628555">اعلامیه حریم خصوصی</translation> +<translation id="441868831736628555">اعلامیه حریمخصوصی</translation> <translation id="4454246407045105932">افزودن زبان</translation> <translation id="4469418912670346607">ادامه راهاندازی</translation> <translation id="4476574785019001431">تنظیمات</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 5ca633b..1f3ad63 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">Scanner le code QR</translation> <translation id="1552525382687785070">Votre administrateur a désactivé la synchronisation</translation> <translation id="1554477036522844996">Nouvelle fenêtre</translation> +<translation id="1580715474678097352">Protégez-vous contre les sites Web dangereux</translation> <translation id="1580783302095112590">E-mail envoyé.</translation> <translation id="1582732959743469162">Cette action arrêtera le téléchargement en cours.</translation> <translation id="1605405588277479165">Désactivée – Non recommandé</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Mot de passe suggéré par Chrome :</translation> <translation id="9094033019050270033">Modifier le mot de passe</translation> <translation id="9100610230175265781">Veuillez saisir la phrase secrète.</translation> +<translation id="9107664647686727385">Rechercher des mots de passe compromis</translation> <translation id="9137526406337347448">Google Services</translation> <translation id="9148126808321036104">Nouvelle connexion</translation> <translation id="9152539721251340337">Créer un code QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_strings_gl.xtb index 992ad908..9964abb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gl.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">Escanear código QR</translation> <translation id="1552525382687785070">O teu administrador desactivou a sincronización</translation> <translation id="1554477036522844996">Nova ventá</translation> +<translation id="1580715474678097352">Protéxete contra sitios web perigosos</translation> <translation id="1580783302095112590">Correo enviado.</translation> <translation id="1582732959743469162">Esta acción deterá o progreso da túa descarga actual.</translation> <translation id="1605405588277479165">Desactivada (non se recomenda)</translation> @@ -728,6 +729,8 @@ <translation id="9087108903408689779">Contrasinal suxerido por Chrome:</translation> <translation id="9094033019050270033">Actualizar contrasinal</translation> <translation id="9100610230175265781">Contrasinal obrigatorio</translation> +<translation id="9107664647686727385">Comproba se hai contrasinais vulnerados</translation> +<translation id="9137526406337347448">Servizos de Google</translation> <translation id="9148126808321036104">Iniciar sesión de novo</translation> <translation id="9152539721251340337">Crear código QR</translation> <translation id="9157836665414082580">Suprimir cadros de diálogos</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 7b48d6b..5a34384d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">Pindai Kode QR</translation> <translation id="1552525382687785070">Sinkronisasi Dinonaktifkan oleh Administrator Anda</translation> <translation id="1554477036522844996">Jendela Baru</translation> +<translation id="1580715474678097352">Tetap terlindungi dari situs berbahaya</translation> <translation id="1580783302095112590">Email terkirim.</translation> <translation id="1582732959743469162">Ini akan menghentikan semua progres download Anda saat ini.</translation> <translation id="1605405588277479165">Nonaktif - Tidak direkomendasikan</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Sandi yang Disarankan Chrome:</translation> <translation id="9094033019050270033">Perbarui sandi</translation> <translation id="9100610230175265781">Frasa sandi diwajibkan</translation> +<translation id="9107664647686727385">Periksa sandi yang telah dibobol</translation> <translation id="9137526406337347448">Layanan Google</translation> <translation id="9148126808321036104">Login sekali lagi</translation> <translation id="9152539721251340337">Buat Kode QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 77bb77f..31f3c63 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -74,7 +74,7 @@ <translation id="1657641691196698092">קובצי Cookie חסומים</translation> <translation id="165877110639533037">אין כרטיסיות פתוחות</translation> <translation id="1674504678466460478"><ph name="SOURCE_LANGUAGE" /> ל<ph name="TARGET_LANGUAGE" /></translation> -<translation id="168715261339224929">כדי שהסימניות שלך יופיעו בכל המכשירים, יש להפעיל סינכרון.</translation> +<translation id="168715261339224929">כדי שהסימניות שלך יופיעו בכל המכשירים, יש להפעיל סנכרון.</translation> <translation id="1687475363370981210">סמן את הכול כ'נקרא'</translation> <translation id="1689333818294560261">כינוי</translation> <translation id="1690731385917361335">אין פריטים</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index da829f8..cb24df2a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">QR ಕೋಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</translation> <translation id="1552525382687785070">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="1554477036522844996">ಹೊಸ ವಿಂಡೋ</translation> +<translation id="1580715474678097352">ಅಪಾಯಕಾರಿ ವೆಬ್ಸೈಟ್ಗಳಿಂದ ಸುರಕ್ಷಿತವಾಗಿರಿ</translation> <translation id="1580783302095112590">ಮೇಲ್ ಕಳುಹಿಸಲಾಗಿದೆ.</translation> <translation id="1582732959743469162">ಇದು ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಡೌನ್ಲೋಡ್ಗಾಗಿ ಎಲ್ಲಾ ಪ್ರಕ್ರಿಯೆಗಳನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ.</translation> <translation id="1605405588277479165">ಆಫ್ - ಶಿಫಾರಸು ಮಾಡಲಾಗಿಲ್ಲ</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Chrome ಸೂಚಿಸಿರುವ ಪಾಸ್ವರ್ಡ್:</translation> <translation id="9094033019050270033">ಪಾಸ್ವರ್ಡ್ ಅಪ್ಡೇಟ್ ಮಾಡು</translation> <translation id="9100610230175265781">ಪಾಸ್ಫ್ರೇಸ್ ಅಗತ್ಯವಿದೆ</translation> +<translation id="9107664647686727385">ಅಪಾಯಕ್ಕೀಡಾದ ಪಾಸ್ವರ್ಡ್ಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸುತ್ತದೆ</translation> <translation id="9137526406337347448">Google ಸೇವೆಗಳು</translation> <translation id="9148126808321036104">ಪುನಃ ಸೈನ್ ಇನ್ ಆಗಿ</translation> <translation id="9152539721251340337">QR ಕೋಡ್ ಅನ್ನು ರಚಿಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 9ebb9ac..7d68410 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">QR कोड स्क्यान गर्नुहोस्</translation> <translation id="1552525382687785070">तपाईंका प्रशासकले सिंंक सुविधा असक्षम पार्नुभएको छ</translation> <translation id="1554477036522844996">नयाँ विन्डो</translation> +<translation id="1580715474678097352">हानिकारक वेबसाइटहरूबाट सुरक्षित रहनुहोस्</translation> <translation id="1580783302095112590">पत्र पठाइयो।</translation> <translation id="1582732959743469162">यस कार्यले तपाईंको जारी डाउनलोडको सम्पूर्ण प्रगति रोक्ने छ।</translation> <translation id="1605405588277479165">अफ छ - सिफारिस गरिँदैन</translation> @@ -728,6 +729,8 @@ <translation id="9087108903408689779">Chrome ले सिफारिस गरेको पासवर्ड:</translation> <translation id="9094033019050270033">पासवर्ड अपडेट गर्नुहोस्</translation> <translation id="9100610230175265781">पासफ्रेज आवश्यक छ</translation> +<translation id="9107664647686727385">अरूले पासवर्डहरू देखेका छन् कि छैनन् भनी जाँच्नुहोस्</translation> +<translation id="9137526406337347448">Google का सेवाहरू</translation> <translation id="9148126808321036104">पुन: साइन इन गर्नुहोस्</translation> <translation id="9152539721251340337">QR कोड सिर्जना गर्नुहोस्</translation> <translation id="9157836665414082580">संवादहरू रोक्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 300fe8c7..9c1a0d3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">Сканирование QR-кода</translation> <translation id="1552525382687785070">Синхронизация отключена администратором</translation> <translation id="1554477036522844996">Новое окно</translation> +<translation id="1580715474678097352">Защищает от опасных сайтов</translation> <translation id="1580783302095112590">Сообщение отправлено.</translation> <translation id="1582732959743469162">Скачивание файлов будет приостановлено.</translation> <translation id="1605405588277479165">Отключено (не рекомендуется)</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Сгенерированный в Chrome пароль:</translation> <translation id="9094033019050270033">Обновить пароль</translation> <translation id="9100610230175265781">Необходима кодовая фраза</translation> +<translation id="9107664647686727385">Определяет раскрытые пароли</translation> <translation id="9137526406337347448">Сервисы Google</translation> <translation id="9148126808321036104">Повторите вход</translation> <translation id="9152539721251340337">Создать QR-код</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index b993a7a..1a7aa99 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">QR కోడ్ను స్కాన్ చేయండి</translation> <translation id="1552525382687785070">సింక్ను మీ నిర్వాహకులు నిలిపివేశారు</translation> <translation id="1554477036522844996">కొత్త విండో</translation> +<translation id="1580715474678097352">ప్రమాదకర వెబ్సైట్ల నుండి సురక్షితంగా ఉండండి</translation> <translation id="1580783302095112590">మెయిల్ పంపబడింది.</translation> <translation id="1582732959743469162">ఇది మీ ప్రస్తుత డౌన్లోడ్ యొక్క మొత్తం ప్రోగ్రెస్ను ఆపివేస్తుంది.</translation> <translation id="1605405588277479165">ఆఫ్లో ఉంది - సిఫార్సు చేయడం లేదు</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Chrome సూచిత పాస్వర్డ్:</translation> <translation id="9094033019050270033">పాస్వర్డ్ను అప్డేట్ చేయి</translation> <translation id="9100610230175265781">రహస్య పదబంధం అవసరం</translation> +<translation id="9107664647686727385">చోరీకి గురైన పాస్వర్డ్ల కోసం చెక్ చేయండి</translation> <translation id="9137526406337347448">Google సేవలు</translation> <translation id="9148126808321036104">మళ్ళీ సైన్ ఇన్ చేయండి</translation> <translation id="9152539721251340337">ఒక QR కోడ్ను సృష్టించండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 830649c..fed9aef4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">QR Kodunu Tara</translation> <translation id="1552525382687785070">Yöneticiniz Senkronizasyonu Devre Dışı Bıraktı</translation> <translation id="1554477036522844996">Yeni Pencere</translation> +<translation id="1580715474678097352">Tehlikeli sitelere karşı koruma altında kalın</translation> <translation id="1580783302095112590">Posta gönderildi.</translation> <translation id="1582732959743469162">Bu, geçerli indirme işleminizin tüm ilerlemesini durduracaktır.</translation> <translation id="1605405588277479165">Kapalı - Önerilmez</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Chrome Tarafından Önerilen Şifre:</translation> <translation id="9094033019050270033">Şifreyi güncelle</translation> <translation id="9100610230175265781">Parola gerekli</translation> +<translation id="9107664647686727385">Güvenliği ihlal edilmiş şifreleri kontrol edin</translation> <translation id="9137526406337347448">Google Hizmetleri</translation> <translation id="9148126808321036104">Tekrar oturum açın</translation> <translation id="9152539721251340337">QR Kodu oluşturma</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uz.xtb b/ios/chrome/app/strings/resources/ios_strings_uz.xtb index bed4766..80503659 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uz.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uz.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">QR kodni skanerlash</translation> <translation id="1552525382687785070">Sinxronizatsiyani administrator faolsizlantirgan</translation> <translation id="1554477036522844996">Yangi oyna</translation> +<translation id="1580715474678097352">Xavfli saytlardan himoyalaning</translation> <translation id="1580783302095112590">Xat yuborildi.</translation> <translation id="1582732959743469162">Joriy yuklanma uchun barcha jarayonlar to‘xtatiladi.</translation> <translation id="1605405588277479165">Yoqilmagan - Tavsiya etilmaydi</translation> @@ -728,6 +729,8 @@ <translation id="9087108903408689779">Chrome taklif qilgan parol:</translation> <translation id="9094033019050270033">Parolni yangilash</translation> <translation id="9100610230175265781">Kodli ibora zarur</translation> +<translation id="9107664647686727385">Oshkor etilgan parollar uchun tekshirish</translation> +<translation id="9137526406337347448">Google xizmatlari</translation> <translation id="9148126808321036104">Qaytadan kiring</translation> <translation id="9152539721251340337">QR kod yaratish</translation> <translation id="9157836665414082580">Muloqot oynalarini bloklash</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index ae1ac809..4fd3f25 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -61,6 +61,7 @@ <translation id="1545749641540134597">Quét mã QR</translation> <translation id="1552525382687785070">Quản trị viên của bạn đã tắt tính năng đồng bộ hóa</translation> <translation id="1554477036522844996">Cửa sổ mới</translation> +<translation id="1580715474678097352">Luôn được bảo vệ khỏi các trang web nguy hiểm</translation> <translation id="1580783302095112590">Thư đã được gửi.</translation> <translation id="1582732959743469162">Thao tác này sẽ ngừng tất cả hoạt động tải xuống đang diễn ra.</translation> <translation id="1605405588277479165">Tắt – Không khuyến nghị</translation> @@ -728,6 +729,7 @@ <translation id="9087108903408689779">Mật khẩu do Chrome đề xuất:</translation> <translation id="9094033019050270033">Cập nhật mật khẩu</translation> <translation id="9100610230175265781">Yêu cầu cụm mật khẩu</translation> +<translation id="9107664647686727385">Kiểm tra để phát hiện mật khẩu bị lộ</translation> <translation id="9137526406337347448">Dịch vụ của Google</translation> <translation id="9148126808321036104">Đăng nhập lại</translation> <translation id="9152539721251340337">Tạo mã QR</translation>
diff --git a/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm b/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm index cac6752..db8630e4 100644 --- a/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm +++ b/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm
@@ -86,8 +86,9 @@ } if (previous_session.OSVersion) { - AppendConfig(config, "BreakpadServerParameterPrefix_os_version", + AppendConfig(config, "BreakpadServerParameterPrefix_osVersion", base::SysNSStringToUTF8(previous_session.OSVersion)); + AppendConfig(config, "BreakpadServerParameterPrefix_osName", "iOS"); } AppendConfig(config, "BreakpadServerParameterPrefix_platform",
diff --git a/ios/chrome/browser/crash_report/synthetic_crash_report_util_unittest.mm b/ios/chrome/browser/crash_report/synthetic_crash_report_util_unittest.mm index 506013ab..3567cfc 100644 --- a/ios/chrome/browser/crash_report/synthetic_crash_report_util_unittest.mm +++ b/ios/chrome/browser/crash_report/synthetic_crash_report_util_unittest.mm
@@ -102,7 +102,7 @@ // Verify config file content. Config file has the following format: // <Key1>\n<Value1Length>\n<Value1>\n...<KeyN>\n<ValueNLength>\n<ValueN> - ASSERT_EQ(45U, config_lines.size()) + ASSERT_EQ(48U, config_lines.size()) << "<content>" << config_content << "</content>"; EXPECT_EQ("MinidumpDir", config_lines[0]); @@ -158,23 +158,27 @@ EXPECT_EQ(base::NumberToString(strlen(kYesString)), config_lines[31]); EXPECT_EQ(kYesString, config_lines[32]); - EXPECT_EQ("BreakpadServerParameterPrefix_os_version", config_lines[33]); + EXPECT_EQ("BreakpadServerParameterPrefix_osVersion", config_lines[33]); EXPECT_EQ(base::NumberToString(kOSVersion.length), config_lines[34]); EXPECT_EQ(base::SysNSStringToUTF8(kOSVersion), config_lines[35]); - EXPECT_EQ("BreakpadServerParameterPrefix_platform", config_lines[36]); + EXPECT_EQ("BreakpadServerParameterPrefix_osName", config_lines[36]); + EXPECT_EQ("3", config_lines[37]); + EXPECT_EQ("iOS", config_lines[38]); + + EXPECT_EQ("BreakpadServerParameterPrefix_platform", config_lines[39]); EXPECT_EQ(base::NumberToString(base::SysInfo::HardwareModelName().size()), - config_lines[37]); - EXPECT_EQ(base::SysInfo::HardwareModelName(), config_lines[38]); + config_lines[40]); + EXPECT_EQ(base::SysInfo::HardwareModelName(), config_lines[41]); - EXPECT_EQ("BreakpadServerParameterPrefix_url", config_lines[39]); - EXPECT_EQ(base::NumberToString(kURL.length), config_lines[40]); - EXPECT_EQ(base::SysNSStringToUTF8(kURL), config_lines[41]); + EXPECT_EQ("BreakpadServerParameterPrefix_url", config_lines[42]); + EXPECT_EQ(base::NumberToString(kURL.length), config_lines[43]); + EXPECT_EQ(base::SysNSStringToUTF8(kURL), config_lines[44]); - EXPECT_EQ("BreakpadProcessUpTime", config_lines[42]); + EXPECT_EQ("BreakpadProcessUpTime", config_lines[45]); EXPECT_EQ(base::NumberToString(base::NumberToString(kUptimeMs).size()), - config_lines[43]); - EXPECT_EQ(base::NumberToString(kUptimeMs), config_lines[44]); + config_lines[46]); + EXPECT_EQ(base::NumberToString(kUptimeMs), config_lines[47]); // Read minidump file. It must be empty as there is no stack trace, but // Breakpad will not upload config without minidump file.
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 f3bde88..5a08e98 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
@@ -769,6 +769,12 @@ if (self.checkDidRun && issuesFound) { [self updateTimestampOfLastCheck]; self.checkDidRun = NO; + } else if (self.checkDidRun && !issuesFound) { + // Clear the timestamp if the last check found no issues. + [[NSUserDefaults standardUserDefaults] + setDouble:base::Time().ToDoubleT() + forKey:kTimestampOfLastIssueFoundKey]; + self.checkDidRun = NO; } // If no checks are still running, reset |checkStartItem|. self.checkStartState = CheckStartStateDefault; @@ -1164,7 +1170,7 @@ forKey:kTimestampOfLastIssueFoundKey]; } -// Shows the timestamp if a safety check has previously found issues. +// Shows the timestamp if the last safety check found issues. - (void)showTimestampIfNeeded { if (PreviousSafetyCheckIssueFound()) { TableViewLinkHeaderFooterItem* footerItem = @@ -1173,7 +1179,7 @@ footerItem.text = [self formatElapsedTimeSinceLastCheck]; [self.consumer setTimestampFooterItem:footerItem]; } else { - // Hide the timestamp if safety check has never found issues. + // Hide the timestamp if the last safety check didn't find issues. [self.consumer setTimestampFooterItem:nil]; } }
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 60e49fff..bd12293e 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
@@ -306,6 +306,31 @@ resetNSUserDefaultsForTesting(); } +TEST_F(SafetyCheckMediatorTest, TimestampResetIfNoIssuesInCheck) { + mediator_.checkDidRun = true; + mediator_.passwordCheckRowState = PasswordCheckRowStateUnSafe; + [mediator_ resetsCheckStartItemIfNeeded]; + + base::Time lastCompletedCheck = + base::Time::FromDoubleT([[NSUserDefaults standardUserDefaults] + doubleForKey:kTimestampOfLastIssueFoundKey]); + EXPECT_GE(lastCompletedCheck, + base::Time::Now() - base::TimeDelta::FromSeconds(1)); + EXPECT_LE(lastCompletedCheck, + base::Time::Now() + base::TimeDelta::FromSeconds(1)); + + mediator_.checkDidRun = true; + mediator_.passwordCheckRowState = PasswordCheckRowStateSafe; + [mediator_ resetsCheckStartItemIfNeeded]; + + lastCompletedCheck = + base::Time::FromDoubleT([[NSUserDefaults standardUserDefaults] + doubleForKey:kTimestampOfLastIssueFoundKey]); + EXPECT_EQ(base::Time(), lastCompletedCheck); + + resetNSUserDefaultsForTesting(); +} + // Safe Browsing check tests. TEST_F(SafetyCheckMediatorTest, SafeBrowsingEnabledReturnsSafeState) { mediator_.safeBrowsingPreference.value = true;
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.h b/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.h index 18d22cb..dc533c0 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.h +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.h
@@ -7,7 +7,7 @@ #import <UIKit/UIKit.h> -// Whether or not safety check previously found an issue. +// Whether or not previous safety check run found an issue. bool PreviousSafetyCheckIssueFound(); #endif // IOS_CHROME_BROWSER_UI_SETTINGS_SAFETY_CHECK_SAFETY_CHECK_UTILS_H_
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.mm index 7853a8ee..705e7a5 100644 --- a/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.mm +++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_utils.mm
@@ -13,7 +13,7 @@ #endif bool PreviousSafetyCheckIssueFound() { - // Verify if safety check has found issues at least once. + // Verify if the last safety check found issues. NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; base::Time lastCompletedCheck = base::Time::FromDoubleT( [defaults doubleForKey:kTimestampOfLastIssueFoundKey]);
diff --git a/ios/chrome/browser/ui/sharing/OWNERS b/ios/chrome/browser/ui/sharing/OWNERS new file mode 100644 index 0000000..7e5d8624 --- /dev/null +++ b/ios/chrome/browser/ui/sharing/OWNERS
@@ -0,0 +1,4 @@ +seblalancette@chromium.org + +# TEAM: ios-directory-owners@chromium.org +# OS: iOS
diff --git a/ios/chrome/browser/ui/tab_grid/grid/BUILD.gn b/ios/chrome/browser/ui/tab_grid/grid/BUILD.gn index 43ad46c7..9584f2ff 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/BUILD.gn +++ b/ios/chrome/browser/ui/tab_grid/grid/BUILD.gn
@@ -32,6 +32,8 @@ "grid_view_controller.mm", "horizontal_layout.h", "horizontal_layout.mm", + "plus_sign_cell.h", + "plus_sign_cell.mm", "reordering_layout_util.h", "reordering_layout_util.mm", ] @@ -41,8 +43,11 @@ deps = [ ":grid_ui_constants", "resources:grid_cell_close_button", + "resources:grid_cell_plus_sign", "resources:grid_theme_dark_selection_tint_color", "resources:grid_theme_selection_tint_color", + "resources:plus_sign_grid_cell_background_color", + "resources:plus_sign_grid_cell_background_dark_color", "//base", "//ios/chrome/app/strings", "//ios/chrome/browser",
diff --git a/ios/chrome/browser/ui/tab_grid/grid/grid_cell.mm b/ios/chrome/browser/ui/tab_grid/grid/grid_cell.mm index 83339c3..9fe7b69 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/grid_cell.mm +++ b/ios/chrome/browser/ui/tab_grid/grid/grid_cell.mm
@@ -152,7 +152,7 @@ self.selected = NO; } -#pragma mark - Accessibility +#pragma mark - UIAccessibility - (BOOL)isAccessibilityElement { // This makes the whole cell tappable in VoiceOver rather than the individual @@ -179,7 +179,7 @@ // This background color must be set to avoid the corners behind the rounded // layer from showing when dragging and dropping. - self.backgroundColor = [UIColor colorNamed:kGridBackgroundColor]; + self.backgroundColor = [UIColor clearColor]; self.iconView.backgroundColor = UIColor.clearColor; switch (theme) {
diff --git a/ios/chrome/browser/ui/tab_grid/grid/grid_constants.h b/ios/chrome/browser/ui/tab_grid/grid/grid_constants.h index 7f2847e..cb7b3479 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/grid_constants.h +++ b/ios/chrome/browser/ui/tab_grid/grid/grid_constants.h
@@ -20,6 +20,10 @@ // Grid styling. extern NSString* const kGridBackgroundColor; +// PlusSignCell styling +extern NSString* const kPlusSignCellBackgroundColor; +extern NSString* const kPlusSignCellBackgroundDarkColor; + // GridLayout. // Extra-small screens require a slightly different layout configuration (e.g., // margins) even though they may be categorized into the same size class as
diff --git a/ios/chrome/browser/ui/tab_grid/grid/grid_constants.mm b/ios/chrome/browser/ui/tab_grid/grid/grid_constants.mm index c5c70a33..585ad0d1 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/grid_constants.mm +++ b/ios/chrome/browser/ui/tab_grid/grid/grid_constants.mm
@@ -18,6 +18,12 @@ // Grid styling. NSString* const kGridBackgroundColor = @"grid_background_color"; +// PlusSignCell styling +NSString* const kPlusSignCellBackgroundColor = + @"plus_sign_grid_cell_background_color"; +NSString* const kPlusSignCellBackgroundDarkColor = + @"plus_sign_grid_cell_background_dark_color"; + // Definition of limited width for applicable size classes. The first refers to // the horizontal size class; the second to the vertical. const CGFloat kGridLayoutCompactCompactLimitedWidth = 666.0f;
diff --git a/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm b/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm index 394c281..ace8b5a1 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_grid/grid/grid_view_controller.mm
@@ -22,6 +22,7 @@ #import "ios/chrome/browser/ui/tab_grid/grid/grid_item.h" #import "ios/chrome/browser/ui/tab_grid/grid/grid_layout.h" #import "ios/chrome/browser/ui/tab_grid/grid/horizontal_layout.h" +#import "ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.h" #import "ios/chrome/browser/ui/tab_grid/transitions/grid_transition_layout.h" #import "ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.h" #include "ios/chrome/browser/ui/ui_feature_flags.h" @@ -34,6 +35,7 @@ namespace { NSString* const kCellIdentifier = @"GridCellIdentifier"; +NSString* const kPlusSignCellIdentifier = @"PlusSignCellIdentifier"; // Creates an NSIndexPath with |index| in section 0. NSIndexPath* CreateIndexPath(NSInteger index) { return [NSIndexPath indexPathForItem:index inSection:0]; @@ -125,6 +127,8 @@ collectionViewLayout:self.currentLayout]; [collectionView registerClass:[GridCell class] forCellWithReuseIdentifier:kCellIdentifier]; + [collectionView registerClass:[PlusSignCell class] + forCellWithReuseIdentifier:kPlusSignCellIdentifier]; collectionView.dataSource = self; collectionView.delegate = self; collectionView.backgroundView = [[UIView alloc] init]; @@ -310,33 +314,47 @@ - (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section { + if (IsThumbStripEnabled()) { + // The PlusSignCell (new item button) is always appended at the end of the + // collection. + return base::checked_cast<NSInteger>(self.items.count + 1); + } return base::checked_cast<NSInteger>(self.items.count); } - (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath { - GridCell* cell = base::mac::ObjCCastStrict<GridCell>([collectionView - dequeueReusableCellWithReuseIdentifier:kCellIdentifier - forIndexPath:indexPath]); - cell.accessibilityIdentifier = - [NSString stringWithFormat:@"%@%ld", kGridCellIdentifierPrefix, - base::checked_cast<long>(indexPath.item)]; + NSUInteger itemIndex = base::checked_cast<NSUInteger>(indexPath.item); + UICollectionViewCell* cell; - // In some cases this is called with an indexPath.item that's beyond (by 1) - // the bounds of self.items -- see crbug.com/1068136. Presumably this is a - // race condition where an item has been deleted at the same time as the - // collection is doing layout (potentially during rotation?). DCHECK to - // catch this in debug, and then in production fudge by duplicating the last - // cell. The assumption is that there will be another, correct layout shortly - // after the incorrect one. - NSUInteger itemIndex = indexPath.item; - DCHECK(itemIndex < self.items.count); - // Outside of debug builds, keep array bounds valid. - if (itemIndex >= self.items.count) - itemIndex = self.items.count - 1; + if ([self isIndexPathForPlusSignCell:indexPath]) { + cell = [collectionView + dequeueReusableCellWithReuseIdentifier:kPlusSignCellIdentifier + forIndexPath:indexPath]; + PlusSignCell* plusSignCell = base::mac::ObjCCastStrict<PlusSignCell>(cell); + plusSignCell.theme = self.theme; + } else { + // In some cases this is called with an indexPath.item that's beyond (by 1) + // the bounds of self.items -- see crbug.com/1068136. Presumably this is a + // race condition where an item has been deleted at the same time as the + // collection is doing layout (potentially during rotation?). DCHECK to + // catch this in debug, and then in production fudge by duplicating the last + // cell. The assumption is that there will be another, correct layout + // shortly after the incorrect one. + DCHECK_LT(itemIndex, self.items.count); + // Outside of debug builds, keep array bounds valid. + if (itemIndex >= self.items.count) + itemIndex = self.items.count - 1; - GridItem* item = self.items[itemIndex]; - [self configureCell:cell withItem:item]; + GridItem* item = self.items[itemIndex]; + cell = + [collectionView dequeueReusableCellWithReuseIdentifier:kCellIdentifier + forIndexPath:indexPath]; + cell.accessibilityIdentifier = [NSString + stringWithFormat:@"%@%ld", kGridCellIdentifierPrefix, itemIndex]; + GridCell* gridCell = base::mac::ObjCCastStrict<GridCell>(cell); + [self configureCell:gridCell withItem:item]; + } // Set the z index of cells so that lower rows are superposed during // transitions between grid and horizontal layouts. cell.layer.zPosition = itemIndex; @@ -359,6 +377,10 @@ - (BOOL)collectionView:(UICollectionView*)collectionView canMoveItemAtIndexPath:(NSIndexPath*)indexPath { + if ([self isIndexPathForPlusSignCell:indexPath]) { + // The PlusSignCell is at the end of the collection and should not be moved. + return NO; + } return indexPath && self.items.count > 1; } @@ -381,6 +403,17 @@ #pragma mark - UICollectionViewDelegate +// This prevents the user from dragging a cell past the plus sign cell (the last +// cell in the collection view). +- (NSIndexPath*)collectionView:(UICollectionView*)collectionView + targetIndexPathForMoveFromItemAtIndexPath:(NSIndexPath*)originalIndexPath + toProposedIndexPath:(NSIndexPath*)proposedIndexPath { + if ([self isIndexPathForPlusSignCell:proposedIndexPath]) { + return CreateIndexPath(proposedIndexPath.item - 1); + } + return proposedIndexPath; +} + // This method is used instead of -didSelectItemAtIndexPath, because any // selection events will be signalled through the model layer and handled in // the GridConsumer -selectItemWithID: method. @@ -424,6 +457,10 @@ - (NSArray<UIDragItem*>*)collectionView:(UICollectionView*)collectionView itemsForBeginningDragSession:(id<UIDragSession>)session atIndexPath:(NSIndexPath*)indexPath { + if ([self isIndexPathForPlusSignCell:indexPath]) { + // Return an empty array because the plus sign cell should not be dragged. + return @[]; + } GridItem* item = self.items[indexPath.item]; return @[ [self.dragDropHandler dragItemForItemWithID:item.identifier] ]; } @@ -439,6 +476,10 @@ - (UIDragPreviewParameters*)collectionView:(UICollectionView*)collectionView dragPreviewParametersForItemAtIndexPath:(NSIndexPath*)indexPath { + if ([self isIndexPathForPlusSignCell:indexPath]) { + // Return nil so that the plus sign cell doesn't superpose the dragged cell. + return nil; + } GridCell* gridCell = base::mac::ObjCCastStrict<GridCell>( [self.collectionView cellForItemAtIndexPath:indexPath]); return gridCell.dragPreviewParameters; @@ -471,19 +512,31 @@ id<UICollectionViewDropItem> item = coordinator.items.firstObject; // Append to the end of the collection, unless drop index is specified. - NSUInteger destinationIndex = self.items.count; - if (item.sourceIndexPath) { - // The sourceIndexPath is non-nil if the drop item is from this same - // collection view. Move to last position rather than appending if this is a - // reorder operation. - destinationIndex = self.items.count - 1; - } + // The sourceIndexPath is nil if the drop item is not from the same + // collection view. Set the destinationIndex to reflect the addition of an + // item. + NSUInteger destinationIndex = + item.sourceIndexPath ? self.items.count - 1 : self.items.count; if (coordinator.destinationIndexPath) { destinationIndex = base::checked_cast<NSUInteger>(coordinator.destinationIndexPath.item); } - NSIndexPath* dropIndexPath = [NSIndexPath indexPathForItem:destinationIndex - inSection:0]; + if (IsThumbStripEnabled()) { + // The sourceIndexPath is nil if the drop item is not from the same + // collection view. + NSUInteger plusSignCellIndex = + item.sourceIndexPath ? self.items.count : self.items.count + 1; + // Can't use [self isIndexPathForPlusSignCell:] here because the index of + // the plus sign cell in this point in code depends on + // |item.sourceIndexPath|. + // I.e., in this point in code, |collectionView.numberOfItemsInSection| is + // equal to |self.items.count + 1|. + if (destinationIndex == plusSignCellIndex) { + // Prevent the cell from being dropped where the plus sign cell is. + destinationIndex = plusSignCellIndex - 1; + } + } + NSIndexPath* dropIndexPath = CreateIndexPath(destinationIndex); // Drop synchronously if local object is available. if (item.dragItem.localObject) { @@ -746,6 +799,20 @@ #pragma mark - Private +// Checks whether |indexPath| corresponds to the index path of the plus sign +// cell. The plus sign cell is the last cell in the collection view after all +// the items. +- (BOOL)isIndexPathForPlusSignCell:(NSIndexPath*)indexPath { + // When items are dragged from another collection, the count of cells in the + // collectionView is increased before self.items.count increases. That's what + // happens when the UICollectionViewDelegate's method + // |targetIndexPathForMoveFromItemAtIndexPath:toProposedIndexPath:| gets + // called, and that's why indexPath.item is not being compared to + // self.items.count here. + return IsThumbStripEnabled() && + indexPath.item == [self.collectionView numberOfItemsInSection:0] - 1; +} + // Performs model updates and view updates together. - (void)performModelUpdates:(ProceduralBlock)modelUpdates collectionViewUpdates:(ProceduralBlock)collectionViewUpdates @@ -800,6 +867,10 @@ // Tells the delegate that the user tapped the item with identifier // corresponding to |indexPath|. - (void)tappedItemAtIndexPath:(NSIndexPath*)indexPath { + if ([self isIndexPathForPlusSignCell:indexPath]) { + [self.delegate didTapPlusSignInGridViewController:self]; + return; + } NSUInteger index = base::checked_cast<NSUInteger>(indexPath.item); DCHECK_LT(index, self.items.count); NSString* itemID = self.items[index].identifier;
diff --git a/ios/chrome/browser/ui/tab_grid/grid/horizontal_layout.mm b/ios/chrome/browser/ui/tab_grid/grid/horizontal_layout.mm index 7e34265..16c5265 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/horizontal_layout.mm +++ b/ios/chrome/browser/ui/tab_grid/grid/horizontal_layout.mm
@@ -30,8 +30,10 @@ self.itemSize = kGridCellSizeSmall; CGFloat height = CGRectGetHeight(self.collectionView.bounds); CGFloat spacing = kGridLayoutLineSpacingCompactCompactLimitedWidth; + CGFloat topInset = spacing - kGridCellSelectionRingGapWidth - + kGridCellSelectionRingTintWidth; self.sectionInset = UIEdgeInsets{ - spacing, spacing, height - self.itemSize.height - 2 * spacing, spacing}; + topInset, spacing, height - self.itemSize.height - 2 * topInset, spacing}; self.minimumLineSpacing = kGridLayoutLineSpacingRegularRegular; }
diff --git a/ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.h b/ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.h new file mode 100644 index 0000000..ef7fca3c --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.h
@@ -0,0 +1,20 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_TAB_GRID_GRID_PLUS_SIGN_CELL_H_ +#define IOS_CHROME_BROWSER_UI_TAB_GRID_GRID_PLUS_SIGN_CELL_H_ + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/ui/tab_grid/grid/grid_theme.h" + +// A square-ish cell in a grid that contains a plus sign. +// TODO(crbug.com/1137983): Add Accessibility label to the plus sign cell. +// TODO(crbug.com/1137986): Add eg2 tests and unit tests. +@interface PlusSignCell : UICollectionViewCell +// The look of the cell. +@property(nonatomic, assign) GridTheme theme; +@end + +#endif // IOS_CHROME_BROWSER_UI_TAB_GRID_GRID_PLUS_SIGN_CELL_H_
diff --git a/ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.mm b/ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.mm new file mode 100644 index 0000000..15f1e91 --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.mm
@@ -0,0 +1,85 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/tab_grid/grid/plus_sign_cell.h" + +#import "ios/chrome/browser/ui/tab_grid/grid/grid_constants.h" +#import "ios/chrome/common/ui/util/constraints_ui_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@interface PlusSignCell () +@property(nonatomic, weak) UIView* plusSignView; +@end + +@implementation PlusSignCell + +// |-dequeueReusableCellWithReuseIdentifier:forIndexPath:| calls this method to +// initialize a cell. +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + UIView* contentView = self.contentView; + contentView.layer.cornerRadius = kGridCellCornerRadius; + contentView.layer.masksToBounds = YES; + UIImageView* plusSignView = [[UIImageView alloc] + initWithImage:[UIImage imageNamed:@"grid_cell_plus_sign"]]; + [self.contentView addSubview:plusSignView]; + plusSignView.translatesAutoresizingMaskIntoConstraints = NO; + _plusSignView = plusSignView; + + AddSameCenterConstraints(plusSignView, self.contentView); + } + return self; +} + +#pragma mark - UIAccessibility + +- (BOOL)isAccessibilityElement { + // This makes the whole cell tappable in VoiceOver rather than the plus sign. + return YES; +} + +#pragma mark - Public + +// Updates the theme to either dark or light. Updating is only done if the +// current theme is not the desired theme. +- (void)setTheme:(GridTheme)theme { + if (_theme == theme) + return; + + switch (theme) { + // This is necessary for iOS 13 because on iOS 13, this will return + // the dynamic color (which will then be colored with the user + // interface style). + // On iOS 12, this will always return the dynamic color in the light + // variant. + case GridThemeLight: + self.contentView.backgroundColor = + [UIColor colorNamed:kPlusSignCellBackgroundColor]; + break; + // These dark-theme specific colorsets should only be used for iOS 12 + // dark theme, as they will be removed along with iOS 12. + // TODO (crbug.com/981889): The following lines will be removed + // along with iOS 12 + case GridThemeDark: + self.contentView.backgroundColor = + [UIColor colorNamed:kPlusSignCellBackgroundDarkColor]; + break; + } + + if (@available(iOS 13, *)) { + // When iOS 12 is dropped, only the next line is needed for styling. + // Every other check for |GridThemeDark| can be removed, as well as + // the dark theme specific assets. + self.overrideUserInterfaceStyle = (theme == GridThemeDark) + ? UIUserInterfaceStyleDark + : UIUserInterfaceStyleUnspecified; + } + _theme = theme; +} + +@end
diff --git a/ios/chrome/browser/ui/tab_grid/grid/resources/BUILD.gn b/ios/chrome/browser/ui/tab_grid/grid/resources/BUILD.gn index adc9b86..11d9c7c5 100644 --- a/ios/chrome/browser/ui/tab_grid/grid/resources/BUILD.gn +++ b/ios/chrome/browser/ui/tab_grid/grid/resources/BUILD.gn
@@ -12,6 +12,14 @@ ] } +imageset("grid_cell_plus_sign") { + sources = [ + "grid_cell_plus_sign.imageset/Contents.json", + "grid_cell_plus_sign.imageset/grid_cell_plus_sign@2x.png", + "grid_cell_plus_sign.imageset/grid_cell_plus_sign@3x.png", + ] +} + colorset("grid_theme_selection_tint_color") { sources = [ "grid_theme_selection_tint_color.colorset/Contents.json" ] } @@ -19,3 +27,12 @@ colorset("grid_theme_dark_selection_tint_color") { sources = [ "grid_theme_dark_selection_tint_color.colorset/Contents.json" ] } + +colorset("plus_sign_grid_cell_background_color") { + sources = [ "plus_sign_grid_cell_background_color.colorset/Contents.json" ] +} + +colorset("plus_sign_grid_cell_background_dark_color") { + sources = + [ "plus_sign_grid_cell_background_dark_color.colorset/Contents.json" ] +}
diff --git a/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/Contents.json b/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/Contents.json new file mode 100644 index 0000000..a616811 --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/Contents.json
@@ -0,0 +1,18 @@ +{ + "images": [ + { + "idiom": "universal", + "scale": "2x", + "filename": "grid_cell_plus_sign@2x.png" + }, + { + "idiom": "universal", + "scale": "3x", + "filename": "grid_cell_plus_sign@3x.png" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +}
diff --git a/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/grid_cell_plus_sign@2x.png b/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/grid_cell_plus_sign@2x.png new file mode 100644 index 0000000..31f2ab16 --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/grid_cell_plus_sign@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/grid_cell_plus_sign@3x.png b/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/grid_cell_plus_sign@3x.png new file mode 100644 index 0000000..5903929 --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/resources/grid_cell_plus_sign.imageset/grid_cell_plus_sign@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json b/ios/chrome/browser/ui/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json new file mode 100644 index 0000000..75c173f --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json
@@ -0,0 +1,38 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "display-p3", + "components" : { + "red" : "0.200", + "alpha" : "1.000", + "blue" : "0.200", + "green" : "0.200" + } + } + }, + { + "idiom" : "universal", + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "display-p3", + "components" : { + "red" : "0.125", + "alpha" : "1.000", + "blue" : "0.141", + "green" : "0.129" + } + } + } + ] +}
diff --git a/ios/chrome/browser/ui/tab_grid/grid/resources/plus_sign_grid_cell_background_dark_color.colorset/Contents.json b/ios/chrome/browser/ui/tab_grid/grid/resources/plus_sign_grid_cell_background_dark_color.colorset/Contents.json new file mode 100644 index 0000000..393a202 --- /dev/null +++ b/ios/chrome/browser/ui/tab_grid/grid/resources/plus_sign_grid_cell_background_dark_color.colorset/Contents.json
@@ -0,0 +1,20 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "colors" : [ + { + "idiom" : "universal", + "color" : { + "color-space" : "display-p3", + "components" : { + "red" : "0.125", + "alpha" : "1.000", + "blue" : "0.141", + "green" : "0.129" + } + } + } + ] +}
diff --git a/ios/chrome/browser/ui/tab_grid/tab_grid_constants.h b/ios/chrome/browser/ui/tab_grid/tab_grid_constants.h index cdb4ad1..e7ee227 100644 --- a/ios/chrome/browser/ui/tab_grid/tab_grid_constants.h +++ b/ios/chrome/browser/ui/tab_grid/tab_grid_constants.h
@@ -52,4 +52,8 @@ // automatically scrolling to the regular tabs panel. extern const int64_t kTabGridScrollAnimationDelayInMilliseconds; +// The distance travelled by the thumb strip thumbnails during the slide-in +// animation of the thumb strip reveal transition. +extern const CGFloat kThumbStripSlideInHeight; + #endif // IOS_CHROME_BROWSER_UI_TAB_GRID_TAB_GRID_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/tab_grid/tab_grid_constants.mm b/ios/chrome/browser/ui/tab_grid/tab_grid_constants.mm index 5496956a..31e0c4c 100644 --- a/ios/chrome/browser/ui/tab_grid/tab_grid_constants.mm +++ b/ios/chrome/browser/ui/tab_grid/tab_grid_constants.mm
@@ -54,3 +54,7 @@ // The delay (in milliseconds) after closing the last incognito tab and before // automatically scrolling to the regular tabs panel. const int64_t kTabGridScrollAnimationDelayInMilliseconds = 300; + +// The distance travelled by the thumb strip thumbnails during the slide-in +// animation of the thumb strip reveal transition. +const CGFloat kThumbStripSlideInHeight = 40.0f;
diff --git a/ios/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm b/ios/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm index 6f8ac69..8b316af0a 100644 --- a/ios/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm +++ b/ios/chrome/browser/ui/tab_grid/tab_grid_coordinator.mm
@@ -185,6 +185,7 @@ if (IsThumbStripEnabled()) { [self.thumbStripCoordinator.panHandler setState:ViewRevealState::Revealed animated:animated]; + [self.baseViewController contentWillAppearAnimated:animated]; return; }
diff --git a/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm index 5f014fd..5b54ed6a 100644 --- a/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_grid/tab_grid_view_controller.mm
@@ -445,16 +445,43 @@ - (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { self.scrollView.scrollEnabled = NO; -} - -- (void)animateViewReveal:(ViewRevealState)viewRevealState { - switch (viewRevealState) { + switch (currentViewRevealState) { case ViewRevealState::Hidden: - self.foregroundView.alpha = 1; + self.topToolbar.transform = CGAffineTransformMakeTranslation( + 0, [self hiddenTopToolbarYTranslation]); + [self gridViewControllerForPage:self.currentPage].gridView.transform = + CGAffineTransformMakeTranslation(0, kThumbStripSlideInHeight); break; case ViewRevealState::Peeked: + break; + case ViewRevealState::Revealed: + break; + } +} + +- (void)animateViewReveal:(ViewRevealState)nextViewRevealState { + switch (nextViewRevealState) { + case ViewRevealState::Hidden: + self.foregroundView.alpha = 1; + self.topToolbar.transform = CGAffineTransformMakeTranslation( + 0, [self hiddenTopToolbarYTranslation]); + [self gridViewControllerForPage:self.currentPage].gridView.transform = + CGAffineTransformMakeTranslation(0, kThumbStripSlideInHeight); + break; + case ViewRevealState::Peeked: + self.foregroundView.alpha = 0; + self.topToolbar.transform = CGAffineTransformMakeTranslation( + 0, [self hiddenTopToolbarYTranslation]); + [self gridViewControllerForPage:self.currentPage].gridView.transform = + CGAffineTransformIdentity; + break; case ViewRevealState::Revealed: self.foregroundView.alpha = 0; + self.topToolbar.transform = CGAffineTransformIdentity; + [self gridViewControllerForPage:self.currentPage].gridView.transform = + CGAffineTransformMakeTranslation( + 0, self.topToolbar.intrinsicContentSize.height); + [self contentWillAppearAnimated:YES]; break; } } @@ -467,6 +494,13 @@ #pragma mark - Private +// Returns the ammount by which the top toolbar should be translated in the y +// direction when hidden. Used for the slide-in animation. +- (CGFloat)hiddenTopToolbarYTranslation { + return -self.topToolbar.frame.size.height - + self.scrollView.safeAreaInsets.top; +} + // Sets the proper insets for the Remote Tabs ViewController to accomodate for // the safe area, toolbar, and status bar. - (void)setInsetForRemoteTabs { @@ -513,8 +547,9 @@ CGFloat bottomInset = self.configuration == TabGridConfigurationBottomToolbar ? self.bottomToolbar.intrinsicContentSize.height : 0; - UIEdgeInsets inset = UIEdgeInsetsMake( - self.topToolbar.intrinsicContentSize.height, 0, bottomInset, 0); + CGFloat topInset = + IsThumbStripEnabled() ? 0 : self.topToolbar.intrinsicContentSize.height; + UIEdgeInsets inset = UIEdgeInsetsMake(topInset, 0, bottomInset, 0); inset.left = self.scrollView.safeAreaInsets.left; inset.right = self.scrollView.safeAreaInsets.right; inset.top += self.scrollView.safeAreaInsets.top;
diff --git a/mojo/public/mojom/base/values.mojom b/mojo/public/mojom/base/values.mojom index ea7c1fa..5ffe845 100644 --- a/mojo/public/mojom/base/values.mojom +++ b/mojo/public/mojom/base/values.mojom
@@ -8,6 +8,7 @@ // // One notable caveat is that Value supports arbitrary binary data, which JSON // does not support natively. +[Stable] union Value { // Null type placeholder. This field is never used. uint8 null_value; @@ -29,10 +30,12 @@ // declaration. Though both of these types are mapped to base::Value in C++, // the generated deserialization will guarantee that the method is only invoked // with a base::Value of the correct subtype. +[Stable] struct DictionaryValue { map<string, Value> storage; }; +[Stable] struct ListValue { array<Value> storage; };
diff --git a/net/proxy_resolution/win/proxy_config_service_win.cc b/net/proxy_resolution/win/proxy_config_service_win.cc index 5c7b72a..d363465 100644 --- a/net/proxy_resolution/win/proxy_config_service_win.cc +++ b/net/proxy_resolution/win/proxy_config_service_win.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/callback.h" #include "base/logging.h" #include "base/strings/string_tokenizer.h" #include "base/strings/string_util.h"
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc index f905fbdc..e8032e4 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -26,6 +26,7 @@ #include "base/threading/thread_id_name_manager.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" +#include "base/trace_event/task_execution_macros.h" #include "base/trace_event/thread_instruction_count.h" #include "base/trace_event/trace_event.h" #include "base/trace_event/trace_log.h" @@ -1018,20 +1019,17 @@ TEST_F(TraceEventDataSourceTest, TaskExecutionEvent) { CreateTraceEventDataSource(); - INTERNAL_TRACE_EVENT_ADD( - TRACE_EVENT_PHASE_INSTANT, "toplevel", "ThreadControllerImpl::RunTask", - TRACE_EVENT_SCOPE_THREAD | TRACE_EVENT_FLAG_TYPED_PROTO_ARGS, "src_file", - "my_file", "src_func", "my_func"); - INTERNAL_TRACE_EVENT_ADD( - TRACE_EVENT_PHASE_INSTANT, "toplevel", "ThreadControllerImpl::RunTask", - TRACE_EVENT_SCOPE_THREAD | TRACE_EVENT_FLAG_TYPED_PROTO_ARGS, "src_file", - "my_file", "src_func", "my_func"); + base::PendingTask task; + task.posted_from = + base::Location("my_func", "my_file", 0, /*program_counter=*/&task); + { TRACE_TASK_EXECUTION("ThreadControllerImpl::RunTask1", task); } + { TRACE_TASK_EXECUTION("ThreadControllerImpl::RunTask1", task); } size_t packet_index = ExpectStandardPreamble(); auto* e_packet = producer_client()->GetFinalizedPacket(packet_index++); ExpectTraceEvent(e_packet, /*category_iid=*/1u, /*name_iid=*/1u, - TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_PHASE_BEGIN); const auto& annotations = e_packet->track_event().debug_annotations(); EXPECT_EQ(annotations.size(), 0); @@ -1043,9 +1041,9 @@ EXPECT_EQ(locations[0].function_name(), "my_func"); // Second event should refer to the same interning entries. - auto* e_packet2 = producer_client()->GetFinalizedPacket(packet_index++); + auto* e_packet2 = producer_client()->GetFinalizedPacket(++packet_index); ExpectTraceEvent(e_packet2, /*category_iid=*/1u, /*name_iid=*/1u, - TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_PHASE_BEGIN); EXPECT_EQ(e_packet2->track_event().task_execution().posted_from_iid(), 1u); EXPECT_EQ(e_packet2->interned_data().source_locations().size(), 0); @@ -1054,16 +1052,16 @@ TEST_F(TraceEventDataSourceTest, TaskExecutionEventWithoutFunction) { CreateTraceEventDataSource(); - INTERNAL_TRACE_EVENT_ADD( - TRACE_EVENT_PHASE_INSTANT, "toplevel", "ThreadControllerImpl::RunTask", - TRACE_EVENT_SCOPE_THREAD | TRACE_EVENT_FLAG_TYPED_PROTO_ARGS, "src", - "my_file"); + base::PendingTask task; + task.posted_from = base::Location(/*function_name=*/nullptr, "my_file", 0, + /*program_counter=*/&task); + { TRACE_TASK_EXECUTION("ThreadControllerImpl::RunTask", task); } size_t packet_index = ExpectStandardPreamble(); auto* e_packet = producer_client()->GetFinalizedPacket(packet_index++); ExpectTraceEvent(e_packet, /*category_iid=*/1u, /*name_iid=*/1u, - TRACE_EVENT_PHASE_INSTANT, TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_PHASE_BEGIN, TRACE_EVENT_SCOPE_THREAD); const auto& annotations = e_packet->track_event().debug_annotations(); EXPECT_EQ(annotations.size(), 0);
diff --git a/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc b/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc index 38ee903..75d5d52 100644 --- a/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc +++ b/services/tracing/public/cpp/perfetto/track_event_thread_local_event_sink.cc
@@ -67,12 +67,6 @@ constexpr uint64_t kThreadInstructionCountTrackUuidBit = static_cast<uint64_t>(1u) << 34; -// Names of events that should be converted into a TaskExecution event. -const char* kTaskExecutionEventCategory = "toplevel"; -const char* kTaskExecutionEventNames[3] = {"ThreadControllerImpl::RunTask", - "ThreadPool_RunTask", - "SimpleAlarmTimer::OnTimerFired"}; - void AddConvertableToTraceFormat( base::trace_event::ConvertableToTraceFormat* value, perfetto::protos::pbzero::DebugAnnotation* annotation) { @@ -474,13 +468,6 @@ const size_t kMaxSize = base::trace_event::TraceArguments::kMaxSize; InterningIndexEntry interned_annotation_names[kMaxSize] = { InterningIndexEntry{}}; - InterningIndexEntry interned_source_location{}; - InterningIndexEntry interned_log_message_body{}; - - const char* src_file = nullptr; - const char* src_func = nullptr; - const char* log_message_body = nullptr; - int line_number = 0; // No need to write the event name for end events (sync or nestable async). // Trace processor will match them without, provided event nesting is correct. @@ -510,49 +497,8 @@ } } } else { - // TODO(eseckler): Remove special handling of typed events here once we - // support them in TRACE_EVENT macros. - if (flags & TRACE_EVENT_FLAG_TYPED_PROTO_ARGS) { - if (trace_event->arg_size() == 2u) { - DCHECK_EQ(strcmp(category_name, kTaskExecutionEventCategory), 0); - DCHECK(strcmp(trace_event->name(), kTaskExecutionEventNames[0]) == 0 || - strcmp(trace_event->name(), kTaskExecutionEventNames[1]) == 0 || - strcmp(trace_event->name(), kTaskExecutionEventNames[2]) == 0); - // Double argument task execution event (src_file, src_func). - DCHECK_EQ(trace_event->arg_type(0), TRACE_VALUE_TYPE_STRING); - DCHECK_EQ(trace_event->arg_type(1), TRACE_VALUE_TYPE_STRING); - src_file = trace_event->arg_value(0).as_string; - src_func = trace_event->arg_value(1).as_string; - } else { - // arg_size == 1 enforced by the maximum number of parameter == 2. - DCHECK_EQ(trace_event->arg_size(), 1u); - - if (trace_event->arg_type(0) == TRACE_VALUE_TYPE_STRING) { - // Single argument task execution event (src_file). - DCHECK_EQ(strcmp(category_name, kTaskExecutionEventCategory), 0); - DCHECK( - strcmp(trace_event->name(), kTaskExecutionEventNames[0]) == 0 || - strcmp(trace_event->name(), kTaskExecutionEventNames[1]) == 0 || - strcmp(trace_event->name(), kTaskExecutionEventNames[2]) == 0); - src_file = trace_event->arg_value(0).as_string; - } else { - DCHECK_EQ(trace_event->arg_type(0), TRACE_VALUE_TYPE_CONVERTABLE); - DCHECK(strcmp(category_name, "log") == 0); - DCHECK(strcmp(trace_event->name(), "LogMessage") == 0); - const base::trace_event::LogMessage* value = - static_cast<base::trace_event::LogMessage*>( - trace_event->arg_value(0).as_convertable); - src_file = value->file(); - line_number = value->line_number(); - log_message_body = value->message().c_str(); - - interned_log_message_body = - interned_log_message_bodies_.LookupOrAdd(value->message()); - } // else - } // else - interned_source_location = interned_source_locations_.LookupOrAdd( - std::make_tuple(src_file, src_func, line_number)); + NOTREACHED(); } else if (!privacy_filtering_enabled_) { for (size_t i = 0; i < trace_event->arg_size() && trace_event->arg_name(i); ++i) { @@ -626,14 +572,7 @@ track_event->add_category_iids(interned_category.id); } - if (interned_log_message_body.id) { - auto* log_message = track_event->set_log_message(); - log_message->set_source_location_iid(interned_source_location.id); - log_message->set_body_iid(interned_log_message_body.id); - } else if (interned_source_location.id) { - track_event->set_task_execution()->set_posted_from_iid( - interned_source_location.id); - } else if (!privacy_filtering_enabled_) { + if (!privacy_filtering_enabled_) { WriteDebugAnnotations(trace_event, track_event, interned_annotation_names); } @@ -796,19 +735,7 @@ std::make_tuple(IndexType::kName, IndexData{trace_event_name}, std::move(interned_name))); } - if (interned_log_message_body.id && !interned_log_message_body.was_emitted) { - pending_interning_updates_.push_back( - std::make_tuple(IndexType::kLogMessage, IndexData{log_message_body}, - std::move(interned_log_message_body))); - } - if (interned_source_location.id) { - if (!interned_source_location.was_emitted) { - pending_interning_updates_.push_back(std::make_tuple( - IndexType::kSourceLocation, - IndexData{std::make_tuple(src_file, src_func, line_number)}, - std::move(interned_source_location))); - } - } else if (!privacy_filtering_enabled_) { + if (!privacy_filtering_enabled_) { for (size_t i = 0; i < trace_event->arg_size() && trace_event->arg_name(i); ++i) { DCHECK(interned_annotation_names[i].id);
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index fbb7f6d..2662608 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -1142,6 +1142,9 @@ "test_id_prefix": "ninja://ui/ozone/gl:ozone_gl_unittests/" }, { + "args": [ + "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -3080,6 +3083,9 @@ "test_id_prefix": "ninja://ui/ozone/gl:ozone_gl_unittests/" }, { + "args": [ + "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py"
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py index af61bc4..424fe23 100755 --- a/testing/buildbot/generate_buildbot_json.py +++ b/testing/buildbot/generate_buildbot_json.py
@@ -1430,13 +1430,6 @@ 'Win x64 Builder Code Coverage', 'Win10 Tests x64 Code Coverage', 'Win10 x64 Release (NVIDIA) Code Coverage', - # TODO(crbug.com/1024915) Delete these when coverage is enabled by - # default on Mac OS tryjobs. - 'Mac Builder Code Coverage', - 'Mac10.13 Tests Code Coverage', - 'GPU Mac Builder Code Coverage', - 'Mac Release (Intel) Code Coverage', - 'Mac Retina Release (AMD) Code Coverage', ] def get_internal_waterfalls(self):
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 5cf61cf..673d67f7 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -2266,6 +2266,16 @@ '--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter', ], }, + 'chromeos-betty-pi-arc-chrome-beta': { + 'args': [ + '--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter', + ], + }, + 'chromeos-betty-pi-arc-chrome-stable': { + 'args': [ + '--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter', + ], + }, 'linux-chromeos-chrome': { 'args': [ '--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter',
diff --git a/testing/buildbot/trybot_analyze_config.json b/testing/buildbot/trybot_analyze_config.json index 0330ed7..d2ef0eb0 100644 --- a/testing/buildbot/trybot_analyze_config.json +++ b/testing/buildbot/trybot_analyze_config.json
@@ -8,10 +8,8 @@ "exclusions": [ ".*isolate", ".vpython", - "build/.*gyp[i]?", "build/check_gn_headers.py", "build/check_gn_headers_whitelist.txt", - "build/cipd/android/android.ensure", "build/fuchsia/.*py", "build/get_landmines.py", "build/gn_helpers.py",
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 1d51fee..42d2625 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -2239,12 +2239,13 @@ "params": { "availability": ">0", "event_many_tabs_opened": "name:sixth_tab_opened;comparator:>0;window:1;storage:365", - "event_trigger": "name:tab_groups_new_group_iph_triggered;comparator:<1;window:365;storage:365", + "event_trigger": "name:tab_groups_new_group_iph_triggered;comparator:any;window:365;storage:365", "event_used": "name:tab_group_created;comparator:==0;window:365;storage:365", "session_rate": "<3" }, "enable_features": [ "EnableNewBadgeOnMenuItems", + "IPH_DesktopSnoozeFeature", "IPH_DesktopTabGroupsNewGroup" ] } @@ -5224,6 +5225,24 @@ ] } ], + "PasswordEditingInSettings": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "PasswordEditingInSettings" + ] + } + ] + } + ], "PasswordScriptsFetching": [ { "platforms": [ @@ -5704,32 +5723,58 @@ "base_url": "https://chromeupboarding-pa.googleapis.com", "experiment_tag": "", "image_prefetch_mode": "top", - "most_visited_max_rows_normal_screen": "1", - "most_visited_max_rows_small_screen": "1" + "is_unmetered_network_required": "false", + "most_visited_max_rows_normal_screen": "2", + "most_visited_max_rows_small_screen": "1", + "small_screen_height_threshold_dp": "700" }, "enable_features": [ "QueryTiles", "QueryTilesInOmnibox" ], "disable_features": [ + "QueryTilesEnableQueryEditing", + "QueryTilesLocalOrdering" + ] + }, + { + "name": "EnabledStitchAndLocalOrdering", + "params": { + "base_url": "https://chromeupboarding-pa.googleapis.com", + "experiment_tag": "", + "image_prefetch_mode": "top", + "is_unmetered_network_required": "false", + "most_visited_max_rows_normal_screen": "2", + "most_visited_max_rows_small_screen": "1", + "small_screen_height_threshold_dp": "700" + }, + "enable_features": [ + "QueryTiles", + "QueryTilesInOmnibox", + "QueryTilesLocalOrdering" + ], + "disable_features": [ "QueryTilesEnableQueryEditing" ] }, { - "name": "EnabledStitchWithNoSearchParam", + "name": "EnabledStitchAndTrending", "params": { "base_url": "https://chromeupboarding-pa.googleapis.com", - "experiment_tag": "disableSearchParams : true", + "experiment_tag": "enableTrending : true", "image_prefetch_mode": "top", - "most_visited_max_rows_normal_screen": "1", - "most_visited_max_rows_small_screen": "1" + "is_unmetered_network_required": "false", + "most_visited_max_rows_normal_screen": "2", + "most_visited_max_rows_small_screen": "1", + "small_screen_height_threshold_dp": "700" }, "enable_features": [ "QueryTiles", "QueryTilesInOmnibox" ], "disable_features": [ - "QueryTilesEnableQueryEditing" + "QueryTilesEnableQueryEditing", + "QueryTilesLocalOrdering" ] }, { @@ -5738,15 +5783,18 @@ "base_url": "https://chromeupboarding-pa.googleapis.com", "experiment_tag": "maxLevels : 1", "image_prefetch_mode": "top", - "most_visited_max_rows_normal_screen": "1", - "most_visited_max_rows_small_screen": "1" + "is_unmetered_network_required": "false", + "most_visited_max_rows_normal_screen": "2", + "most_visited_max_rows_small_screen": "1", + "small_screen_height_threshold_dp": "700" }, "enable_features": [ "QueryTiles", "QueryTilesInOmnibox" ], "disable_features": [ - "QueryTilesEnableQueryEditing" + "QueryTilesEnableQueryEditing", + "QueryTilesLocalOrdering" ] }, { @@ -5755,13 +5803,18 @@ "base_url": "https://chromeupboarding-pa.googleapis.com", "experiment_tag": "maxLevels : 1", "image_prefetch_mode": "top", - "most_visited_max_rows_normal_screen": "1", - "most_visited_max_rows_small_screen": "1" + "is_unmetered_network_required": "false", + "most_visited_max_rows_normal_screen": "2", + "most_visited_max_rows_small_screen": "1", + "small_screen_height_threshold_dp": "700" }, "enable_features": [ "QueryTiles", "QueryTilesEnableQueryEditing", "QueryTilesInOmnibox" + ], + "disable_features": [ + "QueryTilesLocalOrdering" ] } ]
diff --git a/third_party/accessibility_test_framework/BUILD.gn b/third_party/accessibility_test_framework/BUILD.gn index b4bd2f3..3cddc14 100644 --- a/third_party/accessibility_test_framework/BUILD.gn +++ b/third_party/accessibility_test_framework/BUILD.gn
@@ -10,7 +10,6 @@ # Uses wrong version of proto (not protolite). # Disable these to avoid build warnings. enable_bytecode_checks = false - enable_desugar = false jar_path = "lib/accessibility-test-framework.jar" deps = [
diff --git a/third_party/blink/common/BUILD.gn b/third_party/blink/common/BUILD.gn index b7ad5c2..24bddcc 100644 --- a/third_party/blink/common/BUILD.gn +++ b/third_party/blink/common/BUILD.gn
@@ -62,7 +62,10 @@ "//third_party/blink/public/common", ] - configs += [ ":blink_common_implementation" ] + configs += [ + ":blink_common_implementation", + "//build/config/compiler:noshadowing", + ] sources = [ # NOTE: Please do not add public headers that need to be referenced from
diff --git a/third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom b/third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom index ec30e2e..b8c41e41 100644 --- a/third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom +++ b/third_party/blink/public/mojom/android_font_lookup/android_font_lookup.mojom
@@ -4,7 +4,7 @@ module blink.mojom; -import "mojo/public/mojom/base/file.mojom"; +import "mojo/public/mojom/base/read_only_file.mojom"; // Interface for renderer to request Android downloaded fonts from font // providers on-device. @@ -22,5 +22,5 @@ // is synchronous for the renderer to avoid unnecessary re-layout jank. [Sync] MatchLocalFontByUniqueName(string font_unique_name) - => (mojo_base.mojom.File? font_file_handle); + => (mojo_base.mojom.ReadOnlyFile? font_file_handle); };
diff --git a/third_party/blink/public/platform/web_font.h b/third_party/blink/public/platform/web_font.h index 4a63c56..8c59810 100644 --- a/third_party/blink/public/platform/web_font.h +++ b/third_party/blink/public/platform/web_font.h
@@ -19,10 +19,10 @@ namespace gfx { class PointF; +class RectF; } namespace blink { -struct WebFloatRect; struct WebFontDescription; struct WebTextRun; @@ -44,12 +44,12 @@ BLINK_PLATFORM_EXPORT int CalculateWidth(const WebTextRun&) const; BLINK_PLATFORM_EXPORT int OffsetForPosition(const WebTextRun&, float position) const; - BLINK_PLATFORM_EXPORT WebFloatRect - SelectionRectForText(const WebTextRun&, - const gfx::PointF& left_baseline, - int height, - int from = 0, - int to = -1) const; + BLINK_PLATFORM_EXPORT gfx::RectF SelectionRectForText( + const WebTextRun&, + const gfx::PointF& left_baseline, + int height, + int from = 0, + int to = -1) const; private: explicit WebFont(const WebFontDescription&);
diff --git a/third_party/blink/public/strings/translations/blink_strings_ar.xtb b/third_party/blink/public/strings/translations/blink_strings_ar.xtb index fd38bebe..d1652183 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ar.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ar.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">مربع حوار_للتنبيه</translation> <translation id="1821985195704844674">شبكة متفرعة</translation> <translation id="1822429046913737220">صباحًا/مساءً</translation> +<translation id="1823704031293214298">تذييل الصفحة</translation> <translation id="1832974991323546415">تشغيل على جهاز بعيد</translation> <translation id="190587075670221089">حذف</translation> <translation id="1907737156431278478">مثال</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">عرض الشهر السابق</translation> <translation id="421884353938374759">علبة الألوان</translation> <translation id="4248100235867064564">شريط قوائم</translation> +<translation id="4293574643247337246">رأس الصفحة</translation> <translation id="4360991593054037559">يُرجى إدخال قيمة صالحة. علمًا بأن القيم الصالحة تتراوح بين <ph name="VALID_VALUE_LOW" /> و<ph name="VALID_VALUE_HIGHER" />.</translation> <translation id="4384583879834880242">سين وجيم</translation> <translation id="4444765639179266822">يبدو أنه يقول: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fr.xtb b/third_party/blink/public/strings/translations/blink_strings_fr.xtb index ce5eb1c..5a5da71 100644 --- a/third_party/blink/public/strings/translations/blink_strings_fr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_fr.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">arborescence</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">pied de page</translation> <translation id="1832974991323546415">lire sur un appareil à distance</translation> <translation id="190587075670221089">suppression</translation> <translation id="1907737156431278478">exemple</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Afficher le mois précédent</translation> <translation id="421884353938374759">palette couleurs</translation> <translation id="4248100235867064564">barre de menu</translation> +<translation id="4293574643247337246">en-tête de page</translation> <translation id="4360991593054037559">Veuillez saisir une valeur valide. Les deux valeurs valides les plus proches sont "<ph name="VALID_VALUE_LOW" />" et "<ph name="VALID_VALUE_HIGHER" />".</translation> <translation id="4384583879834880242">Questions/Réponses</translation> <translation id="4444765639179266822">Voici la mention que contient probablement l'image : <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_gl.xtb b/third_party/blink/public/strings/translations/blink_strings_gl.xtb index 29811f43..584d7d6 100644 --- a/third_party/blink/public/strings/translations/blink_strings_gl.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_gl.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">grade en árbore</translation> <translation id="1822429046913737220">a.m./p.m.</translation> +<translation id="1823704031293214298">pé de páxina</translation> <translation id="1832974991323546415">reproducir no dispositivo remoto</translation> <translation id="190587075670221089">eliminación</translation> <translation id="1907737156431278478">exemplo</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Mostrar mes anterior</translation> <translation id="421884353938374759">selector de cor</translation> <translation id="4248100235867064564">barra de menú</translation> +<translation id="4293574643247337246">cabeceira da páxina</translation> <translation id="4360991593054037559">Introduce un valor válido. Os dous valores válidos máis próximos son <ph name="VALID_VALUE_LOW" /> e <ph name="VALID_VALUE_HIGHER" />.</translation> <translation id="4384583879834880242">Preguntas</translation> <translation id="4444765639179266822">Parece que pon: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_id.xtb b/third_party/blink/public/strings/translations/blink_strings_id.xtb index 2d922f73..fe5364e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_id.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_id.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">kisi pohon</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">footer halaman</translation> <translation id="1832974991323546415">putar di perangkat jarak jauh</translation> <translation id="190587075670221089">penghapusan</translation> <translation id="1907737156431278478">contoh</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Tampilkan bulan sebelumnya</translation> <translation id="421884353938374759">pemilih warna</translation> <translation id="4248100235867064564">bilah menu</translation> +<translation id="4293574643247337246">header halaman</translation> <translation id="4360991593054037559">Masukkan nilai yang valid. Dua nilai valid terdekat adalah <ph name="VALID_VALUE_LOW" /> dan <ph name="VALID_VALUE_HIGHER" />.</translation> <translation id="4384583879834880242">Tanya Jawab</translation> <translation id="4444765639179266822">Muncul dengan menyatakan: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_kn.xtb b/third_party/blink/public/strings/translations/blink_strings_kn.xtb index 1e573d6..fc88fa1 100644 --- a/third_party/blink/public/strings/translations/blink_strings_kn.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_kn.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">ಟ್ರೀ ಗ್ರಿಡ್</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">ಪುಟದ ಅಡಿಲೇಖ</translation> <translation id="1832974991323546415">ರಿಮೋಟ್ ಸಾಧನದಲ್ಲಿ ಪ್ಲೇ ಮಾಡಿ</translation> <translation id="190587075670221089">ಅಳಿಸುವಿಕೆ</translation> <translation id="1907737156431278478">ಉದಾಹರಣೆ</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">ಹಿಂದಿನ ತಿಂಗಳು ತೋರಿಸು</translation> <translation id="421884353938374759">ಬಣ್ಣದ ಆಯ್ಕೆಮಾಡುವಿಕೆ</translation> <translation id="4248100235867064564">ಮೆನು ಬಾರ್</translation> +<translation id="4293574643247337246">ಪುಟದ ಶಿರೋಲೇಖ</translation> <translation id="4360991593054037559">ಮಾನ್ಯವಾದ ಮೌಲ್ಯವನ್ನು ನಮೂದಿಸಿ. <ph name="VALID_VALUE_LOW" /> ಮತ್ತು <ph name="VALID_VALUE_HIGHER" /> ಎರಡು ಹತ್ತಿರದ ಮಾನ್ಯ ಮೌಲ್ಯಗಳಾಗಿವೆ.</translation> <translation id="4384583879834880242">ಪ್ರಶ್ನೋತ್ತರ</translation> <translation id="4444765639179266822">ಹೀಗೆ ಹೇಳುತ್ತಿರಬಹುದು: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ne.xtb b/third_party/blink/public/strings/translations/blink_strings_ne.xtb index ba9d5eb..c233c54 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ne.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ne.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">ट्री ग्रिड</translation> <translation id="1822429046913737220">बिहना/साँझ</translation> +<translation id="1823704031293214298">पेज फुटर</translation> <translation id="1832974991323546415">टाढाको यन्त्रमा प्ले गर्नुहोस्</translation> <translation id="190587075670221089">मेट्ने कार्य</translation> <translation id="1907737156431278478">उदाहरण</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">अघिल्लो महिना देखाउनुहोस्</translation> <translation id="421884353938374759">रंग चयनकर्ता</translation> <translation id="4248100235867064564">मेनु बार</translation> +<translation id="4293574643247337246">पेज हेडर</translation> <translation id="4360991593054037559">कृपया एउटा वैध मान प्रविष्टि गर्नुहोस्। दुईवा सबैभण्दा नजिकका वैध मानहरू <ph name="VALID_VALUE_LOW" /> र <ph name="VALID_VALUE_HIGHER" /> हुन्।</translation> <translation id="4384583879834880242">प्रश्नोत्तर</translation> <translation id="4444765639179266822">निम्न कुरा भन्न खोजे जस्तो छ: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ru.xtb b/third_party/blink/public/strings/translations/blink_strings_ru.xtb index c790090..392929a4 100644 --- a/third_party/blink/public/strings/translations/blink_strings_ru.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_ru.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">диалоговое окно оповещения</translation> <translation id="1821985195704844674">сетка в виде дерева</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">нижний колонтитул страницы</translation> <translation id="1832974991323546415">воспроизвести на удаленном устройстве</translation> <translation id="190587075670221089">удаление</translation> <translation id="1907737156431278478">пример</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Показать предыдущий месяц</translation> <translation id="421884353938374759">color picker</translation> <translation id="4248100235867064564">панель меню</translation> +<translation id="4293574643247337246">заголовок страницы</translation> <translation id="4360991593054037559">Введите допустимое значение. Ближайшие допустимые значения: <ph name="VALID_VALUE_LOW" /> и <ph name="VALID_VALUE_HIGHER" />.</translation> <translation id="4384583879834880242">Вопросы и ответы</translation> <translation id="4444765639179266822">Похоже, тут написано "<ph name="OCR_TEXT" />"</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_te.xtb b/third_party/blink/public/strings/translations/blink_strings_te.xtb index 6eb5443..9dde9b85 100644 --- a/third_party/blink/public/strings/translations/blink_strings_te.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_te.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">వృక్షాంశ గ్రిడ్</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">పేజీ ఫుటర్</translation> <translation id="1832974991323546415">రిమోట్ పరికరంలో ప్లే చేస్తుంది</translation> <translation id="190587075670221089">తొలగింపు</translation> <translation id="1907737156431278478">ఉదాహరణ</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">మునుపటి నెలను చూపుతుంది</translation> <translation id="421884353938374759">రంగు ఎంపిక</translation> <translation id="4248100235867064564">మెనూ బార్</translation> +<translation id="4293574643247337246">పేజీ హెడర్</translation> <translation id="4360991593054037559">దయచేసి చెల్లుబాటు అయ్యే విలువను నమోదు చేయండి. <ph name="VALID_VALUE_LOW" /> మరియు <ph name="VALID_VALUE_HIGHER" /> అనేవి రెండు సమీప చెల్లుబాటు విలువలు.</translation> <translation id="4384583879834880242">Q&A</translation> <translation id="4444765639179266822">ఇది చెబుతున్నట్లుగా ఉంది: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_tr.xtb b/third_party/blink/public/strings/translations/blink_strings_tr.xtb index 5b03915..dc5ba9f 100644 --- a/third_party/blink/public/strings/translations/blink_strings_tr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_tr.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">ağaç tablo</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">sayfa alt bilgisi</translation> <translation id="1832974991323546415">uzaktan cihazda oynat</translation> <translation id="190587075670221089">silme</translation> <translation id="1907737156431278478">örnek</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Önceki ayı göster</translation> <translation id="421884353938374759">renk seçici</translation> <translation id="4248100235867064564">menü çubuğu</translation> +<translation id="4293574643247337246">sayfa üstbilgisi</translation> <translation id="4360991593054037559">Lütfen geçerli bir değer girin. En yakın iki geçerli değer şunlardır: <ph name="VALID_VALUE_LOW" /> ve <ph name="VALID_VALUE_HIGHER" />.</translation> <translation id="4384583879834880242">Soru-Cevap</translation> <translation id="4444765639179266822">Şöyle diyor olabilir: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_uz.xtb b/third_party/blink/public/strings/translations/blink_strings_uz.xtb index daf7b6c..429159e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_uz.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_uz.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">ogohlantirish muloqot oynasi</translation> <translation id="1821985195704844674">daraxtsimon jadval</translation> <translation id="1822429046913737220">AM/PM</translation> +<translation id="1823704031293214298">sahifa kolontituli</translation> <translation id="1832974991323546415">masofadagi qurilmada ijro etish</translation> <translation id="190587075670221089">olib tashlanadi</translation> <translation id="1907737156431278478">namuna</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Avvalgi oyni ko‘rsatish</translation> <translation id="421884353938374759">color picker</translation> <translation id="4248100235867064564">menyu paneli</translation> +<translation id="4293574643247337246">sahifa sarlavhasi</translation> <translation id="4360991593054037559">Yaroqli qiymat kiriting. Eng yaqin yaroqli qiymatlar: <ph name="VALID_VALUE_LOW" /> va <ph name="VALID_VALUE_HIGHER" /></translation> <translation id="4384583879834880242">Savol-javoblar</translation> <translation id="4444765639179266822">Bunday yozilgan shekilli: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_vi.xtb b/third_party/blink/public/strings/translations/blink_strings_vi.xtb index c81ba1e..21c8620 100644 --- a/third_party/blink/public/strings/translations/blink_strings_vi.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_vi.xtb
@@ -30,6 +30,7 @@ <translation id="1806710327868736751">alert_dialog</translation> <translation id="1821985195704844674">lưới dạng cây</translation> <translation id="1822429046913737220">SA/CH</translation> +<translation id="1823704031293214298">chân trang</translation> <translation id="1832974991323546415">phát trên thiết bị từ xa</translation> <translation id="190587075670221089">xóa</translation> <translation id="1907737156431278478">ví dụ</translation> @@ -105,6 +106,7 @@ <translation id="4201051445878709314">Hiển thị tháng trước</translation> <translation id="421884353938374759">công cụ chọn màu</translation> <translation id="4248100235867064564">thanh menu</translation> +<translation id="4293574643247337246">tiêu đề trang</translation> <translation id="4360991593054037559">Vui lòng nhập giá trị hợp lệ. Hai giá trị hợp lệ gần nhất là <ph name="VALID_VALUE_LOW" /> và <ph name="VALID_VALUE_HIGHER" />.</translation> <translation id="4384583879834880242">Hỏi và đáp</translation> <translation id="4444765639179266822">Có vẻ như nội dung là: <ph name="OCR_TEXT" /></translation>
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_context.cc b/third_party/blink/renderer/core/css/parser/css_parser_context.cc index 8ddafa7..c0ad6ec 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_context.cc +++ b/third_party/blink/renderer/core/css/parser/css_parser_context.cc
@@ -282,7 +282,11 @@ } bool CSSParserContext::CustomElementsV0Enabled() const { - return RuntimeEnabledFeatures::CustomElementsV0Enabled(); + // Support features conservatively. + if (!document_) + return true; + return RuntimeEnabledFeatures::CustomElementsV0Enabled( + document_->GetExecutionContext()); } bool CSSParserContext::IsForMarkupSanitization() const {
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc index 037bf5b2..27c3a0c 100644 --- a/third_party/blink/renderer/core/css/style_engine.cc +++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -519,7 +519,8 @@ void StyleEngine::UpdateActiveStyleSheetsInImport( StyleEngine& root_engine, DocumentStyleSheetCollector& parent_collector) { - DCHECK(RuntimeEnabledFeatures::HTMLImportsEnabled()); + DCHECK(RuntimeEnabledFeatures::HTMLImportsEnabled( + GetDocument().GetExecutionContext())); DCHECK(IsHTMLImport()); HeapVector<Member<StyleSheet>> sheets_for_list; ImportedDocumentStyleSheetCollector subcollector(parent_collector,
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc index 58423ff9..6ed50f59 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc
@@ -1144,7 +1144,8 @@ bool is_v1 = string_or_options.IsElementCreationOptions() || !RegistrationContext(); // V0 is only allowed with the flag. - DCHECK(is_v1 || RuntimeEnabledFeatures::CustomElementsV0Enabled()); + DCHECK(is_v1 || RuntimeEnabledFeatures::CustomElementsV0Enabled( + GetExecutionContext())); bool create_v1_builtin = string_or_options.IsElementCreationOptions(); bool should_create_builtin = create_v1_builtin || string_or_options.IsString(); @@ -1222,7 +1223,8 @@ bool is_v1 = string_or_options.IsElementCreationOptions() || !RegistrationContext(); // V0 is only allowed with the flag. - DCHECK(is_v1 || RuntimeEnabledFeatures::CustomElementsV0Enabled()); + DCHECK(is_v1 || RuntimeEnabledFeatures::CustomElementsV0Enabled( + GetExecutionContext())); bool create_v1_builtin = string_or_options.IsElementCreationOptions(); bool should_create_builtin = create_v1_builtin || string_or_options.IsString(); @@ -1277,10 +1279,6 @@ const AtomicString& name, const ElementRegistrationOptions* options, ExceptionState& exception_state) { - // TODO(crbug.com/937746): Anything caught by this DCHECK is using the - // now-removed Custom Elements v0 API. - DCHECK(false) << "Custom Elements v0 has been removed."; - if (!RegistrationContext()) { exception_state.ThrowDOMException( DOMExceptionCode::kNotSupportedError, @@ -1304,7 +1302,7 @@ } V0CustomElementRegistrationContext* Document::RegistrationContext() const { - if (RuntimeEnabledFeatures::CustomElementsV0Enabled()) + if (RuntimeEnabledFeatures::CustomElementsV0Enabled(GetExecutionContext())) return registration_context_.Get(); return nullptr; }
diff --git a/third_party/blink/renderer/core/dom/document.idl b/third_party/blink/renderer/core/dom/document.idl index c65d96e..e20a55b 100644 --- a/third_party/blink/renderer/core/dom/document.idl +++ b/third_party/blink/renderer/core/dom/document.idl
@@ -165,6 +165,8 @@ // Custom Elements // https://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register + // FIXME: The registerElement return type should be Function. + [RuntimeEnabled=CustomElementsV0, CallWith=ScriptState, CustomElementCallbacks, RaisesException, DeprecateAs=DocumentRegisterElement] any registerElement(DOMString type, optional ElementRegistrationOptions options = {}); // https://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate [CustomElementCallbacks, PerWorldBindings, RaisesException, ImplementedAs=CreateElementForBinding] Element createElement(DOMString localName, (DOMString or ElementCreationOptions) options); [CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName, (DOMString or ElementCreationOptions) options);
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index 384f5dad..a113cc58b 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3333,11 +3333,7 @@ } ShadowRoot* Element::createShadowRoot(ExceptionState& exception_state) { - // TODO(crbug.com/937746): Anything caught by this DCHECK is using the - // now-removed Shadow DOM v0 API. - DCHECK(false) << "Shadow DOM v0 has been removed."; - - DCHECK(RuntimeEnabledFeatures::ShadowDOMV0Enabled()); + DCHECK(RuntimeEnabledFeatures::ShadowDOMV0Enabled(GetExecutionContext())); if (ShadowRoot* root = GetShadowRoot()) { if (root->IsUserAgent()) { exception_state.ThrowDOMException( @@ -3372,7 +3368,7 @@ } ShadowRoot& Element::CreateShadowRootInternal() { - DCHECK(RuntimeEnabledFeatures::ShadowDOMV0Enabled()); + DCHECK(RuntimeEnabledFeatures::ShadowDOMV0Enabled(GetExecutionContext())); DCHECK(!ClosedShadowRoot()); DCHECK(AreAuthorShadowsAllowed()); DCHECK(!AlwaysCreateUserAgentShadowRoot());
diff --git a/third_party/blink/renderer/core/dom/element.idl b/third_party/blink/renderer/core/dom/element.idl index c1a02c0..b83ed0e 100644 --- a/third_party/blink/renderer/core/dom/element.idl +++ b/third_party/blink/renderer/core/dom/element.idl
@@ -133,6 +133,8 @@ // Non-standard API [MeasureAs=ElementScrollIntoViewIfNeeded] void scrollIntoViewIfNeeded(optional boolean centerIfNeeded); + [RuntimeEnabled=ShadowDOMV0, RaisesException, DeprecateAs=ElementCreateShadowRoot] ShadowRoot createShadowRoot(); + [RuntimeEnabled=ShadowDOMV0] NodeList getDestinationInsertionPoints(); // Experimental accessibility API [RuntimeEnabled=ComputedAccessibilityInfo] readonly attribute DOMString? computedRole;
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc index 9fa54b2..cef59fe 100644 --- a/third_party/blink/renderer/core/dom/node.cc +++ b/third_party/blink/renderer/core/dom/node.cc
@@ -3115,11 +3115,6 @@ } StaticNodeList* Node::getDestinationInsertionPoints() { - // TODO(crbug.com/937746): Anything caught by this DCHECK is using the - // now-removed Shadow DOM v0 API. - DCHECK(false) - << "Shadow DOM v0 has been removed (getDestinationInsertionPoints)."; - UpdateDistributionForLegacyDistributedNodes(); HeapVector<Member<V0InsertionPoint>, 8> insertion_points; CollectDestinationInsertionPoints(*this, insertion_points); @@ -3262,13 +3257,14 @@ if (element->IsDefined() != was_defined) { element->PseudoStateChanged(CSSSelector::kPseudoDefined); - if (RuntimeEnabledFeatures::CustomElementsV0Enabled()) + if (RuntimeEnabledFeatures::CustomElementsV0Enabled(GetExecutionContext())) element->PseudoStateChanged(CSSSelector::kPseudoUnresolved); } } void Node::SetV0CustomElementState(V0CustomElementState new_state) { - DCHECK(RuntimeEnabledFeatures::CustomElementsV0Enabled()); + DCHECK( + RuntimeEnabledFeatures::CustomElementsV0Enabled(GetExecutionContext())); V0CustomElementState old_state = GetV0CustomElementState(); switch (new_state) {
diff --git a/third_party/blink/renderer/core/dom/text.idl b/third_party/blink/renderer/core/dom/text.idl index 117543e..7a10043 100644 --- a/third_party/blink/renderer/core/dom/text.idl +++ b/third_party/blink/renderer/core/dom/text.idl
@@ -29,4 +29,7 @@ // Mixin Slotable // https://dom.spec.whatwg.org/#mixin-slotable [ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement? assignedSlot; + + // Non-standard API: + [RuntimeEnabled=ShadowDOMV0] NodeList getDestinationInsertionPoints(); };
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc index 8158fe91..8d3771c4 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -179,6 +179,7 @@ start_time_(start_time), static_bitmap_image_loaded_(false), callback_(callback), + ukm_params_(ukm_params), script_promise_resolver_(resolver) { DCHECK(image); DCHECK(context);
diff --git a/third_party/blink/renderer/core/html/custom/custom_element.cc b/third_party/blink/renderer/core/html/custom/custom_element.cc index 7e121c6..4992ea2 100644 --- a/third_party/blink/renderer/core/html/custom/custom_element.cc +++ b/third_party/blink/renderer/core/html/custom/custom_element.cc
@@ -158,7 +158,8 @@ } Element* element; - if (RuntimeEnabledFeatures::CustomElementsV0Enabled()) { + if (RuntimeEnabledFeatures::CustomElementsV0Enabled( + document.GetExecutionContext())) { if (V0CustomElement::IsValidName(tag_name.LocalName()) && document.RegistrationContext()) { element = document.RegistrationContext()->CreateCustomTagElement(
diff --git a/third_party/blink/renderer/core/html/html_link_element.cc b/third_party/blink/renderer/core/html/html_link_element.cc index 9aee0c7..dcc516b8 100644 --- a/third_party/blink/renderer/core/html/html_link_element.cc +++ b/third_party/blink/renderer/core/html/html_link_element.cc
@@ -75,7 +75,7 @@ if (name == html_names::kRelAttr) { rel_attribute_ = LinkRelAttribute(value); if (rel_attribute_.IsImport()) { - if (RuntimeEnabledFeatures::HTMLImportsEnabled()) { + if (RuntimeEnabledFeatures::HTMLImportsEnabled(GetExecutionContext())) { Deprecation::CountDeprecation(GetExecutionContext(), WebFeature::kHTMLImports); } else { @@ -240,7 +240,7 @@ if (!link_) { if (rel_attribute_.IsImport()) { // Only create an import link when HTML imports are enabled. - if (!RuntimeEnabledFeatures::HTMLImportsEnabled()) + if (!RuntimeEnabledFeatures::HTMLImportsEnabled(GetExecutionContext())) return nullptr; link_ = MakeGarbageCollected<LinkImport>(this); } else if (rel_attribute_.IsWebBundle()) {
diff --git a/third_party/blink/renderer/core/html/html_link_element.idl b/third_party/blink/renderer/core/html/html_link_element.idl index 80a95e7..776b99b 100644 --- a/third_party/blink/renderer/core/html/html_link_element.idl +++ b/third_party/blink/renderer/core/html/html_link_element.idl
@@ -51,6 +51,10 @@ // https://drafts.csswg.org/cssom/#the-linkstyle-interface readonly attribute StyleSheet? sheet; + // HTML Imports + // https://w3c.github.io/webcomponents/spec/imports/#interface-import + [RuntimeEnabled=HTMLImports] readonly attribute Document? import; + // Subresource Integrity // https://w3c.github.io/webappsec-subresource-integrity/#HTMLLinkElement [Reflect] attribute DOMString integrity;
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.cc b/third_party/blink/renderer/core/html/media/html_media_element.cc index d0778b9..29cc65de 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.cc +++ b/third_party/blink/renderer/core/html/media/html_media_element.cc
@@ -399,10 +399,9 @@ constexpr double HTMLMediaElement::kMinPlaybackRate; constexpr double HTMLMediaElement::kMaxPlaybackRate; +// static MIMETypeRegistry::SupportsType HTMLMediaElement::GetSupportsType( const ContentType& content_type) { - DEFINE_STATIC_LOCAL(const String, codecs, ("codecs")); - // TODO(https://crbug.com/809912): Finding source of mime parsing crash. static base::debug::CrashKeyString* content_type_crash_key = base::debug::AllocateCrashKeyString("media_content_type", @@ -413,7 +412,7 @@ String type = content_type.GetType().DeprecatedLower(); // The codecs string is not lower-cased because MP4 values are case sensitive // per http://tools.ietf.org/html/rfc4281#page-7. - String type_codecs = content_type.Parameter(codecs); + String type_codecs = content_type.Parameter("codecs"); if (type.IsEmpty()) return MIMETypeRegistry::kIsNotSupported;
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc index 3648cfe..6e529ef 100644 --- a/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc +++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap.cc
@@ -1087,7 +1087,7 @@ unsigned ImageBitmap::width() const { if (!image_) return 0; - IntSize size = image_->SizeRespectingOrientation(); + IntSize size = image_->PreferredDisplaySize(); DCHECK_GT(size.Width(), 0); return size.Width(); } @@ -1095,7 +1095,7 @@ unsigned ImageBitmap::height() const { if (!image_) return 0; - IntSize size = image_->SizeRespectingOrientation(); + IntSize size = image_->PreferredDisplaySize(); DCHECK_GT(size.Height(), 0); return size.Height(); } @@ -1109,7 +1109,7 @@ return IntSize(); DCHECK_GT(image_->width(), 0); DCHECK_GT(image_->height(), 0); - return image_->SizeRespectingOrientation(); + return image_->PreferredDisplaySize(); } ScriptPromise ImageBitmap::CreateImageBitmap(ScriptState* script_state,
diff --git a/third_party/blink/renderer/core/layout/layout_grid.cc b/third_party/blink/renderer/core/layout/layout_grid.cc index df67975..38376e30 100644 --- a/third_party/blink/renderer/core/layout/layout_grid.cc +++ b/third_party/blink/renderer/core/layout/layout_grid.cc
@@ -1631,10 +1631,20 @@ LayoutUnit desired_logical_height = child.ConstrainLogicalHeightByMinMax( stretched_logical_height, LayoutUnit(-1)); child.SetOverrideLogicalHeight(desired_logical_height); - if (desired_logical_height != child.LogicalHeight()) { - // TODO (lajava): Can avoid laying out here in some cases. See - // https://webkit.org/b/87905. - child.SetLogicalHeight(LayoutUnit()); + + // Checking the logical-height of a child isn't enough. Setting an override + // logical-height changes the definiteness, resulting in percentages to + // resolve differently. + // NG nodes have enough information to check for this case, and only layout + // if needed. + // + // TODO (lajava): Can avoid laying out here in some cases. + // See https://webkit.org/b/87905. + if (desired_logical_height != child.LogicalHeight() || + child.MaybeHasPercentHeightDescendant()) { + // Never mess around with the logical-height of any NG children. + if (!child.IsLayoutNGMixin()) + child.SetLogicalHeight(LayoutUnit()); child.SetSelfNeedsLayoutForAvailableSpace(true); } }
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index 5408278..da9ab8f7 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -2371,10 +2371,11 @@ // apply to them, hence the !isText() check. If property nodes are added or // removed as a result of these style changes, PaintPropertyTreeBuilder will // call SetNeedsRepaint to cause re-generation of PaintChunks. + // This is skipped if no layer is present because |PaintLayer::StyleDidChange| + // will handle this invalidation. if (!IsText() && !HasLayer() && (diff.TransformChanged() || diff.OpacityChanged() || - diff.ZIndexChanged() || diff.FilterChanged() || - diff.BackdropFilterChanged() || diff.CssClipChanged() || + diff.ZIndexChanged() || diff.FilterChanged() || diff.CssClipChanged() || diff.BlendModeChanged() || diff.MaskChanged() || diff.CompositingReasonsChanged())) { SetNeedsPaintPropertyUpdate();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc index ade37ca..2dea3a70 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
@@ -1153,6 +1153,8 @@ if (style.LogicalHeight().IsPercentOrCalc() || style.LogicalMinHeight().IsPercentOrCalc() || style.LogicalMaxHeight().IsPercentOrCalc() || + style.LogicalTop().IsPercentOrCalc() || + style.LogicalBottom().IsPercentOrCalc() || (node.IsFlexItem() && style.FlexBasis().IsPercentOrCalc())) { // This call has the side-effect of setting HasPercentHeightDescendants // correctly.
diff --git a/third_party/blink/renderer/core/layout/svg/layout_svg_root_test.cc b/third_party/blink/renderer/core/layout/svg/layout_svg_root_test.cc index 12128d2..279ad772b 100644 --- a/third_party/blink/renderer/core/layout/svg/layout_svg_root_test.cc +++ b/third_party/blink/renderer/core/layout/svg/layout_svg_root_test.cc
@@ -186,6 +186,14 @@ UpdateAllLifecyclePhasesForTest(); EXPECT_FALSE(root.HasDescendantCompositingReasons()); + GetDocument().getElementById("rect")->setAttribute( + "style", "backdrop-filter: invert(100%)"); + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(root.HasDescendantCompositingReasons()); + GetDocument().getElementById("rect")->removeAttribute("style"); + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(root.HasDescendantCompositingReasons()); + GetDocument().getElementById("text")->setAttribute("style", "will-change: transform"); UpdateAllLifecyclePhasesForTest(); @@ -201,6 +209,14 @@ GetDocument().getElementById("tspan")->removeAttribute("style"); UpdateAllLifecyclePhasesForTest(); EXPECT_FALSE(root.HasDescendantCompositingReasons()); + + GetDocument().getElementById("tspan")->setAttribute( + "style", "backdrop-filter: invert(100%)"); + UpdateAllLifecyclePhasesForTest(); + EXPECT_TRUE(root.HasDescendantCompositingReasons()); + GetDocument().getElementById("tspan")->removeAttribute("style"); + UpdateAllLifecyclePhasesForTest(); + EXPECT_FALSE(root.HasDescendantCompositingReasons()); } } // namespace blink
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h index 2ecd894e..b7ed45f7 100644 --- a/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h +++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.h
@@ -40,7 +40,13 @@ kContextLimitReached, kEmptySelection, - kMaxValue = kEmptySelection + // Recorded from browser/java side when tab or its content becomes + // unavailable. Added here to keep in sync with the enums.xml values. + kTabHidden, + kOmniboxNavigation, + kTabCrash, + + kMaxValue = kTabCrash }; explicit TextFragmentSelectorGenerator() = default;
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc b/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc index 11ec195..05fea1c 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_layer_property_updater.cc
@@ -44,12 +44,6 @@ object.GetDocument().Printing() || !object.CanBeCompositedForDirectReasons()); - // TODO(chrishtr): this should never happen, but does in practice and - // we haven't been able to find all of the cases where it happens yet. - // Once we find more of them, try to remove this. - if (!fragment_data.HasLocalBorderBoxProperties()) - return; - PhysicalOffset layout_snapped_paint_offset = fragment_data.PaintOffset() - paint_layer->SubpixelAccumulation(); IntPoint snapped_paint_offset = RoundedIntPoint(layout_snapped_paint_offset);
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h index 921d2d16..0cf8561 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.h +++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -150,6 +150,12 @@ // ancestor transform space. PropertyTreeStateOrAlias LocalBorderBoxProperties() const { DCHECK(HasLocalBorderBoxProperties()); + + // TODO(chrishtr): this should never happen, but does in practice and + // we haven't been able to find all of the cases where it happens yet. + // See crbug.com/1137883. Once we find more of them, remove this. + if (!rare_data_ || !rare_data_->local_border_box_properties) + return PropertyTreeState::Root(); return rare_data_->local_border_box_properties->GetPropertyTreeState(); } bool HasLocalBorderBoxProperties() const {
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc index d99f1d0d..8ef7cca 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.cc +++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -3235,11 +3235,8 @@ // to recompute the bit once scrollbars have been updated. UpdateSelfPaintingLayer(); - const ComputedStyle& new_style = GetLayoutObject().StyleRef(); - - if (diff.CompositingReasonsChanged()) { - SetNeedsCompositingInputsUpdate(); - } else if (!RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { + if (!diff.CompositingReasonsChanged() && + !RuntimeEnabledFeatures::CompositeAfterPaintEnabled()) { // For querying stale GetCompositingState(). DisableCompositingQueryAsserts disable; @@ -3263,14 +3260,17 @@ SetNeedsCompositingInputsUpdate(); } + // See also |LayoutObject::SetStyle| which handles these invalidations if a + // PaintLayer is not present. if (diff.TransformChanged() || diff.OpacityChanged() || - diff.ZIndexChanged() || diff.FilterChanged() || - diff.BackdropFilterChanged() || diff.CssClipChanged() || - diff.BlendModeChanged() || diff.MaskChanged()) { + diff.ZIndexChanged() || diff.FilterChanged() || diff.CssClipChanged() || + diff.BlendModeChanged() || diff.MaskChanged() || + diff.CompositingReasonsChanged()) { GetLayoutObject().SetNeedsPaintPropertyUpdate(); SetNeedsCompositingInputsUpdate(); } + const ComputedStyle& new_style = GetLayoutObject().StyleRef(); // HasNonContainedAbsolutePositionDescendant depends on position changes. if (!old_style || old_style->GetPosition() != new_style.GetPosition()) MarkAncestorChainForFlagsUpdate();
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index a6f1171..767627b 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -928,10 +928,6 @@ other)) diff.SetNeedsRecomputeVisualOverflow(); - if (ComputedStyleBase::UpdatePropertySpecificDifferencesBackdropFilter(*this, - other)) - diff.SetBackdropFilterChanged(); - if (!diff.NeedsPaintInvalidation() && ComputedStyleBase::UpdatePropertySpecificDifferencesTextDecorationOrColor( *this, other)) { @@ -961,7 +957,8 @@ ContainsPaint() != other.ContainsPaint() || IsOverflowVisibleAlongBothAxes() != other.IsOverflowVisibleAlongBothAxes() || - WillChangeProperties() != other.WillChangeProperties()) { + WillChangeProperties() != other.WillChangeProperties() || + !BackdropFilterDataEquivalent(other)) { diff.SetCompositingReasonsChanged(); } }
diff --git a/third_party/blink/renderer/core/style/computed_style_diff_functions.json5 b/third_party/blink/renderer/core/style/computed_style_diff_functions.json5 index 02a4878f..f2eb0d3 100644 --- a/third_party/blink/renderer/core/style/computed_style_diff_functions.json5 +++ b/third_party/blink/renderer/core/style/computed_style_diff_functions.json5
@@ -402,15 +402,6 @@ ] }, { - name: "UpdatePropertySpecificDifferencesBackdropFilter", - predicates_to_test: [ - { - predicate: "a.BackdropFilterDataEquivalent(b)", - field_dependencies: ["backdrop-filter"] - }, - ] - }, - { name: "UpdatePropertySpecificDifferencesTextDecorationOrColor", fields_to_diff: ["color", "-internal-visited-color", "text-decoration-line", "text-decoration-style", "text-decoration-color",
diff --git a/third_party/blink/renderer/core/style/style_difference.cc b/third_party/blink/renderer/core/style/style_difference.cc index 66c835a..bb14cf50 100644 --- a/third_party/blink/renderer/core/style/style_difference.cc +++ b/third_party/blink/renderer/core/style/style_difference.cc
@@ -51,9 +51,6 @@ case StyleDifference::kFilterChanged: out << "FilterChanged"; break; - case StyleDifference::kBackdropFilterChanged: - out << "BackdropFilterChanged"; - break; case StyleDifference::kCSSClipChanged: out << "CSSClipChanged"; break;
diff --git a/third_party/blink/renderer/core/style/style_difference.h b/third_party/blink/renderer/core/style/style_difference.h index b249a43..fedd3e49 100644 --- a/third_party/blink/renderer/core/style/style_difference.h +++ b/third_party/blink/renderer/core/style/style_difference.h
@@ -23,16 +23,15 @@ kOpacityChanged = 1 << 1, kZIndexChanged = 1 << 2, kFilterChanged = 1 << 3, - kBackdropFilterChanged = 1 << 4, - kCSSClipChanged = 1 << 5, + kCSSClipChanged = 1 << 4, // The object needs to issue paint invalidations if it is affected by text // decorations or properties dependent on color (e.g., border or outline). // TextDecoration changes must also invalidate ink overflow. - kTextDecorationOrColorChanged = 1 << 6, - kBlendModeChanged = 1 << 7, - kMaskChanged = 1 << 8, + kTextDecorationOrColorChanged = 1 << 5, + kBlendModeChanged = 1 << 6, + kMaskChanged = 1 << 7, // Whether background-color changed alpha to or from 1. - kHasAlphaChanged = 1 << 9, + kHasAlphaChanged = 1 << 8, // If you add a value here, be sure to update kPropertyDifferenceCount. }; @@ -68,6 +67,7 @@ bool HasAtMostPropertySpecificDifferences( unsigned property_differences) const { return !needs_paint_invalidation_ && !layout_type_ && + !compositing_reasons_changed_ && !(property_specific_differences_ & ~property_differences); } @@ -124,13 +124,6 @@ } void SetFilterChanged() { property_specific_differences_ |= kFilterChanged; } - bool BackdropFilterChanged() const { - return property_specific_differences_ & kBackdropFilterChanged; - } - void SetBackdropFilterChanged() { - property_specific_differences_ |= kBackdropFilterChanged; - } - bool CssClipChanged() const { return property_specific_differences_ & kCSSClipChanged; } @@ -176,7 +169,7 @@ void SetCompositingReasonsChanged() { compositing_reasons_changed_ = true; } private: - static constexpr int kPropertyDifferenceCount = 10; + static constexpr int kPropertyDifferenceCount = 9; friend CORE_EXPORT std::ostream& operator<<(std::ostream&, const StyleDifference&);
diff --git a/third_party/blink/renderer/core/style/style_difference_test.cc b/third_party/blink/renderer/core/style/style_difference_test.cc index 4d5a9d558..3a5725b 100644 --- a/third_party/blink/renderer/core/style/style_difference_test.cc +++ b/third_party/blink/renderer/core/style/style_difference_test.cc
@@ -49,7 +49,6 @@ diff.SetOpacityChanged(); diff.SetZIndexChanged(); diff.SetFilterChanged(); - diff.SetBackdropFilterChanged(); diff.SetCSSClipChanged(); diff.SetTextDecorationOrColorChanged(); diff.SetBlendModeChanged(); @@ -59,7 +58,7 @@ "reshape=0, paintInvalidation=0, " "recomputeVisualOverflow=0, visualRectUpdate=0, " "propertySpecificDifferences=TransformChanged|OpacityChanged|" - "ZIndexChanged|FilterChanged|BackdropFilterChanged|CSSClipChanged|" + "ZIndexChanged|FilterChanged|CSSClipChanged|" "TextDecorationOrColorChanged|BlendModeChanged, " "scrollAnchorDisablingPropertyChanged=0}", string_stream.str());
diff --git a/third_party/blink/renderer/platform/exported/web_font.cc b/third_party/blink/renderer/platform/exported/web_font.cc index f8fee0c..2638268 100644 --- a/third_party/blink/renderer/platform/exported/web_font.cc +++ b/third_party/blink/renderer/platform/exported/web_font.cc
@@ -4,7 +4,6 @@ #include "third_party/blink/public/platform/web_font.h" -#include "third_party/blink/public/platform/web_float_rect.h" #include "third_party/blink/public/platform/web_font_description.h" #include "third_party/blink/public/platform/web_rect.h" #include "third_party/blink/public/platform/web_text_run.h" @@ -110,11 +109,11 @@ run, position, IncludePartialGlyphs, DontBreakGlyphs); } -WebFloatRect WebFont::SelectionRectForText(const WebTextRun& run, - const gfx::PointF& left_baseline, - int height, - int from, - int to) const { +gfx::RectF WebFont::SelectionRectForText(const WebTextRun& run, + const gfx::PointF& left_baseline, + int height, + int from, + int to) const { return private_->GetFont().SelectionRectForText( run, FloatPoint(left_baseline), height, from, to); }
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.cc b/third_party/blink/renderer/platform/graphics/bitmap_image.cc index 822dd97..a5ab41c 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image.cc +++ b/third_party/blink/renderer/platform/graphics/bitmap_image.cc
@@ -136,10 +136,15 @@ return; size_ = decoder_->FrameSizeAtIndex(0); - if (decoder_->OrientationAtIndex(0).UsesWidthAsHeight()) + density_corrected_size_ = decoder_->DensityCorrectedSizeAtIndex(0); + if (decoder_->OrientationAtIndex(0).UsesWidthAsHeight()) { size_respecting_orientation_ = size_.TransposedSize(); - else + density_corrected_size_respecting_orientation_ = + density_corrected_size_.TransposedSize(); + } else { size_respecting_orientation_ = size_; + density_corrected_size_respecting_orientation_ = density_corrected_size_; + } have_size_ = true; } @@ -148,8 +153,14 @@ return size_; } -IntSize BitmapImage::SizeRespectingOrientation() const { +IntSize BitmapImage::DensityCorrectedSize() const { + return density_corrected_size_.IsEmpty() ? Size() : density_corrected_size_; +} + +IntSize BitmapImage::PreferredDisplaySize() const { UpdateSize(); + if (!density_corrected_size_respecting_orientation_.IsEmpty()) + return density_corrected_size_respecting_orientation_; return size_respecting_orientation_; } @@ -265,6 +276,13 @@ } FloatRect adjusted_src_rect = src_rect; + if (!density_corrected_size_.IsEmpty()) { + FloatSize src_size(size_); + adjusted_src_rect.Scale( + src_size.Width() / density_corrected_size_.Width(), + src_size.Height() / density_corrected_size_.Height()); + } + adjusted_src_rect.Intersect(SkRect::MakeWH(image.width(), image.height())); if (adjusted_src_rect.IsEmpty() || dst_rect.IsEmpty()) @@ -404,6 +422,12 @@ : kDefaultImageOrientation; } +IntSize BitmapImage::CurrentFrameDensityCorrectedSize() const { + return decoder_ ? decoder_->DensityCorrectedSizeAtIndex( + PaintImage::kDefaultFrameIndex) + : IntSize(); +} + int BitmapImage::RepetitionCount() { if ((repetition_count_status_ == kUnknown) || ((repetition_count_status_ == kUncertain) && all_data_received_)) {
diff --git a/third_party/blink/renderer/platform/graphics/bitmap_image.h b/third_party/blink/renderer/platform/graphics/bitmap_image.h index 1558cef..0084c59 100644 --- a/third_party/blink/renderer/platform/graphics/bitmap_image.h +++ b/third_party/blink/renderer/platform/graphics/bitmap_image.h
@@ -65,7 +65,7 @@ bool CurrentFrameHasSingleSecurityOrigin() const override; IntSize Size() const override; - IntSize SizeRespectingOrientation() const override; + IntSize PreferredDisplaySize() const override; bool HasDefaultOrientation() const override; bool GetHotSpot(IntPoint&) const override; String FilenameExtension() const override; @@ -95,6 +95,7 @@ size_t FrameCount() override; PaintImage PaintImageForCurrentFrame() override; ImageOrientation CurrentFrameOrientation() const override; + IntSize CurrentFrameDensityCorrectedSize() const override; PaintImage PaintImageForTesting(); void AdvanceAnimationForTesting() override { @@ -104,6 +105,8 @@ decoder_ = std::move(decoder); } + IntSize DensityCorrectedSize() const override; + protected: bool IsSizeAvailable() override; @@ -155,6 +158,8 @@ mutable IntSize size_; // The size to use for the overall image (will just // be the size of the first image). mutable IntSize size_respecting_orientation_; + mutable IntSize density_corrected_size_; + mutable IntSize density_corrected_size_respecting_orientation_; // This caches the PaintImage created with the last updated encoded data to // ensure re-use of generated decodes. This is cleared each time the encoded
diff --git a/third_party/blink/renderer/platform/graphics/image.cc b/third_party/blink/renderer/platform/graphics/image.cc index efb5c6d4..e2c747a0 100644 --- a/third_party/blink/renderer/platform/graphics/image.cc +++ b/third_party/blink/renderer/platform/graphics/image.cc
@@ -347,9 +347,10 @@ IntSize Image::Size( RespectImageOrientationEnum respect_image_orientation) const { - if (respect_image_orientation == kRespectImageOrientation) - return SizeRespectingOrientation(); - return Size(); + if (respect_image_orientation == kRespectImageOrientation) { + return PreferredDisplaySize(); + } + return DensityCorrectedSize(); } SkBitmap Image::AsSkBitmapForCurrentFrame( @@ -359,9 +360,25 @@ return {}; auto* bitmap_image = DynamicTo<BitmapImage>(this); - if (respect_image_orientation == kRespectImageOrientation && bitmap_image) { - ImageOrientation orientation = bitmap_image->CurrentFrameOrientation(); - paint_image = ResizeAndOrientImage(paint_image, orientation); + IntSize density_corrected_size; + if (bitmap_image) + density_corrected_size = bitmap_image->DensityCorrectedSize(); + + if (bitmap_image && (respect_image_orientation == kRespectImageOrientation || + !density_corrected_size.IsEmpty())) { + ImageOrientation orientation = + respect_image_orientation == kRespectImageOrientation + ? bitmap_image->CurrentFrameOrientation() + : kDefaultImageOrientation; + + FloatSize image_scale(1, 1); + if (density_corrected_size != bitmap_image->Size()) { + image_scale = + FloatSize(density_corrected_size.Width() / bitmap_image->width(), + density_corrected_size.Height() / bitmap_image->height()); + } + + paint_image = ResizeAndOrientImage(paint_image, orientation, image_scale); if (!paint_image) return {}; }
diff --git a/third_party/blink/renderer/platform/graphics/image.h b/third_party/blink/renderer/platform/graphics/image.h index 23c0c96..96e22fcd 100644 --- a/third_party/blink/renderer/platform/graphics/image.h +++ b/third_party/blink/renderer/platform/graphics/image.h
@@ -107,8 +107,9 @@ virtual bool HasIntrinsicSize() const { return true; } virtual IntSize Size() const = 0; + virtual IntSize DensityCorrectedSize() const { return Size(); } IntSize Size(RespectImageOrientationEnum) const; - virtual IntSize SizeRespectingOrientation() const { return Size(); } + virtual IntSize PreferredDisplaySize() const { return Size(); } virtual FloatSize SizeAsFloat( RespectImageOrientationEnum respect_orientation) const { return FloatSize(Size(respect_orientation)); @@ -214,6 +215,8 @@ return kDefaultImageOrientation; } + virtual IntSize CurrentFrameDensityCorrectedSize() const { return IntSize(); } + // Correct the src rect (rotate and maybe translate it) to account for a // non-default image orientation. The image must have non-default orientation // to call this method. The image_size is the oriented size of the image (i.e.
diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc b/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc index 301ca80..7926dbe 100644 --- a/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc +++ b/third_party/blink/renderer/platform/graphics/static_bitmap_image.cc
@@ -35,7 +35,7 @@ orientation); } -IntSize StaticBitmapImage::SizeRespectingOrientation() const { +IntSize StaticBitmapImage::PreferredDisplaySize() const { if (orientation_.UsesWidthAsHeight()) return Size().TransposedSize(); else
diff --git a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h b/third_party/blink/renderer/platform/graphics/static_bitmap_image.h index f14b5b8..98a6d09f 100644 --- a/third_party/blink/renderer/platform/graphics/static_bitmap_image.h +++ b/third_party/blink/renderer/platform/graphics/static_bitmap_image.h
@@ -40,7 +40,7 @@ // Methods overridden by all sub-classes ~StaticBitmapImage() override = default; - IntSize SizeRespectingOrientation() const override; + IntSize PreferredDisplaySize() const override; virtual scoped_refptr<StaticBitmapImage> ConvertToColorSpace( sk_sp<SkColorSpace>,
diff --git a/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc index 57f7cd5..4d81997 100644 --- a/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc +++ b/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc
@@ -369,13 +369,29 @@ break; case ExifTags::kPixelXDimensionTag: - if (type == kUnsignedShortType && count == 1) - metadata.size.SetWidth(ReadUint16(value_ptr, is_big_endian)); + if (count != 1) + break; + switch (type) { + case kUnsignedShortType: + metadata.size.SetWidth(ReadUint16(value_ptr, is_big_endian)); + break; + case kUnsignedLongType: + metadata.size.SetWidth(ReadUint32(value_ptr, is_big_endian)); + break; + } break; case ExifTags::kPixelYDimensionTag: - if (type == kUnsignedShortType && count == 1) - metadata.size.SetHeight(ReadUint16(value_ptr, is_big_endian)); + if (count != 1) + break; + switch (type) { + case kUnsignedShortType: + metadata.size.SetHeight(ReadUint16(value_ptr, is_big_endian)); + break; + case kUnsignedLongType: + metadata.size.SetHeight(ReadUint32(value_ptr, is_big_endian)); + break; + } break; case ExifTags::kExifOffsetTag:
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index ffdc3340..7409180 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -622,6 +622,9 @@ // removed after M87. { name: "CustomElementsV0", + origin_trial_feature_name: "WebComponentsV0", + origin_trial_type: "deprecation", + origin_trial_allows_insecure: true, status: "test", }, { @@ -899,6 +902,9 @@ // removed after M87. { name: "HTMLImports", + origin_trial_feature_name: "WebComponentsV0", + origin_trial_type: "deprecation", + origin_trial_allows_insecure: true, status: "test", }, { @@ -1738,6 +1744,9 @@ // removed after M87. { name: "ShadowDOMV0", + origin_trial_feature_name: "WebComponentsV0", + origin_trial_type: "deprecation", + origin_trial_allows_insecure: true, status: "test", }, {
diff --git a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc index a48e1558..02136f9 100644 --- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc +++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
@@ -38,6 +38,9 @@ #include "components/viz/common/quads/compositor_frame_metadata.h" #include "components/viz/common/resources/single_release_callback.h" #include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" +#include "third_party/blink/renderer/platform/graphics/dark_mode_filter.h" +#include "third_party/blink/renderer/platform/graphics/dark_mode_settings_builder.h" +#include "third_party/blink/renderer/platform/graphics/raster_dark_mode_filter_impl.h" #include "ui/gfx/presentation_feedback.h" namespace cc { @@ -50,6 +53,8 @@ scheduler::WebThreadScheduler* scheduler) : web_main_thread_scheduler_(scheduler), animation_host_(cc::AnimationHost::CreateMainInstance()), + dark_mode_filter_(std::make_unique<RasterDarkModeFilterImpl>( + GetCurrentDarkModeSettings())), delegate_(delegate) {} LayerTreeView::~LayerTreeView() = default; @@ -70,6 +75,7 @@ params.task_graph_runner = task_graph_runner; params.main_task_runner = std::move(main_thread); params.mutator_host = animation_host_.get(); + params.dark_mode_filter = dark_mode_filter_.get(); params.ukm_recorder_factory = std::move(ukm_recorder_factory); if (base::ThreadPoolInstance::Get()) { // The image worker thread needs to allow waiting since it makes discardable
diff --git a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.h b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.h index 3d7e856..d8c20a9 100644 --- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.h +++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.h
@@ -23,6 +23,7 @@ namespace cc { class AnimationHost; +class RasterDarkModeFilter; class LayerTreeFrameSink; class LayerTreeHost; class LayerTreeSettings; @@ -137,6 +138,7 @@ scheduler::WebThreadScheduler* const web_main_thread_scheduler_; const std::unique_ptr<cc::AnimationHost> animation_host_; + std::unique_ptr<cc::RasterDarkModeFilter> dark_mode_filter_; // The delegate_ becomes null when Disconnect() is called. After that, the // class should do nothing in calls from the LayerTreeHost, and just wait to
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 94d04e57..c6a7e35b 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -145,7 +145,7 @@ virtual/composite-after-paint/scrollingcoordinator/* [ Pass ] # --- End CompositeAfterPaint Tests -- -# --- BEGIN OOP-R Canvas tests --- +# --- BEGIN OOP-R Canvas tests --- crbug.com/1081534 [ Win7 ] virtual/oopr-canvas2d/fast/canvas/canvas-composite-video-shadow.html [ Pass Failure ] crbug.com/1081534 [ Win ] virtual/oopr-canvas2d/fast/canvas/canvas-clearRect-first.html [ Failure ] crbug.com/1081534 [ Win ] virtual/oopr-canvas2d/fast/canvas/canvas-clearRect-with-clip.html [ Failure ] @@ -384,6 +384,7 @@ crbug.com/997202 external/wpt/css/css-images/image-orientation/svg-image-orientation-aspect-ratio.html [ Failure ] crbug.com/997202 external/wpt/css/css-images/image-orientation/image-orientation-background-position.html [ Failure ] crbug.com/997202 external/wpt/css/css-images/image-orientation/image-orientation-background-properties.html [ Failure ] +crbug.com/997202 external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio.html [ Failure ] # These have filtering antialiasing artifacts on one side only, but otherwise are passing. The tests # should be updated with the fuzzy meta data once enabled in the test driver. @@ -2646,9 +2647,7 @@ crbug.com/626703 [ Mac ] external/wpt/web-locks/query-ordering.tentative.https.html [ Pass Failure ] crbug.com/626703 external/wpt/fetch/connection-pool/network-partition-key.html [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-top-left.html [ Timeout ] -crbug.com/626703 [ Mac10.13 ] external/wpt/pointerevents/compat/pointerevent_mouse-pointer-preventdefault.html [ Timeout Pass Failure ] -crbug.com/626703 [ Mac10.14 ] external/wpt/pointerevents/compat/pointerevent_mouse-pointer-preventdefault.html [ Timeout ] -crbug.com/626703 [ Mac10.15 ] external/wpt/pointerevents/compat/pointerevent_mouse-pointer-preventdefault.html [ Timeout Pass Failure ] +crbug.com/626703 [ Mac ] external/wpt/pointerevents/compat/pointerevent_mouse-pointer-preventdefault.html [ Timeout Pass Failure ] crbug.com/626703 [ Mac10.15 ] virtual/threaded/external/wpt/animation-worklet/worklet-animation-with-scroll-timeline-root-scroller.https.html [ Failure ] crbug.com/626703 [ Mac10.14 ] virtual/off-main-thread-css-paint/external/wpt/css/css-paint-api/valid-image-before-load.https.html [ Failure ] crbug.com/626703 external/wpt/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/pageshow-event.window.html [ Timeout ] @@ -3033,38 +3032,38 @@ crbug.com/626703 external/wpt/html/infrastructure/urls/resolving-urls/query-encoding/navigation.sub.html?encoding=utf8 [ Timeout ] crbug.com/626703 external/wpt/css/css-transforms/transform-box/view-box-mutation-001.html [ Failure ] crbug.com/626703 external/wpt/fetch/security/redirect-to-url-with-credentials.https.html [ Timeout ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-007.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-008.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-012.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-003.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/clip-path-shape-circle-003.svg [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/clip-path-shape-circle-004.svg [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/clip-path-shape-circle-005.svg [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/mask-objectboundingbox-content-clip-transform.svg [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/mask-objectboundingbox-content-clip.svg [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-001.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-003.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-001.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-002.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/mask-userspaceonuse-content-clip.svg [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-004.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-011.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-013.html [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/mask-userspaceonuse-content-clip-transform.svg [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-element-userSpaceOnUse-003.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-009.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/mask-userspaceonuse-content-clip.svg [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-001.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-002.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-003.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-004.html [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-005.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-006.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-008.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-element-userSpaceOnUse-003.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-element-userSpaceOnUse-004.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-001.html [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-002.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-003.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-004.html [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-005.html [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-006.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-004.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-010.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-circle-006.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/clip-path-shape-circle-003.svg [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-006.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/clip-path-shape-circle-004.svg [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-008.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/mask-objectboundingbox-content-clip-transform.svg [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-008.html [ Failure ] crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-007.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-element-userSpaceOnUse-004.html [ Failure ] -crbug.com/843084 external/wpt/css/css-masking/clip-path-svg-content/clip-path-shape-circle-005.svg [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-ellipse-008.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-006.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-007.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-008.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-009.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-010.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-011.html [ Failure ] +crbug.com/694218 external/wpt/css/css-masking/clip-path/clip-path-polygon-012.html [ Failure ] +crbug.com/843084 external/wpt/css/css-masking/clip-path/clip-path-polygon-013.html [ Failure ] crbug.com/981970 external/wpt/fetch/http-cache/split-cache.html [ Skip ] crbug.com/626703 external/wpt/fetch/http-cache/basic-auth-cache-test.html [ Timeout ] crbug.com/626703 external/wpt/css/css-fonts/font-feature-settings-descriptor-01.html [ Failure ] @@ -3357,7 +3356,6 @@ crbug.com/941987 external/wpt/css/css-grid/alignment/grid-baseline-align-cycles-001.html [ Failure ] crbug.com/759665 external/wpt/css/css-grid/animation/grid-template-columns-001.html [ Failure ] crbug.com/759665 external/wpt/css/css-grid/animation/grid-template-rows-001.html [ Failure ] -crbug.com/1018439 external/wpt/css/css-grid/grid-child-percent-basis-resize-1.html [ Failure ] crbug.com/935102 external/wpt/css/css-grid/layout-algorithm/grid-flex-track-intrinsic-sizes-002.html [ Failure ] crbug.com/707359 [ Mac ] external/wpt/css/css-grid/alignment/self-baseline/grid-self-baseline-003.html [ Failure ] crbug.com/1053825 external/wpt/css/css-grid/grid-model/grid-overflow-padding-001.html [ Failure ] @@ -3841,6 +3839,7 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/animation/grid-template-rows-001.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/anonymous-grid-items-001.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-child-percent-basis-resize-1.html [ Failure Crash ] +crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/relative-grandchild.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/explicit-grid-size-001.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-distribution-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/flex-content-resolution-columns-001.html [ Failure ] @@ -4010,6 +4009,7 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-023.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html [ Failure ] +crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/percentage-size-subitems-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-001.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-002.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-order-property-auto-placement-003.html [ Failure Crash ] @@ -5741,7 +5741,7 @@ # Temporary suppression to allow devtools-frontend changes crbug.com/1029489 http/tests/devtools/elements/elements-linkify-attributes.js [ Pass Failure Timeout ] -crbug.com/1029567 [ Debug ]crbug.com/1029521 virtual/threaded/external/wpt/web-animations/timing-model/animations/updating-the-finished-state.html [ Pass Failure Timeout ] +crbug.com/1029567 [ Debug ] virtual/threaded/external/wpt/web-animations/timing-model/animations/updating-the-finished-state.html [ Pass Failure Timeout ] crbug.com/1030258 http/tests/devtools/network/network-cookies-pane.js [ Pass Failure ] crbug.com/1041830 http/tests/devtools/tracing/timeline-js/timeline-js-line-level-profile.js [ Pass Failure ] @@ -6194,9 +6194,6 @@ crbug.com/1011811 http/tests/devtools/network/download.js [ Pass Failure ] crbug.com/1011811 http/tests/devtools/sxg/sxg-disable-cache.js [ Pass Failure ] -crbug.com/1080609 virtual/threaded/external/wpt/scroll-animations/element-based-offset.html [ Pass Failure ] -crbug.com/1080609 virtual/threaded/external/wpt/scroll-animations/element-based-offset-clamp.html [ Pass Failure ] - # Fails when test moved to use full compositor pipe. crbug.com/1085832 [ Fuchsia ] images/size-failure.html [ Timeout ]
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 0739e14c..4882ee3 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
@@ -413,6 +413,15 @@ } }, "css-sizing": { + "aspect-ratio": { + "small-aspect-ratio-crash.html": [ + "07712542f179c5e83cc44f4f15130c48e030d8c0", + [ + null, + {} + ] + ] + }, "frameset-intrinsic-crash.html": [ "ab9c43ee44d6c838597074152e1a7463644d29b1", [ @@ -80291,6 +80300,32 @@ {} ] ], + "clip-path-path-interpolation-with-zoom.html": [ + "4d54708da198d2c35bc5980857a8248b9159d3d4", + [ + null, + [ + [ + "/css/css-masking/clip-path/reference/clip-path-path-interpolation-with-zoom-ref.html", + "==" + ] + ], + {} + ] + ], + "clip-path-path-with-zoom.html": [ + "5879917f36e7efb74db4b1aaeb8a05bee96f39cd", + [ + null, + [ + [ + "/css/css-masking/clip-path/reference/clip-path-path-with-zoom-ref.html", + "==" + ] + ], + {} + ] + ], "clip-path-polygon-001.html": [ "954f0ba8d91de74cb36b834f06db5a00ad59b194", [ @@ -191870,6 +191905,14 @@ "567764a30124c2bc8821a508e2a7f8b6f0787c7e", [] ], + "clip-path-path-interpolation-with-zoom-ref.html": [ + "7e0d2a54266f3855dbc8e8e87167a06ea0cc323b", + [] + ], + "clip-path-path-with-zoom-ref.html": [ + "ef91c619c40615f633c64d59bfe302fcfbd8c5fb", + [] + ], "clip-path-rectangle-border-ref.html": [ "9a61c7690248f48ba123535524bf1bff60b4016c", [] @@ -192140,7 +192183,7 @@ }, "parsing": { "clip-path-valid-expected.txt": [ - "1646361592a83fbfef48787803459972ee51c04e", + "60c4fb024402c9c1f5dbc24062b601ff48266451", [] ], "mask-position-valid-expected.txt": [ @@ -242583,7 +242626,7 @@ [] ], "epochs_update.sh": [ - "f460814c962076b4ec72c072dff09925427c90a6", + "1c7edf15aaf8c47638393291de1724e41bab8a2d", [] ], "jobs.py": [ @@ -248747,7 +248790,7 @@ [] ], "chrome.py": [ - "486070ad86d451e73f0e56ce720134024ffc1121", + "fd251a431c306f3bb3b12b848f548d8eff07a466", [] ], "chrome_android.py": [ @@ -268254,6 +268297,13 @@ {} ] ], + "interface-prototype-constructor-set-receiver.html": [ + "20f33f243abeef901357fb2026f0fe2182277673", + [ + null, + {} + ] + ], "interface-prototype-object.html": [ "d2d43eda9a94688ffd707a3ed8f89c28e74324c4", [ @@ -283742,6 +283792,13 @@ null, {} ] + ], + "CSS-supports.html": [ + "dbe9506de149be2fbb1e28d1b334dbdd5dcbbbe6", + [ + null, + {} + ] ] }, "test_group_insertRule.html": [ @@ -290906,6 +290963,13 @@ ] }, "clip-path": { + "clip-path-path-with-zoom-hittest.html": [ + "30ceefcbc03980564136ad29b6fd1a8f9a318d38", + [ + null, + {} + ] + ], "interpolation.html": [ "da3981feed6ed681ee4a7d88b7ecd167b9fd5c7b", [ @@ -303430,13 +303494,6 @@ {} ] ], - "CSS.html": [ - "ba048c58acaac5cd2550fb21cb9b6e9ee8fb0bb1", - [ - null, - {} - ] - ], "CSSCounterStyleRule.html": [ "afae84b0b25f4aebf2461179cf5a5a2b769cce4f", [ @@ -303900,7 +303957,7 @@ ] ], "escape.html": [ - "721c6ea35572d42e2782d6f40f7e73539df35b3a", + "895da59c49c0495514f0002fa6c340059c1d3123", [ null, {} @@ -410220,7 +410277,7 @@ ] ], "urlsearchparams-constructor.any.js": [ - "1135d5d3dbbfa3625391e090985231c41e88f2c6", + "f9878373e5e067598054df4682652a0e9ced270a", [ "url/urlsearchparams-constructor.any.html", {}
diff --git a/third_party/blink/web_tests/external/wpt/WebIDL/ecmascript-binding/interface-prototype-constructor-set-receiver.html b/third_party/blink/web_tests/external/wpt/WebIDL/ecmascript-binding/interface-prototype-constructor-set-receiver.html new file mode 100644 index 0000000..20f33f2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/WebIDL/ecmascript-binding/interface-prototype-constructor-set-receiver.html
@@ -0,0 +1,47 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Interface.prototype.constructor is defined on [[Set]] receiver</title> +<link rel="help" href="https://heycam.github.io/webidl/#interface-prototype-object"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +"use strict"; + +test(() => { + window.constructor = null; + assert_equals(Window.prototype.constructor, Window); + + location.constructor = false; + assert_equals(Location.prototype.constructor, Location); + + navigator.constructor = 1; + assert_equals(Navigator.prototype.constructor, Navigator); + + document.constructor = {}; + assert_equals(HTMLDocument.prototype.constructor, HTMLDocument); + + document.head.constructor = []; + assert_equals(HTMLHeadElement.prototype.constructor, HTMLHeadElement); +}, "Window, Location, Navigator, HTMLDocument, and HTMLHeadElement"); + +test(() => { + for (let key of Object.getOwnPropertyNames(window)) { + if (!/^[A-Z]/.test(key)) continue; + + let desc = Object.getOwnPropertyDescriptor(window, key); + if (!desc || desc.enumerable) continue; + let {value} = desc; + if (typeof value !== "function") continue; + let {prototype} = value; + if (!prototype) continue; + + let heir = Object.create(prototype); + let newConstructor = function() {}; + heir.constructor = newConstructor; + + assert_not_equals(prototype.constructor, newConstructor, key); + assert_own_property(heir, "constructor", key); + assert_equals(heir.constructor, newConstructor, key); + } +}, "All window.* constructors"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-conditional/js/CSS-supports.html b/third_party/blink/web_tests/external/wpt/css/css-conditional/js/CSS-supports.html new file mode 100644 index 0000000..dbe9506 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-conditional/js/CSS-supports.html
@@ -0,0 +1,67 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS.supports</title> +<link rel="help" href="https://drafts.csswg.org/css-conditional/#dom-css-supports"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + test(function() { + assert_equals(CSS.supports("color: red"), true); + }, "Single-argument form allows for declarations without enclosing parentheses"); + + test(function() { + assert_equals(CSS.supports("(color: red) and (color: blue)"), true); + }, "Complex conditions allowed"); + + test(function() { + assert_equals(CSS.supports("not (foobar)"), true); + }, "general_enclosed still parses"); + + test(function() { + assert_equals(CSS.supports("color: something-pointless var(--foo)"), true); + }, "Variable references always parse"); + + test(function() { + assert_equals(CSS.supports("color: something-pointless(var(--foo))"), true); + }, "Variable references in an unknown function always parse"); + + test(function() { + assert_equals(CSS.supports("color", "red"), true); + }, "two argument form succeeds for known property"); + + test(function() { + assert_equals(CSS.supports("unknownproperty", "blah"), false); + }, "two argument form fails for unknown property"); + + test(function() { + assert_equals(CSS.supports("width", "blah"), false); + }, "two argument form fails for invalid value"); + + test(function() { + assert_equals(CSS.supports("--foo", "blah"), true); + }, "two argument form succeeds for custom property"); + + test(function() { + assert_equals(CSS.supports("selector(div)"), true); + }, "selector() function accepts a selector"); + + test(function() { + assert_equals(CSS.supports("selector(div, div)"), false); + }, "selector() function doesn't accept a selector list"); + + test(function() { + assert_equals(CSS.supports("selector(::-webkit-unknown-pseudo-element)"), false); + }, "selector() function rejects unknown webkit pseudo-elements."); + + test(function() { + assert_equals(CSS.supports("selector(::before)"), true); + }, "selector() function accepts known pseudo-elements"); + + test(function() { + assert_equals(CSS.supports("selector(div + .c)"), true); + }, "selector() with simple combinators"); + + test(function() { + assert_equals(CSS.supports("selector(div | .c)"), false); + }, "selector() with unknown combinators"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/dynamic-grid-flex-abspos-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-flexbox/dynamic-grid-flex-abspos-expected.txt deleted file mode 100644 index e5f72e9b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-flexbox/dynamic-grid-flex-abspos-expected.txt +++ /dev/null
@@ -1,17 +0,0 @@ -This is a testharness.js-based test. -PASS .relpos 1 -PASS .relpos 2 -PASS .relpos 3 -FAIL .relpos 4 assert_equals: -<div class="relpos flexbox" data-expected-height="20"> - <div class="abspos">Test</div> - <div style="height: 20px;"></div> - <div style="height: 50%" data-expected-height="10"></div> - </div> -height expected 10 but got 0 -PASS .relpos 5 -PASS .relpos 6 -PASS .relpos 7 -PASS .relpos 8 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/percentage-size-subitems-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/percentage-size-subitems-002.html new file mode 100644 index 0000000..17f57bf --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/grid-items/percentage-size-subitems-002.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1138504"> +<link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"> +<p>Test passes if there is a filled green square.</p> +<div style="display: grid; grid-template-columns: 100px 100px;"> + <div style="min-height: 100px;"> + <div style="height: 100%; background: green;"></div> + </div> + <div style="height: 100px;"></div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/relative-grandchild.html b/third_party/blink/web_tests/external/wpt/css/css-grid/relative-grandchild.html new file mode 100644 index 0000000..9c1b7d5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/relative-grandchild.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1138504"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="width: 100px; height: 100px; background: red;"></div> +<div style="display: grid; width: 100px; height: 100px;"> + <div> + <div style="position: relative; height: 100px; background: green; top: -100%;"></div> + </div> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path-svg-content/clip-path-no-content-005.svg b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path-svg-content/clip-path-no-content-005.svg new file mode 100644 index 0000000..e0c03d2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-masking/clip-path-svg-content/clip-path-no-content-005.svg
@@ -0,0 +1,19 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml" + class="reftest-wait"> + <title>Removing a clip-path attribute pointing to an empty <clipPath></title> + <h:link rel="help" href="https://drafts.fxtf.org/css-masking-1/#ClipPathElement"/> + <h:link rel="match" href="reference/clip-path-square-003-ref.svg"/> + <h:script src="/common/reftest-wait.js"/> + <h:script src="/common/rendering-utils.js"/> + + <clipPath id="empty"/> + <g clip-path='url("#empty")'> + <rect width="200" height="200" fill="green"/> + </g> + <script> + waitForAtLeastOneFrame().then(() => { + document.querySelector('svg > g').removeAttribute('clip-path'); + takeScreenshot(); + }); + </script> +</svg>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/CSS.html b/third_party/blink/web_tests/external/wpt/css/cssom/CSS.html deleted file mode 100644 index ba048c5..0000000 --- a/third_party/blink/web_tests/external/wpt/css/cssom/CSS.html +++ /dev/null
@@ -1,48 +0,0 @@ -<!doctype html> -<meta charset="utf-8"> -<title>CSSOM - CSS interface</title> -<link rel="help" href="https://drafts.csswg.org/cssom/#the-css.escape()-method"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script> - test(function () { - // https://drafts.csswg.org/cssom/#dom-css-escape - // https://drafts.csswg.org/cssom/#serialize-an-identifier - assert_equals(CSS.escape("hello world"), "hello\\ world", "CSS.escape: spaces get escaped with backslashes"); - assert_equals(CSS.escape("hello\0world"), "hello\u{FFFD}world", "CSS.escape: NULL get replaced with U+FFFD REPLACEMENT CHARACTER"); - assert_equals(CSS.escape("hello0world"), "hello0world", "CSS.escape: Numbers within string preserved"); - assert_equals(CSS.escape("hello\x10world"), "hello\\10 world", "CSS.escape: Values between \\x01 and \\x1f are unicode escaped"); - assert_equals(CSS.escape("hello\\world"), "hello\\\\world", "CSS.escape: Backslashes get backslash-escaped"); - assert_equals(CSS.escape("hello\u{1234}world"), "hello\u{1234}world", "CSS.escape: Code points greater than U+0080 are preserved"); - assert_equals(CSS.escape("hello\x7Fworld"), "hello\\7f world", "CSS.escape: Some code points less than U+0080 are unicode-escaped"); - assert_equals(CSS.escape("-"), "\\-", "CSS.escape: Single dash escaped"); - assert_equals(CSS.escape("0foo"), "\\30 foo", "CSS.escape: Numbers at the beginning of an ident get unicode escaped"); - assert_equals(CSS.escape("-0foo"), "-\\30 foo", "CSS.escape: Numbers at the beginning of an ident after single hyphen get unicode escaped"); - assert_equals(CSS.escape("--0foo"), "--0foo", "CSS.escape: Numbers at the beginning of an ident after multiple hyphens do not get unicode escaped"); - }, "CSS.escape"); - test(function () { - // https://drafts.csswg.org/css-conditional/#dom-css-supports - // https://drafts.csswg.org/css-conditional/#typedef-supports-condition - assert_equals(CSS.supports("color: red"), true, "CSS.supports: Single-argument form allows for declarations without enclosing parentheses"); - assert_equals(CSS.supports("(color: red) and (color: blue)"), true, "CSS.supports: Complex conditions allowed"); - assert_equals(CSS.supports("not (foobar)"), true, "CSS.supports: general_enclosed still parses"); - assert_equals(CSS.supports("color: something-pointless var(--foo)"), true, "Variable references always parse"); - assert_equals(CSS.supports("color: something-pointless(var(--foo))"), true, "Variable references in an unknown function always parse"); - }, "CSS.supports, one argument form"); - test(function () { - // https://drafts.csswg.org/css-conditional/#dom-css-supports - // https://drafts.csswg.org/css-conditional/#dfn-support - assert_equals(CSS.supports("color", "red"), true, "CSS.supports: two argument form succeeds for known property"); - assert_equals(CSS.supports("unknownproperty", "blah"), false, "CSS.supports: two argument form fails for unknown property"); - assert_equals(CSS.supports("width", "blah"), false, "CSS.supports: two argument form fails for invalid value"); - assert_equals(CSS.supports("--foo", "blah"), true, "CSS.supports: two argument form succeeds for custom property"); - }, "CSS.supports, two argument form"); - test(function () { - assert_equals(CSS.supports("selector(div)"), true, "CSS.supports: selector() function accepts a selector"); - assert_equals(CSS.supports("selector(div, div)"), false, "CSS.supports: selector() function doesn't accept a selector list"); - assert_equals(CSS.supports("selector(::-webkit-unknown-pseudo-element)"), false, "CSS.supports: selector() function rejects unknown webkit pseudo-elements."); - assert_equals(CSS.supports("selector(::before)"), true, "CSS.supports: selector() function accepts known pseudo-elements"); - assert_equals(CSS.supports("selector(div + .c)"), true, "CSS.supports: selector() with simple combinators"); - assert_equals(CSS.supports("selector(div | .c)"), false, "CSS.supports: selector() with unknown combinators"); - }, "CSS.supports, selector function"); -</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/cssom/escape.html b/third_party/blink/web_tests/external/wpt/css/cssom/escape.html index 721c6ea3..895da59 100644 --- a/third_party/blink/web_tests/external/wpt/css/cssom/escape.html +++ b/third_party/blink/web_tests/external/wpt/css/cssom/escape.html
@@ -85,6 +85,10 @@ assert_equals(CSS.escape('abcdefghijklmnopqrstuvwxyz'), 'abcdefghijklmnopqrstuvwxyz'); assert_equals(CSS.escape('ABCDEFGHIJKLMNOPQRSTUVWXYZ'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'); + assert_equals(CSS.escape("hello\\world"), "hello\\\\world", "Backslashes get backslash-escaped"); + assert_equals(CSS.escape("hello\u{1234}world"), "hello\u{1234}world", "Code points greater than U+0080 are preserved"); + assert_equals(CSS.escape("-"), "\\-", "CSS.escape: Single dash escaped"); + assert_equals(CSS.escape('\x20\x21\x78\x79'), '\\ \\!xy'); }, "Various tests");
diff --git a/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt b/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt index 9ba1937..cfda088 100644 --- a/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt +++ b/third_party/blink/web_tests/external/wpt/custom-elements/historical-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -PASS document.registerElement should not exist +FAIL document.registerElement should not exist assert_false: expected false got true FAIL document.createElement(localName, "string") should not work assert_false: expected false got true FAIL document.createElementNS(namespace, qualifiedName, "string") should not work assert_false: expected false got true Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-in-canvas.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-in-canvas.html new file mode 100644 index 0000000..25ac095 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-in-canvas.html
@@ -0,0 +1,117 @@ +<html> + <head> + <title>Density corrected size: canvas</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <meta name="assert" content="Assert that density-corrected size in EXIF is taken into account for images when drawn in canvas"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <p>You should see green/yellow gradient boxes</p> + <script id="shader-fs" type="x-shader/x-fragment"> + precision mediump float; + uniform sampler2D u_image; + varying vec2 v_texCoord; + uniform float u_frame; + + void main(void) { + gl_FragColor = texture2D(u_image, v_texCoord); + } + </script> + <script id="shader-vs" type="x-shader/x-vertex"> + precision mediump float; + attribute vec2 a_vertex; + attribute vec2 a_tex; + varying vec2 v_texCoord; + + void main(void) { + gl_Position = vec4(a_vertex, 0, 1) ; + v_texCoord = a_tex; + } + </script> + + <script> + const dim = 3 + function drawImage2d(context, image, srcRect) { + context.drawImage(image, ...srcRect, 0, 0, dim, dim) + return context.getImageData(0, 0, dim, dim) + } + function drawImage3d(gl, image, srcRect) { + const vshader = gl.createShader(gl.VERTEX_SHADER) + const fshader = gl.createShader(gl.FRAGMENT_SHADER) + gl.shaderSource(vshader, document.querySelector("#shader-vs").textContent) + gl.shaderSource(fshader, document.querySelector("#shader-fs").textContent) + gl.compileShader(vshader) + gl.compileShader(fshader) + const program = gl.createProgram() + gl.attachShader(program, vshader) + gl.attachShader(program, fshader) + gl.linkProgram(program) + gl.useProgram(program) + const a_vertex = gl.getAttribLocation(program, "a_vertex") + const a_tex = gl.getAttribLocation(program, "a_tex") + const buf_vertex = gl.createBuffer() + const buf_tex = gl.createBuffer() + gl.bindBuffer(gl.ARRAY_BUFFER, buf_tex) + const [sx, sy, sw, sh] = [srcRect[0] / image.naturalWidth, srcRect[1] / image.naturalHeight, srcRect[2] / image.naturalWidth, srcRect[3] / image.naturalHeight] + + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + sx, sy, sx + sw, sy, sx, sy + sh, sx + sw, sy + sh + ]), gl.STATIC_DRAW) + + gl.bindBuffer(gl.ARRAY_BUFFER, buf_vertex) + var vertices = [-1, 1, 1, 1, -1, -1, 1, -1] + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW) + var texture = gl.createTexture() + gl.bindTexture(gl.TEXTURE_2D, texture) + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image) + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE) + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE) + gl.viewport(0, 0, dim, dim) + gl.enableVertexAttribArray(a_vertex) + gl.enableVertexAttribArray(a_tex) + gl.uniform1i(gl.getUniformLocation(program, "u_image"), 0) + gl.bindBuffer(gl.ARRAY_BUFFER, buf_tex) + gl.vertexAttribPointer(a_tex, 2, gl.FLOAT, false, 0, 0) + gl.bindBuffer(gl.ARRAY_BUFFER, buf_vertex) + gl.vertexAttribPointer(a_vertex, 2, gl.FLOAT, false, 0, 0) + gl.clearColor(1, 1, 1, 1) + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); + const pixels = new Uint8ClampedArray(dim * dim * 4) + gl.readPixels(0, 0, dim, dim, gl.RGBA, gl.UNSIGNED_BYTE, pixels) + return {data: pixels, width: dim, height: dim} + } + function createCanvasWithImage(src, contextType, srcRect) { + const canvas = document.createElement('canvas') + canvas.width = canvas.height = dim + const image = new Image() + image.src = src + return new Promise(resolve => { + image.onload = () => { + const context = canvas.getContext(contextType) + if (contextType === '2d') + resolve(drawImage2d(context, image, srcRect)) + else + resolve(drawImage3d(context, image, srcRect)) + } + }) + } + + async function checkCanvasImage(src, contextType, srcRect, reference) { + const data = await createCanvasWithImage(src, contextType, srcRect) + assert_array_approx_equals(data.data, reference.data, 32) + } + + promise_test(async () => { + const reference = await createCanvasWithImage('resources/exif-resolution-none.jpg', '2d', [40, 5, 20, 5]); + await checkCanvasImage("resources/exif-resolution-valid-hires.jpg", '2d', [20, 5, 10, 1], reference) + await checkCanvasImage("resources/exif-resolution-valid-lores.jpg", '2d', [80, 5, 40, 10], reference) + await checkCanvasImage("resources/exif-resolution-none.jpg", 'webgl', [40, 5, 20, 5], reference) + await checkCanvasImage("resources/exif-resolution-valid-hires.jpg", 'webgl', [20, 5, 10, 1], reference) + await checkCanvasImage("resources/exif-resolution-valid-lores.jpg", 'webgl', [80, 5, 40, 1], reference) + }) + </script> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio-ref.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio-ref.html new file mode 100644 index 0000000..fa13136 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio-ref.html
@@ -0,0 +1,29 @@ +<html> + <head> + <title>Density Corrected Size: various elements</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + </head> + <body> + <svg style="width: 800px; height: 800px"> + <image xlink:href="resources/exif-resolution-none.jpg" x="0" y="0" width="120" height="120" preserveAspectRatio="xMinYMin meet"></image> + <image xlink:href="resources/exif-resolution-preapplied-lores.jpg" x="200" y="0" width="120" height="120" preserveAspectRatio="xMidYMin meet"></image> + <image xlink:href="resources/exif-resolution-none.jpg" x="400" y="0" width="120" height="120" preserveAspectRatio="xMaxYMin meet"></image> + <image xlink:href="resources/exif-resolution-valid-non-uniform.jpg" x="630" y="0" width="60" height="120" preserveAspectRatio="none"></image> + + <image xlink:href="resources/exif-resolution-preapplied-lores.jpg" x="0" y="150" width="120" height="120" preserveAspectRatio="xMinYMid slice"></image> + <image xlink:href="resources/exif-resolution-none.jpg" x="200" y="150" width="120" height="120" preserveAspectRatio="xMidYMid slice"></image> + <image xlink:href="resources/exif-resolution-preapplied-lores.jpg" x="400" y="150" width="120" height="120" preserveAspectRatio="xMaxYMid slice"></image> + <image xlink:href="resources/exif-resolution-preapplied-non-uniform.jpg" x="600" y="150" width="120" height="120" preserveAspectRatio="xMidYMid slice"></image> + + <image xlink:href="resources/exif-resolution-none.jpg" x="200" y="300" width="120" height="120" preserveAspectRatio="xMidYMax meet"></image> + <image xlink:href="resources/exif-resolution-preapplied-lores.jpg" x="400" y="300" width="120" height="120" preserveAspectRatio="xMaxYMax meet"></image> + <image xlink:href="resources/exif-resolution-preapplied-non-uniform.jpg" x="600" y="300" width="120" height="120" preserveAspectRatio="xMaxYMid slice"></image> + + <image xlink:href="resources/exif-resolution-none.jpg" x="0" y="450" width="120" height="120" preserveAspectRatio="none"></image> + <image xlink:href="resources/exif-resolution-preapplied-lores.jpg" x="200" y="450" width="120" height="120" preserveAspectRatio="none"></image> + <image xlink:href="resources/exif-resolution-preapplied-non-uniform.jpg" x="400" y="450" width="120" height="120" preserveAspectRatio="none"></image> + <image xlink:href="resources/exif-resolution-preapplied-non-uniform.jpg" x="600" y="450" width="120" height="120" preserveAspectRatio="xMaxYMax meet"></image> + </svg> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio.html new file mode 100644 index 0000000..fbc68de --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-aspect-ratio.html
@@ -0,0 +1,32 @@ +<html> + <head> + <title>Density Corrected Size: SVG aspect ratio</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <link rel="match" href="density-corrected-image-svg-aspect-ratio-ref.html" /> + <meta name="assert" content="Assert that SVG aspect ratio is applied correctly on density-corrected images"> + <meta name=fuzzy content="10;100"> + </head> + <body> + <svg style="width: 800px; height: 800px"> + <image xlink:href="resources/exif-resolution-valid-hires.jpg" x="0" y="0" width="120" height="120" preserveAspectRatio="xMinYMin meet"></image> + <image xlink:href="resources/exif-resolution-valid-lores.jpg" x="200" y="0" width="120" height="120" preserveAspectRatio="xMidYMin meet"></image> + <image xlink:href="resources/exif-resolution-valid-hires.jpg" x="400" y="0" width="120" height="120" preserveAspectRatio="xMaxYMin meet"></image> + <image xlink:href="resources/exif-resolution-valid-non-uniform.jpg" x="600" y="0" width="120" height="120" preserveAspectRatio="xMidYMin meet"></image> + + <image xlink:href="resources/exif-resolution-valid-lores.jpg" x="0" y="150" width="120" height="120" preserveAspectRatio="xMinYMid slice"></image> + <image xlink:href="resources/exif-resolution-valid-hires.jpg" x="200" y="150" width="120" height="120" preserveAspectRatio="xMidYMid slice"></image> + <image xlink:href="resources/exif-resolution-valid-lores.jpg" x="400" y="150" width="120" height="120" preserveAspectRatio="xMaxYMid slice"></image> + <image xlink:href="resources/exif-resolution-valid-non-uniform.jpg" x="600" y="150" width="120" height="120" preserveAspectRatio="xMinYMid slice"></image> + + <image xlink:href="resources/exif-resolution-valid-hires.jpg" x="200" y="300" width="120" height="120" preserveAspectRatio="xMidYMax meet"></image> + <image xlink:href="resources/exif-resolution-valid-lores.jpg" x="400" y="300" width="120" height="120" preserveAspectRatio="xMaxYMax meet"></image> + <image xlink:href="resources/exif-resolution-valid-non-uniform.jpg" x="600" y="300" width="120" height="120" preserveAspectRatio="xMaxYMid slice"></image> + + <image xlink:href="resources/exif-resolution-valid-hires.jpg" x="0" y="450" width="120" height="120" preserveAspectRatio="none"></image> + <image xlink:href="resources/exif-resolution-valid-lores.jpg" x="200" y="450" width="120" height="120" preserveAspectRatio="none"></image> + <image xlink:href="resources/exif-resolution-valid-non-uniform.jpg" x="400" y="450" width="120" height="120" preserveAspectRatio="none"></image> + <image xlink:href="resources/exif-resolution-valid-non-uniform.jpg" x="600" y="450" width="120" height="120" preserveAspectRatio="xMaxYMax meet"></image> + </svg> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-ref.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-ref.html new file mode 100644 index 0000000..6507c669 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg-ref.html
@@ -0,0 +1,24 @@ +<html> + <head> + <title>Density Corrected Size: SVG</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + </head> + <body> + <svg width="200" height="200"> + <image href="resources/exif-resolution-none.jpg" /> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-none.jpg" preserveAspectRatio="none" width="50" height="25"/> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-none.jpg" preserveAspectRatio="none" width="200" height="100" /> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-none.jpg" preserveAspectRatio="none" width="50" height="100" /> + </svg> + <svg width="200" height="200" style="transform-origin: 25% 25%; transform: rotate(90deg)"> + <image href="resources/exif-resolution-none.jpg" preserveAspectRatio="none" width="200" height="100" /> + </svg> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg.html new file mode 100644 index 0000000..91c9496 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-image-svg.html
@@ -0,0 +1,26 @@ +<html> + <head> + <title>Density Corrected Size: SVG</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <link rel="match" href="density-corrected-image-svg-ref.html" /> + <meta name="assert" content="Assert that density-corrected size in EXIF is taken into account for SVG <image>"> + </head> + <body> + <svg width="200" height="200"> + <image href="resources/exif-resolution-none.jpg" /> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-valid-hires.jpg" /> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-valid-lores.jpg" /> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-valid-non-uniform.jpg" /> + </svg> + <svg width="200" height="200"> + <image href="resources/exif-resolution-with-orientation.jpg" /> + </svg> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-natural-size.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-natural-size.html new file mode 100644 index 0000000..0b90b74 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-natural-size.html
@@ -0,0 +1,40 @@ +<!DOCTYPE html> +<body> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./third_party/piexif/piexif.js"></script> +<script src="./resources/exify.js"></script> +<link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> +<script> + async function test_valid(input) { + const image = await createImageWithMetadata(input) + assert_equals(image.naturalWidth, input.preferredWidth) + assert_equals(image.naturalHeight, input.preferredHeight) + } + async function test_invalid(input) { + const image = await createImageWithMetadata(input) + assert_equals(image.naturalWidth, input.width) + assert_equals(image.naturalHeight, input.height) + } + + async function test() { + await test_valid({width: 10, height: 20, preferredWidth: 20, preferredHeight: 40, resolutionX: 36, resolutionY: 36, resolutionUnit: 2}) + await test_valid({width: 10, height: 20, preferredWidth: 2, preferredHeight: 4, resolutionX: 360, resolutionY: 360, resolutionUnit: 2}) + await test_valid({width: 10, height: 20, preferredWidth: 20, preferredHeight: 10, resolutionX: 36, resolutionY: 144, resolutionUnit: 2}) + await test_valid({width: 10, height: 20, preferredWidth: 10, preferredHeight: 40, resolutionX: 72, resolutionY: 36, resolutionUnit: 2}) + await test_valid({width: 30, height: 30, preferredWidth: 90, preferredHeight: 30, resolutionX: 24, resolutionY: 72, resolutionUnit: 2}) + + await test_invalid({width: 10, height: 20, preferredWidth: 20, preferredHeight: 30, resolutionX: 36, resolutionY: 36, resolutionUnit: 2}) + await test_invalid({width: 10, height: 20, preferredWidth: 33, preferredHeight: 40, resolutionX: 36, resolutionY: 36, resolutionUnit: 2}) + await test_invalid({width: 10, height: 20, preferredHeight: 40, resolutionX: 36, resolutionY: 36, resolutionUnit: 2}) + await test_invalid({width: 10, height: 20, preferredWidth: 20, resolutionX: 36, resolutionY: 36, resolutionUnit: 2}) + await test_invalid({width: 30, height: 30, preferredWidth: 90, preferredHeight: 30, resolutionY: 72, resolutionUnit: 2}) + await test_invalid({width: 30, height: 30, preferredWidth: 90, preferredHeight: 30, resolutionX: 24, resolutionUnit: 2}) + await test_invalid({width: 30, height: 30, preferredWidth: 90, preferredHeight: 30, resolutionX: 24, resolutionY: 72, resolutionUnit: 1}) + await test_invalid({width: 3, height: 3, preferredHeight: 2000000, preferredWidth: 50}) + } + + promise_test(test) +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-bg-ref.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-bg-ref.html new file mode 100644 index 0000000..758ca8ed --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-bg-ref.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<head> + <title>Density corrected size: background images</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> +</head> +<body> + <style> + body { + --lores: url(resources/exif-resolution-valid-lores.jpg); + --hires: url(resources/exif-resolution-valid-hires.jpg); + --default: url(resources/exif-resolution-none.jpg); + --non-uniform: url(resources/exif-resolution-valid-non-uniform.jpg); + } + .default-bg {background-image: var(--default); } + .lores-bg {background-image: var(--lores); } + .hires-bg {background-image: var(--hires); } + .invalid-bg {background-image: var(--invalid); } + .non-uniform-bg {background-image: var(--non-uniform); } + .box { width: 200px; height: 200px; display: inline-block; } + .tiled {background-repeat: repeat; } + .stretch {background-repeat: no-repeat; background-size: contain; } + </style> + <div class="default-bg tiled box"></div> + <div class="lores-bg tiled box"></div> + <div class="hires-bg tiled box"></div> + <div class="non-uniform-bg tiled box"></div> + <br/> + <div class="lores-bg stretch box"></div> + <div class="default-bg stretch box"></div> + <div class="non-uniform-bg stretch box"></div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-bg.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-bg.html new file mode 100644 index 0000000..5a3190e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-bg.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<head> + <title>Density corrected size: background images</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <link rel="match" href="density-corrected-size-bg-ref.html" /> + <meta name="assert" content="Assert that background images with EXIF density-corrected-size are rendered correctly"> +</head> +<body> + <style> + body { + --lores: url(resources/exif-resolution-valid-lores.jpg); + --hires: url(resources/exif-resolution-valid-hires.jpg); + --default: url(resources/exif-resolution-none.jpg); + --non-uniform: url(resources/exif-resolution-valid-non-uniform.jpg); + } + .default-bg {background-image: var(--default); } + .lores-bg {background-image: var(--lores); } + .hires-bg {background-image: var(--hires); } + .invalid-bg {background-image: var(--invalid); } + .non-uniform-bg {background-image: var(--non-uniform); } + .box { width: 200px; height: 200px; display: inline-block; } + .tiled {background-repeat: repeat; } + .stretch {background-repeat: no-repeat; background-size: contain; } + </style> + <div class="default-bg tiled box"></div> + <div class="lores-bg tiled box"></div> + <div class="hires-bg tiled box"></div> + <div class="non-uniform-bg tiled box"></div> + <br/> + <div class="lores-bg stretch box"></div> + <div class="default-bg stretch box"></div> + <div class="non-uniform-bg stretch box"></div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-img-ref.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-img-ref.html new file mode 100644 index 0000000..5a71863a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-img-ref.html
@@ -0,0 +1,8 @@ +<!DOCTYPE html> +<body> +<img src="resources/exif-resolution-none.jpg" width="100" height="50" /> +<img src="resources/exif-resolution-none.jpg" width="50" height="25" /> +<img src="resources/exif-resolution-none.jpg" width="200" height="100"/> +<img src="resources/exif-resolution-none.jpg" width="50" height="100"/> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-img.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-img.html new file mode 100644 index 0000000..7c2e788 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-img.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<head> + <title>Density corrected size: rendering</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <link rel="match" href="density-corrected-size-img-ref.html" /> + <meta name="assert" content="Assert that images with EXIF density-corrected-size are rendered correctly"> +</head> +<body> + <img src="resources/exif-resolution-none.jpg" /> + <img src="resources/exif-resolution-valid-hires.jpg" /> + <img src="resources/exif-resolution-valid-lores.jpg" /> + <img src="resources/exif-resolution-valid-non-uniform.jpg" /> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-pseudo-elements-ref.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-pseudo-elements-ref.html new file mode 100644 index 0000000..b2c9de4 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-pseudo-elements-ref.html
@@ -0,0 +1,18 @@ +<!DOCTYPE html> +<head> + <title>Density corrected size: pseudo-elements</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> +</head> +<body> + <style> + body { + --lores: url(resources/exif-resolution-valid-lores.jpg); + --default: url(resources/exif-resolution-none.jpg); + } + .lores-after::after {content: var(--lores); width: 200px; height: 100px; } + .default-after::after {content: var(--default); } + </style> + <div class="lores-after box"></div> + <div class="default-after box"></div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-pseudo-elements.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-pseudo-elements.html new file mode 100644 index 0000000..34d318f1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-size-pseudo-elements.html
@@ -0,0 +1,20 @@ +<!DOCTYPE html> +<head> + <title>Density corrected size: pseudo-elements</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <link rel="match" href="density-corrected-size-pseudo-elements-ref.html" /> + <meta name="assert" content="Assert that images with EXIF density-corrected-size are rendered correctly when in a pseudo element"> +</head> +<body> + <style> + body { + --lores: url(resources/exif-resolution-valid-lores.jpg); + --default: url(resources/exif-resolution-none.jpg); + } + .lores-after::after {content: var(--lores); } + .default-after::after {content: var(--default); } + </style> + <div class="lores-after box"></div> + <div class="default-after box"></div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-various-elements-ref.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-various-elements-ref.html new file mode 100644 index 0000000..a0be0ac --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-various-elements-ref.html
@@ -0,0 +1,34 @@ +<html> + <head> + <title>Density Corrected Size: various elements</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <style> + .row { + display: flex; + } + + .row > * { + object-fit: none; + object-position: top left; + margin: 5px; + width: 100px; + height: 50px; + background: #CCCCCC; + } + </style> + </head> + <body> + <p>There following boxes should be identical (the colorful boxes at the top-left quarter)</p> + <div class="row"> + <div> + <img src="resources/exif-resolution-none.jpg" width="50" height="25" /> + </div> + <div> + <img src="resources/exif-resolution-none.jpg" width="50" height="25" /> + </div> + <div> + <img src="resources/exif-resolution-none.jpg" width="50" height="25" /> + </div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-various-elements.html b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-various-elements.html new file mode 100644 index 0000000..69d8056 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/density-corrected-various-elements.html
@@ -0,0 +1,34 @@ +<html> + <head> + <title>Density Corrected Size: various elements</title> + <link rel="author" title="Noam Rosenthal" href="noam@webkit.org"> + <link rel="match" href="density-corrected-various-elements-ref.html" /> + <meta name="assert" content="Assert that density-corrected size in EXIF is taken into account for images in all relevant elements (input/video-poster)"> + <style> + .row { + display: flex; + } + + .row > * { + object-fit: none; + object-position: top left; + margin: 5px; + width: 100px; + height: 50px; + background: #CCCCCC; + } + </style> + </head> + <body> + <p>There following boxes should be identical (the colorful boxes at the top-left quarter)</p> + <div class="row"> + <div> + <img src="resources/exif-resolution-none.jpg" width="50" height="25" /> + </div> + <video poster="resources/exif-resolution-valid-hires.jpg"></video> + <div> + <input type="image" src="resources/exif-resolution-valid-hires.jpg" /> + </div> + </div> + </body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-no-change.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-no-change.jpg new file mode 100644 index 0000000..04f9202c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-no-change.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-none.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-none.jpg new file mode 100644 index 0000000..04f9202c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-none.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-preapplied-lores.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-preapplied-lores.jpg new file mode 100644 index 0000000..ad91a14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-preapplied-lores.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-preapplied-non-uniform.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-preapplied-non-uniform.jpg new file mode 100644 index 0000000..c1a607f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-preapplied-non-uniform.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-hires.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-hires.jpg new file mode 100644 index 0000000..757ce2d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-hires.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-lores.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-lores.jpg new file mode 100644 index 0000000..11a5d8b12 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-lores.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-non-uniform.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-non-uniform.jpg new file mode 100644 index 0000000..a028bde --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-valid-non-uniform.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-with-orientation.jpg b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-with-orientation.jpg new file mode 100644 index 0000000..5c914f0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exif-resolution-with-orientation.jpg Binary files differ
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exify.js b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exify.js new file mode 100644 index 0000000..c16b25e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/resources/exify.js
@@ -0,0 +1,39 @@ +function createImageWithMetadata({ + width, + height, + preferredWidth, + preferredHeight, + resolutionX, + resolutionY, + resolutionUnit, + orientation +}) { + const canvas = document.createElement('canvas') + canvas.width = width || 100 + canvas.height = height || 100 + const ctx = canvas.getContext('2d') + ctx.fillColor = 'green' + ctx.fillRect(0, 0, canvas.width, canvas.height) + const original = canvas.toDataURL('image/jpeg') + const root = {} + const exif = {} + if (orientation !== undefined) + root[piexif.ExifIFD.Orientation] = orientation + if (resolutionX !== undefined) + root[piexif.ImageIFD.XResolution] = [resolutionX, 1] + if (resolutionY !== undefined) + root[piexif.ImageIFD.YResolution] = [resolutionY, 1] + if (resolutionUnit !== undefined) + root[piexif.ImageIFD.ResolutionUnit] = resolutionUnit + if (preferredWidth !== undefined) + exif[piexif.ExifIFD.PixelXDimension] = preferredWidth + if (preferredHeight !== undefined) + exif[piexif.ExifIFD.PixelYDimension] = preferredHeight + const exifString = piexif.dump({'0th': root, 'Exif': exif}) + const newDataUrl = piexif.insert(exifString, original) + const image = new Image() + image.src = newDataUrl + return new Promise(resolve => { + image.onload = () => resolve(image); + }) +} \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/third_party/piexif/LICENSE.txt b/third_party/blink/web_tests/external/wpt/density-size-correction/third_party/piexif/LICENSE.txt new file mode 100644 index 0000000..73bd974 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/third_party/piexif/LICENSE.txt
@@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Hiroaki Matoba + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.
diff --git a/third_party/blink/web_tests/external/wpt/density-size-correction/third_party/piexif/piexif.js b/third_party/blink/web_tests/external/wpt/density-size-correction/third_party/piexif/piexif.js new file mode 100644 index 0000000..01b4e8f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/density-size-correction/third_party/piexif/piexif.js
@@ -0,0 +1,2482 @@ +/* piexifjs + +The MIT License (MIT) + +Copyright (c) 2014, 2015 hMatoba(https://github.com/hMatoba) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +(function () { + "use strict"; + var that = {}; + that.version = "1.0.4"; + + that.remove = function (jpeg) { + var b64 = false; + if (jpeg.slice(0, 2) == "\xff\xd8") { + } else if (jpeg.slice(0, 23) == "data:image/jpeg;base64," || jpeg.slice(0, 22) == "data:image/jpg;base64,") { + jpeg = atob(jpeg.split(",")[1]); + b64 = true; + } else { + throw new Error("Given data is not jpeg."); + } + + var segments = splitIntoSegments(jpeg); + var newSegments = segments.filter(function(seg){ + return !(seg.slice(0, 2) == "\xff\xe1" && + seg.slice(4, 10) == "Exif\x00\x00"); + }); + + var new_data = newSegments.join(""); + if (b64) { + new_data = "data:image/jpeg;base64," + btoa(new_data); + } + + return new_data; + }; + + + that.insert = function (exif, jpeg) { + var b64 = false; + if (exif.slice(0, 6) != "\x45\x78\x69\x66\x00\x00") { + throw new Error("Given data is not exif."); + } + if (jpeg.slice(0, 2) == "\xff\xd8") { + } else if (jpeg.slice(0, 23) == "data:image/jpeg;base64," || jpeg.slice(0, 22) == "data:image/jpg;base64,") { + jpeg = atob(jpeg.split(",")[1]); + b64 = true; + } else { + throw new Error("Given data is not jpeg."); + } + + var exifStr = "\xff\xe1" + pack(">H", [exif.length + 2]) + exif; + var segments = splitIntoSegments(jpeg); + var new_data = mergeSegments(segments, exifStr); + if (b64) { + new_data = "data:image/jpeg;base64," + btoa(new_data); + } + + return new_data; + }; + + + that.load = function (data) { + var input_data; + if (typeof (data) == "string") { + if (data.slice(0, 2) == "\xff\xd8") { + input_data = data; + } else if (data.slice(0, 23) == "data:image/jpeg;base64," || data.slice(0, 22) == "data:image/jpg;base64,") { + input_data = atob(data.split(",")[1]); + } else if (data.slice(0, 4) == "Exif") { + input_data = data.slice(6); + } else { + throw new Error("'load' gots invalid file data."); + } + } else { + throw new Error("'load' gots invalid type argument."); + } + + var exifDict = {}; + var exif_dict = { + "0th": {}, + "Exif": {}, + "GPS": {}, + "Interop": {}, + "1st": {}, + "thumbnail": null + }; + var exifReader = new ExifReader(input_data); + if (exifReader.tiftag === null) { + return exif_dict; + } + + if (exifReader.tiftag.slice(0, 2) == "\x49\x49") { + exifReader.endian_mark = "<"; + } else { + exifReader.endian_mark = ">"; + } + + var pointer = unpack(exifReader.endian_mark + "L", + exifReader.tiftag.slice(4, 8))[0]; + exif_dict["0th"] = exifReader.get_ifd(pointer, "0th"); + + var first_ifd_pointer = exif_dict["0th"]["first_ifd_pointer"]; + delete exif_dict["0th"]["first_ifd_pointer"]; + + if (34665 in exif_dict["0th"]) { + pointer = exif_dict["0th"][34665]; + exif_dict["Exif"] = exifReader.get_ifd(pointer, "Exif"); + } + if (34853 in exif_dict["0th"]) { + pointer = exif_dict["0th"][34853]; + exif_dict["GPS"] = exifReader.get_ifd(pointer, "GPS"); + } + if (40965 in exif_dict["Exif"]) { + pointer = exif_dict["Exif"][40965]; + exif_dict["Interop"] = exifReader.get_ifd(pointer, "Interop"); + } + if (first_ifd_pointer != "\x00\x00\x00\x00") { + pointer = unpack(exifReader.endian_mark + "L", + first_ifd_pointer)[0]; + exif_dict["1st"] = exifReader.get_ifd(pointer, "1st"); + if ((513 in exif_dict["1st"]) && (514 in exif_dict["1st"])) { + var end = exif_dict["1st"][513] + exif_dict["1st"][514]; + var thumb = exifReader.tiftag.slice(exif_dict["1st"][513], end); + exif_dict["thumbnail"] = thumb; + } + } + + return exif_dict; + }; + + + that.dump = function (exif_dict_original) { + var TIFF_HEADER_LENGTH = 8; + + var exif_dict = copy(exif_dict_original); + var header = "Exif\x00\x00\x4d\x4d\x00\x2a\x00\x00\x00\x08"; + var exif_is = false; + var gps_is = false; + var interop_is = false; + var first_is = false; + + var zeroth_ifd, + exif_ifd, + interop_ifd, + gps_ifd, + first_ifd; + + if ("0th" in exif_dict) { + zeroth_ifd = exif_dict["0th"]; + } else { + zeroth_ifd = {}; + } + + if ((("Exif" in exif_dict) && (Object.keys(exif_dict["Exif"]).length)) || + (("Interop" in exif_dict) && (Object.keys(exif_dict["Interop"]).length))) { + zeroth_ifd[34665] = 1; + exif_is = true; + exif_ifd = exif_dict["Exif"]; + if (("Interop" in exif_dict) && Object.keys(exif_dict["Interop"]).length) { + exif_ifd[40965] = 1; + interop_is = true; + interop_ifd = exif_dict["Interop"]; + } else if (Object.keys(exif_ifd).indexOf(that.ExifIFD.InteroperabilityTag.toString()) > -1) { + delete exif_ifd[40965]; + } + } else if (Object.keys(zeroth_ifd).indexOf(that.ImageIFD.ExifTag.toString()) > -1) { + delete zeroth_ifd[34665]; + } + + if (("GPS" in exif_dict) && (Object.keys(exif_dict["GPS"]).length)) { + zeroth_ifd[that.ImageIFD.GPSTag] = 1; + gps_is = true; + gps_ifd = exif_dict["GPS"]; + } else if (Object.keys(zeroth_ifd).indexOf(that.ImageIFD.GPSTag.toString()) > -1) { + delete zeroth_ifd[that.ImageIFD.GPSTag]; + } + + if (("1st" in exif_dict) && + ("thumbnail" in exif_dict) && + (exif_dict["thumbnail"] != null)) { + first_is = true; + exif_dict["1st"][513] = 1; + exif_dict["1st"][514] = 1; + first_ifd = exif_dict["1st"]; + } + + var zeroth_set = _dict_to_bytes(zeroth_ifd, "0th", 0); + var zeroth_length = (zeroth_set[0].length + exif_is * 12 + gps_is * 12 + 4 + + zeroth_set[1].length); + + var exif_set, + exif_bytes = "", + exif_length = 0, + gps_set, + gps_bytes = "", + gps_length = 0, + interop_set, + interop_bytes = "", + interop_length = 0, + first_set, + first_bytes = "", + thumbnail; + if (exif_is) { + exif_set = _dict_to_bytes(exif_ifd, "Exif", zeroth_length); + exif_length = exif_set[0].length + interop_is * 12 + exif_set[1].length; + } + if (gps_is) { + gps_set = _dict_to_bytes(gps_ifd, "GPS", zeroth_length + exif_length); + gps_bytes = gps_set.join(""); + gps_length = gps_bytes.length; + } + if (interop_is) { + var offset = zeroth_length + exif_length + gps_length; + interop_set = _dict_to_bytes(interop_ifd, "Interop", offset); + interop_bytes = interop_set.join(""); + interop_length = interop_bytes.length; + } + if (first_is) { + var offset = zeroth_length + exif_length + gps_length + interop_length; + first_set = _dict_to_bytes(first_ifd, "1st", offset); + thumbnail = _get_thumbnail(exif_dict["thumbnail"]); + if (thumbnail.length > 64000) { + throw new Error("Given thumbnail is too large. max 64kB"); + } + } + + var exif_pointer = "", + gps_pointer = "", + interop_pointer = "", + first_ifd_pointer = "\x00\x00\x00\x00"; + if (exif_is) { + var pointer_value = TIFF_HEADER_LENGTH + zeroth_length; + var pointer_str = pack(">L", [pointer_value]); + var key = 34665; + var key_str = pack(">H", [key]); + var type_str = pack(">H", [TYPES["Long"]]); + var length_str = pack(">L", [1]); + exif_pointer = key_str + type_str + length_str + pointer_str; + } + if (gps_is) { + var pointer_value = TIFF_HEADER_LENGTH + zeroth_length + exif_length; + var pointer_str = pack(">L", [pointer_value]); + var key = 34853; + var key_str = pack(">H", [key]); + var type_str = pack(">H", [TYPES["Long"]]); + var length_str = pack(">L", [1]); + gps_pointer = key_str + type_str + length_str + pointer_str; + } + if (interop_is) { + var pointer_value = (TIFF_HEADER_LENGTH + + zeroth_length + exif_length + gps_length); + var pointer_str = pack(">L", [pointer_value]); + var key = 40965; + var key_str = pack(">H", [key]); + var type_str = pack(">H", [TYPES["Long"]]); + var length_str = pack(">L", [1]); + interop_pointer = key_str + type_str + length_str + pointer_str; + } + if (first_is) { + var pointer_value = (TIFF_HEADER_LENGTH + zeroth_length + + exif_length + gps_length + interop_length); + first_ifd_pointer = pack(">L", [pointer_value]); + var thumbnail_pointer = (pointer_value + first_set[0].length + 24 + + 4 + first_set[1].length); + var thumbnail_p_bytes = ("\x02\x01\x00\x04\x00\x00\x00\x01" + + pack(">L", [thumbnail_pointer])); + var thumbnail_length_bytes = ("\x02\x02\x00\x04\x00\x00\x00\x01" + + pack(">L", [thumbnail.length])); + first_bytes = (first_set[0] + thumbnail_p_bytes + + thumbnail_length_bytes + "\x00\x00\x00\x00" + + first_set[1] + thumbnail); + } + + var zeroth_bytes = (zeroth_set[0] + exif_pointer + gps_pointer + + first_ifd_pointer + zeroth_set[1]); + if (exif_is) { + exif_bytes = exif_set[0] + interop_pointer + exif_set[1]; + } + + return (header + zeroth_bytes + exif_bytes + gps_bytes + + interop_bytes + first_bytes); + }; + + + function copy(obj) { + return JSON.parse(JSON.stringify(obj)); + } + + + function _get_thumbnail(jpeg) { + var segments = splitIntoSegments(jpeg); + while (("\xff\xe0" <= segments[1].slice(0, 2)) && (segments[1].slice(0, 2) <= "\xff\xef")) { + segments = [segments[0]].concat(segments.slice(2)); + } + return segments.join(""); + } + + + function _pack_byte(array) { + return pack(">" + nStr("B", array.length), array); + } + + + function _pack_short(array) { + return pack(">" + nStr("H", array.length), array); + } + + + function _pack_long(array) { + return pack(">" + nStr("L", array.length), array); + } + + + function _value_to_bytes(raw_value, value_type, offset) { + var four_bytes_over = ""; + var value_str = ""; + var length, + new_value, + num, + den; + + if (value_type == "Byte") { + length = raw_value.length; + if (length <= 4) { + value_str = (_pack_byte(raw_value) + + nStr("\x00", 4 - length)); + } else { + value_str = pack(">L", [offset]); + four_bytes_over = _pack_byte(raw_value); + } + } else if (value_type == "Short") { + length = raw_value.length; + if (length <= 2) { + value_str = (_pack_short(raw_value) + + nStr("\x00\x00", 2 - length)); + } else { + value_str = pack(">L", [offset]); + four_bytes_over = _pack_short(raw_value); + } + } else if (value_type == "Long") { + length = raw_value.length; + if (length <= 1) { + value_str = _pack_long(raw_value); + } else { + value_str = pack(">L", [offset]); + four_bytes_over = _pack_long(raw_value); + } + } else if (value_type == "Ascii") { + new_value = raw_value + "\x00"; + length = new_value.length; + if (length > 4) { + value_str = pack(">L", [offset]); + four_bytes_over = new_value; + } else { + value_str = new_value + nStr("\x00", 4 - length); + } + } else if (value_type == "Rational") { + if (typeof (raw_value[0]) == "number") { + length = 1; + num = raw_value[0]; + den = raw_value[1]; + new_value = pack(">L", [num]) + pack(">L", [den]); + } else { + length = raw_value.length; + new_value = ""; + for (var n = 0; n < length; n++) { + num = raw_value[n][0]; + den = raw_value[n][1]; + new_value += (pack(">L", [num]) + + pack(">L", [den])); + } + } + value_str = pack(">L", [offset]); + four_bytes_over = new_value; + } else if (value_type == "SRational") { + if (typeof (raw_value[0]) == "number") { + length = 1; + num = raw_value[0]; + den = raw_value[1]; + new_value = pack(">l", [num]) + pack(">l", [den]); + } else { + length = raw_value.length; + new_value = ""; + for (var n = 0; n < length; n++) { + num = raw_value[n][0]; + den = raw_value[n][1]; + new_value += (pack(">l", [num]) + + pack(">l", [den])); + } + } + value_str = pack(">L", [offset]); + four_bytes_over = new_value; + } else if (value_type == "Undefined") { + length = raw_value.length; + if (length > 4) { + value_str = pack(">L", [offset]); + four_bytes_over = raw_value; + } else { + value_str = raw_value + nStr("\x00", 4 - length); + } + } + + var length_str = pack(">L", [length]); + + return [length_str, value_str, four_bytes_over]; + } + + function _dict_to_bytes(ifd_dict, ifd, ifd_offset) { + var TIFF_HEADER_LENGTH = 8; + var tag_count = Object.keys(ifd_dict).length; + var entry_header = pack(">H", [tag_count]); + var entries_length; + if (["0th", "1st"].indexOf(ifd) > -1) { + entries_length = 2 + tag_count * 12 + 4; + } else { + entries_length = 2 + tag_count * 12; + } + var entries = ""; + var values = ""; + var key; + + for (var key in ifd_dict) { + if (typeof (key) == "string") { + key = parseInt(key); + } + if ((ifd == "0th") && ([34665, 34853].indexOf(key) > -1)) { + continue; + } else if ((ifd == "Exif") && (key == 40965)) { + continue; + } else if ((ifd == "1st") && ([513, 514].indexOf(key) > -1)) { + continue; + } + + var raw_value = ifd_dict[key]; + var key_str = pack(">H", [key]); + var value_type = TAGS[ifd][key]["type"]; + var type_str = pack(">H", [TYPES[value_type]]); + + if (typeof (raw_value) == "number") { + raw_value = [raw_value]; + } + var offset = TIFF_HEADER_LENGTH + entries_length + ifd_offset + values.length; + var b = _value_to_bytes(raw_value, value_type, offset); + var length_str = b[0]; + var value_str = b[1]; + var four_bytes_over = b[2]; + + entries += key_str + type_str + length_str + value_str; + values += four_bytes_over; + } + + return [entry_header + entries, values]; + } + + + + function ExifReader(data) { + var segments, + app1; + if (data.slice(0, 2) == "\xff\xd8") { // JPEG + segments = splitIntoSegments(data); + app1 = getExifSeg(segments); + if (app1) { + this.tiftag = app1.slice(10); + } else { + this.tiftag = null; + } + } else if (["\x49\x49", "\x4d\x4d"].indexOf(data.slice(0, 2)) > -1) { // TIFF + this.tiftag = data; + } else if (data.slice(0, 4) == "Exif") { // Exif + this.tiftag = data.slice(6); + } else { + throw new Error("Given file is neither JPEG nor TIFF."); + } + } + + ExifReader.prototype = { + get_ifd: function (pointer, ifd_name) { + var ifd_dict = {}; + var tag_count = unpack(this.endian_mark + "H", + this.tiftag.slice(pointer, pointer + 2))[0]; + var offset = pointer + 2; + var t; + if (["0th", "1st"].indexOf(ifd_name) > -1) { + t = "Image"; + } else { + t = ifd_name; + } + + for (var x = 0; x < tag_count; x++) { + pointer = offset + 12 * x; + var tag = unpack(this.endian_mark + "H", + this.tiftag.slice(pointer, pointer + 2))[0]; + var value_type = unpack(this.endian_mark + "H", + this.tiftag.slice(pointer + 2, pointer + 4))[0]; + var value_num = unpack(this.endian_mark + "L", + this.tiftag.slice(pointer + 4, pointer + 8))[0]; + var value = this.tiftag.slice(pointer + 8, pointer + 12); + + var v_set = [value_type, value_num, value]; + if (tag in TAGS[t]) { + ifd_dict[tag] = this.convert_value(v_set); + } + } + + if (ifd_name == "0th") { + pointer = offset + 12 * tag_count; + ifd_dict["first_ifd_pointer"] = this.tiftag.slice(pointer, pointer + 4); + } + + return ifd_dict; + }, + + convert_value: function (val) { + var data = null; + var t = val[0]; + var length = val[1]; + var value = val[2]; + var pointer; + + if (t == 1) { // BYTE + if (length > 4) { + pointer = unpack(this.endian_mark + "L", value)[0]; + data = unpack(this.endian_mark + nStr("B", length), + this.tiftag.slice(pointer, pointer + length)); + } else { + data = unpack(this.endian_mark + nStr("B", length), value.slice(0, length)); + } + } else if (t == 2) { // ASCII + if (length > 4) { + pointer = unpack(this.endian_mark + "L", value)[0]; + data = this.tiftag.slice(pointer, pointer + length - 1); + } else { + data = value.slice(0, length - 1); + } + } else if (t == 3) { // SHORT + if (length > 2) { + pointer = unpack(this.endian_mark + "L", value)[0]; + data = unpack(this.endian_mark + nStr("H", length), + this.tiftag.slice(pointer, pointer + length * 2)); + } else { + data = unpack(this.endian_mark + nStr("H", length), + value.slice(0, length * 2)); + } + } else if (t == 4) { // LONG + if (length > 1) { + pointer = unpack(this.endian_mark + "L", value)[0]; + data = unpack(this.endian_mark + nStr("L", length), + this.tiftag.slice(pointer, pointer + length * 4)); + } else { + data = unpack(this.endian_mark + nStr("L", length), + value); + } + } else if (t == 5) { // RATIONAL + pointer = unpack(this.endian_mark + "L", value)[0]; + if (length > 1) { + data = []; + for (var x = 0; x < length; x++) { + data.push([unpack(this.endian_mark + "L", + this.tiftag.slice(pointer + x * 8, pointer + 4 + x * 8))[0], + unpack(this.endian_mark + "L", + this.tiftag.slice(pointer + 4 + x * 8, pointer + 8 + x * 8))[0] + ]); + } + } else { + data = [unpack(this.endian_mark + "L", + this.tiftag.slice(pointer, pointer + 4))[0], + unpack(this.endian_mark + "L", + this.tiftag.slice(pointer + 4, pointer + 8))[0] + ]; + } + } else if (t == 7) { // UNDEFINED BYTES + if (length > 4) { + pointer = unpack(this.endian_mark + "L", value)[0]; + data = this.tiftag.slice(pointer, pointer + length); + } else { + data = value.slice(0, length); + } + } else if (t == 9) { // SLONG + if (length > 1) { + pointer = unpack(this.endian_mark + "L", value)[0]; + data = unpack(this.endian_mark + nStr("l", length), + this.tiftag.slice(pointer, pointer + length * 4)); + } else { + data = unpack(this.endian_mark + nStr("l", length), + value); + } + } else if (t == 10) { // SRATIONAL + pointer = unpack(this.endian_mark + "L", value)[0]; + if (length > 1) { + data = []; + for (var x = 0; x < length; x++) { + data.push([unpack(this.endian_mark + "l", + this.tiftag.slice(pointer + x * 8, pointer + 4 + x * 8))[0], + unpack(this.endian_mark + "l", + this.tiftag.slice(pointer + 4 + x * 8, pointer + 8 + x * 8))[0] + ]); + } + } else { + data = [unpack(this.endian_mark + "l", + this.tiftag.slice(pointer, pointer + 4))[0], + unpack(this.endian_mark + "l", + this.tiftag.slice(pointer + 4, pointer + 8))[0] + ]; + } + } else { + throw new Error("Exif might be wrong. Got incorrect value " + + "type to decode. type:" + t); + } + + if ((data instanceof Array) && (data.length == 1)) { + return data[0]; + } else { + return data; + } + }, + }; + + + if (typeof window !== "undefined" && typeof window.btoa === "function") { + var btoa = window.btoa; + } + if (typeof btoa === "undefined") { + var btoa = function (input) { var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + keyStr.charAt(enc1) + keyStr.charAt(enc2) + + keyStr.charAt(enc3) + keyStr.charAt(enc4); + + } + + return output; + }; + } + + + if (typeof window !== "undefined" && typeof window.atob === "function") { + var atob = window.atob; + } + if (typeof atob === "undefined") { + var atob = function (input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + + enc1 = keyStr.indexOf(input.charAt(i++)); + enc2 = keyStr.indexOf(input.charAt(i++)); + enc3 = keyStr.indexOf(input.charAt(i++)); + enc4 = keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } + + return output; + }; + } + + + function getImageSize(imageArray) { + var segments = slice2Segments(imageArray); + var seg, + width, + height, + SOF = [192, 193, 194, 195, 197, 198, 199, 201, 202, 203, 205, 206, 207]; + + for (var x = 0; x < segments.length; x++) { + seg = segments[x]; + if (SOF.indexOf(seg[1]) >= 0) { + height = seg[5] * 256 + seg[6]; + width = seg[7] * 256 + seg[8]; + break; + } + } + return [width, height]; + } + + + function pack(mark, array) { + if (!(array instanceof Array)) { + throw new Error("'pack' error. Got invalid type argument."); + } + if ((mark.length - 1) != array.length) { + throw new Error("'pack' error. " + (mark.length - 1) + " marks, " + array.length + " elements."); + } + + var littleEndian; + if (mark[0] == "<") { + littleEndian = true; + } else if (mark[0] == ">") { + littleEndian = false; + } else { + throw new Error(""); + } + var packed = ""; + var p = 1; + var val = null; + var c = null; + var valStr = null; + + while (c = mark[p]) { + if (c.toLowerCase() == "b") { + val = array[p - 1]; + if ((c == "b") && (val < 0)) { + val += 0x100; + } + if ((val > 0xff) || (val < 0)) { + throw new Error("'pack' error."); + } else { + valStr = String.fromCharCode(val); + } + } else if (c == "H") { + val = array[p - 1]; + if ((val > 0xffff) || (val < 0)) { + throw new Error("'pack' error."); + } else { + valStr = String.fromCharCode(Math.floor((val % 0x10000) / 0x100)) + + String.fromCharCode(val % 0x100); + if (littleEndian) { + valStr = valStr.split("").reverse().join(""); + } + } + } else if (c.toLowerCase() == "l") { + val = array[p - 1]; + if ((c == "l") && (val < 0)) { + val += 0x100000000; + } + if ((val > 0xffffffff) || (val < 0)) { + throw new Error("'pack' error."); + } else { + valStr = String.fromCharCode(Math.floor(val / 0x1000000)) + + String.fromCharCode(Math.floor((val % 0x1000000) / 0x10000)) + + String.fromCharCode(Math.floor((val % 0x10000) / 0x100)) + + String.fromCharCode(val % 0x100); + if (littleEndian) { + valStr = valStr.split("").reverse().join(""); + } + } + } else { + throw new Error("'pack' error."); + } + + packed += valStr; + p += 1; + } + + return packed; + } + + function unpack(mark, str) { + if (typeof (str) != "string") { + throw new Error("'unpack' error. Got invalid type argument."); + } + var l = 0; + for (var markPointer = 1; markPointer < mark.length; markPointer++) { + if (mark[markPointer].toLowerCase() == "b") { + l += 1; + } else if (mark[markPointer].toLowerCase() == "h") { + l += 2; + } else if (mark[markPointer].toLowerCase() == "l") { + l += 4; + } else { + throw new Error("'unpack' error. Got invalid mark."); + } + } + + if (l != str.length) { + throw new Error("'unpack' error. Mismatch between symbol and string length. " + l + ":" + str.length); + } + + var littleEndian; + if (mark[0] == "<") { + littleEndian = true; + } else if (mark[0] == ">") { + littleEndian = false; + } else { + throw new Error("'unpack' error."); + } + var unpacked = []; + var strPointer = 0; + var p = 1; + var val = null; + var c = null; + var length = null; + var sliced = ""; + + while (c = mark[p]) { + if (c.toLowerCase() == "b") { + length = 1; + sliced = str.slice(strPointer, strPointer + length); + val = sliced.charCodeAt(0); + if ((c == "b") && (val >= 0x80)) { + val -= 0x100; + } + } else if (c == "H") { + length = 2; + sliced = str.slice(strPointer, strPointer + length); + if (littleEndian) { + sliced = sliced.split("").reverse().join(""); + } + val = sliced.charCodeAt(0) * 0x100 + + sliced.charCodeAt(1); + } else if (c.toLowerCase() == "l") { + length = 4; + sliced = str.slice(strPointer, strPointer + length); + if (littleEndian) { + sliced = sliced.split("").reverse().join(""); + } + val = sliced.charCodeAt(0) * 0x1000000 + + sliced.charCodeAt(1) * 0x10000 + + sliced.charCodeAt(2) * 0x100 + + sliced.charCodeAt(3); + if ((c == "l") && (val >= 0x80000000)) { + val -= 0x100000000; + } + } else { + throw new Error("'unpack' error. " + c); + } + + unpacked.push(val); + strPointer += length; + p += 1; + } + + return unpacked; + } + + function nStr(ch, num) { + var str = ""; + for (var i = 0; i < num; i++) { + str += ch; + } + return str; + } + + function splitIntoSegments(data) { + if (data.slice(0, 2) != "\xff\xd8") { + throw new Error("Given data isn't JPEG."); + } + + var head = 2; + var segments = ["\xff\xd8"]; + while (true) { + if (data.slice(head, head + 2) == "\xff\xda") { + segments.push(data.slice(head)); + break; + } else { + var length = unpack(">H", data.slice(head + 2, head + 4))[0]; + var endPoint = head + length + 2; + segments.push(data.slice(head, endPoint)); + head = endPoint; + } + + if (head >= data.length) { + throw new Error("Wrong JPEG data."); + } + } + return segments; + } + + + function getExifSeg(segments) { + var seg; + for (var i = 0; i < segments.length; i++) { + seg = segments[i]; + if (seg.slice(0, 2) == "\xff\xe1" && + seg.slice(4, 10) == "Exif\x00\x00") { + return seg; + } + } + return null; + } + + + function mergeSegments(segments, exif) { + var hasExifSegment = false; + var additionalAPP1ExifSegments = []; + + segments.forEach(function(segment, i) { + // Replace first occurence of APP1:Exif segment + if (segment.slice(0, 2) == "\xff\xe1" && + segment.slice(4, 10) == "Exif\x00\x00" + ) { + if (!hasExifSegment) { + segments[i] = exif; + hasExifSegment = true; + } else { + additionalAPP1ExifSegments.unshift(i); + } + } + }); + + // Remove additional occurences of APP1:Exif segment + additionalAPP1ExifSegments.forEach(function(segmentIndex) { + segments.splice(segmentIndex, 1); + }); + + if (!hasExifSegment && exif) { + segments = [segments[0], exif].concat(segments.slice(1)); + } + + return segments.join(""); + } + + + function toHex(str) { + var hexStr = ""; + for (var i = 0; i < str.length; i++) { + var h = str.charCodeAt(i); + var hex = ((h < 10) ? "0" : "") + h.toString(16); + hexStr += hex + " "; + } + return hexStr; + } + + + var TYPES = { + "Byte": 1, + "Ascii": 2, + "Short": 3, + "Long": 4, + "Rational": 5, + "Undefined": 7, + "SLong": 9, + "SRational": 10 + }; + + + var TAGS = { + 'Image': { + 11: { + 'name': 'ProcessingSoftware', + 'type': 'Ascii' + }, + 254: { + 'name': 'NewSubfileType', + 'type': 'Long' + }, + 255: { + 'name': 'SubfileType', + 'type': 'Short' + }, + 256: { + 'name': 'ImageWidth', + 'type': 'Long' + }, + 257: { + 'name': 'ImageLength', + 'type': 'Long' + }, + 258: { + 'name': 'BitsPerSample', + 'type': 'Short' + }, + 259: { + 'name': 'Compression', + 'type': 'Short' + }, + 262: { + 'name': 'PhotometricInterpretation', + 'type': 'Short' + }, + 263: { + 'name': 'Threshholding', + 'type': 'Short' + }, + 264: { + 'name': 'CellWidth', + 'type': 'Short' + }, + 265: { + 'name': 'CellLength', + 'type': 'Short' + }, + 266: { + 'name': 'FillOrder', + 'type': 'Short' + }, + 269: { + 'name': 'DocumentName', + 'type': 'Ascii' + }, + 270: { + 'name': 'ImageDescription', + 'type': 'Ascii' + }, + 271: { + 'name': 'Make', + 'type': 'Ascii' + }, + 272: { + 'name': 'Model', + 'type': 'Ascii' + }, + 273: { + 'name': 'StripOffsets', + 'type': 'Long' + }, + 274: { + 'name': 'Orientation', + 'type': 'Short' + }, + 277: { + 'name': 'SamplesPerPixel', + 'type': 'Short' + }, + 278: { + 'name': 'RowsPerStrip', + 'type': 'Long' + }, + 279: { + 'name': 'StripByteCounts', + 'type': 'Long' + }, + 282: { + 'name': 'XResolution', + 'type': 'Rational' + }, + 283: { + 'name': 'YResolution', + 'type': 'Rational' + }, + 284: { + 'name': 'PlanarConfiguration', + 'type': 'Short' + }, + 290: { + 'name': 'GrayResponseUnit', + 'type': 'Short' + }, + 291: { + 'name': 'GrayResponseCurve', + 'type': 'Short' + }, + 292: { + 'name': 'T4Options', + 'type': 'Long' + }, + 293: { + 'name': 'T6Options', + 'type': 'Long' + }, + 296: { + 'name': 'ResolutionUnit', + 'type': 'Short' + }, + 301: { + 'name': 'TransferFunction', + 'type': 'Short' + }, + 305: { + 'name': 'Software', + 'type': 'Ascii' + }, + 306: { + 'name': 'DateTime', + 'type': 'Ascii' + }, + 315: { + 'name': 'Artist', + 'type': 'Ascii' + }, + 316: { + 'name': 'HostComputer', + 'type': 'Ascii' + }, + 317: { + 'name': 'Predictor', + 'type': 'Short' + }, + 318: { + 'name': 'WhitePoint', + 'type': 'Rational' + }, + 319: { + 'name': 'PrimaryChromaticities', + 'type': 'Rational' + }, + 320: { + 'name': 'ColorMap', + 'type': 'Short' + }, + 321: { + 'name': 'HalftoneHints', + 'type': 'Short' + }, + 322: { + 'name': 'TileWidth', + 'type': 'Short' + }, + 323: { + 'name': 'TileLength', + 'type': 'Short' + }, + 324: { + 'name': 'TileOffsets', + 'type': 'Short' + }, + 325: { + 'name': 'TileByteCounts', + 'type': 'Short' + }, + 330: { + 'name': 'SubIFDs', + 'type': 'Long' + }, + 332: { + 'name': 'InkSet', + 'type': 'Short' + }, + 333: { + 'name': 'InkNames', + 'type': 'Ascii' + }, + 334: { + 'name': 'NumberOfInks', + 'type': 'Short' + }, + 336: { + 'name': 'DotRange', + 'type': 'Byte' + }, + 337: { + 'name': 'TargetPrinter', + 'type': 'Ascii' + }, + 338: { + 'name': 'ExtraSamples', + 'type': 'Short' + }, + 339: { + 'name': 'SampleFormat', + 'type': 'Short' + }, + 340: { + 'name': 'SMinSampleValue', + 'type': 'Short' + }, + 341: { + 'name': 'SMaxSampleValue', + 'type': 'Short' + }, + 342: { + 'name': 'TransferRange', + 'type': 'Short' + }, + 343: { + 'name': 'ClipPath', + 'type': 'Byte' + }, + 344: { + 'name': 'XClipPathUnits', + 'type': 'Long' + }, + 345: { + 'name': 'YClipPathUnits', + 'type': 'Long' + }, + 346: { + 'name': 'Indexed', + 'type': 'Short' + }, + 347: { + 'name': 'JPEGTables', + 'type': 'Undefined' + }, + 351: { + 'name': 'OPIProxy', + 'type': 'Short' + }, + 512: { + 'name': 'JPEGProc', + 'type': 'Long' + }, + 513: { + 'name': 'JPEGInterchangeFormat', + 'type': 'Long' + }, + 514: { + 'name': 'JPEGInterchangeFormatLength', + 'type': 'Long' + }, + 515: { + 'name': 'JPEGRestartInterval', + 'type': 'Short' + }, + 517: { + 'name': 'JPEGLosslessPredictors', + 'type': 'Short' + }, + 518: { + 'name': 'JPEGPointTransforms', + 'type': 'Short' + }, + 519: { + 'name': 'JPEGQTables', + 'type': 'Long' + }, + 520: { + 'name': 'JPEGDCTables', + 'type': 'Long' + }, + 521: { + 'name': 'JPEGACTables', + 'type': 'Long' + }, + 529: { + 'name': 'YCbCrCoefficients', + 'type': 'Rational' + }, + 530: { + 'name': 'YCbCrSubSampling', + 'type': 'Short' + }, + 531: { + 'name': 'YCbCrPositioning', + 'type': 'Short' + }, + 532: { + 'name': 'ReferenceBlackWhite', + 'type': 'Rational' + }, + 700: { + 'name': 'XMLPacket', + 'type': 'Byte' + }, + 18246: { + 'name': 'Rating', + 'type': 'Short' + }, + 18249: { + 'name': 'RatingPercent', + 'type': 'Short' + }, + 32781: { + 'name': 'ImageID', + 'type': 'Ascii' + }, + 33421: { + 'name': 'CFARepeatPatternDim', + 'type': 'Short' + }, + 33422: { + 'name': 'CFAPattern', + 'type': 'Byte' + }, + 33423: { + 'name': 'BatteryLevel', + 'type': 'Rational' + }, + 33432: { + 'name': 'Copyright', + 'type': 'Ascii' + }, + 33434: { + 'name': 'ExposureTime', + 'type': 'Rational' + }, + 34377: { + 'name': 'ImageResources', + 'type': 'Byte' + }, + 34665: { + 'name': 'ExifTag', + 'type': 'Long' + }, + 34675: { + 'name': 'InterColorProfile', + 'type': 'Undefined' + }, + 34853: { + 'name': 'GPSTag', + 'type': 'Long' + }, + 34857: { + 'name': 'Interlace', + 'type': 'Short' + }, + 34858: { + 'name': 'TimeZoneOffset', + 'type': 'Long' + }, + 34859: { + 'name': 'SelfTimerMode', + 'type': 'Short' + }, + 37387: { + 'name': 'FlashEnergy', + 'type': 'Rational' + }, + 37388: { + 'name': 'SpatialFrequencyResponse', + 'type': 'Undefined' + }, + 37389: { + 'name': 'Noise', + 'type': 'Undefined' + }, + 37390: { + 'name': 'FocalPlaneXResolution', + 'type': 'Rational' + }, + 37391: { + 'name': 'FocalPlaneYResolution', + 'type': 'Rational' + }, + 37392: { + 'name': 'FocalPlaneResolutionUnit', + 'type': 'Short' + }, + 37393: { + 'name': 'ImageNumber', + 'type': 'Long' + }, + 37394: { + 'name': 'SecurityClassification', + 'type': 'Ascii' + }, + 37395: { + 'name': 'ImageHistory', + 'type': 'Ascii' + }, + 37397: { + 'name': 'ExposureIndex', + 'type': 'Rational' + }, + 37398: { + 'name': 'TIFFEPStandardID', + 'type': 'Byte' + }, + 37399: { + 'name': 'SensingMethod', + 'type': 'Short' + }, + 40091: { + 'name': 'XPTitle', + 'type': 'Byte' + }, + 40092: { + 'name': 'XPComment', + 'type': 'Byte' + }, + 40093: { + 'name': 'XPAuthor', + 'type': 'Byte' + }, + 40094: { + 'name': 'XPKeywords', + 'type': 'Byte' + }, + 40095: { + 'name': 'XPSubject', + 'type': 'Byte' + }, + 50341: { + 'name': 'PrintImageMatching', + 'type': 'Undefined' + }, + 50706: { + 'name': 'DNGVersion', + 'type': 'Byte' + }, + 50707: { + 'name': 'DNGBackwardVersion', + 'type': 'Byte' + }, + 50708: { + 'name': 'UniqueCameraModel', + 'type': 'Ascii' + }, + 50709: { + 'name': 'LocalizedCameraModel', + 'type': 'Byte' + }, + 50710: { + 'name': 'CFAPlaneColor', + 'type': 'Byte' + }, + 50711: { + 'name': 'CFALayout', + 'type': 'Short' + }, + 50712: { + 'name': 'LinearizationTable', + 'type': 'Short' + }, + 50713: { + 'name': 'BlackLevelRepeatDim', + 'type': 'Short' + }, + 50714: { + 'name': 'BlackLevel', + 'type': 'Rational' + }, + 50715: { + 'name': 'BlackLevelDeltaH', + 'type': 'SRational' + }, + 50716: { + 'name': 'BlackLevelDeltaV', + 'type': 'SRational' + }, + 50717: { + 'name': 'WhiteLevel', + 'type': 'Short' + }, + 50718: { + 'name': 'DefaultScale', + 'type': 'Rational' + }, + 50719: { + 'name': 'DefaultCropOrigin', + 'type': 'Short' + }, + 50720: { + 'name': 'DefaultCropSize', + 'type': 'Short' + }, + 50721: { + 'name': 'ColorMatrix1', + 'type': 'SRational' + }, + 50722: { + 'name': 'ColorMatrix2', + 'type': 'SRational' + }, + 50723: { + 'name': 'CameraCalibration1', + 'type': 'SRational' + }, + 50724: { + 'name': 'CameraCalibration2', + 'type': 'SRational' + }, + 50725: { + 'name': 'ReductionMatrix1', + 'type': 'SRational' + }, + 50726: { + 'name': 'ReductionMatrix2', + 'type': 'SRational' + }, + 50727: { + 'name': 'AnalogBalance', + 'type': 'Rational' + }, + 50728: { + 'name': 'AsShotNeutral', + 'type': 'Short' + }, + 50729: { + 'name': 'AsShotWhiteXY', + 'type': 'Rational' + }, + 50730: { + 'name': 'BaselineExposure', + 'type': 'SRational' + }, + 50731: { + 'name': 'BaselineNoise', + 'type': 'Rational' + }, + 50732: { + 'name': 'BaselineSharpness', + 'type': 'Rational' + }, + 50733: { + 'name': 'BayerGreenSplit', + 'type': 'Long' + }, + 50734: { + 'name': 'LinearResponseLimit', + 'type': 'Rational' + }, + 50735: { + 'name': 'CameraSerialNumber', + 'type': 'Ascii' + }, + 50736: { + 'name': 'LensInfo', + 'type': 'Rational' + }, + 50737: { + 'name': 'ChromaBlurRadius', + 'type': 'Rational' + }, + 50738: { + 'name': 'AntiAliasStrength', + 'type': 'Rational' + }, + 50739: { + 'name': 'ShadowScale', + 'type': 'SRational' + }, + 50740: { + 'name': 'DNGPrivateData', + 'type': 'Byte' + }, + 50741: { + 'name': 'MakerNoteSafety', + 'type': 'Short' + }, + 50778: { + 'name': 'CalibrationIlluminant1', + 'type': 'Short' + }, + 50779: { + 'name': 'CalibrationIlluminant2', + 'type': 'Short' + }, + 50780: { + 'name': 'BestQualityScale', + 'type': 'Rational' + }, + 50781: { + 'name': 'RawDataUniqueID', + 'type': 'Byte' + }, + 50827: { + 'name': 'OriginalRawFileName', + 'type': 'Byte' + }, + 50828: { + 'name': 'OriginalRawFileData', + 'type': 'Undefined' + }, + 50829: { + 'name': 'ActiveArea', + 'type': 'Short' + }, + 50830: { + 'name': 'MaskedAreas', + 'type': 'Short' + }, + 50831: { + 'name': 'AsShotICCProfile', + 'type': 'Undefined' + }, + 50832: { + 'name': 'AsShotPreProfileMatrix', + 'type': 'SRational' + }, + 50833: { + 'name': 'CurrentICCProfile', + 'type': 'Undefined' + }, + 50834: { + 'name': 'CurrentPreProfileMatrix', + 'type': 'SRational' + }, + 50879: { + 'name': 'ColorimetricReference', + 'type': 'Short' + }, + 50931: { + 'name': 'CameraCalibrationSignature', + 'type': 'Byte' + }, + 50932: { + 'name': 'ProfileCalibrationSignature', + 'type': 'Byte' + }, + 50934: { + 'name': 'AsShotProfileName', + 'type': 'Byte' + }, + 50935: { + 'name': 'NoiseReductionApplied', + 'type': 'Rational' + }, + 50936: { + 'name': 'ProfileName', + 'type': 'Byte' + }, + 50937: { + 'name': 'ProfileHueSatMapDims', + 'type': 'Long' + }, + 50938: { + 'name': 'ProfileHueSatMapData1', + 'type': 'Float' + }, + 50939: { + 'name': 'ProfileHueSatMapData2', + 'type': 'Float' + }, + 50940: { + 'name': 'ProfileToneCurve', + 'type': 'Float' + }, + 50941: { + 'name': 'ProfileEmbedPolicy', + 'type': 'Long' + }, + 50942: { + 'name': 'ProfileCopyright', + 'type': 'Byte' + }, + 50964: { + 'name': 'ForwardMatrix1', + 'type': 'SRational' + }, + 50965: { + 'name': 'ForwardMatrix2', + 'type': 'SRational' + }, + 50966: { + 'name': 'PreviewApplicationName', + 'type': 'Byte' + }, + 50967: { + 'name': 'PreviewApplicationVersion', + 'type': 'Byte' + }, + 50968: { + 'name': 'PreviewSettingsName', + 'type': 'Byte' + }, + 50969: { + 'name': 'PreviewSettingsDigest', + 'type': 'Byte' + }, + 50970: { + 'name': 'PreviewColorSpace', + 'type': 'Long' + }, + 50971: { + 'name': 'PreviewDateTime', + 'type': 'Ascii' + }, + 50972: { + 'name': 'RawImageDigest', + 'type': 'Undefined' + }, + 50973: { + 'name': 'OriginalRawFileDigest', + 'type': 'Undefined' + }, + 50974: { + 'name': 'SubTileBlockSize', + 'type': 'Long' + }, + 50975: { + 'name': 'RowInterleaveFactor', + 'type': 'Long' + }, + 50981: { + 'name': 'ProfileLookTableDims', + 'type': 'Long' + }, + 50982: { + 'name': 'ProfileLookTableData', + 'type': 'Float' + }, + 51008: { + 'name': 'OpcodeList1', + 'type': 'Undefined' + }, + 51009: { + 'name': 'OpcodeList2', + 'type': 'Undefined' + }, + 51022: { + 'name': 'OpcodeList3', + 'type': 'Undefined' + } + }, + 'Exif': { + 33434: { + 'name': 'ExposureTime', + 'type': 'Rational' + }, + 33437: { + 'name': 'FNumber', + 'type': 'Rational' + }, + 34850: { + 'name': 'ExposureProgram', + 'type': 'Short' + }, + 34852: { + 'name': 'SpectralSensitivity', + 'type': 'Ascii' + }, + 34855: { + 'name': 'ISOSpeedRatings', + 'type': 'Short' + }, + 34856: { + 'name': 'OECF', + 'type': 'Undefined' + }, + 34864: { + 'name': 'SensitivityType', + 'type': 'Short' + }, + 34865: { + 'name': 'StandardOutputSensitivity', + 'type': 'Long' + }, + 34866: { + 'name': 'RecommendedExposureIndex', + 'type': 'Long' + }, + 34867: { + 'name': 'ISOSpeed', + 'type': 'Long' + }, + 34868: { + 'name': 'ISOSpeedLatitudeyyy', + 'type': 'Long' + }, + 34869: { + 'name': 'ISOSpeedLatitudezzz', + 'type': 'Long' + }, + 36864: { + 'name': 'ExifVersion', + 'type': 'Undefined' + }, + 36867: { + 'name': 'DateTimeOriginal', + 'type': 'Ascii' + }, + 36868: { + 'name': 'DateTimeDigitized', + 'type': 'Ascii' + }, + 37121: { + 'name': 'ComponentsConfiguration', + 'type': 'Undefined' + }, + 37122: { + 'name': 'CompressedBitsPerPixel', + 'type': 'Rational' + }, + 37377: { + 'name': 'ShutterSpeedValue', + 'type': 'SRational' + }, + 37378: { + 'name': 'ApertureValue', + 'type': 'Rational' + }, + 37379: { + 'name': 'BrightnessValue', + 'type': 'SRational' + }, + 37380: { + 'name': 'ExposureBiasValue', + 'type': 'SRational' + }, + 37381: { + 'name': 'MaxApertureValue', + 'type': 'Rational' + }, + 37382: { + 'name': 'SubjectDistance', + 'type': 'Rational' + }, + 37383: { + 'name': 'MeteringMode', + 'type': 'Short' + }, + 37384: { + 'name': 'LightSource', + 'type': 'Short' + }, + 37385: { + 'name': 'Flash', + 'type': 'Short' + }, + 37386: { + 'name': 'FocalLength', + 'type': 'Rational' + }, + 37396: { + 'name': 'SubjectArea', + 'type': 'Short' + }, + 37500: { + 'name': 'MakerNote', + 'type': 'Undefined' + }, + 37510: { + 'name': 'UserComment', + 'type': 'Ascii' + }, + 37520: { + 'name': 'SubSecTime', + 'type': 'Ascii' + }, + 37521: { + 'name': 'SubSecTimeOriginal', + 'type': 'Ascii' + }, + 37522: { + 'name': 'SubSecTimeDigitized', + 'type': 'Ascii' + }, + 40960: { + 'name': 'FlashpixVersion', + 'type': 'Undefined' + }, + 40961: { + 'name': 'ColorSpace', + 'type': 'Short' + }, + 40962: { + 'name': 'PixelXDimension', + 'type': 'Long' + }, + 40963: { + 'name': 'PixelYDimension', + 'type': 'Long' + }, + 40964: { + 'name': 'RelatedSoundFile', + 'type': 'Ascii' + }, + 40965: { + 'name': 'InteroperabilityTag', + 'type': 'Long' + }, + 41483: { + 'name': 'FlashEnergy', + 'type': 'Rational' + }, + 41484: { + 'name': 'SpatialFrequencyResponse', + 'type': 'Undefined' + }, + 41486: { + 'name': 'FocalPlaneXResolution', + 'type': 'Rational' + }, + 41487: { + 'name': 'FocalPlaneYResolution', + 'type': 'Rational' + }, + 41488: { + 'name': 'FocalPlaneResolutionUnit', + 'type': 'Short' + }, + 41492: { + 'name': 'SubjectLocation', + 'type': 'Short' + }, + 41493: { + 'name': 'ExposureIndex', + 'type': 'Rational' + }, + 41495: { + 'name': 'SensingMethod', + 'type': 'Short' + }, + 41728: { + 'name': 'FileSource', + 'type': 'Undefined' + }, + 41729: { + 'name': 'SceneType', + 'type': 'Undefined' + }, + 41730: { + 'name': 'CFAPattern', + 'type': 'Undefined' + }, + 41985: { + 'name': 'CustomRendered', + 'type': 'Short' + }, + 41986: { + 'name': 'ExposureMode', + 'type': 'Short' + }, + 41987: { + 'name': 'WhiteBalance', + 'type': 'Short' + }, + 41988: { + 'name': 'DigitalZoomRatio', + 'type': 'Rational' + }, + 41989: { + 'name': 'FocalLengthIn35mmFilm', + 'type': 'Short' + }, + 41990: { + 'name': 'SceneCaptureType', + 'type': 'Short' + }, + 41991: { + 'name': 'GainControl', + 'type': 'Short' + }, + 41992: { + 'name': 'Contrast', + 'type': 'Short' + }, + 41993: { + 'name': 'Saturation', + 'type': 'Short' + }, + 41994: { + 'name': 'Sharpness', + 'type': 'Short' + }, + 41995: { + 'name': 'DeviceSettingDescription', + 'type': 'Undefined' + }, + 41996: { + 'name': 'SubjectDistanceRange', + 'type': 'Short' + }, + 42016: { + 'name': 'ImageUniqueID', + 'type': 'Ascii' + }, + 42032: { + 'name': 'CameraOwnerName', + 'type': 'Ascii' + }, + 42033: { + 'name': 'BodySerialNumber', + 'type': 'Ascii' + }, + 42034: { + 'name': 'LensSpecification', + 'type': 'Rational' + }, + 42035: { + 'name': 'LensMake', + 'type': 'Ascii' + }, + 42036: { + 'name': 'LensModel', + 'type': 'Ascii' + }, + 42037: { + 'name': 'LensSerialNumber', + 'type': 'Ascii' + }, + 42240: { + 'name': 'Gamma', + 'type': 'Rational' + } + }, + 'GPS': { + 0: { + 'name': 'GPSVersionID', + 'type': 'Byte' + }, + 1: { + 'name': 'GPSLatitudeRef', + 'type': 'Ascii' + }, + 2: { + 'name': 'GPSLatitude', + 'type': 'Rational' + }, + 3: { + 'name': 'GPSLongitudeRef', + 'type': 'Ascii' + }, + 4: { + 'name': 'GPSLongitude', + 'type': 'Rational' + }, + 5: { + 'name': 'GPSAltitudeRef', + 'type': 'Byte' + }, + 6: { + 'name': 'GPSAltitude', + 'type': 'Rational' + }, + 7: { + 'name': 'GPSTimeStamp', + 'type': 'Rational' + }, + 8: { + 'name': 'GPSSatellites', + 'type': 'Ascii' + }, + 9: { + 'name': 'GPSStatus', + 'type': 'Ascii' + }, + 10: { + 'name': 'GPSMeasureMode', + 'type': 'Ascii' + }, + 11: { + 'name': 'GPSDOP', + 'type': 'Rational' + }, + 12: { + 'name': 'GPSSpeedRef', + 'type': 'Ascii' + }, + 13: { + 'name': 'GPSSpeed', + 'type': 'Rational' + }, + 14: { + 'name': 'GPSTrackRef', + 'type': 'Ascii' + }, + 15: { + 'name': 'GPSTrack', + 'type': 'Rational' + }, + 16: { + 'name': 'GPSImgDirectionRef', + 'type': 'Ascii' + }, + 17: { + 'name': 'GPSImgDirection', + 'type': 'Rational' + }, + 18: { + 'name': 'GPSMapDatum', + 'type': 'Ascii' + }, + 19: { + 'name': 'GPSDestLatitudeRef', + 'type': 'Ascii' + }, + 20: { + 'name': 'GPSDestLatitude', + 'type': 'Rational' + }, + 21: { + 'name': 'GPSDestLongitudeRef', + 'type': 'Ascii' + }, + 22: { + 'name': 'GPSDestLongitude', + 'type': 'Rational' + }, + 23: { + 'name': 'GPSDestBearingRef', + 'type': 'Ascii' + }, + 24: { + 'name': 'GPSDestBearing', + 'type': 'Rational' + }, + 25: { + 'name': 'GPSDestDistanceRef', + 'type': 'Ascii' + }, + 26: { + 'name': 'GPSDestDistance', + 'type': 'Rational' + }, + 27: { + 'name': 'GPSProcessingMethod', + 'type': 'Undefined' + }, + 28: { + 'name': 'GPSAreaInformation', + 'type': 'Undefined' + }, + 29: { + 'name': 'GPSDateStamp', + 'type': 'Ascii' + }, + 30: { + 'name': 'GPSDifferential', + 'type': 'Short' + }, + 31: { + 'name': 'GPSHPositioningError', + 'type': 'Rational' + } + }, + 'Interop': { + 1: { + 'name': 'InteroperabilityIndex', + 'type': 'Ascii' + } + }, + }; + TAGS["0th"] = TAGS["Image"]; + TAGS["1st"] = TAGS["Image"]; + that.TAGS = TAGS; + + + that.ImageIFD = { + ProcessingSoftware:11, + NewSubfileType:254, + SubfileType:255, + ImageWidth:256, + ImageLength:257, + BitsPerSample:258, + Compression:259, + PhotometricInterpretation:262, + Threshholding:263, + CellWidth:264, + CellLength:265, + FillOrder:266, + DocumentName:269, + ImageDescription:270, + Make:271, + Model:272, + StripOffsets:273, + Orientation:274, + SamplesPerPixel:277, + RowsPerStrip:278, + StripByteCounts:279, + XResolution:282, + YResolution:283, + PlanarConfiguration:284, + GrayResponseUnit:290, + GrayResponseCurve:291, + T4Options:292, + T6Options:293, + ResolutionUnit:296, + TransferFunction:301, + Software:305, + DateTime:306, + Artist:315, + HostComputer:316, + Predictor:317, + WhitePoint:318, + PrimaryChromaticities:319, + ColorMap:320, + HalftoneHints:321, + TileWidth:322, + TileLength:323, + TileOffsets:324, + TileByteCounts:325, + SubIFDs:330, + InkSet:332, + InkNames:333, + NumberOfInks:334, + DotRange:336, + TargetPrinter:337, + ExtraSamples:338, + SampleFormat:339, + SMinSampleValue:340, + SMaxSampleValue:341, + TransferRange:342, + ClipPath:343, + XClipPathUnits:344, + YClipPathUnits:345, + Indexed:346, + JPEGTables:347, + OPIProxy:351, + JPEGProc:512, + JPEGInterchangeFormat:513, + JPEGInterchangeFormatLength:514, + JPEGRestartInterval:515, + JPEGLosslessPredictors:517, + JPEGPointTransforms:518, + JPEGQTables:519, + JPEGDCTables:520, + JPEGACTables:521, + YCbCrCoefficients:529, + YCbCrSubSampling:530, + YCbCrPositioning:531, + ReferenceBlackWhite:532, + XMLPacket:700, + Rating:18246, + RatingPercent:18249, + ImageID:32781, + CFARepeatPatternDim:33421, + CFAPattern:33422, + BatteryLevel:33423, + Copyright:33432, + ExposureTime:33434, + ImageResources:34377, + ExifTag:34665, + InterColorProfile:34675, + GPSTag:34853, + Interlace:34857, + TimeZoneOffset:34858, + SelfTimerMode:34859, + FlashEnergy:37387, + SpatialFrequencyResponse:37388, + Noise:37389, + FocalPlaneXResolution:37390, + FocalPlaneYResolution:37391, + FocalPlaneResolutionUnit:37392, + ImageNumber:37393, + SecurityClassification:37394, + ImageHistory:37395, + ExposureIndex:37397, + TIFFEPStandardID:37398, + SensingMethod:37399, + XPTitle:40091, + XPComment:40092, + XPAuthor:40093, + XPKeywords:40094, + XPSubject:40095, + PrintImageMatching:50341, + DNGVersion:50706, + DNGBackwardVersion:50707, + UniqueCameraModel:50708, + LocalizedCameraModel:50709, + CFAPlaneColor:50710, + CFALayout:50711, + LinearizationTable:50712, + BlackLevelRepeatDim:50713, + BlackLevel:50714, + BlackLevelDeltaH:50715, + BlackLevelDeltaV:50716, + WhiteLevel:50717, + DefaultScale:50718, + DefaultCropOrigin:50719, + DefaultCropSize:50720, + ColorMatrix1:50721, + ColorMatrix2:50722, + CameraCalibration1:50723, + CameraCalibration2:50724, + ReductionMatrix1:50725, + ReductionMatrix2:50726, + AnalogBalance:50727, + AsShotNeutral:50728, + AsShotWhiteXY:50729, + BaselineExposure:50730, + BaselineNoise:50731, + BaselineSharpness:50732, + BayerGreenSplit:50733, + LinearResponseLimit:50734, + CameraSerialNumber:50735, + LensInfo:50736, + ChromaBlurRadius:50737, + AntiAliasStrength:50738, + ShadowScale:50739, + DNGPrivateData:50740, + MakerNoteSafety:50741, + CalibrationIlluminant1:50778, + CalibrationIlluminant2:50779, + BestQualityScale:50780, + RawDataUniqueID:50781, + OriginalRawFileName:50827, + OriginalRawFileData:50828, + ActiveArea:50829, + MaskedAreas:50830, + AsShotICCProfile:50831, + AsShotPreProfileMatrix:50832, + CurrentICCProfile:50833, + CurrentPreProfileMatrix:50834, + ColorimetricReference:50879, + CameraCalibrationSignature:50931, + ProfileCalibrationSignature:50932, + AsShotProfileName:50934, + NoiseReductionApplied:50935, + ProfileName:50936, + ProfileHueSatMapDims:50937, + ProfileHueSatMapData1:50938, + ProfileHueSatMapData2:50939, + ProfileToneCurve:50940, + ProfileEmbedPolicy:50941, + ProfileCopyright:50942, + ForwardMatrix1:50964, + ForwardMatrix2:50965, + PreviewApplicationName:50966, + PreviewApplicationVersion:50967, + PreviewSettingsName:50968, + PreviewSettingsDigest:50969, + PreviewColorSpace:50970, + PreviewDateTime:50971, + RawImageDigest:50972, + OriginalRawFileDigest:50973, + SubTileBlockSize:50974, + RowInterleaveFactor:50975, + ProfileLookTableDims:50981, + ProfileLookTableData:50982, + OpcodeList1:51008, + OpcodeList2:51009, + OpcodeList3:51022, + NoiseProfile:51041, + }; + + + that.ExifIFD = { + ExposureTime:33434, + FNumber:33437, + ExposureProgram:34850, + SpectralSensitivity:34852, + ISOSpeedRatings:34855, + OECF:34856, + SensitivityType:34864, + StandardOutputSensitivity:34865, + RecommendedExposureIndex:34866, + ISOSpeed:34867, + ISOSpeedLatitudeyyy:34868, + ISOSpeedLatitudezzz:34869, + ExifVersion:36864, + DateTimeOriginal:36867, + DateTimeDigitized:36868, + ComponentsConfiguration:37121, + CompressedBitsPerPixel:37122, + ShutterSpeedValue:37377, + ApertureValue:37378, + BrightnessValue:37379, + ExposureBiasValue:37380, + MaxApertureValue:37381, + SubjectDistance:37382, + MeteringMode:37383, + LightSource:37384, + Flash:37385, + FocalLength:37386, + SubjectArea:37396, + MakerNote:37500, + UserComment:37510, + SubSecTime:37520, + SubSecTimeOriginal:37521, + SubSecTimeDigitized:37522, + FlashpixVersion:40960, + ColorSpace:40961, + PixelXDimension:40962, + PixelYDimension:40963, + RelatedSoundFile:40964, + InteroperabilityTag:40965, + FlashEnergy:41483, + SpatialFrequencyResponse:41484, + FocalPlaneXResolution:41486, + FocalPlaneYResolution:41487, + FocalPlaneResolutionUnit:41488, + SubjectLocation:41492, + ExposureIndex:41493, + SensingMethod:41495, + FileSource:41728, + SceneType:41729, + CFAPattern:41730, + CustomRendered:41985, + ExposureMode:41986, + WhiteBalance:41987, + DigitalZoomRatio:41988, + FocalLengthIn35mmFilm:41989, + SceneCaptureType:41990, + GainControl:41991, + Contrast:41992, + Saturation:41993, + Sharpness:41994, + DeviceSettingDescription:41995, + SubjectDistanceRange:41996, + ImageUniqueID:42016, + CameraOwnerName:42032, + BodySerialNumber:42033, + LensSpecification:42034, + LensMake:42035, + LensModel:42036, + LensSerialNumber:42037, + Gamma:42240, + }; + + + that.GPSIFD = { + GPSVersionID:0, + GPSLatitudeRef:1, + GPSLatitude:2, + GPSLongitudeRef:3, + GPSLongitude:4, + GPSAltitudeRef:5, + GPSAltitude:6, + GPSTimeStamp:7, + GPSSatellites:8, + GPSStatus:9, + GPSMeasureMode:10, + GPSDOP:11, + GPSSpeedRef:12, + GPSSpeed:13, + GPSTrackRef:14, + GPSTrack:15, + GPSImgDirectionRef:16, + GPSImgDirection:17, + GPSMapDatum:18, + GPSDestLatitudeRef:19, + GPSDestLatitude:20, + GPSDestLongitudeRef:21, + GPSDestLongitude:22, + GPSDestBearingRef:23, + GPSDestBearing:24, + GPSDestDistanceRef:25, + GPSDestDistance:26, + GPSProcessingMethod:27, + GPSAreaInformation:28, + GPSDateStamp:29, + GPSDifferential:30, + GPSHPositioningError:31, + }; + + + that.InteropIFD = { + InteroperabilityIndex:1, + }; + + that.GPSHelper = { + degToDmsRational:function (degFloat) { + var degAbs = Math.abs(degFloat); + var minFloat = degAbs % 1 * 60; + var secFloat = minFloat % 1 * 60; + var deg = Math.floor(degAbs); + var min = Math.floor(minFloat); + var sec = Math.round(secFloat * 100); + + return [[deg, 1], [min, 1], [sec, 100]]; + }, + + dmsRationalToDeg:function (dmsArray, ref) { + var sign = (ref === 'S' || ref === 'W') ? -1.0 : 1.0; + var deg = dmsArray[0][0] / dmsArray[0][1] + + dmsArray[1][0] / dmsArray[1][1] / 60.0 + + dmsArray[2][0] / dmsArray[2][1] / 3600.0; + + return deg * sign; + } + }; + + + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = that; + } + exports.piexif = that; + } else { + window.piexif = that; + } + +})(); \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/element-based-offset-clamp.html b/third_party/blink/web_tests/external/wpt/scroll-animations/element-based-offset-clamp.html index b1405074..6467af19 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/element-based-offset-clamp.html +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/element-based-offset-clamp.html
@@ -7,25 +7,19 @@ <script src="testcommon.js"></script> <style> +/* + * Overflow hidden prevents user scroll including mouse wheel; however, the + * element is still a scrollable container and can be scrolled programmatically. + * Removing the visible scrollbars in this manner simplifies the position + * calculations in the text. + */ .scroller { - overflow: scroll; + overflow: hidden; height: 500px; width: 500px; will-change: transform; } -/* Disable scrollbars to simplify the calculations in the test. */ -.scroller { - scrollbar-width: 0; -} -/* -Chrome does not support scrollbar-width so we use this non-standard property -until it does. -*/ -.scroller::-webkit-scrollbar { - display: none; -} - .contents { height: 1200px; width: 1200px; @@ -212,4 +206,4 @@ createScrollAnimationTest(description, config); } } -</script> \ No newline at end of file +</script>
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt b/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt index 14ab3be..cd93b8b2 100644 --- a/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt +++ b/third_party/blink/web_tests/external/wpt/shadow-dom/historical-expected.txt
@@ -1,7 +1,7 @@ This is a testharness.js-based test. -PASS element.createShadowRoot should not exist -PASS element.getDestinationInsertionPoints should not exist -PASS text.getDestinationInsertionPoints should not exist +FAIL element.createShadowRoot should not exist assert_false: expected false got true +FAIL element.getDestinationInsertionPoints should not exist assert_false: expected false got true +FAIL text.getDestinationInsertionPoints should not exist assert_false: expected false got true FAIL event.path should not exist assert_false: expected false got true FAIL HTMLContentElement should not exist assert_false: expected false got true Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/tools/ci/epochs_update.sh b/third_party/blink/web_tests/external/wpt/tools/ci/epochs_update.sh index f460814..1c7edf15 100755 --- a/third_party/blink/web_tests/external/wpt/tools/ci/epochs_update.sh +++ b/third_party/blink/web_tests/external/wpt/tools/ci/epochs_update.sh
@@ -1,5 +1,5 @@ #!/bin/bash -set -ex +set -eux -o pipefail SCRIPT_DIR=$(cd $(dirname "$0") && pwd -P) WPT_ROOT=$SCRIPT_DIR/../.. @@ -32,11 +32,18 @@ exit 1 fi git branch "${EPOCH_BRANCH_NAME}" "${EPOCH_SHA}" + + # Only set epoch tag if is not already tagged from a previous run. + if ! git tag --points-at "${EPOCH_SHA}" | grep "${EPOCH_BRANCH_NAME}"; then + EPOCH_STAMP="$(date +%Y-%m-%d_%HH)" + git tag "${EPOCH_BRANCH_NAME}/${EPOCH_STAMP}" "${EPOCH_SHA}" + fi + ALL_BRANCHES_NAMES="${ALL_BRANCHES_NAMES} ${EPOCH_BRANCH_NAME}" done # This is safe because `git push` will by default fail for a non-fast-forward # push, for example if the remote branch is ahead of the local branch. - git push ${REMOTE} ${ALL_BRANCHES_NAMES} + git push --tags ${REMOTE} ${ALL_BRANCHES_NAMES} } cd $WPT_ROOT
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome.py index 486070ad..fd251a43 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome.py +++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/chrome.py
@@ -51,7 +51,6 @@ } } }, - "useAutomationExtension": False, "excludeSwitches": ["enable-automation"], "w3c": True }
diff --git a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-constructor.any.js b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-constructor.any.js index 1135d5d..f9878373 100644 --- a/third_party/blink/web_tests/external/wpt/url/urlsearchparams-constructor.any.js +++ b/third_party/blink/web_tests/external/wpt/url/urlsearchparams-constructor.any.js
@@ -200,6 +200,8 @@ { "input": {"+": "%C2"}, "output": [["+", "%C2"]], "name": "object with +" }, { "input": {c: "x", a: "?"}, "output": [["c", "x"], ["a", "?"]], "name": "object with two keys" }, { "input": [["c", "x"], ["a", "?"]], "output": [["c", "x"], ["a", "?"]], "name": "array with two keys" }, + { "input": {"\uD835x": "1", "xx": "2", "\uD83Dx": "3"}, "output": [["\uFFFDx", "3"], ["xx", "2"]], "name": "2 unpaired surrogates (no trailing)" }, + { "input": {"x\uDC53": "1", "x\uDC5C": "2", "x\uDC65": "3"}, "output": [["x\uFFFD", "3"]], "name": "3 unpaired surrogates (no leading)" }, { "input": {"a\0b": "42", "c\uD83D": "23", "d\u1234": "foo"}, "output": [["a\0b", "42"], ["c\uFFFD", "23"], ["d\u1234", "foo"]], "name": "object with NULL, non-ASCII, and surrogate keys" } ].forEach((val) => { test(() => {
diff --git a/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg-expected.txt b/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg-expected.txt index 3096d0b8..b38383a 100644 --- a/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg-expected.txt +++ b/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg-expected.txt
@@ -42,6 +42,10 @@ Cursor Info: type=Custom hotSpot=5,3 image=25x25 +TEST CASE: Explicit hotspot at (5,24) logical in 1x +Cursor Info: type=Custom hotSpot=5,24 image=25x25 + + TEST CASE: Explicit hotspot at (7,3) logical in 0.7x and 1.4x - should round to nearest integer Cursor Info: type=Custom hotSpot=10,4 image=30x30 scale=1.4 @@ -84,6 +88,10 @@ Cursor Info: type=Custom hotSpot=20,12 image=60x60 scale=4 +TEST CASE: Explicit hotspot at (5,24) logical in 1x +Cursor Info: type=Custom hotSpot=10,48 image=50x50 scale=2 + + TEST CASE: Explicit hotspot at (7,3) logical in 0.7x and 1.4x - should round to nearest integer Cursor Info: type=Custom hotSpot=20,8 image=60x60 scale=2.8
diff --git a/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg.html b/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg.html index 4019856..90e2464 100644 --- a/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg.html +++ b/third_party/blink/web_tests/fast/events/mouse-cursor-image-set-svg.html
@@ -18,6 +18,7 @@ <div style='cursor: -webkit-image-set(url(resources/greenbox200.svg) 4x), pointer'>200x200 image at 4x (not over-large in UI pixels)</div> <div style='cursor: -webkit-image-set(url(doesntexist.svg) 1x), url(resources/greenbox.svg), pointer'>Non-existent image in image-set with fallback to 25x25 image</div> <div style='cursor: -webkit-image-set(url(resources/greenbox.svg) 1x, url(resources/greenbox30.svg) 2x) 5 3, pointer'>Explicit hotspot at (5,3) logical in 1x and 2x</div> + <div style='cursor: -webkit-image-set(url(resources/greenbox.svg) 1x) 5 24, pointer'>Explicit hotspot at (5,24) logical in 1x</div> <div style='cursor: -webkit-image-set(url(resources/greenbox.svg) 0.7x, url(resources/greenbox30.svg) 1.4x) 7 3, pointer'>Explicit hotspot at (7,3) logical in 0.7x and 1.4x - should round to nearest integer</div> </div> <br/>
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/external/wpt/css/css-flexbox/dynamic-grid-flex-abspos-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/external/wpt/css/css-flexbox/dynamic-grid-flex-abspos-expected.txt deleted file mode 100644 index 74642fcd..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-layout-ng/external/wpt/css/css-flexbox/dynamic-grid-flex-abspos-expected.txt +++ /dev/null
@@ -1,23 +0,0 @@ -This is a testharness.js-based test. -PASS .relpos 1 -PASS .relpos 2 -PASS .relpos 3 -FAIL .relpos 4 assert_equals: -<div class="relpos flexbox" data-expected-height="20"> - <div class="abspos">Test</div> - <div style="height: 20px;"></div> - <div style="height: 50%" data-expected-height="10"></div> - </div> -height expected 10 but got 0 -PASS .relpos 5 -PASS .relpos 6 -PASS .relpos 7 -FAIL .relpos 8 assert_equals: -<div class="relpos flexbox" data-expected-height="20"> - <div class="abspos" style="border-width: 10px;">Test</div> - <div style="height: 20px;"></div> - <div style="height: 50%" data-expected-height="10"></div> - </div> -height expected 10 but got 0 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/scrollbar/horizontal-scrollbar-basic-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/scrollbar/horizontal-scrollbar-basic-expected.png deleted file mode 100644 index 23970bf05..0000000 --- a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/scrollbar/horizontal-scrollbar-basic-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt index e81a91e..d1c8c23 100644 --- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -104,6 +104,7 @@ property computedStyleMap property contains property contentEditable + property createShadowRoot property dataset property dir property dispatchEvent @@ -121,6 +122,7 @@ property getAttributeNodeNS property getBoundingClientRect property getClientRects + property getDestinationInsertionPoints property getElementsByClassName property getElementsByTagName property getElementsByTagNameNS @@ -780,6 +782,7 @@ property hreflang property imageSizes property imageSrcset + property import property importance property integrity property media @@ -1312,6 +1315,7 @@ property computedRole property computedStyleMap property contains + property createShadowRoot property dataset property dispatchEvent property elementTiming @@ -1326,6 +1330,7 @@ property getAttributeNodeNS property getBoundingClientRect property getClientRects + property getDestinationInsertionPoints property getElementsByClassName property getElementsByTagName property getElementsByTagNameNS
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index 8a17898b..e6364e1 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -1787,6 +1787,7 @@ method queryCommandValue method querySelector method querySelectorAll + method registerElement method releaseEvents method replaceChildren method requestStorageAccess @@ -2090,6 +2091,7 @@ method closest method computedStyleMap method constructor + method createShadowRoot method getAnimations method getAttribute method getAttributeNS @@ -2098,6 +2100,7 @@ method getAttributeNodeNS method getBoundingClientRect method getClientRects + method getDestinationInsertionPoints method getElementsByClassName method getElementsByTagName method getElementsByTagNameNS @@ -3582,6 +3585,7 @@ getter hreflang getter imageSizes getter imageSrcset + getter import getter importance getter integrity getter media @@ -8277,6 +8281,7 @@ getter assignedSlot getter wholeText method constructor + method getDestinationInsertionPoints method splitText interface TextDecoder attribute @@toStringTag
diff --git a/third_party/byte_buddy/BUILD.gn b/third_party/byte_buddy/BUILD.gn index 5b112565..66d5512 100644 --- a/third_party/byte_buddy/BUILD.gn +++ b/third_party/byte_buddy/BUILD.gn
@@ -8,7 +8,6 @@ testonly = true supports_android = true enable_bytecode_checks = false - enable_desugar = false jar_path = "lib/byte-buddy.jar" } @@ -16,7 +15,6 @@ testonly = true supports_android = true enable_bytecode_checks = false - enable_desugar = false jar_path = "lib/byte-buddy-agent.jar" } @@ -27,14 +25,12 @@ supports_android = true requires_android = true no_build_hooks = true - enable_desugar = false jar_path = "android_sdk_build_tools_25_0_2/build-tools/25.0.2/lib/dx.jar" } android_java_prebuilt("byte_buddy_android_java") { testonly = true enable_bytecode_checks = false - enable_desugar = false deps = [ ":dx_25_0_2_java" ] proguard_configs = [ "//third_party/byte_buddy/proguard.flags" ] jar_path = "lib/byte-buddy-android.jar"
diff --git a/third_party/google-truth/BUILD.gn b/third_party/google-truth/BUILD.gn index dfcc9d10..5d57221 100644 --- a/third_party/google-truth/BUILD.gn +++ b/third_party/google-truth/BUILD.gn
@@ -9,7 +9,6 @@ # Uses the difflib package, which doesn't exist in third_party. enable_bytecode_checks = false - enable_desugar = false supports_android = true # requires_android because of dependency on guava_android.
diff --git a/tools/mb/mb.py b/tools/mb/mb.py index c8ace43..56e03064 100755 --- a/tools/mb/mb.py +++ b/tools/mb/mb.py
@@ -723,7 +723,7 @@ args = config else: flattened_config = FlattenConfig(self.configs, self.mixins, config) - if 'error' in flattened_config['gn_args']: + if flattened_config['gn_args'] == 'error': continue args = {'gn_args': gn_helpers.FromGNArgs(flattened_config['gn_args'])} if flattened_config.get('args_file'):
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 44b00f8..ad8cf9c5 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -1016,7 +1016,6 @@ 'mac_chromium_dbg_ng': 'gpu_tests_debug_bot', 'mac_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot', 'mac_upload_clang': 'release_bot', - 'mac-coverage-rel': 'gpu_tests_release_trybot_deterministic_mac_code_coverage', 'mac-rel': 'gpu_tests_release_trybot_deterministic_mac_code_coverage', 'mac-arm64-rel': 'mac_arm64_release_trybot', }, @@ -2630,6 +2629,7 @@ 'use_hashed_jni_names=true ' 'default_min_sdk_version=16 ' 'clang_use_default_sample_profile=false ' + 'use_thin_lto=false ' 'enable_resource_allowlist_generation=false'), },
diff --git a/tools/mb/mb_config_expectations/chromium.android.fyi.json b/tools/mb/mb_config_expectations/chromium.android.fyi.json index c3b478ed6..7e7fae02 100644 --- a/tools/mb/mb_config_expectations/chromium.android.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.android.fyi.json
@@ -13,6 +13,22 @@ "use_goma": true } }, + "android-inverse-fieldtrials-pie-x86-fyi-rel": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-pie-arm64-wpt-rel-non-cq": { "gn_args": { "ffmpeg_branding": "Chrome", @@ -26,5 +42,21 @@ "target_os": "android", "use_goma": true } + }, + "android-weblayer-pie-x86-fyi-rel": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } } } \ No newline at end of file
diff --git a/tools/mb/mb_config_expectations/chromium.android.json b/tools/mb/mb_config_expectations/chromium.android.json index 50d3f6a..c2edb10 100644 --- a/tools/mb/mb_config_expectations/chromium.android.json +++ b/tools/mb/mb_config_expectations/chromium.android.json
@@ -96,6 +96,22 @@ "use_goma": true } }, + "android-10-arm64-rel": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-arm64-proguard-rel": { "gn_args": { "ffmpeg_branding": "Chrome", @@ -156,7 +172,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-arm-rel": { @@ -183,7 +200,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-arm64-dbg": { @@ -207,7 +225,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-arm64-rel": { @@ -233,7 +252,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-asan-arm-rel": { @@ -261,7 +281,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-marshmallow-arm64-perf-rel": { @@ -287,7 +308,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-x86-dbg": { @@ -311,7 +333,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-x86-rel": { @@ -337,7 +360,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-incremental-dbg": { @@ -365,6 +389,71 @@ "use_goma": true } }, + "android-marshmallow-arm64-rel": { + "gn_args": { + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true, + "use_static_angle": true + } + }, + "android-marshmallow-x86-rel": { + "gn_args": { + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, + "android-marshmallow-x86-rel-non-cq": { + "gn_args": { + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, + "android-nougat-arm64-rel": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-pie-arm64-rel": { "gn_args": { "ffmpeg_branding": "Chrome", @@ -378,5 +467,21 @@ "target_os": "android", "use_goma": true } + }, + "android-pie-x86-rel": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } } } \ No newline at end of file
diff --git a/tools/mb/mb_config_expectations/chromium.dev.json b/tools/mb/mb_config_expectations/chromium.dev.json index b86d9b2..97bc74e5 100644 --- a/tools/mb/mb_config_expectations/chromium.dev.json +++ b/tools/mb/mb_config_expectations/chromium.dev.json
@@ -12,6 +12,23 @@ "use_goma": true } }, + "android-marshmallow-arm64-rel-swarming": { + "gn_args": { + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true, + "use_static_angle": true + } + }, "linux-rel-swarming": { "gn_args": { "ffmpeg_branding": "Chrome",
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json index 4eca16a..3e0f20c6 100644 --- a/tools/mb/mb_config_expectations/chromium.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -214,6 +214,43 @@ "use_goma": true } }, + "android-code-coverage": { + "gn_args": { + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "is_java_debug": true, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true, + "use_jacoco_coverage": true, + "use_static_angle": true + } + }, + "android-code-coverage-native": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "is_java_debug": true, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_clang_coverage": true, + "use_errorprone_java_compiler": false, + "use_goma": true, + "use_static_angle": true + } + }, "chromeos-amd64-generic-lacros-rel": { "args_file": "//build/args/chromeos/amd64-generic.gni", "gn_args": {
diff --git a/tools/mb/mb_config_expectations/chromium.gpu.json b/tools/mb/mb_config_expectations/chromium.gpu.json index 47c9c3b6..a1809c5 100644 --- a/tools/mb/mb_config_expectations/chromium.gpu.json +++ b/tools/mb/mb_config_expectations/chromium.gpu.json
@@ -1,4 +1,20 @@ { + "Android Release (Nexus 5X)": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true, + "use_static_angle": true + } + }, "GPU Linux Builder": { "gn_args": { "dcheck_always_on": true,
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.android.json b/tools/mb/mb_config_expectations/tryserver.chromium.android.json index 05ea117..adfd41c 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.android.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.android.json
@@ -1,4 +1,21 @@ { + "android-10-arm64-rel": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-asan": { "gn_args": { "dcheck_always_on": true, @@ -61,7 +78,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-cronet-marshmallow-arm64-rel": { @@ -88,7 +106,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android-deterministic-dbg": { @@ -113,6 +132,23 @@ "use_goma": true } }, + "android-inverse-fieldtrials-pie-x86-fyi-rel": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-lollipop-arm-rel": { "gn_args": { "dcheck_always_on": true, @@ -128,6 +164,77 @@ "use_goma": true } }, + "android-marshmallow-arm64-rel": { + "gn_args": { + "coverage_instrumentation_input_file": "//.code-coverage/files_to_instrument.txt", + "dcheck_always_on": true, + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true, + "use_jacoco_coverage": true, + "use_static_angle": true + } + }, + "android-marshmallow-x86-rel": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, + "android-marshmallow-x86-rel-non-cq": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "enable_resource_allowlist_generation": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, + "android-nougat-arm64-rel": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-opus-arm-rel": { "gn_args": { "dcheck_always_on": true, @@ -225,6 +332,40 @@ "use_goma": true } }, + "android-pie-x86-rel": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, + "android-weblayer-pie-x86-fyi-rel": { + "gn_args": { + "dcheck_always_on": true, + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "strip_debug_info": true, + "symbol_level": 1, + "system_webview_package_name": "com.google.android.webview", + "target_cpu": "x86", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android-webview-marshmallow-arm64-dbg": { "gn_args": { "dcheck_always_on": true, @@ -313,6 +454,20 @@ "use_goma": true } }, + "android_arm64_dbg_recipe": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_component_build": true, + "is_debug": true, + "proprietary_codecs": true, + "symbol_level": 0, + "target_cpu": "arm64", + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android_blink_rel": { "gn_args": { "dcheck_always_on": true, @@ -341,6 +496,21 @@ "use_thin_lto": true } }, + "android_clang_dbg_recipe": { + "gn_args": { + "disable_android_lint": true, + "ffmpeg_branding": "Chrome", + "is_asan": true, + "is_clang": true, + "is_component_build": true, + "is_debug": true, + "proprietary_codecs": true, + "symbol_level": 0, + "target_os": "android", + "use_errorprone_java_compiler": false, + "use_goma": true + } + }, "android_compile_dbg": { "gn_args": { "ffmpeg_branding": "Chrome", @@ -412,7 +582,8 @@ "use_goma": true, "use_hashed_jni_names": true, "use_partition_alloc": false, - "use_platform_icu_alternatives": true + "use_platform_icu_alternatives": true, + "use_thin_lto": false } }, "android_mojo": {
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.mac.json b/tools/mb/mb_config_expectations/tryserver.chromium.mac.json index 5f3a316..c185068d 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.mac.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.mac.json
@@ -375,20 +375,6 @@ "use_goma": true } }, - "mac-coverage-rel": { - "gn_args": { - "coverage_instrumentation_input_file": "//.code-coverage/files_to_instrument.txt", - "dcheck_always_on": true, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "mac_deterministic_build": true, - "proprietary_codecs": true, - "symbol_level": 1, - "use_clang_coverage": true, - "use_goma": true - } - }, "mac-osxbeta-rel": { "gn_args": { "dcheck_always_on": true,
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 261c229..af77cd61 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -975,6 +975,15 @@ <int value="8" label="SignedInWithAddedAccount"> User has added an account and signed in with this account. </int> + <int value="9" label="DismissedScrim"> + User has dismissed the promo by tapping on the scrim above the bottom sheet. + </int> + <int value="10" label="DismissedSwipeDown"> + User has dismissed the promo by swiping down the bottom sheet. + </int> + <int value="11" label="DismissedOther"> + User has dismissed the promo by other means. + </int> </enum> <enum name="AccountManagerAccountAdditionSource"> @@ -40689,6 +40698,9 @@ <int value="3" label="Available context exhausted"/> <int value="4" label="Context word limit reached"/> <int value="5" label="Empty selection"/> + <int value="6" label="Tab hidden"/> + <int value="7" label="Omnibox navigation"/> + <int value="8" label="Tab crash"/> </enum> <enum name="LinkMonitorFailureType"> @@ -42503,6 +42515,7 @@ <int value="-1121931029" label="DownloadsForeground:enabled"/> <int value="-1119700637" label="ui-disable-partial-swap"/> <int value="-1118921985" label="ForceEnableSystemAec:enabled"/> + <int value="-1117894706" label="DarkLightMode:enabled"/> <int value="-1117104514" label="smbfs-file-shares"/> <int value="-1116278039" label="ShelfAppScaling:disabled"/> <int value="-1114080030" label="ResourceLoadingHints:enabled"/> @@ -43522,6 +43535,7 @@ <int value="-69427025" label="OfflinePagesPrefetchingUI:enabled"/> <int value="-68877684" label="BackgroundVideoTrackOptimization:enabled"/> <int value="-68619312" label="PassiveDocumentWheelEventListeners:disabled"/> + <int value="-68613812" label="DarkLightMode:disabled"/> <int value="-68225452" label="enable-translate-new-ux"/> <int value="-67616014" label="PDFAnnotations:enabled"/> <int value="-67297229" label="OfflinePagesDescriptivePendingStatus:disabled"/>
diff --git a/tools/metrics/histograms/histograms_xml/blink/histograms.xml b/tools/metrics/histograms/histograms_xml/blink/histograms.xml index cd60127..60d1c81 100644 --- a/tools/metrics/histograms/histograms_xml/blink/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/blink/histograms.xml
@@ -598,7 +598,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontLookupLoadFromFileTime" units="ms" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -612,7 +612,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontLookupTableReadyTime" units="ms" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -624,7 +624,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontScanningLoadFromFileSuccess" - enum="BooleanSuccess" expires_after="M88"> + enum="BooleanSuccess" expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -635,7 +635,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontScanningPersistToFileSuccess" - enum="BooleanSuccess" expires_after="M88"> + enum="BooleanSuccess" expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -646,7 +646,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontScanningResult" - enum="FontScanningResult" expires_after="M88"> + enum="FontScanningResult" expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -657,7 +657,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontScanningTableBuildTime" units="ms" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -669,7 +669,7 @@ </histogram> <histogram name="Blink.Fonts.AndroidFontScanningUpdateNeeded" - enum="BooleanSuccess" expires_after="M88"> + enum="BooleanSuccess" expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -680,7 +680,7 @@ </histogram> <histogram name="Blink.Fonts.DataAccess.StreamCreation" enum="BooleanSuccess" - expires_after="M88"> + expires_after="2021-10-15"> <owner>oyiptong@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <owner>storage-dev@chromium.org</owner> @@ -691,7 +691,7 @@ </histogram> <histogram name="Blink.Fonts.Enumeration.Duration" units="ms" - expires_after="M88"> + expires_after="2021-10-15"> <owner>oyiptong@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <owner>storage-dev@chromium.org</owner> @@ -714,8 +714,10 @@ </summary> </histogram> -<histogram name="Blink.Fonts.ShapeCache" units="units" expires_after="M81"> - <owner>eae@chromium.org</owner> +<histogram name="Blink.Fonts.ShapeCache" units="units" + expires_after="2021-10-15"> + <owner>drott@chromium.org</owner> + <owner>layout-dev@chromium.org</owner> <summary> Total number of entries in all Blink ShapeCache instances. The value is reported each time the FontCache::purge() method is called. @@ -723,7 +725,7 @@ </histogram> <histogram name="Blink.Fonts.VariableFontsRatio" - enum="WebFontInstantiationResult" expires_after="M88"> + enum="WebFontInstantiationResult" expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -734,7 +736,7 @@ </histogram> <histogram name="Blink.Fonts.WindowsUniqueLocalFontInstantiationResult" - enum="WindowsUniqueLocalFontInstantiationResult" expires_after="M88"> + enum="WindowsUniqueLocalFontInstantiationResult" expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -749,7 +751,7 @@ </histogram> <histogram name="Blink.Fonts.WinFallback.LegacyNoneFound" units="units" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -762,7 +764,7 @@ </histogram> <histogram name="Blink.Fonts.WinFallback.LegacyWinAPIDisagree" units="units" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -776,7 +778,7 @@ </histogram> <histogram name="Blink.Fonts.WinFallback.NoFallbackFound" units="units" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -790,7 +792,7 @@ </histogram> <histogram name="Blink.Fonts.WinFallback.WinAPINoneFound" units="units" - expires_after="M88"> + expires_after="2021-10-15"> <owner>drott@chromium.org</owner> <owner>layout-dev@chromium.org</owner> <summary> @@ -2200,7 +2202,7 @@ </histogram> <histogram name="BlinkGC.MainThreadMarkingThroughput" units="MB/s" - expires_after="M88"> + expires_after="M92"> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2212,7 +2214,7 @@ </summary> </histogram> -<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB" expires_after="M88"> +<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB" expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> @@ -2221,7 +2223,7 @@ </summary> </histogram> -<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB" expires_after="M88"> +<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB" expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> @@ -2239,7 +2241,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForAtomicPhase" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForAtomicPhase" units="ms" expires_after="M92"> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2251,7 +2253,7 @@ </histogram> <histogram name="BlinkGC.TimeForAtomicPhaseMarking" units="ms" - expires_after="M88"> + expires_after="M92"> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2261,7 +2263,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForCompleteSweep" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForCompleteSweep" units="ms" expires_after="M92"> <owner>bikineev@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2270,7 +2272,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForGCCycle" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForGCCycle" units="ms" expires_after="M92"> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2280,7 +2282,7 @@ </histogram> <histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms" - expires_after="M88"> + expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> @@ -2289,7 +2291,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForHeapCompaction" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForHeapCompaction" units="ms" expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> @@ -2299,7 +2301,7 @@ </histogram> <histogram name="BlinkGC.TimeForIncrementalMarking" units="ms" - expires_after="M88"> + expires_after="M92"> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2309,7 +2311,7 @@ </histogram> <histogram name="BlinkGC.TimeForInvokingPreFinalizers" units="ms" - expires_after="M88"> + expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> @@ -2318,7 +2320,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForMarking" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForMarking" units="ms" expires_after="M92"> <owner>omerkatz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2328,7 +2330,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForMarkingRoots" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForMarkingRoots" units="ms" expires_after="M92"> <owner>omerkatz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2337,7 +2339,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForNestedInV8" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForNestedInV8" units="ms" expires_after="M92"> <owner>mlippautz@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2347,7 +2349,7 @@ </histogram> <histogram name="BlinkGC.TimeForSweepingBackground" units="ms" - expires_after="M88"> + expires_after="M92"> <owner>bikineev@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2358,7 +2360,7 @@ </histogram> <histogram name="BlinkGC.TimeForSweepingForeground" units="ms" - expires_after="M88"> + expires_after="M92"> <owner>bikineev@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2368,7 +2370,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TimeForSweepingSum" units="ms" expires_after="M88"> +<histogram name="BlinkGC.TimeForSweepingSum" units="ms" expires_after="M92"> <owner>bikineev@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2391,7 +2393,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TotalAllocatedSpace" units="KB" expires_after="M88"> +<histogram name="BlinkGC.TotalAllocatedSpace" units="KB" expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary> @@ -2399,7 +2401,7 @@ </summary> </histogram> -<histogram name="BlinkGC.TotalObjectSpace" units="KB" expires_after="M88"> +<histogram name="BlinkGC.TotalObjectSpace" units="KB" expires_after="M92"> <owner>haraken@chromium.org</owner> <owner>oilpan-reviews@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml index f5df2524..46f78f8 100644 --- a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
@@ -1066,7 +1066,7 @@ </histogram> <histogram name="Enterprise.PolicyUpdatePeriod.MachineLevelUser" units="days" - expires_after="M88"> + expires_after="M95"> <owner>zmin@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary>Time since last machine level user policy fetch.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml index 5daea60..dbb4e5f 100644 --- a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
@@ -1153,7 +1153,7 @@ </histogram> <histogram name="GPU.WatchdogThread.ExtraThreadTime" units="# timeouts" - expires_after="2020-11-15"> + expires_after="2021-03-15"> <!-- Name completed by histogram_suffixes name="GPU.WatchdogStage" --> <owner>magchen@chromium.org</owner> @@ -1165,7 +1165,7 @@ </histogram> <histogram name="GPU.WatchdogThread.ExtraThreadTime.NumOfUsers" - units="# timeouts" expires_after="2021-02-28"> + units="# timeouts" expires_after="2021-03-15"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary> @@ -1188,7 +1188,7 @@ </histogram> <histogram name="GPU.WatchdogThread.WaitTime" units="ms" - expires_after="2020-11-08"> + expires_after="2020-12-15"> <!-- Name completed by histogram_suffixes name="GPU.WatchdogStage" --> <owner>magchen@chromium.org</owner> @@ -1200,7 +1200,7 @@ </histogram> <histogram name="GPU.WatchdogThread.WaitTime.NumOfUsers" units="seconds" - expires_after="2020-12-06"> + expires_after="2020-12-15"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary> @@ -1212,7 +1212,7 @@ </histogram> <histogram name="GPU.WatchdogThread.WaitTime.ProgressAfterWait" units="seconds" - expires_after="2020-12-06"> + expires_after="2020-12-15"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml index 814a018..45766fc 100644 --- a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
@@ -7902,6 +7902,9 @@ </histogram_suffixes> <histogram_suffixes name="IsOnBattery" separator="."> + <obsolete> + Removed 2020-10. + </obsolete> <suffix name="NotOnBattery" label="System is on external power."/> <suffix name="OnBattery" label="System is on battery power."/> <affected-histogram @@ -17366,6 +17369,9 @@ </histogram_suffixes> <histogram_suffixes name="Signin_ForceSigninVerificationResult" separator="."> + <obsolete> + Removed 2020-10. + </obsolete> <suffix name="Failure" label="The authenticaion token can not be verified due to persisten error"/>
diff --git a/tools/metrics/histograms/histograms_xml/installer/histograms.xml b/tools/metrics/histograms/histograms_xml/installer/histograms.xml index c639d5c9..cb82296 100644 --- a/tools/metrics/histograms/histograms_xml/installer/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/installer/histograms.xml
@@ -23,6 +23,9 @@ <histogram name="Installer.AttemptsCount.Total" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The number of update attempts until the update has been applied. This is @@ -38,6 +41,9 @@ <histogram name="Installer.DownloadOverheadPercentage" units="%" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The overhead in downloading extra bytes due to errors/interruptions. @@ -48,6 +54,9 @@ <histogram name="Installer.DownloadSourcesUsed" enum="UpdateEngineDownloadSources" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The combinations of protocol and source server that were used to complete a @@ -57,6 +66,9 @@ <histogram name="Installer.FullPayloadAttemptNumber" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The number of update attempts with a full update payload until the update @@ -66,6 +78,9 @@ <histogram name="Installer.InstallDateProvisioningSource" enum="UpdateEngineInstallDateProvisioningSource" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The source used to provision the install-date-days value sent to Omaha with @@ -76,6 +91,9 @@ <histogram name="Installer.NormalErrorCodes" enum="UpdateEngineErrorCode" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Errors from update_engine process when running in normal mode. @@ -83,6 +101,9 @@ </histogram> <histogram name="Installer.OSAgeDays" units="days" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The age of the OS, defined as the age of the /etc/lsb-release file. This is @@ -92,6 +113,9 @@ <histogram name="Installer.PayloadAttemptNumber" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The number of update attempts until the update has been applied. This is @@ -101,6 +125,9 @@ <histogram name="Installer.PayloadFormat" enum="UpdateEnginePayloadFormat" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The type of update payload used to update the device. The difference between @@ -113,8 +140,9 @@ </histogram> <histogram name="Installer.PowerwashCount" units="powerwashes" - expires_after="M85"> - <owner>zeuthen@chromium.org</owner> + expires_after="2021-12-29"> + <owner>kimjae@chromium.org</owner> + <owner>chromeos-core-services@chromium.org</owner> <summary> The number of times a Chrome OS device has been powerwashed (factory reset) without subsequently going through recovery and/or changing the dev mode @@ -124,6 +152,9 @@ <histogram name="Installer.RebootToNewPartitionAttempt" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The number of consecutive times a device has failed to boot an update that @@ -148,6 +179,9 @@ <histogram name="Installer.SuccessfulMBsDownloadedFrom" units="MB" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Number of MBs downloaded from during an update that completed successfully. @@ -156,6 +190,9 @@ <histogram name="Installer.TimeToRebootMinutes" units="Minutes" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Wall-clock duration between when an update has successfully completed (and @@ -167,6 +204,9 @@ <histogram name="Installer.TotalMBsDownloadedFrom" units="MB" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Total number of MBs downloaded since the last successful update. This also @@ -176,6 +216,9 @@ <histogram name="Installer.UpdateDurationMinutes" units="Minutes" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Absolute wall-clock time duration it took for the update to complete from @@ -186,6 +229,9 @@ <histogram name="Installer.UpdateDurationUptimeMinutes" units="Minutes" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Uptime duration it took for the update to complete from the time an update @@ -197,6 +243,9 @@ <histogram name="Installer.UpdateNumReboots" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Number of times the device was rebooted by the user since an update began @@ -206,6 +255,9 @@ <histogram name="Installer.UpdatesAbandonedCount" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The number of update attempts that didn't complete because a newer update @@ -216,6 +268,9 @@ <histogram name="Installer.UpdatesAbandonedEventCount" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The number of consecutive different abandoned update payloads since the last @@ -226,6 +281,9 @@ <histogram name="Installer.UpdateTime" units="seconds" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> The time in seconds it took to update a Chrome OS system -- from completing @@ -235,6 +293,9 @@ <histogram name="Installer.UpdateURLSwitches" units="count" expires_after="2019-01-30"> + <obsolete> + Removed long time ago. Replaced by UpdateEngine metrics. + </obsolete> <owner>zeuthen@chromium.org</owner> <summary> Number of times the download URLs were switched due to failures.
diff --git a/tools/metrics/histograms/histograms_xml/navigation/histograms.xml b/tools/metrics/histograms/histograms_xml/navigation/histograms.xml index 38b4eb6..a64107c 100644 --- a/tools/metrics/histograms/histograms_xml/navigation/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/navigation/histograms.xml
@@ -665,6 +665,10 @@ <histogram name="NavigationSuggestion.Event" enum="NavigationSuggestionEvent" expires_after="M89"> + <obsolete> + Replaced with NavigationSuggestion.Event2 on 2020/10 because of + crbug.com/1136296. + </obsolete> <owner>meacer@chromium.org</owner> <owner>security-enamel@chromium.org</owner> <summary> @@ -674,6 +678,23 @@ </summary> </histogram> +<histogram name="NavigationSuggestion.Event2" enum="NavigationSuggestionEvent" + expires_after="M91"> + <owner>meacer@chromium.org</owner> + <owner>security-enamel@chromium.org</owner> + <summary> + Tracks events when the currently navigated domain name is a lookalike to one + of the top 10K domains or a domain that the user interacted with, resulting + in a navigation suggestion interstitial. + + Before M88, NavigationSuggestion.Event recorded a separate entry for each + lookalike URL in a redirect chain. E.g. lookalike1.com -> site.com -> + lookalike2.com recorded two events. This updated histogram only records an + entry for the first or last URL in the redirect if any of those is a + lookalike. + </summary> +</histogram> + </histograms> </histogram-configuration>
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml index 021a71c5..e7f345f0 100644 --- a/tools/metrics/histograms/histograms_xml/others/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -4738,6 +4738,20 @@ </summary> </histogram> +<histogram name="FamilyUser.ChromeBrowserEngagement.Duration" units="ms" + expires_after="2021-07-14"> + <owner>agawronska@chromium.org</owner> + <owner>tobyhuang@chromium.org</owner> + <owner>xiqiruan@chromium.org</owner> + <owner>cros-families-eng@google.com</owner> + <summary> + Records the Chrome OS user Chrome browser usage in milliseconds. Reports + current daily duration at the first session start on next day. This is only + logged for active foreground time of Chrome browser. Ignores the time when + video or audio is playing in the background, or Chrome browser is invisible. + </summary> +</histogram> + <histogram name="FamilyUser.CrostiniAppsCount" units="Number of Apps" expires_after="2021-08-12"> <owner>tobyhuang@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/password/histograms.xml b/tools/metrics/histograms/histograms_xml/password/histograms.xml index 0aa742b..22f58e0 100644 --- a/tools/metrics/histograms/histograms_xml/password/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/password/histograms.xml
@@ -1747,7 +1747,7 @@ </histogram> <histogram name="PasswordManager.PasswordStoreDeletionsHaveSynced" - enum="BooleanSuccess" expires_after="M88"> + enum="BooleanSuccess" expires_after="M90"> <owner>dullweber@chromium.org</owner> <owner>treib@chromium.org</owner> <owner>mamir@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/signin/histograms.xml b/tools/metrics/histograms/histograms_xml/signin/histograms.xml index 60aa6e1..ea376a6 100644 --- a/tools/metrics/histograms/histograms_xml/signin/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/signin/histograms.xml
@@ -162,7 +162,7 @@ </histogram> <histogram name="Signin.AuthenticatedLaunchUserEvent" - enum="AuthenticatedLaunchUserEvent" expires_after="M88"> + enum="AuthenticatedLaunchUserEvent" expires_after="M95"> <owner>zmin@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -301,6 +301,9 @@ <histogram name="Signin.ForceSigninVerificationRequest" enum="BooleanRequested" expires_after="M88"> + <obsolete> + Removed 2020-10. + </obsolete> <owner>zmin@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -312,6 +315,9 @@ <histogram name="Signin.ForceSigninVerificationTime" units="ms" expires_after="M85"> + <obsolete> + Removed 2020-10. + </obsolete> <owner>zmin@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary> @@ -1011,7 +1017,7 @@ </histogram> <histogram name="Signin.SyncFirstSetupCompleteSource" - enum="SyncFirstSetupCompleteSource" expires_after="M87"> + enum="SyncFirstSetupCompleteSource" expires_after="M89"> <owner>triploblastic@chromium.org</owner> <owner>bsazonov@chromium.org</owner> <summary>Tracks where FirstSetupComplete bit is set from.</summary>
diff --git a/ui/accessibility/ax_node.cc b/ui/accessibility/ax_node.cc index da368ef..deb2076 100644 --- a/ui/accessibility/ax_node.cc +++ b/ui/accessibility/ax_node.cc
@@ -8,9 +8,12 @@ #include <utility> #include "base/strings/string16.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "third_party/skia/include/core/SkColor.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_language_detection.h" #include "ui/accessibility/ax_role_properties.h" @@ -483,6 +486,28 @@ language_info_.reset(); } +std::string AXNode::GetHypertext() const { + if (IsLeaf()) + return GetInnerText(); + + // Construct the hypertext for this node, which contains the concatenation of + // the inner text of this node's textual children, and an embedded object + // character for all the other children. + const std::string embedded_character_str("\xEF\xBF\xBC"); + std::string hypertext; + for (auto it = UnignoredChildrenBegin(); it != UnignoredChildrenEnd(); ++it) { + // Similar to Firefox, we don't expose text nodes in IAccessible2 and ATK + // hypertext with the embedded object character. We copy all of their text + // instead. + if (it->IsText()) { + hypertext += it->GetInnerText(); + } else { + hypertext += embedded_character_str; + } + } + return hypertext; +} + std::string AXNode::GetInnerText() const { // If a text field has no descendants, then we compute its inner text from its // value or its placeholder. Otherwise we prefer to look at its descendant @@ -562,6 +587,18 @@ return std::string(); } +std::string AXNode::GetValueForControl() const { + if (data().IsTextField()) + return GetValueForTextField(); + if (data().IsRangeValueSupported()) + return GetTextForRangeValue(); + if (data().role == ax::mojom::Role::kColorWell) + return GetValueForColorWell(); + if (!IsControl(data().role)) + return std::string(); + return data().GetStringAttribute(ax::mojom::StringAttribute::kValue); +} + std::ostream& operator<<(std::ostream& stream, const AXNode& node) { return stream << node.data().ToString(); } @@ -1094,6 +1131,44 @@ return nullptr; } +std::string AXNode::GetTextForRangeValue() const { + DCHECK(data().IsRangeValueSupported()); + std::string range_value = + data().GetStringAttribute(ax::mojom::StringAttribute::kValue); + float numeric_value; + if (range_value.empty() && + data().GetFloatAttribute(ax::mojom::FloatAttribute::kValueForRange, + &numeric_value)) { + range_value = base::NumberToString(numeric_value); + } + return range_value; +} + +std::string AXNode::GetValueForColorWell() const { + DCHECK_EQ(data().role, ax::mojom::Role::kColorWell); + // static cast because SkColor is a 4-byte unsigned int + unsigned int color = static_cast<unsigned int>( + data().GetIntAttribute(ax::mojom::IntAttribute::kColorValue)); + + unsigned int red = SkColorGetR(color); + unsigned int green = SkColorGetG(color); + unsigned int blue = SkColorGetB(color); + return base::StringPrintf("%d%% red %d%% green %d%% blue", red * 100 / 255, + green * 100 / 255, blue * 100 / 255); +} + +std::string AXNode::GetValueForTextField() const { + DCHECK(data().IsTextField()); + std::string value = + data().GetStringAttribute(ax::mojom::StringAttribute::kValue); + // Some screen readers like Jaws and VoiceOver require a value to be set in + // text fields with rich content, even though the same information is + // available on the children. + if (value.empty() && data().IsRichTextField()) + return GetInnerText(); + return value; +} + bool AXNode::IsIgnored() const { return data().IsIgnored(); } @@ -1226,7 +1301,7 @@ AXNode* parent = GetUnignoredParent(); while (parent && parent->data().HasState(ax::mojom::State::kEditable)) { - if (parent->data().IsPlainTextField() || parent->data().IsRichTextField()) + if (parent->data().IsTextField()) return parent; parent = parent->GetUnignoredParent();
diff --git a/ui/accessibility/ax_node.h b/ui/accessibility/ax_node.h index c59d00d..abf89edd 100644 --- a/ui/accessibility/ax_node.h +++ b/ui/accessibility/ax_node.h
@@ -297,6 +297,16 @@ base::string16 GetInheritedString16Attribute( ax::mojom::StringAttribute attribute) const; + // If this node is a leaf, returns the inner text of this node. This is + // equivalent to its visible accessible name. Otherwise, if this node is not a + // leaf, represents every non-textual child node with a special "embedded + // object character", and every textual child node with its inner text. + // Textual nodes include e.g. static text and white space. + // + // This is how displayed text and embedded objects are represented in + // ATK and IAccessible2 APIs. + std::string GetHypertext() const; + // Returns the text of this node and all descendant nodes; including text // found in embedded objects. // @@ -305,7 +315,7 @@ // not returned. std::string GetInnerText() const; - // Return a string representing the language code. + // Returns a string representing the language code. // // This will consider the language declared in the DOM, and may eventually // attempt to automatically detect the language from the text. @@ -315,6 +325,13 @@ // Returns empty string if no appropriate language was found. std::string GetLanguage() const; + // Returns the value of a control such as a text field, a slider, a <select> + // element, a date picker or an ARIA combo box. In order to minimize + // cross-process communication between the renderer and the browser, may + // compute the value from the control's inner text in the case of a text + // field. + std::string GetValueForControl() const; + // // Helper functions for tables, table rows, and table cells. // Most of these functions construct and cache an AXTableInfo behind @@ -459,6 +476,20 @@ AXNode* ComputeLastUnignoredChildRecursive() const; AXNode* ComputeFirstUnignoredChildRecursive() const; + // Returns the value of a range control such as a slider or a scroll bar in + // text format. + std::string GetTextForRangeValue() const; + + // Returns the value of a color well (a color chooser control) in a human + // readable format. For example: "50% red 40% green 90% blue". + std::string GetValueForColorWell() const; + + // Returns the value of a text field. If necessary, computes the value from + // the field's internal representation in the accessibility tree, in order to + // minimize cross-process communication between the renderer and the browser + // processes. + std::string GetValueForTextField() const; + OwnerTree* const tree_; // Owns this. size_t index_in_parent_; size_t unignored_index_in_parent_;
diff --git a/ui/accessibility/ax_node_position.cc b/ui/accessibility/ax_node_position.cc index f00db5f..84d4c38 100644 --- a/ui/accessibility/ax_node_position.cc +++ b/ui/accessibility/ax_node_position.cc
@@ -5,6 +5,7 @@ #include "ui/accessibility/ax_node_position.h" #include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node_data.h" @@ -179,36 +180,25 @@ base::string16 AXNodePosition::GetText() const { if (IsNullPosition()) - return {}; + return base::string16(); - base::string16 text; - if (IsEmptyObjectReplacedByCharacter()) { - text += kEmbeddedCharacter; - return text; - } + // Special case, if a node has only ignored descendants, i.e., it appears to + // be empty to assistive software, on some platforms we need to still treat it + // as a character and a word boundary. We achieve this by adding an embedded + // object character in the text representation used by this class, but we + // don't expose that character to assistive software that tries to retrieve + // the node's inner text. + if (IsEmptyObjectReplacedByCharacter()) + return base::string16(1, kEmbeddedCharacter); const AXNode* anchor = GetAnchor(); DCHECK(anchor); - // TODO(nektar): Replace with PlatformChildCount when AXNodePosition and - // BrowserAccessibilityPosition are merged into one class. - if (!AnchorChildCount()) { - // Special case: Allows us to get text even in non-web content, e.g. in the - // browser's UI. - text = - anchor->data().GetString16Attribute(ax::mojom::StringAttribute::kValue); - if (!text.empty()) - return text; + switch (g_ax_embedded_object_behavior) { + case AXEmbeddedObjectBehavior::kSuppressCharacter: + return base::UTF8ToUTF16(anchor->GetInnerText()); + case AXEmbeddedObjectBehavior::kExposeCharacter: + return base::UTF8ToUTF16(anchor->GetHypertext()); } - - if (anchor->IsText()) { - return anchor->data().GetString16Attribute( - ax::mojom::StringAttribute::kName); - } - - for (int i = 0; i < AnchorChildCount(); ++i) - text += CreateChildPositionAt(i)->GetText(); - - return text; } bool AXNodePosition::IsInLineBreak() const { @@ -248,21 +238,14 @@ const AXNode* anchor = GetAnchor(); DCHECK(anchor); // TODO(nektar): Replace with PlatformChildCount when AXNodePosition and - // BrowserAccessibilityPosition will make one. - if (!AnchorChildCount()) { - base::string16 value = - anchor->data().GetString16Attribute(ax::mojom::StringAttribute::kValue); - if (!value.empty()) - return value.length(); - } - - if (anchor->IsText()) { - return anchor->data() - .GetString16Attribute(ax::mojom::StringAttribute::kName) - .length(); - } + // BrowserAccessibilityPosition will be merged. + if (!AnchorChildCount() || anchor->IsText()) + return base::UTF8ToUTF16(anchor->GetInnerText()).length(); int text_length = 0; + // This is an optimization over retrieving the text of the whole subtree and + // then finding its length. It saves time by adding lengths instead of + // concatenating strings. for (int i = 0; i < AnchorChildCount(); ++i) text_length += CreateChildPositionAt(i)->MaxTextOffset();
diff --git a/ui/accessibility/ax_node_position_unittest.cc b/ui/accessibility/ax_node_position_unittest.cc index 4fa8a3c..2bfe7139 100644 --- a/ui/accessibility/ax_node_position_unittest.cc +++ b/ui/accessibility/ax_node_position_unittest.cc
@@ -281,6 +281,9 @@ true); button_.SetHasPopup(ax::mojom::HasPopup::kMenu); button_.SetName("Button"); + // Name is not visible in the tree's text representation, i.e. it may be + // coming from an aria-label. + button_.SetNameFrom(ax::mojom::NameFrom::kAttribute); button_.relative_bounds.bounds = gfx::RectF(20, 20, 200, 30); root_.child_ids.push_back(button_.id); @@ -289,6 +292,9 @@ true); check_box_.SetCheckedState(ax::mojom::CheckedState::kTrue); check_box_.SetName("Check box"); + // Name is not visible in the tree's text representation, i.e. it may be + // coming from an aria-label. + check_box_.SetNameFrom(ax::mojom::NameFrom::kAttribute); check_box_.relative_bounds.bounds = gfx::RectF(20, 50, 200, 30); root_.child_ids.push_back(check_box_.id); @@ -1013,41 +1019,47 @@ root_data.id = 1; root_data.role = ax::mojom::Role::kRootWebArea; + AXNodeData text_field_data; + text_field_data.id = 2; + text_field_data.role = ax::mojom::Role::kTextField; + text_field_data.SetName("some text"); + text_field_data.SetNameFrom(ax::mojom::NameFrom::kPlaceholder); + AXNodeData text_data; - text_data.id = 2; + text_data.id = 3; text_data.role = ax::mojom::Role::kStaticText; - text_data.SetName("some text"); + text_data.SetName("more text"); + text_data.SetNameFrom(ax::mojom::NameFrom::kContents); - AXNodeData more_text_data; - more_text_data.id = 3; - more_text_data.role = ax::mojom::Role::kStaticText; - more_text_data.SetName("more text"); + root_data.child_ids = {text_field_data.id, text_data.id}; + SetTree(CreateAXTree({root_data, text_field_data, text_data})); - root_data.child_ids = {2, 3}; - - SetTree(CreateAXTree({root_data, text_data, more_text_data})); - + AssertTextLengthEquals(GetTree(), text_field_data.id, 9); AssertTextLengthEquals(GetTree(), text_data.id, 9); AssertTextLengthEquals(GetTree(), root_data.id, 18); - text_data.SetName("Adjusted line 1"); - SetTree(CreateAXTree({root_data, text_data, more_text_data})); + // Update the placeholder text. + text_field_data.SetName("Adjusted line 1"); + SetTree(CreateAXTree({root_data, text_field_data, text_data})); - AssertTextLengthEquals(GetTree(), text_data.id, 15); + AssertTextLengthEquals(GetTree(), text_field_data.id, 15); + AssertTextLengthEquals(GetTree(), text_data.id, 9); AssertTextLengthEquals(GetTree(), root_data.id, 24); - // Value should override name - text_data.SetValue("Value should override name"); - SetTree(CreateAXTree({root_data, text_data, more_text_data})); + // Value should override name in text fields. + text_field_data.SetValue("Value should override name"); + SetTree(CreateAXTree({root_data, text_field_data, text_data})); - AssertTextLengthEquals(GetTree(), text_data.id, 26); + AssertTextLengthEquals(GetTree(), text_field_data.id, 26); + AssertTextLengthEquals(GetTree(), text_data.id, 9); AssertTextLengthEquals(GetTree(), root_data.id, 35); - // An empty value should fall back to name - text_data.SetValue(""); - SetTree(CreateAXTree({root_data, text_data, more_text_data})); + // An empty value should fall back to placeholder text. + text_field_data.SetValue(""); + SetTree(CreateAXTree({root_data, text_field_data, text_data})); - AssertTextLengthEquals(GetTree(), text_data.id, 15); + AssertTextLengthEquals(GetTree(), text_field_data.id, 15); + AssertTextLengthEquals(GetTree(), text_data.id, 9); AssertTextLengthEquals(GetTree(), root_data.id, 24); } @@ -2130,6 +2142,7 @@ list_marker_ng.role = ax::mojom::Role::kListMarker; list_marker_ng.SetName("2. "); + list_marker_ng.SetNameFrom(ax::mojom::NameFrom::kContents); list_marker_ng.AddIntAttribute(ax::mojom::IntAttribute::kNextOnLineId, inline_box4.id); @@ -3435,6 +3448,7 @@ button_data.id = 3; button_data.role = ax::mojom::Role::kButton; button_data.SetName(""); + button_data.SetNameFrom(ax::mojom::NameFrom::kContents); AXNodeData more_text_data; more_text_data.id = 4; @@ -7493,6 +7507,8 @@ TEST_F(AXPositionTest, EmptyObjectReplacedByCharacterTextNavigation) { g_ax_embedded_object_behavior = AXEmbeddedObjectBehavior::kExposeCharacter; + const base::string16 embedded_character_str( + 1, AXNodePosition::kEmbeddedCharacter); // ++1 kRootWebArea // ++++2 kStaticText @@ -7615,137 +7631,148 @@ TestPositionType result_position = position->CreateNextWordStartPosition(AXBoundaryBehavior::CrossBoundary); - std::string expectations = - "TextPosition anchor_id=5 text_offset=0 affinity=downstream " - "annotated_text=<\xEF\xBF\xBC>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(generic_container_5.id, result_position->anchor_id()); + EXPECT_EQ(0, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(embedded_character_str, result_position->GetText()); position = std::move(result_position); result_position = position->CreateNextWordStartPosition(AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=7 text_offset=1 affinity=downstream " - "annotated_text= <w>orld"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_7.id, result_position->anchor_id()); + EXPECT_EQ(1, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L" world"), result_position->GetText()); // CreatePreviousWordStartPosition tests. position = std::move(result_position); result_position = position->CreatePreviousWordStartPosition( AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=5 text_offset=0 affinity=downstream " - "annotated_text=<\xEF\xBF\xBC>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(generic_container_5.id, result_position->anchor_id()); + EXPECT_EQ(0, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(embedded_character_str, result_position->GetText()); position = std::move(result_position); result_position = position->CreatePreviousWordStartPosition( AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=3 text_offset=0 affinity=downstream " - "annotated_text=<H>ello "; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_3.id, result_position->anchor_id()); + EXPECT_EQ(0, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L"Hello "), result_position->GetText()); // CreateNextWordEndPosition tests. position = std::move(result_position); result_position = position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=3 text_offset=6 affinity=downstream " - "annotated_text=Hello <>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_3.id, result_position->anchor_id()); + EXPECT_EQ(6, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L"Hello "), result_position->GetText()); position = std::move(result_position); result_position = position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=5 text_offset=1 affinity=downstream " - "annotated_text=\xEF\xBF\xBC<>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(generic_container_5.id, result_position->anchor_id()); + EXPECT_EQ(1, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(embedded_character_str, result_position->GetText()); position = std::move(result_position); result_position = position->CreateNextWordEndPosition(AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=7 text_offset=6 affinity=downstream " - "annotated_text= world<>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_7.id, result_position->anchor_id()); + EXPECT_EQ(6, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L" world"), result_position->GetText()); // CreatePreviousWordEndPosition tests. position = std::move(result_position); result_position = position->CreatePreviousWordEndPosition( AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=5 text_offset=1 affinity=downstream " - "annotated_text=\xEF\xBF\xBC<>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(generic_container_5.id, result_position->anchor_id()); + EXPECT_EQ(1, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(embedded_character_str, result_position->GetText()); position = std::move(result_position); result_position = position->CreatePreviousWordEndPosition( AXBoundaryBehavior::CrossBoundary); - expectations = - "TextPosition anchor_id=3 text_offset=6 affinity=downstream " - "annotated_text=Hello <>"; - ASSERT_EQ(result_position->ToString(), expectations); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_3.id, result_position->anchor_id()); + EXPECT_EQ(6, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L"Hello "), result_position->GetText()); // GetText() with embedded object replacement character test. position = AXNodePosition::CreateTextPosition( GetTreeID(), generic_container_5.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); - base::string16 expected_text; - expected_text += AXNodePosition::kEmbeddedCharacter; - ASSERT_EQ(expected_text, position->GetText()); + EXPECT_EQ(embedded_character_str, position->GetText()); - // GetText() on a node parent of text nodes and an embedded object replacement + // GetText() on a node that is the parent of a set of text nodes and a + // non-text node, the latter represented by an embedded object replacement // character. position = AXNodePosition::CreateTextPosition( GetTreeID(), root_1.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); - expected_text = + base::string16 expected_text = base::WideToUTF16(L"Hello ") + AXNodePosition::kEmbeddedCharacter + - base::WideToUTF16(L" world3.14") + AXNodePosition::kEmbeddedCharacter + - base::WideToUTF16(L"hey") + AXNodePosition::kEmbeddedCharacter; - ASSERT_EQ(expected_text, position->GetText()); + base::WideToUTF16(L" world") + AXNodePosition::kEmbeddedCharacter + + AXNodePosition::kEmbeddedCharacter + base::WideToUTF16(L"hey") + + AXNodePosition::kEmbeddedCharacter; + EXPECT_EQ(expected_text, position->GetText()); - // MaxTextOffset() with an embedded object replacement character. + // MaxTextOffset() on a non-text node. This is represented by an embedded + // object replacement character. position = AXNodePosition::CreateTextPosition( GetTreeID(), generic_container_5.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); - - ASSERT_EQ(1, position->MaxTextOffset()); + EXPECT_EQ(1, position->MaxTextOffset()); // Parent positions created from a position inside a node represented by an // embedded object replacement character. position = position->CreateParentPosition(); - expectations = - "TextPosition anchor_id=4 text_offset=0 affinity=downstream " - "annotated_text=<\xEF\xBF\xBC>"; - ASSERT_EQ(position->ToString(), expectations); - ASSERT_EQ(1, position->MaxTextOffset()); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_3.id, result_position->anchor_id()); + EXPECT_EQ(6, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L"Hello "), result_position->GetText()); + EXPECT_EQ(1, position->MaxTextOffset()); position = position->CreateParentPosition(); - expectations = - "TextPosition anchor_id=1 text_offset=6 affinity=downstream " - "annotated_text=Hello <\xEF\xBF\xBC> " - "world3.14\xEF\xBF\xBChey\xEF\xBF\xBC"; - ASSERT_EQ(position->ToString(), expectations); - ASSERT_EQ(22, position->MaxTextOffset()); + EXPECT_TRUE(result_position->IsTextPosition()); + EXPECT_EQ(inline_box_3.id, result_position->anchor_id()); + EXPECT_EQ(6, result_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, result_position->affinity()); + EXPECT_EQ(base::WideToUTF16(L"Hello "), result_position->GetText()); + EXPECT_EQ(22, position->MaxTextOffset()); - // MaxTextOffset() on a node parent of text nodes and an embedded object - // replacement character. + // MaxTextOffset() on a node which is the parent of a set of text nodes and an + // a non-text node, the latter represented by an embedded object replacement + // character. position = AXNodePosition::CreateTextPosition( GetTreeID(), root_1.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); - ASSERT_EQ(22, position->MaxTextOffset()); + EXPECT_EQ(22, position->MaxTextOffset()); // The following is to test a specific edge case with heading navigation, // occurring in AXPosition::CreatePreviousFormatStartPosition. // // When the position is at the beginning of an unignored empty object, - // preceded by an ignored empty object itself preceded by an heading node, the - // previous format start position should stay on this unignored empty object. - // It shouldn't move to the beginning of the heading. + // preceded by an ignored empty object, which is itself preceded by a heading + // node, the previous format start position should stay on this unignored + // empty object. It shouldn't move to the beginning of the heading. TestPositionType text_position = AXNodePosition::CreateTextPosition( GetTreeID(), generic_container_12.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); @@ -7753,14 +7780,16 @@ text_position = text_position->CreatePreviousFormatStartPosition( AXBoundaryBehavior::StopIfAlreadyAtBoundary); - EXPECT_NE(nullptr, text_position); + ASSERT_NE(nullptr, text_position); EXPECT_TRUE(text_position->IsTextPosition()); EXPECT_EQ(generic_container_12.id, text_position->anchor_id()); EXPECT_EQ(0, text_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, text_position->affinity()); // The following is to test a specific edge case that occurs when all the // children of a node are ignored and that node could be considered as an - // empty object replaced by character (e.g., a button). + // empty object, which would be replaced by an embedded object replacement + // character, (e.g., a button). // // The button element should be treated as a leaf node even though it has a // child. Because its only child is ignored, the button should be considered @@ -7773,11 +7802,59 @@ text_position = text_position->CreateNextParagraphEndPosition( AXBoundaryBehavior::StopAtLastAnchorBoundary); - EXPECT_NE(nullptr, text_position); + ASSERT_NE(nullptr, text_position); EXPECT_TRUE(text_position->IsTextPosition()); EXPECT_TRUE(text_position->IsLeafTextPosition()); EXPECT_EQ(button_14.id, text_position->anchor_id()); EXPECT_EQ(1, text_position->text_offset()); + EXPECT_EQ(ax::mojom::TextAffinity::kDownstream, text_position->affinity()); +} + +TEST_F(AXPositionTest, EmptyObjectReplacedByCharacterEmbedObject) { + g_ax_embedded_object_behavior = AXEmbeddedObjectBehavior::kExposeCharacter; + + // Parent Tree + // ++1 kRootWebArea + // ++++2 kEmbeddedObject + // + // Child Tree + // ++1 kDocument + ui::AXTreeID child_tree_id = ui::AXTreeID::CreateNewAXTreeID(); + + // Create tree manager for parent tree. + AXNodeData root; + AXNodeData embed_object; + + root.id = 1; + embed_object.id = 2; + + root.role = ax::mojom::Role::kRootWebArea; + root.child_ids = {embed_object.id}; + + embed_object.role = ax::mojom::Role::kEmbeddedObject; + embed_object.AddStringAttribute(ax::mojom::StringAttribute::kChildTreeId, + child_tree_id.ToString()); + SetTree(CreateAXTree({root, embed_object})); + + // Create tree manager for child tree. + AXNodeData child_root; + child_root.id = 1; + child_root.role = ax::mojom::Role::kDocument; + + AXTreeUpdate update; + update.tree_data.tree_id = child_tree_id; + update.tree_data.parent_tree_id = GetTreeID(); + update.has_tree_data = true; + update.root_id = child_root.id; + update.nodes.push_back(child_root); + TestAXTreeManager child_tree_manager(std::make_unique<AXTree>(update)); + + // Verify that kEmbeddedObject node with child tree is not treated as an + // empty object. + TestPositionType tree_position = AXNodePosition::CreateTreePosition( + GetTreeID(), embed_object.id, 0 /* child_index */); + ASSERT_TRUE(tree_position->IsTreePosition()); + EXPECT_FALSE(tree_position->IsLeaf()); } TEST_F(AXPositionTest, TextNavigationWithCollapsedCombobox) { @@ -7836,6 +7913,7 @@ menu_list_option_6.role = ax::mojom::Role::kMenuListOption; menu_list_option_6.SetName("Option"); + menu_list_option_6.SetNameFrom(ax::mojom::NameFrom::kContents); static_text_7.role = ax::mojom::Role::kStaticText; static_text_7.SetName("3.14");
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h index a2f7952..e68b38c4 100644 --- a/ui/accessibility/ax_position.h +++ b/ui/accessibility/ax_position.h
@@ -3225,6 +3225,13 @@ if (AnchorUnignoredChildCount()) return false; + // Embed element with non empty children should not be treated as empty + // objects. + if (GetAnchorRole() == ax::mojom::Role::kEmbeddedObject && + AnchorChildCount() > 0) { + return false; + } + // All unignored leaf nodes in the AXTree except document and text // nodes should be replaced by the embedded object character. Also, nodes // that only have ignored children (e.g., a button that contains only an
diff --git a/ui/accessibility/ax_range_unittest.cc b/ui/accessibility/ax_range_unittest.cc index b27df72..ea2af60 100644 --- a/ui/accessibility/ax_range_unittest.cc +++ b/ui/accessibility/ax_range_unittest.cc
@@ -171,7 +171,7 @@ button_.role = ax::mojom::Role::kButton; button_.SetHasPopup(ax::mojom::HasPopup::kMenu); button_.SetName(BUTTON); - button_.SetValue(BUTTON); + button_.SetNameFrom(ax::mojom::NameFrom::kValue); button_.relative_bounds.bounds = gfx::RectF(20, 20, 100, 30); button_.AddIntAttribute(ax::mojom::IntAttribute::kNextOnLineId, check_box1_.id);
diff --git a/ui/accessibility/ax_role_properties.cc b/ui/accessibility/ax_role_properties.cc index f776bb6..b3887b74 100644 --- a/ui/accessibility/ax_role_properties.cc +++ b/ui/accessibility/ax_role_properties.cc
@@ -146,16 +146,16 @@ case ax::mojom::Role::kCheckBox: case ax::mojom::Role::kColorWell: case ax::mojom::Role::kComboBoxMenuButton: + case ax::mojom::Role::kDate: + case ax::mojom::Role::kDateTime: case ax::mojom::Role::kDisclosureTriangle: + case ax::mojom::Role::kInputTime: case ax::mojom::Role::kListBox: case ax::mojom::Role::kListGrid: - case ax::mojom::Role::kMenu: - case ax::mojom::Role::kMenuBar: case ax::mojom::Role::kMenuItem: case ax::mojom::Role::kMenuItemCheckBox: case ax::mojom::Role::kMenuItemRadio: case ax::mojom::Role::kMenuListOption: - case ax::mojom::Role::kMenuListPopup: case ax::mojom::Role::kPdfActionableHighlight: case ax::mojom::Role::kPopUpButton: case ax::mojom::Role::kRadioButton: @@ -169,6 +169,8 @@ case ax::mojom::Role::kTextFieldWithComboBox: case ax::mojom::Role::kToggleButton: case ax::mojom::Role::kTree: + case ax::mojom::Role::kTreeGrid: + case ax::mojom::Role::kTreeItem: return true; default: return false;
diff --git a/ui/accessibility/platform/ax_platform_node_base.cc b/ui/accessibility/platform/ax_platform_node_base.cc index f74ed2d..6472dae7 100644 --- a/ui/accessibility/platform/ax_platform_node_base.cc +++ b/ui/accessibility/platform/ax_platform_node_base.cc
@@ -676,18 +676,6 @@ return delegate_->GetInnerText(); } -base::string16 AXPlatformNodeBase::GetRangeValueText() const { - float fval; - base::string16 value = - GetString16Attribute(ax::mojom::StringAttribute::kValue); - - if (value.empty() && - GetFloatAttribute(ax::mojom::FloatAttribute::kValueForRange, &fval)) { - value = base::NumberToString16(fval); - } - return value; -} - base::string16 AXPlatformNodeBase::GetRoleDescriptionFromImageAnnotationStatusOrFromAttribute() const { @@ -961,25 +949,10 @@ GetIntAttribute(ax::mojom::IntAttribute::kScrollYMax); } -base::string16 AXPlatformNodeBase::GetValue() const { - // Expose slider value. - if (GetData().IsRangeValueSupported()) - return GetRangeValueText(); - - // On Windows, the value of a document should be its URL. - if (ui::IsDocument(GetData().role)) - return base::UTF8ToUTF16(delegate_->GetTreeData().url); - - base::string16 value = - GetString16Attribute(ax::mojom::StringAttribute::kValue); - - // Some screen readers like Jaws and VoiceOver require a - // value to be set in text fields with rich content, even though the same - // information is available on the children. - if (value.empty() && IsRichTextField()) - return GetInnerText(); - - return value; +base::string16 AXPlatformNodeBase::GetValueForControl() const { + if (!delegate_) + return base::string16(); + return delegate_->GetValueForControl(); } void AXPlatformNodeBase::ComputeAttributes(PlatformAttributeList* attributes) { @@ -1206,10 +1179,10 @@ } } - // Expose slider value. + // Expose the value of a progress bar, slider, scroll bar or <select> element. if (GetData().IsRangeValueSupported() || GetData().role == ax::mojom::Role::kComboBoxMenuButton) { - std::string value = base::UTF16ToUTF8(GetRangeValueText()); + std::string value = base::UTF16ToUTF8(GetValueForControl()); if (!value.empty()) AddAttributeToList("valuetext", value, attributes); }
diff --git a/ui/accessibility/platform/ax_platform_node_base.h b/ui/accessibility/platform/ax_platform_node_base.h index fb31b4e..6318fc1 100644 --- a/ui/accessibility/platform/ax_platform_node_base.h +++ b/ui/accessibility/platform/ax_platform_node_base.h
@@ -283,7 +283,12 @@ // e.g. aria-label and HTML title, is not returned. base::string16 GetInnerText() const; - virtual base::string16 GetValue() const; + // Returns the value of a control such as a text field, a slider, a <select> + // element, a date picker or an ARIA combo box. In order to minimize + // cross-process communication between the renderer and the browser, may + // compute the value from the control's inner text in the case of a text + // field. + base::string16 GetValueForControl() const; // Represents a non-static text node in IAccessibleHypertext (and ATK in the // future). This character is embedded in the response to @@ -363,11 +368,6 @@ bool IsSelectionItemSupported() const; - // Get the range value text, which might come from aria-valuetext or - // a floating-point value. This is different from the value string - // attribute used in input controls such as text boxes and combo boxes. - base::string16 GetRangeValueText() const; - // Get the role description from the node data or from the image annotation // status. base::string16 GetRoleDescription() const;
diff --git a/ui/accessibility/platform/ax_platform_node_delegate.h b/ui/accessibility/platform/ax_platform_node_delegate.h index 6b9c27e9..391d8a3f 100644 --- a/ui/accessibility/platform/ax_platform_node_delegate.h +++ b/ui/accessibility/platform/ax_platform_node_delegate.h
@@ -86,6 +86,13 @@ // e.g. aria-label and HTML title, is not returned. virtual base::string16 GetInnerText() const = 0; + // Returns the value of a control such as a text field, a slider, a <select> + // element, a date picker or an ARIA combo box. In order to minimize + // cross-process communication between the renderer and the browser, may + // compute the value from the control's inner text in the case of a text + // field. + virtual base::string16 GetValueForControl() const = 0; + // Get the unignored selection from the tree virtual const AXTree::Selection GetUnignoredSelection() const = 0;
diff --git a/ui/accessibility/platform/ax_platform_node_delegate_base.cc b/ui/accessibility/platform/ax_platform_node_delegate_base.cc index 2a44e03..0b9afafb 100644 --- a/ui/accessibility/platform/ax_platform_node_delegate_base.cc +++ b/ui/accessibility/platform/ax_platform_node_delegate_base.cc
@@ -63,6 +63,21 @@ return inner_text; } +base::string16 AXPlatformNodeDelegateBase::GetValueForControl() const { + if (!IsControl(GetData().role) && !GetData().IsRangeValueSupported()) + return base::string16(); + + base::string16 value = + GetData().GetString16Attribute(ax::mojom::StringAttribute::kValue); + float numeric_value; + if (GetData().IsRangeValueSupported() && value.empty() && + GetData().GetFloatAttribute(ax::mojom::FloatAttribute::kValueForRange, + &numeric_value)) { + value = base::NumberToString16(numeric_value); + } + return value; +} + const AXTree::Selection AXPlatformNodeDelegateBase::GetUnignoredSelection() const { return AXTree::Selection{-1, -1, -1, ax::mojom::TextAffinity::kDownstream};
diff --git a/ui/accessibility/platform/ax_platform_node_delegate_base.h b/ui/accessibility/platform/ax_platform_node_delegate_base.h index 8158fe7..5fba10f0 100644 --- a/ui/accessibility/platform/ax_platform_node_delegate_base.h +++ b/ui/accessibility/platform/ax_platform_node_delegate_base.h
@@ -36,6 +36,7 @@ const AXTreeData& GetTreeData() const override; base::string16 GetInnerText() const override; + base::string16 GetValueForControl() const override; const AXTree::Selection GetUnignoredSelection() const override; // Creates a text position rooted at this object.
diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm index 8de2e33..afd13014 100644 --- a/ui/accessibility/platform/ax_platform_node_mac.mm +++ b/ui/accessibility/platform/ax_platform_node_mac.mm
@@ -754,7 +754,7 @@ _node->GetIntAttribute(ax::mojom::IntAttribute::kCheckedState)); return checkedState == ax::mojom::CheckedState::kTrue ? @1 : @0; } - return [self getStringAttribute:ax::mojom::StringAttribute::kValue]; + return base::SysUTF16ToNSString(_node->GetValueForControl()); } - (NSNumber*)AXEnabled {
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc index 7cdb709b..e337c7b 100644 --- a/ui/accessibility/platform/ax_platform_node_win.cc +++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -31,7 +31,6 @@ #include "base/win/variant_vector.h" #include "skia/ext/skia_utils_win.h" #include "third_party/iaccessible2/ia2_api_all.h" -#include "third_party/skia/include/core/SkColor.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/accessibility_switches.h" #include "ui/accessibility/ax_action_data.h" @@ -6508,7 +6507,7 @@ StringAttributeToUIAAriaProperty( properties, ax::mojom::StringAttribute::kValue, "valuetext"); - base::string16 value_now = GetRangeValueText(); + base::string16 value_now = GetValueForControl(); SanitizeStringAttributeForUIAAriaProperty(value_now, &value_now); if (!value_now.empty()) properties.push_back(L"valuenow=" + value_now); @@ -7287,20 +7286,6 @@ } } -base::string16 AXPlatformNodeWin::GetValue() const { - base::string16 value = AXPlatformNodeBase::GetValue(); - - // If this doesn't have a value and is linked then set its value to the URL - // attribute. This allows screen readers to read an empty link's - // destination. - // TODO(dougt): Look into ensuring that on click handlers correctly provide - // a value here. - if (value.empty() && (MSAAState() & STATE_SYSTEM_LINKED)) - value = GetString16Attribute(ax::mojom::StringAttribute::kUrl); - - return value; -} - bool AXPlatformNodeWin::IsPlatformCheckable() const { if (GetData().role == ax::mojom::Role::kToggleButton) return false; @@ -7610,78 +7595,23 @@ // static BSTR AXPlatformNodeWin::GetValueAttributeAsBstr(AXPlatformNodeWin* target) { - // GetValueAttributeAsBstr() has two sets of special cases depending on the - // node's role. - // The first set apply without regard for the nodes |value| attribute. That is - // the nodes value attribute isn't consider for the first set of special - // cases. For example, if the node role is ax::mojom::Role::kColorWell, we do - // not care at all about the node's ax::mojom::StringAttribute::kValue - // attribute. The second set of special cases only apply if the value - // attribute for the node is empty. That is, if - // ax::mojom::StringAttribute::kValue is empty, we do something special. - base::string16 result; - - // - // Color Well special case (Use ax::mojom::IntAttribute::kColorValue) - // - if (target->GetData().role == ax::mojom::Role::kColorWell) { - // static cast because SkColor is a 4-byte unsigned int - unsigned int color = static_cast<unsigned int>( - target->GetIntAttribute(ax::mojom::IntAttribute::kColorValue)); - - unsigned int red = SkColorGetR(color); - unsigned int green = SkColorGetG(color); - unsigned int blue = SkColorGetB(color); - base::string16 value_text; - value_text = base::NumberToString16(red * 100 / 255) + L"% red " + - base::NumberToString16(green * 100 / 255) + L"% green " + - base::NumberToString16(blue * 100 / 255) + L"% blue"; - BSTR value = SysAllocString(value_text.c_str()); + if (target->IsDocument()) { + base::string16 url = + base::UTF8ToUTF16(target->GetDelegate()->GetTreeData().url); + BSTR value = SysAllocString(url.c_str()); DCHECK(value); return value; } - // - // Document special case (Use the document's URL) - // - if (target->GetData().role == ax::mojom::Role::kRootWebArea || - target->GetData().role == ax::mojom::Role::kWebArea) { - result = base::UTF8ToUTF16(target->GetDelegate()->GetTreeData().url); - BSTR value = SysAllocString(result.c_str()); + if (IsLink(target->GetData().role)) { + base::string16 url = + target->GetString16Attribute(ax::mojom::StringAttribute::kUrl); + BSTR value = SysAllocString(url.c_str()); DCHECK(value); return value; } - // - // Links (Use ax::mojom::StringAttribute::kUrl) - // - if (target->GetData().role == ax::mojom::Role::kLink) { - result = target->GetString16Attribute(ax::mojom::StringAttribute::kUrl); - BSTR value = SysAllocString(result.c_str()); - DCHECK(value); - return value; - } - - // For range controls, e.g. sliders and spin buttons, |ax_attr_value| holds - // the aria-valuetext if present but not the inner text. The actual value, - // provided either via aria-valuenow or the actual control's value is held in - // |ax::mojom::FloatAttribute::kValueForRange|. - result = target->GetString16Attribute(ax::mojom::StringAttribute::kValue); - if (result.empty() && target->GetData().IsRangeValueSupported()) { - float fval; - if (target->GetFloatAttribute(ax::mojom::FloatAttribute::kValueForRange, - &fval)) { - result = base::NumberToString16(fval); - BSTR value = SysAllocString(result.c_str()); - DCHECK(value); - return value; - } - } - - if (result.empty() && target->IsRichTextField()) - result = target->GetInnerText(); - - BSTR value = SysAllocString(result.c_str()); + BSTR value = SysAllocString(target->GetValueForControl().c_str()); DCHECK(value); return value; }
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h index 720dc43..64b1819 100644 --- a/ui/accessibility/platform/ax_platform_node_win.h +++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -432,7 +432,6 @@ // AXPlatformNodeBase overrides. void Destroy() override; - base::string16 GetValue() const override; bool IsPlatformCheckable() const override; //
diff --git a/ui/accessibility/test_ax_tree_manager.cc b/ui/accessibility/test_ax_tree_manager.cc index 16dfbd6..70d872d8 100644 --- a/ui/accessibility/test_ax_tree_manager.cc +++ b/ui/accessibility/test_ax_tree_manager.cc
@@ -68,7 +68,7 @@ } AXTreeID TestAXTreeManager::GetParentTreeID() const { - return AXTreeIDUnknown(); + return tree_ ? tree_->data().parent_tree_id : AXTreeIDUnknown(); } AXNode* TestAXTreeManager::GetRootAsAXNode() const { @@ -76,6 +76,22 @@ } AXNode* TestAXTreeManager::GetParentNodeFromParentTreeAsAXNode() const { + ui::AXTreeID parent_tree_id = GetParentTreeID(); + TestAXTreeManager* parent_manager = static_cast<TestAXTreeManager*>( + ui::AXTreeManagerMap::GetInstance().GetManager(parent_tree_id)); + if (!parent_manager) + return nullptr; + + std::set<int32_t> host_node_ids = + parent_manager->GetTree()->GetNodeIdsForChildTreeId(GetTreeID()); + + for (int32_t host_node_id : host_node_ids) { + ui::AXNode* parent_node = + parent_manager->GetNodeFromTree(parent_tree_id, host_node_id); + if (parent_node) + return parent_node; + } + return nullptr; }
diff --git a/ui/base/clipboard/clipboard_test_template.h b/ui/base/clipboard/clipboard_test_template.h index 74da15ca..e5093f4 100644 --- a/ui/base/clipboard/clipboard_test_template.h +++ b/ui/base/clipboard/clipboard_test_template.h
@@ -58,8 +58,8 @@ #endif using base::ASCIIToUTF16; -using base::UTF8ToUTF16; using base::UTF16ToUTF8; +using base::UTF8ToUTF16; using testing::Contains; @@ -808,12 +808,23 @@ EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("public.utf8-plain-text"))); EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("NSStringPboardType"))); EXPECT_EQ(raw_types.size(), static_cast<uint64_t>(2)); -#elif defined(USE_X11) +#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) && \ + !BUILDFLAG(IS_CHROMECAST) && !BUILDFLAG(IS_LACROS) EXPECT_THAT(raw_types, Contains(ASCIIToUTF16(kMimeTypeText))); EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("TEXT"))); EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("STRING"))); EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("UTF8_STRING"))); +#if defined(USE_OZONE) + if (features::IsUsingOzonePlatform()) { + EXPECT_THAT(raw_types, Contains(ASCIIToUTF16(kMimeTypeTextUtf8))); + EXPECT_EQ(raw_types.size(), static_cast<uint64_t>(5)); + return; + } +#endif // USE_OZONE +#if defined(USE_X11) + EXPECT_FALSE(features::IsUsingOzonePlatform()); EXPECT_EQ(raw_types.size(), static_cast<uint64_t>(4)); +#endif // USE_X11 #elif defined(OS_WIN) EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("CF_UNICODETEXT"))); EXPECT_THAT(raw_types, Contains(ASCIIToUTF16("CF_TEXT")));
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb index d7f42fc..e5dc36e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Frans</translation> <translation id="3254434849914415189">Kies die verstekprogram vir <ph name="FILE_TYPE" />-lêers:</translation> <translation id="3264582393905923483">Konteks</translation> +<translation id="3272909651715601089">Kon nie "<ph name="PATH" />" oopmaak nie</translation> <translation id="3280431534455935878">Berei tans voor</translation> <translation id="3280987981688031357">Vinielplaat</translation> <translation id="3296763833017966289">Georgies</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Bulgaars foneties</translation> <translation id="4479812471636796472">VSA Dvorak-sleutelbord</translation> <translation id="4522570452068850558">Besonderhede</translation> +<translation id="4527800702232535228">Hierdie vouer is met Parallels Desktop gedeel</translation> <translation id="4552678318981539154">Koop meer berging</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" />-lêer</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Aap</translation> <translation id="4697043402264950621">Lêerlys is volgens <ph name="COLUMN_NAME" /> in stygende volgorde gerangskik.</translation> <translation id="4711094779914110278">Turks</translation> +<translation id="4712283082407695269">Maak tans "<ph name="PATH" />" oop</translation> <translation id="4713544552769165154">Hierdie lêer is ontwerp vir 'n rekenaar wat Macintosh-sagteware gebruik. Dit is nie versoenbaar met jou toestel, wat Chrome OS gebruik nie. Deursoek die <ph name="BEGIN_LINK" />Chrome-webwinkel<ph name="END_LINK" /> vir 'n gepaste plaasvervangerprogram.<ph name="BEGIN_LINK_HELP" />Kom meer te wete<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> foto's is gerugsteun</translation> <translation id="4725511304875193254">Corgi</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">'n Fout het voorgekom. Sommige items is dalk nie uitgevee nie.</translation> <translation id="656398493051028875">Vee tans "<ph name="FILENAME" />" uit …</translation> <translation id="6581162200855843583">Google Drive-skakel</translation> +<translation id="6594855146910089723">Hierdie vouer is met Linux en Parallels Desktop gedeel</translation> <translation id="6607272825297743757">Lêerinligting</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> vouers is met Parallels Desktop gedeel</translation> <translation id="6629841649550503054">Alles is gerugsteun na <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb index da3a7290..deec9ca9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">ፈረንሳይኛ</translation> <translation id="3254434849914415189">ለ<ph name="FILE_TYPE" /> ፋይሎች ነባሪውን መተግበሪያ ይምረጡ፦</translation> <translation id="3264582393905923483">አውድ</translation> +<translation id="3272909651715601089">«<ph name="PATH" />» መክፈት አልተቻለም</translation> <translation id="3280431534455935878">በማዘጋጀት ላይ</translation> <translation id="3280987981688031357">ቪኒል መዝገብ</translation> <translation id="3296763833017966289">ጆርጂያኛ</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">የቡልጋሪያኛ ፎነቲክ</translation> <translation id="4479812471636796472">የአሜሪካ ድቮራክ ቁልፍ ሰሌዳ</translation> <translation id="4522570452068850558">ዝርዝሮች</translation> +<translation id="4527800702232535228">ይህ አቃፊ ለParallels ዴስክቶፕ ተጋርቷል</translation> <translation id="4552678318981539154">ተጨማሪ ማከማቻ ይግዙ</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ፋይል</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">ጦጣ</translation> <translation id="4697043402264950621">የፋይል ዝርዝር በ<ph name="COLUMN_NAME" /> በሽቅብታ ተደርድሯል።</translation> <translation id="4711094779914110278">ቱርክኛ</translation> +<translation id="4712283082407695269">«<ph name="PATH" />»ን በመክፈት ላይ</translation> <translation id="4713544552769165154">ይህ ፋይል የMacintosh ሶፍትዌር ለሚጠቀም ኮምፒውተር ነው የተቀየሰው። ይሄ Chrome OS ከሚያሄደው መሣሪያዎ ጋር ተኳሃኝ አይደለም። ተገቢ ምትክ መተግበሪያ ለማግኘት እባክዎ <ph name="BEGIN_LINK" />የChrome ድር መደብሩን<ph name="END_LINK" /> ይፈልጉ።<ph name="BEGIN_LINK_HELP" />ተጨማሪ ለመረዳት<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> ፎቶዎች በምትኬ ተቀምጠዋል</translation> <translation id="4725511304875193254">ኮርጂ</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">አንድ ስህተት ተከስቷል። አንዳንድ ንጥሎች አልተሰረዙ ሊሆኑ ይችላሉ።</translation> <translation id="656398493051028875">«<ph name="FILENAME" />»ን በመሰረዝ ላይ...</translation> <translation id="6581162200855843583">Google Drive አገናኝ</translation> +<translation id="6594855146910089723">ይህ አቃፊ ለLinux እና ለParallels ዴስክቶፕ ተጋርቷል</translation> <translation id="6607272825297743757">የፋይል መረጃ</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> አቃፊዎች ለParallels ዴስክቶፕ ተጋርተዋል</translation> <translation id="6629841649550503054">ሁሉም ወደ <ph name="BEGIN_LINK" />Google Drive<ph name="END_LINK" /> በምትኬ ተቀምጠዋል!</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb index ba62a21f..573bc58 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">جارٍ فتح ملفات نظام التشغيل Linux...</translation> <translation id="1547964879613821194">الإنجليزية الكندية</translation> <translation id="1556189134700913550">تطبيق على الكل</translation> +<translation id="1561842594491319104">أجهزة Chrome</translation> <translation id="1572585716423026576">تحديد كخلفية</translation> <translation id="158809615184981282">لوحة مفاتيح فاروية</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> بيتابايت</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">التحويل الصوتي (ذدرافو ← здраво)</translation> <translation id="3067790092342515856">ملفات نظام التشغيل Windows</translation> <translation id="3078461028045006476">مشاركة مع <ph name="EXTENSION_NAME" /></translation> +<translation id="3083975830683400843">أجهزة Chromebit</translation> <translation id="3116361045094675131">لوحة المفاتيح البريطانية</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">تم</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">أفوكادو</translation> <translation id="4823651846660089135">الجهاز للقراءة فقط</translation> <translation id="4839847978919684242">تم اختيار <ph name="SELCTED_FILES_COUNT" /> من العناصر</translation> +<translation id="4843566743023903107">أجهزة Chromebase</translation> <translation id="4849981557599196363">الألمانية (بلجيكا)</translation> <translation id="4850886885716139402">عرض</translation> <translation id="485316830061041779">الألمانية</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">يمكنك منح تطبيقات نظام التشغيل Linux الإذن لتعديل الملفات في Google Drive. وستتم مزامنة التغييرات مع الأجهزة الأخرى.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> من العناصر</translation> +<translation id="5957366693331451795">أجهزة Chromebox</translation> <translation id="5982621672636444458">خيارات التصنيف</translation> <translation id="6005282720244019462">لوحة مفاتيح أمريكا اللاتينية</translation> <translation id="6007237601604674381">تعذّر النقل. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />احذف الملفات من مجلد "المحتوى الذي تم تنزيله"<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">إعداد الجهاز</translation> <translation id="7799329977874311193">مستند HTML</translation> +<translation id="7801354353640549019">أجهزة Chromebook</translation> <translation id="7805768142964895445">الحالة</translation> <translation id="7821462174190887129">تم العثور على <ph name="FILE_COUNT" />. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb index cfb750e8..a1baca02 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Francuska</translation> <translation id="3254434849914415189">Odaberite zadanu aplikaciju za <ph name="FILE_TYPE" /> fajlove:</translation> <translation id="3264582393905923483">Kontekst</translation> +<translation id="3272909651715601089">Otvaranje putanje "<ph name="PATH" />" nije uspjelo</translation> <translation id="3280431534455935878">Pripremanje</translation> <translation id="3280987981688031357">Gramofonska ploča</translation> <translation id="3296763833017966289">Gruzijska</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">bugarska (fonetska)</translation> <translation id="4479812471636796472">američka Dvorak tastatura</translation> <translation id="4522570452068850558">Detalji</translation> +<translation id="4527800702232535228">Ovaj folder se dijeli s aplikacijom Parallels Desktop</translation> <translation id="4552678318981539154">Kupite još prostora za pohranu</translation> <translation id="4559767610552730302">Boke</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fajl</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Majmun</translation> <translation id="4697043402264950621">Spisak fajlova je poredan prema <ph name="COLUMN_NAME" /> u uzlaznom poretku.</translation> <translation id="4711094779914110278">Turska</translation> +<translation id="4712283082407695269">Otvaranje putanje "<ph name="PATH" />"</translation> <translation id="4713544552769165154">Ovaj fajl je dizajniran za računar koji koristi Macintosh softver. Sadržaj nije kompatibilan s vašim uređajem koji koristi Chrome OS. Pretražite <ph name="BEGIN_LINK" />Chrome Web trgovinu<ph name="END_LINK" /> da pronađete odgovarajuću zamjensku aplikaciju. <ph name="BEGIN_LINK_HELP" />Saznajte više<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Napravljena je sigurnosna kopija za sljedeći broj fotografija: <ph name="FILE_COUNT" /></translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Došlo je do greške. Neke stavke možda nisu izbrisane.</translation> <translation id="656398493051028875">Brisanje fajla "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Link za Google Disk</translation> +<translation id="6594855146910089723">Ovaj folder se dijeli s Linuxom i aplikacijom Parallels Desktop</translation> <translation id="6607272825297743757">Informacije o fajlu</translation> <translation id="6609332149380188670">Broj foldera koji su podijeljeni pomoću aplikacije Parallels Desktop: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="6629841649550503054">Napravljene su sigurnosne kopije na <ph name="BEGIN_LINK" />Google Disku!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb index 3cc5dec..2e03938 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Francès</translation> <translation id="3254434849914415189">Tria l'aplicació predeterminada per als fitxers <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Context</translation> +<translation id="3272909651715601089"><ph name="PATH" /> no s'ha pogut obrir</translation> <translation id="3280431534455935878">S'està preparant</translation> <translation id="3280987981688031357">Disc de vinil</translation> <translation id="3296763833017966289">Georgià</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Fonètic búlgar</translation> <translation id="4479812471636796472">Teclat Dvorak nord-americà</translation> <translation id="4522570452068850558">Detalls</translation> +<translation id="4527800702232535228">Aquesta carpeta es comparteix amb Parallels Desktop</translation> <translation id="4552678318981539154">Compra més emmagatzematge</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984">Fitxer <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Mico</translation> <translation id="4697043402264950621">La llista de fitxers es mostra per <ph name="COLUMN_NAME" /> en ordre ascendent.</translation> <translation id="4711094779914110278">Turc</translation> +<translation id="4712283082407695269">S'està obrint <ph name="PATH" /></translation> <translation id="4713544552769165154">Aquest fitxer està dissenyat per a un ordinador que faci servir programari de Macintosh. No és compatible amb el vostre dispositiu, que funciona amb Chrome OS. Podeu cercar una aplicació adequada equivalent a <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />. <ph name="BEGIN_LINK_HELP" />Més informació<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">S'ha creat una còpia de seguretat de <ph name="FILE_COUNT" /> fotos</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">S'ha produït un error. És possible que alguns elements no s'hagin suprimit.</translation> <translation id="656398493051028875">S'està suprimint "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Enllaç de Google Drive</translation> +<translation id="6594855146910089723">Aquesta carpeta es comparteix amb Linux i Parallels Desktop</translation> <translation id="6607272825297743757">Informació del fitxer</translation> <translation id="6609332149380188670">S'han compartit <ph name="NUMBER_OF_ITEMS" /> carpetes amb Parallels Desktop</translation> <translation id="6629841649550503054">Tots els elements tenen una còpia de seguretat a <ph name="BEGIN_LINK" />Google Drive<ph name="END_LINK" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb index 7b405b3..f913c8da 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -212,6 +212,7 @@ </translation> <translation id="3254434849914415189">Επιλέξτε την προεπιλεγμένη εφαρμογή για τα αρχεία <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Περιβάλλον</translation> +<translation id="3272909651715601089">Δεν ήταν δυνατό το άνοιγμα του "<ph name="PATH" />".</translation> <translation id="3280431534455935878">Προετοιμασία</translation> <translation id="3280987981688031357">Δίσκος βινυλίου</translation> <translation id="3296763833017966289">Γεωργιανά @@ -317,6 +318,7 @@ <translation id="4477219268485577442">Φωνητικό Βουλγαρικά</translation> <translation id="4479812471636796472">Πληκτρολόγιο Dvorak (ΗΠΑ)</translation> <translation id="4522570452068850558">Λεπτομέρειες</translation> +<translation id="4527800702232535228">Αυτός ο φάκελος χρησιμοποιείται από κοινού με το Parallels Desktop.</translation> <translation id="4552678318981539154">Αγοράστε περισσότερο αποθηκευτικό χώρο</translation> <translation id="4559767610552730302">Εφέ Bokeh</translation> <translation id="4572815280350369984">Αρχείο <ph name="FILE_TYPE" /></translation> @@ -335,6 +337,7 @@ <translation id="4697043402264950621">Η λίστα αρχείων ταξινομήθηκε κατά <ph name="COLUMN_NAME" /> σε αύξουσα σειρά.</translation> <translation id="4711094779914110278">Τουρκικά </translation> +<translation id="4712283082407695269">Άνοιγμα "<ph name="PATH" />"</translation> <translation id="4713544552769165154">Αυτό το αρχείο έχει σχεδιαστεί για υπολογιστές που χρησιμοποιούν λογισμικό για υπολογιστές Macintosh. Δεν είναι συμβατό με τη συσκευή σας η οποία εκτελεί Chrome OS. Αναζητήστε μια εφαρμογή κατάλληλη για να το αντικαταστήσει στο <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Μάθετε περισσότερα<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Δημιουργήθηκαν αντίγραφα ασφαλείας για <ph name="FILE_COUNT" /> φωτογραφίες</translation> <translation id="4725511304875193254">Κόργκι</translation> @@ -538,6 +541,7 @@ <translation id="6558280019477628686">Παρουσιάστηκε σφάλμα. Ορισμένα στοιχεία ενδέχεται να μην έχουν διαγραφεί.</translation> <translation id="656398493051028875">Διαγραφή αρχείου "<ph name="FILENAME" />"…</translation> <translation id="6581162200855843583">Σύνδεσμος του Google Drive</translation> +<translation id="6594855146910089723">Αυτός ο φάκελος χρησιμοποιείται από κοινού με το Linux και το Parallels Desktop.</translation> <translation id="6607272825297743757">Πληροφορίες αρχείου</translation> <translation id="6609332149380188670">Μοιραστήκατε <ph name="NUMBER_OF_ITEMS" /> φακέλους με το Parallels Desktop.</translation> <translation id="6629841649550503054">Δημιουργήθηκαν αντίγραφα ασφαλείας για όλα τα αρχεία στο <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb index a1b4cec..e3da91ea 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">French</translation> <translation id="3254434849914415189">Choose the default app for <ph name="FILE_TYPE" /> files:</translation> <translation id="3264582393905923483">Context</translation> +<translation id="3272909651715601089">Could not open '<ph name="PATH" />'</translation> <translation id="3280431534455935878">Preparing</translation> <translation id="3280987981688031357">Vinyl record</translation> <translation id="3296763833017966289">Georgian</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Bulgarian phonetic</translation> <translation id="4479812471636796472">US Dvorak keyboard</translation> <translation id="4522570452068850558">Details</translation> +<translation id="4527800702232535228">This folder is shared with Parallels Desktop</translation> <translation id="4552678318981539154">Buy more storage</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> file</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Monkey</translation> <translation id="4697043402264950621">File list sorted by <ph name="COLUMN_NAME" /> in ascending order.</translation> <translation id="4711094779914110278">Turkish</translation> +<translation id="4712283082407695269">Opening '<ph name="PATH" />'</translation> <translation id="4713544552769165154">This file is designed for a computer using Macintosh software. This is not compatible with your device which runs Chrome OS. Please search the <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /> for a suitable replacement app.<ph name="BEGIN_LINK_HELP" />Learn More<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> photos backed up</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">An error occurred. Some items may not have been deleted.</translation> <translation id="656398493051028875">Deleting "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Google Drive link</translation> +<translation id="6594855146910089723">This folder is shared with Linux and Parallels Desktop</translation> <translation id="6607272825297743757">File info</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> folders shared with Parallels Desktop</translation> <translation id="6629841649550503054">All backed up to <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb index 564e676e..fe8d0bb 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">فرانسوی</translation> <translation id="3254434849914415189">برنامه پیشفرض را برای فایلهای <ph name="FILE_TYPE" /> انتخاب کنید:</translation> <translation id="3264582393905923483">زمینه</translation> +<translation id="3272909651715601089">«<ph name="PATH" />» باز نشد</translation> <translation id="3280431534455935878"> آمادهسازی</translation> <translation id="3280987981688031357">صفحه گرامافون</translation> <translation id="3296763833017966289">گرجستانی</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">آوایی بلغاری</translation> <translation id="4479812471636796472">صفحهکلید دووراک آمریکایی</translation> <translation id="4522570452068850558">جزئیات</translation> +<translation id="4527800702232535228">این پوشه با Parallels Desktop همرسانی میشود</translation> <translation id="4552678318981539154">خرید فضای ذخیره بیشتر</translation> <translation id="4559767610552730302">بوکه</translation> <translation id="4572815280350369984">فایل <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">میمون</translation> <translation id="4697043402264950621">فهرست فایل براساس <ph name="COLUMN_NAME" /> بهصورت صعودی مرتب شد.</translation> <translation id="4711094779914110278">ترکی</translation> +<translation id="4712283082407695269">درحال باز کردن «<ph name="PATH" />»</translation> <translation id="4713544552769165154">این فایل برای رایانهای طراحی شده است که از نرمافزار Macintosh استفاده میکند. این فایل با دستگاه شما که Chrome OS روی آن نصب است، سازگار نیست. لطفاً <ph name="BEGIN_LINK" />«نتبازار Chrome»<ph name="END_LINK" /> را برای برنامه مناسب جایگزین بررسی کنید.<ph name="BEGIN_LINK_HELP" />بیشتر بدانید<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> عکس پشتیبان گرفته شدند</translation> <translation id="4725511304875193254">کورگی</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">خطایی روی داد. ممکن است بعضی از موارد حذف نشده باشند.</translation> <translation id="656398493051028875">در حال حذف «<ph name="FILENAME" />»...</translation> <translation id="6581162200855843583">پیوند Google Drive</translation> +<translation id="6594855146910089723">این پوشه با Linux و Parallels Desktop همرسانی میشود</translation> <translation id="6607272825297743757">اطلاعات فایل</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> پوشه با Parallels Desktop همرسانی شد</translation> <translation id="6629841649550503054">همه در <ph name="BEGIN_LINK" />Google Drive<ph name="END_LINK" /> پشتیبان گرفته شدند</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb index b6592a47..ac6b76fad 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Ouverture des fichiers Linux…</translation> <translation id="1547964879613821194">Anglais canadien</translation> <translation id="1556189134700913550">Appliquer à toutes les entrées</translation> +<translation id="1561842594491319104">Appareils Chrome</translation> <translation id="1572585716423026576">Définir comme fond d'écran</translation> <translation id="158809615184981282">Clavier féroïen</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> Po</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Translittération (zdravo → здраво)</translation> <translation id="3067790092342515856">Fichiers Windows</translation> <translation id="3078461028045006476">Partager avec <ph name="EXTENSION_NAME" /></translation> +<translation id="3083975830683400843">appareils Chromebit</translation> <translation id="3116361045094675131">Clavier britannique</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">OK</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Avocat</translation> <translation id="4823651846660089135">Appareil en lecture seule</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> éléments sélectionnés</translation> +<translation id="4843566743023903107">ordinateurs Chromebase</translation> <translation id="4849981557599196363">Allemand (Belgique)</translation> <translation id="4850886885716139402">Afficher</translation> <translation id="485316830061041779">Allemand</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Autoriser les applications Linux à modifier les fichiers dans votre compte Google Drive. Les modifications apportées seront synchronisées avec vos autres appareils.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> éléments</translation> +<translation id="5957366693331451795">Chromebox</translation> <translation id="5982621672636444458">Options de tri</translation> <translation id="6005282720244019462">Clavier latino-américain</translation> <translation id="6007237601604674381">Échec du transfert. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />Supprimez les fichiers du dossier "Téléchargements".<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Formater le périphérique</translation> <translation id="7799329977874311193">Document HTML</translation> +<translation id="7801354353640549019">Chromebooks</translation> <translation id="7805768142964895445">État</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> trouvées. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb index 27845fc..3f0dc63 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Abrindo ficheiros de Linux…</translation> <translation id="1547964879613821194">Inglés canadense</translation> <translation id="1556189134700913550">Aplicar a todas</translation> +<translation id="1561842594491319104">Dispositivos Chrome</translation> <translation id="1572585716423026576">Definir como fondo de pantalla</translation> <translation id="158809615184981282">Teclado feroés</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Transliteración (zdravo → здраво)</translation> <translation id="3067790092342515856">Ficheiros de Windows</translation> <translation id="3078461028045006476">Compartir con <ph name="EXTENSION_NAME" /></translation> +<translation id="3083975830683400843">Chromebits</translation> <translation id="3116361045094675131">Teclado do Reino Unido</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">LISTO</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Aguacate</translation> <translation id="4823651846660089135">O dispositivo é de só lectura</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> elementos seleccionados</translation> +<translation id="4843566743023903107">Chromebases</translation> <translation id="4849981557599196363">Alemán (Bélxica)</translation> <translation id="4850886885716139402">Vista</translation> <translation id="485316830061041779">Alemán</translation> @@ -469,6 +472,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Concede permisos ás aplicacións de Linux para modificar ficheiros en Google Drive. Os cambios sincronizaranse cos demais dispositivos.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> elementos</translation> +<translation id="5957366693331451795">Chromeboxes</translation> <translation id="5982621672636444458">Opcións de ordenación</translation> <translation id="6005282720244019462">Teclado latinoamericano</translation> <translation id="6007237601604674381">Non se puido mover. <ph name="ERROR_MESSAGE" /></translation> @@ -628,6 +632,7 @@ <ph name="MARKUP_4" />elimina ficheiros do cartafol Descargas<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Formatar dispositivo</translation> <translation id="7799329977874311193">Documento HTML</translation> +<translation id="7801354353640549019">Chromebooks</translation> <translation id="7805768142964895445">Estado</translation> <translation id="7821462174190887129">Atopáronse <ph name="FILE_COUNT" />. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb index 2812220..be41f10 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Francuski</translation> <translation id="3254434849914415189">Odaberite zadanu aplikaciju za <ph name="FILE_TYPE" /> datoteke:</translation> <translation id="3264582393905923483">Kontekst</translation> +<translation id="3272909651715601089">Nije moguće otvoriti "<ph name="PATH" />"</translation> <translation id="3280431534455935878">Priprema</translation> <translation id="3280987981688031357">Gramofonska ploča</translation> <translation id="3296763833017966289">Gruzijski</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">bugarska (fonetska)</translation> <translation id="4479812471636796472">SAD Dvorak tipkovnica</translation> <translation id="4522570452068850558">Detalji</translation> +<translation id="4527800702232535228">Ova se mapa dijeli s Parallels Desktopom</translation> <translation id="4552678318981539154">Kupite još prostora za pohranu</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> datoteka</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Majmun</translation> <translation id="4697043402264950621">Popis datoteka razvrstan prema "<ph name="COLUMN_NAME" />", rastućim redoslijedom.</translation> <translation id="4711094779914110278">Turski</translation> +<translation id="4712283082407695269">Otvara se dokument "<ph name="PATH" />"</translation> <translation id="4713544552769165154">Ova datoteka predviđena je za računalo koje upotrebljava Macintosh softver. Nije kompatibilna s vašim uređajem koji radi na Chrome OS-u. Potražite odgovarajuću zamjensku aplikaciju u <ph name="BEGIN_LINK" />Chrome web-trgovini<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Saznajte više<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Izrađene su sigurnosne kopije fotografija (ukupno <ph name="FILE_COUNT" />)</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Dogodila se pogreška. Neke stavke možda nisu izbrisane.</translation> <translation id="656398493051028875">Brisanje datoteke "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Veza na Google disk</translation> +<translation id="6594855146910089723">Mapa se dijeli s Linuxom i Parallels Desktopom</translation> <translation id="6607272825297743757">Informacije o datoteci</translation> <translation id="6609332149380188670">S Parallels Desktopom dijeli se sljedeći broj mapa: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="6629841649550503054">Sve je sigurnosno spremljeno na <ph name="BEGIN_LINK" />Google disk!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb index 7abbbd99..eaa4db6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">francia</translation> <translation id="3254434849914415189">Válassza ki az alapértelmezett alkalmazást <ph name="FILE_TYPE" />-fájlokhoz:</translation> <translation id="3264582393905923483">Kontextus</translation> +<translation id="3272909651715601089">A(z) „<ph name="PATH" />” fájl nem nyitható meg</translation> <translation id="3280431534455935878">Előkészítés</translation> <translation id="3280987981688031357">Bakelitlemez</translation> <translation id="3296763833017966289">grúz</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">bolgár fonetikus</translation> <translation id="4479812471636796472">Amerikai Dvorak billentyűzet</translation> <translation id="4522570452068850558">Részletek</translation> +<translation id="4527800702232535228">Ez a mappa meg van osztva a Parallels Desktop rendszerrel</translation> <translation id="4552678318981539154">További tárhely vásárlása</translation> <translation id="4559767610552730302">Elmosódott</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fájl</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Majom</translation> <translation id="4697043402264950621"><ph name="COLUMN_NAME" /> szerint rendezett, növekvő sorrendben lévő fájllista.</translation> <translation id="4711094779914110278">török</translation> +<translation id="4712283082407695269">„<ph name="PATH" />” megnyitása folyamatban</translation> <translation id="4713544552769165154">Ezt a fájlt Macintosh-szoftvereket használó számítógéphez készítették. Nem kompatibilis az Ön Chrome OS-t futtató eszközével. A <ph name="BEGIN_LINK" />Chrome Internetes áruházban<ph name="END_LINK" /> kereshet megfelelő helyettesítő alkalmazást. <ph name="BEGIN_LINK_HELP" />További információ<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> fotó biztonsági mentése végrehajtva</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Hiba történt. Előfordulhat, hogy egyes elemek nem törlődtek.</translation> <translation id="656398493051028875">„<ph name="FILENAME" />” törlése...</translation> <translation id="6581162200855843583">Google Drive link</translation> +<translation id="6594855146910089723">Ez a mappa meg van osztva a Linux és a Parallels Desktop rendszerrel</translation> <translation id="6607272825297743757">Fájlinformáció</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> mappa megosztva a Parallels Desktoppal</translation> <translation id="6629841649550503054">Mindenről van biztonsági másolat a <ph name="BEGIN_LINK" />Google Drive-on<ph name="END_LINK" />!</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb index 9a0b1563..3ddd2163 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Membuka file Linux...</translation> <translation id="1547964879613821194">Inggris Kanada</translation> <translation id="1556189134700913550">Terapkan untuk semua</translation> +<translation id="1561842594491319104">Perangkat Chrome</translation> <translation id="1572585716423026576">Setel sebagai wallpaper</translation> <translation id="158809615184981282">Keyboard Faeroe</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Transliterasi (zdravo → здраво)</translation> <translation id="3067790092342515856">File Windows</translation> <translation id="3078461028045006476">Bagikan dengan <ph name="EXTENSION_NAME" /></translation> +<translation id="3083975830683400843">Chromebit</translation> <translation id="3116361045094675131">Keyboard Inggris</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">SELESAI</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Avokad</translation> <translation id="4823651846660089135">Perangkat berstatus hanya-baca</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> item dipilih</translation> +<translation id="4843566743023903107">Chromebase</translation> <translation id="4849981557599196363">Jerman (Belgia)</translation> <translation id="4850886885716139402">Lihat</translation> <translation id="485316830061041779">Jerman</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Beri Linux izin aplikasi untuk mengubah file di Google Drive Anda. Perubahan akan disinkronkan ke perangkat Anda lainnya.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> item</translation> +<translation id="5957366693331451795">Chromebox</translation> <translation id="5982621672636444458">Sortir opsi</translation> <translation id="6005282720244019462">Keyboard untuk wilayah Amerika Latin</translation> <translation id="6007237601604674381">Pemindahan gagal. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />hapus file dari folder Download Anda<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Format perangkat</translation> <translation id="7799329977874311193">Dokumen HTML</translation> +<translation id="7801354353640549019">Chromebook</translation> <translation id="7805768142964895445">Status</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> ditemukan. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb index 8add3603..e3aad10 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Franskt</translation> <translation id="3254434849914415189">Veldu sjálfgefið forrit fyrir <ph name="FILE_TYPE" />-skrár:</translation> <translation id="3264582393905923483">Samhengi</translation> +<translation id="3272909651715601089">Ekki tókst að opna „<ph name="PATH" />“</translation> <translation id="3280431534455935878">Verið að undirbúa</translation> <translation id="3280987981688031357">Vínylplata</translation> <translation id="3296763833017966289">Georgískt</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Búlgarskt hljóðritunarlyklaborð</translation> <translation id="4479812471636796472">Bandarískt Dvorak-lyklaborð</translation> <translation id="4522570452068850558">Upplýsingar</translation> +<translation id="4527800702232535228">Þessari möppu er deilt með Parallels Desktop</translation> <translation id="4552678318981539154">Kaupa meira geymslurými</translation> <translation id="4559767610552730302">Gláka</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> skrá</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Api</translation> <translation id="4697043402264950621">Skráalista raðað eftir <ph name="COLUMN_NAME" /> í hækkandi röð.</translation> <translation id="4711094779914110278">Tyrkneskt</translation> +<translation id="4712283082407695269">Opnar „<ph name="PATH" />“</translation> <translation id="4713544552769165154">Þessi skrá er þróuð fyrir tölvur sem nota Macintosh-hugbúnað. Hún er ekki samhæf við tækið þitt, sem notar Chrome OS. Leitaðu í <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /> að öðru sambærilegu forriti í staðinn.<ph name="BEGIN_LINK_HELP" />Frekari upplýsingar<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> myndir afritaðar</translation> <translation id="4725511304875193254">Corgi-hundur</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">Villa kom upp. Hugsanlega tókst ekki að eyða einhverjum atriðum.</translation> <translation id="656398493051028875">Eyðir „<ph name="FILENAME" />“...</translation> <translation id="6581162200855843583">Google Drive tengill</translation> +<translation id="6594855146910089723">Þessari möppu er deilt með Linux og Parallels Desktop</translation> <translation id="6607272825297743757">Skráarupplýsingar</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> möppum deilt með Parallels Desktop</translation> <translation id="6629841649550503054">Allt afritað á <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index 6f177e6..341f786 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -56,6 +56,7 @@ <translation id="1538729222189715449">Linux ಫೈಲ್ಗಳನ್ನು ತೆರೆಯಲಾಗುತ್ತಿದೆ...</translation> <translation id="1547964879613821194">ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲಿಷ್</translation> <translation id="1556189134700913550">ಎಲ್ಲಕ್ಕೂ ಅನ್ವಯಿಸು</translation> +<translation id="1561842594491319104">Chrome ಸಾಧನಗಳು</translation> <translation id="1572585716423026576">ವಾಲ್ಪೇಪರ್ ಆಗಿ ಹೊಂದಿಸಿ</translation> <translation id="158809615184981282">ಫರೋಸಿ ಕೀಬೋರ್ಡ್</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -185,6 +186,7 @@ <translation id="3064388234319122767">ಲಿಪ್ಯಂತರಣ (zdravo → здраво)</translation> <translation id="3067790092342515856">Windows ಫೈಲ್ಗಳು</translation> <translation id="3078461028045006476"><ph name="EXTENSION_NAME" /> ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಿ</translation> +<translation id="3083975830683400843">Chromebits</translation> <translation id="3116361045094675131">ಯುಕೆ ಕೀಬೋರ್ಡ್</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">ಮುಗಿದಿದೆ</translation> @@ -337,6 +339,7 @@ <translation id="4804827417948292437">ಆವಕಾಡೊ</translation> <translation id="4823651846660089135">ಸಾಧನ ಓದಲು ಮಾತ್ರ ಆಗಿದೆ</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ</translation> +<translation id="4843566743023903107">Chromebases</translation> <translation id="4849981557599196363">ಜರ್ಮನ್ (ಬೆಲ್ಜಿಯಂ)</translation> <translation id="4850886885716139402">ವೀಕ್ಷಣೆ</translation> <translation id="485316830061041779">ಜರ್ಮನ್</translation> @@ -466,6 +469,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">ನಿಮ್ಮ Google ಡ್ರೈವ್ನಲ್ಲಿರುವ ಫೈಲ್ಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು Linux ಆ್ಯಪ್ಗಳಿಗೆ ಅನುಮತಿ ನೀಡಿ. ಈ ಬದಲಾವಣೆಗಳು, ನಿಮ್ಮ ಇತರ ಸಾಧನಗಳೊಂದಿಗೆ ಸಿಂಕ್ ಆಗುತ್ತವೆ.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> ಐಟಂಗಳು</translation> +<translation id="5957366693331451795">Chromeboxes</translation> <translation id="5982621672636444458">ಆಯ್ಕೆಗಳನ್ನು ವಿಂಗಡಿಸು</translation> <translation id="6005282720244019462">ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಕೀಬೋರ್ಡ್</translation> <translation id="6007237601604674381">ಸರಿಸುವುದು ವಿಫಲವಾಗಿದೆ. <ph name="ERROR_MESSAGE" /></translation> @@ -621,6 +625,7 @@ <ph name="MARKUP_4" />ನಿಮ್ಮ ಡೌನ್ಲೋಡ್ ಫೋಲ್ಡರ್ನ ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಿ<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">ಸಾಧನವನ್ನು ಸ್ವರೂಪಗೊಳಿಸಿ</translation> <translation id="7799329977874311193"> HTML ಡಾಕ್ಯುಮೆಂಟ್</translation> +<translation id="7801354353640549019">Chromebooks</translation> <translation id="7805768142964895445">ಸ್ಥಿತಿ</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> ಕಂಡುಬಂದಿವೆ. <ph name="LINE_BREAK1" /> ನಿಮ್ಮ Google ಡ್ರೈವ್ ಕೋಟಾ ಸಾಕಷ್ಟು ದೊಡ್ಡದಾಗಿಲ್ಲ. ಹೆಚ್ಚುವರಿ <ph name="FILE_SIZE" /> ಅಗತ್ಯವಿದೆ. <ph name="LINE_BREAK2" /> ಕೆಲವು ಫೋಟೋಗಳನ್ನು ಆಯ್ಕೆಮಾಡುವ ಮೂಲಕ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="7825423931463735974">ತಮಿಳು ಕೀಬೋರ್ಡ್ (ತಮಿಳ್99)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb index 96f3265..cd463dd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Prancūzų</translation> <translation id="3254434849914415189">Keisti numatytąją <ph name="FILE_TYPE" /> failų programą:</translation> <translation id="3264582393905923483">Kontekstas</translation> +<translation id="3272909651715601089">Nepavyko atidaryti „<ph name="PATH" />“</translation> <translation id="3280431534455935878">Ruošiama</translation> <translation id="3280987981688031357">Vinilo plokštelė</translation> <translation id="3296763833017966289">Gruzinų</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Fonetinė bulgarų</translation> <translation id="4479812471636796472">JAV Dvorako klaviatūra</translation> <translation id="4522570452068850558">Išsami informacija</translation> +<translation id="4527800702232535228">Šis aplankas bendrinamas su „Parallels Desktop“</translation> <translation id="4552678318981539154">Įsigyti daugiau atminties</translation> <translation id="4559767610552730302">„Bokeh“ efektas</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> failas</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Beždžionė</translation> <translation id="4697043402264950621">Failų sąrašas surūšiuotas pagal stulpelį „<ph name="COLUMN_NAME" />“ didėjimo tvarka.</translation> <translation id="4711094779914110278">Turkų</translation> +<translation id="4712283082407695269">Atidaroma „<ph name="PATH" />“</translation> <translation id="4713544552769165154">Šis failas skirtas kompiuteriui, kuriame naudojama „Macintosh“ programinė įranga. Jis nesuderinamas su jūsų įrenginiu, kuriame veikia „Chrome“ OS. Tinkamos pakaitinės programos ieškokite <ph name="BEGIN_LINK" />„Chrome“ internetinėje parduotuvėje<ph name="END_LINK" />. <ph name="BEGIN_LINK_HELP" />Sužinokite daugiau<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Sukurta atsarginių nuotraukų kopijų: <ph name="FILE_COUNT" /></translation> <translation id="4725511304875193254">Korgis</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Įvyko klaida. Kai kurie elementai galėjo nebūti ištrinti.</translation> <translation id="656398493051028875">Ištrinamas failas „<ph name="FILENAME" />“...</translation> <translation id="6581162200855843583">„Google“ disko nuoroda</translation> +<translation id="6594855146910089723">Šis aplankas bendrinamas su „Linux“ ir „Parallels Desktop“</translation> <translation id="6607272825297743757">Failo informacija</translation> <translation id="6609332149380188670">Su „Parallels Desktop“ bendrinamų aplankų: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="6629841649550503054">Visų failų atsarginės kopijos sukurtos <ph name="BEGIN_LINK" />„Google“ diske!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb index e505abe..01e8eff 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Franču valoda</translation> <translation id="3254434849914415189">Izvēlieties noklusējuma lietotni <ph name="FILE_TYPE" /> failu atvēršanai:</translation> <translation id="3264582393905923483">Konteksts</translation> +<translation id="3272909651715601089">Nevarēja atvērt failu “<ph name="PATH" />”</translation> <translation id="3280431534455935878">Notiek sagatavošana</translation> <translation id="3280987981688031357">Vinila ieraksts</translation> <translation id="3296763833017966289">Gruzīnu valoda</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Bulgāru fonētiskā</translation> <translation id="4479812471636796472">ASV Dvoraka tastatūra</translation> <translation id="4522570452068850558">Informācija</translation> +<translation id="4527800702232535228">Šī mape ir kopīgota ar Parallels Desktop</translation> <translation id="4552678318981539154">Iegādāties papildu vietu krātuvē</translation> <translation id="4559767610552730302">Izplūduma efekts</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> fails</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Pērtiķis</translation> <translation id="4697043402264950621">Failu saraksts ir sakārtots pēc slejas “<ph name="COLUMN_NAME" />” augošā secībā.</translation> <translation id="4711094779914110278">Turku valoda</translation> +<translation id="4712283082407695269">Notiek dokumenta “<ph name="PATH" />” atvēršana</translation> <translation id="4713544552769165154">Šis fails ir paredzēts datoram, kurā tiek izmantota Macintosh programmatūra. Tas nav saderīgs ar jūsu ierīci, kurā darbojas Chrome OS. Atbilstošu lietotni meklējiet <ph name="BEGIN_LINK" />Chrome interneta veikalā<ph name="END_LINK" />. <ph name="BEGIN_LINK_HELP" />Uzziniet vairāk<ph name="END_LINK_HELP" />.</translation> <translation id="4724850507808590449">Dublēti <ph name="FILE_COUNT" /> fotoattēli</translation> <translation id="4725511304875193254">Korgijs</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Radās kļūda. Iespējams, netika izdzēsti daži vienumi.</translation> <translation id="656398493051028875">Notiek faila “<ph name="FILENAME" />” dzēšana...</translation> <translation id="6581162200855843583">Google diska saite</translation> +<translation id="6594855146910089723">Šī mape ir kopīgota ar Linux un Parallels Desktop</translation> <translation id="6607272825297743757">Faila informācija</translation> <translation id="6609332149380188670">Vairākas mapes (kopā <ph name="NUMBER_OF_ITEMS" />) tika kopīgotas ar Parallels Desktop</translation> <translation id="6629841649550503054">Visi faili ir dublēti <ph name="BEGIN_LINK" />Google diskā<ph name="END_LINK" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb index 10eec62..f338e3e1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">француски</translation> <translation id="3254434849914415189">Одберете ја стандардната апликација за датотеките <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Контекст</translation> +<translation id="3272909651715601089">Не можеше да се отвори „<ph name="PATH" />“</translation> <translation id="3280431534455935878">Се подготвува</translation> <translation id="3280987981688031357">Грамофонска плоча</translation> <translation id="3296763833017966289">грузиски</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">бугарска фонетска</translation> <translation id="4479812471636796472">САД тастатура Dvorak</translation> <translation id="4522570452068850558">Детали</translation> +<translation id="4527800702232535228">Папкава е споделена со Parallels Desktop</translation> <translation id="4552678318981539154">Купете поголем простор за складирање</translation> <translation id="4559767610552730302">Боке</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> датотека</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Мајмун</translation> <translation id="4697043402264950621">Списокот со датотеки е подреден според <ph name="COLUMN_NAME" /> по растечки редослед.</translation> <translation id="4711094779914110278">турски</translation> +<translation id="4712283082407695269">Се отвора „<ph name="PATH" />“</translation> <translation id="4713544552769165154">Оваа датотека е дизајнирана за компјутер којшто користи софтвер на Macintosh. Таа не е компатибилна со вашиот уред којшто работи на Chrome OS. Пребарајте на <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /> за соодветна апликација за замена.<ph name="BEGIN_LINK_HELP" />Дознајте повеќе<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> фотографии се ископирани</translation> <translation id="4725511304875193254">Корги</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">Грешка. Некои ставки може да не се избришани.</translation> <translation id="656398493051028875">Се брише „<ph name="FILENAME" />“...</translation> <translation id="6581162200855843583">Врска на Google Диск</translation> +<translation id="6594855146910089723">Папкава е споделена со Linux и Parallels Desktop</translation> <translation id="6607272825297743757">Информации за датотека</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> папки се споделени со Parallels Desktop</translation> <translation id="6629841649550503054">Сѐ е ископирано на <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb index 4865c86..54a0292b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">ഫ്രഞ്ച്</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> ഫയലുകൾക്കായി ഡിഫോൾട്ട് ആപ്പ് തിരഞ്ഞെടുക്കുക:</translation> <translation id="3264582393905923483">സന്ദർഭം</translation> +<translation id="3272909651715601089">"<ph name="PATH" />" തുറക്കാനായില്ല</translation> <translation id="3280431534455935878">തയ്യാറെടുക്കുന്നു</translation> <translation id="3280987981688031357">വിനൈൽ റെക്കോർഡ്</translation> <translation id="3296763833017966289">ജോര്ജ്ജിയന്</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">ബൾഗേറിയൻ സ്വരസൂചകം</translation> <translation id="4479812471636796472">യുഎസ് ഡൊറാക്ക് കീബോര്ഡ്</translation> <translation id="4522570452068850558">വിശദാംശങ്ങൾ</translation> +<translation id="4527800702232535228">Parallels Desktop-മായി ഈ ഫോൾഡർ പങ്കിട്ടു</translation> <translation id="4552678318981539154">കൂടുതൽ സംഭരണം വാങ്ങുക</translation> <translation id="4559767610552730302">ബൊക്കെ</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ഫയൽ</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">കുരങ്ങൻ</translation> <translation id="4697043402264950621">ആരോഹണ ക്രമത്തിൽ <ph name="COLUMN_NAME" /> അടുക്കിയ ഫയൽ ലിസ്റ്റ്.</translation> <translation id="4711094779914110278">ടര്ക്കിഷ്</translation> +<translation id="4712283082407695269">"<ph name="PATH" />" തുറക്കുന്നു</translation> <translation id="4713544552769165154">ഈ ഫയൽ, Macintosh സോഫ്റ്റ്വെയർ ഉപയോഗിക്കുന്ന ഒരു കമ്പ്യൂട്ടറിനായി രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു. Chrome OS പ്രവർത്തിപ്പിക്കുന്ന നിങ്ങളുടെ ഉപകരണത്തിന് ഇത് അനുയോജ്യമല്ല. അനുയോജ്യമായ മറ്റൊരു ആപ്പിനായി <ph name="BEGIN_LINK" />Chrome വെബ് സ്റ്റോറിൽ<ph name="END_LINK" /> തിരയുക.<ph name="BEGIN_LINK_HELP" />കൂടുതലറിയുക<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> ഫോട്ടോകൾ ബാക്കപ്പുചെയ്തു</translation> <translation id="4725511304875193254">പട്ടിക്കുട്ടി</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">ഒരു പിശക് സംഭവിച്ചു. ചില ഇനങ്ങൾ ഇല്ലാതാക്കാൻ ഇടയില്ല.</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" ഇല്ലാതാക്കുന്നു...</translation> <translation id="6581162200855843583">Google ഡ്രൈവ് ലിങ്ക്</translation> +<translation id="6594855146910089723">Linux-മായും Parallels Desktop-മായും ഈ ഫോൾഡർ പങ്കിട്ടു</translation> <translation id="6607272825297743757">ഫയൽ വിവരം</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> ഫോൾഡറുകൾ Parallels Desktop ഉപയോഗിച്ച് പങ്കിട്ടു</translation> <translation id="6629841649550503054">എല്ലാം <ph name="BEGIN_LINK" />Google ഡ്രൈവിലേക്ക്<ph name="END_LINK" /> ബാക്കപ്പുചെയ്തു!</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index 6980cbd9..b9f8718 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Linux का फाइलहरू खोल्दै...</translation> <translation id="1547964879613821194">क्यानाडाली अंग्रेजी</translation> <translation id="1556189134700913550">सबैमा लागू गर्नुहोस्</translation> +<translation id="1561842594491319104">Chrome यन्त्रहरू</translation> <translation id="1572585716423026576">वालपेपरका रूपमा सेट गर्नुहोस्</translation> <translation id="158809615184981282">फारोइज किबोर्ड</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> पि.बि.</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">ट्रान्सलिटेरेशन (Zdravo → здраво)</translation> <translation id="3067790092342515856">Windows फाइलहरू</translation> <translation id="3078461028045006476"><ph name="EXTENSION_NAME" /> मार्फत सेयर गर्नुहोस्</translation> +<translation id="3083975830683400843">Chromebit</translation> <translation id="3116361045094675131">बेलायत किबोर्ड</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">सम्पन्न भयो</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">अभोकाडो</translation> <translation id="4823651846660089135">यन्त्र पढ्ने-मात्र मोडमा छ</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> वस्तुहरू चयन गरियो</translation> +<translation id="4843566743023903107">Chromebase</translation> <translation id="4849981557599196363">जर्मन (बेल्जियम)</translation> <translation id="4850886885716139402">हेर्नुहोस्</translation> <translation id="485316830061041779">जर्मन</translation> @@ -469,6 +472,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Linux का एपलाई आफ्नो Google ड्राइभमा रहेका फाइलहरू परिमार्जन गर्ने अनुमति दिनुहोस्। परिवर्तनहरू तपाईंका अन्य यन्त्रहरूमा पनि सिंक हुने छन्।</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> वस्तुहरू</translation> +<translation id="5957366693331451795">Chromebox</translation> <translation id="5982621672636444458">विकल्पहरू क्रमबद्ध गर्नुहोस्</translation> <translation id="6005282720244019462">ल्याटिन अमेरिकी किबोर्ड</translation> <translation id="6007237601604674381">सार्ने कार्य असफल भयो। <ph name="ERROR_MESSAGE" /></translation> @@ -628,6 +632,7 @@ <ph name="MARKUP_4" />तपाइँको डाउनलोड फोल्डरबाट फाइलहरू हटाउनुहोस्<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">यन्त्र फर्म्याट गर्नुहोस्</translation> <translation id="7799329977874311193">HTML कागजात</translation> +<translation id="7801354353640549019">Chromebook</translation> <translation id="7805768142964895445">स्थिति</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> फेला पर्यो। <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb index 33030b3e..eb0b84a3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Fransk</translation> <translation id="3254434849914415189">Velg standardapp for <ph name="FILE_TYPE" />-filer:</translation> <translation id="3264582393905923483">Kontekst</translation> +<translation id="3272909651715601089">Kunne ikke åpne «<ph name="PATH" />»</translation> <translation id="3280431534455935878">Forbereder</translation> <translation id="3280987981688031357">Vinylplate</translation> <translation id="3296763833017966289">Georgisk</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Bulgarsk fonetisk</translation> <translation id="4479812471636796472">Amerikansk tastatur (Dvorak)</translation> <translation id="4522570452068850558">Detaljer</translation> +<translation id="4527800702232535228">Denne mappen deles med Parallels Desktop</translation> <translation id="4552678318981539154">Kjøp mer lagringsplass</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Ape</translation> <translation id="4697043402264950621">Fillisten er sortert etter <ph name="COLUMN_NAME" /> i stigende rekkefølge.</translation> <translation id="4711094779914110278">Tyrkisk</translation> +<translation id="4712283082407695269">Åpner «<ph name="PATH" />»</translation> <translation id="4713544552769165154">Denne filen er laget for en datamaskin med Macintosh-programvare. Den er ikke kompatibel med enheten din, som kjører Chrome OS. Du kan søke på <ph name="BEGIN_LINK" />Chrome Nettmarked<ph name="END_LINK" /> etter en passende erstatningsapp.<ph name="BEGIN_LINK_HELP" />Finn ut mer<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> bilder ble sikkerhetskopiert</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Det oppsto en feil. Enkelte elementer ble muligens ikke slettet.</translation> <translation id="656398493051028875">Sletter «<ph name="FILENAME" />» ...</translation> <translation id="6581162200855843583">Google Disk-link</translation> +<translation id="6594855146910089723">Denne mappen deles med Linux og Parallels Desktop</translation> <translation id="6607272825297743757">Filinformasjon</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> mapper er delt med Parallels Desktop</translation> <translation id="6629841649550503054">Alt er sikkerhetskopiert til <ph name="BEGIN_LINK" />Google Disk<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb index 17995ea..7ab681e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Francuski</translation> <translation id="3254434849914415189">Wybierz domyślną aplikację dla plików <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Kontekst</translation> +<translation id="3272909651715601089">Nie udało się otworzyć pliku „<ph name="PATH" />”</translation> <translation id="3280431534455935878">Przygotowywanie</translation> <translation id="3280987981688031357">Płyta winylowa</translation> <translation id="3296763833017966289">Gruziński</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">bułgarska klawiatura fonetyczna</translation> <translation id="4479812471636796472">Klawiatura amerykańska (Dvorak)</translation> <translation id="4522570452068850558">Szczegóły</translation> +<translation id="4527800702232535228">Ten folder jest udostępniany Parallels Desktop</translation> <translation id="4552678318981539154">Kup więcej miejsca</translation> <translation id="4559767610552730302">Boke</translation> <translation id="4572815280350369984">Plik <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Małpa</translation> <translation id="4697043402264950621">Lista plików posortowana według kolumny <ph name="COLUMN_NAME" /> w kolejności rosnącej.</translation> <translation id="4711094779914110278">Turecki</translation> +<translation id="4712283082407695269">Otwieram plik „<ph name="PATH" />”</translation> <translation id="4713544552769165154">Ten plik został opracowany z myślą o komputerach Mac. Jest on niezgodny z Twoim urządzeniem z Chrome OS. Spróbuj znaleźć aplikację zastępczą w <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />. <ph name="BEGIN_LINK_HELP" />Więcej informacji<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Kopie zapasowe <ph name="FILE_COUNT" /> zdjęć zostały utworzone</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Wystąpił błąd. Niektóre elementy mogły nie zostać usunięte.</translation> <translation id="656398493051028875">Usuwam „<ph name="FILENAME" />”...</translation> <translation id="6581162200855843583">Link Dysku Google</translation> +<translation id="6594855146910089723">Ten folder jest udostępniany systemowi Linux i Parallels Desktop</translation> <translation id="6607272825297743757">Informacje o pliku</translation> <translation id="6609332149380188670">Udostępniono foldery (<ph name="NUMBER_OF_ITEMS" />) aplikacji Parallels Desktop</translation> <translation id="6629841649550503054">Kopie zapasowe wszystkich materiałów zostały utworzone na <ph name="BEGIN_LINK" />Dysku Google<ph name="END_LINK" />.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb index 985a870..166fdb26 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Francês</translation> <translation id="3254434849914415189">Escolha o aplicativo padrão para os arquivos <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Contexto</translation> +<translation id="3272909651715601089">Não foi possível abrir "<ph name="PATH" />"</translation> <translation id="3280431534455935878">Preparando</translation> <translation id="3280987981688031357">Disco de vinil</translation> <translation id="3296763833017966289">Georgiano</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Búlgaro fonético</translation> <translation id="4479812471636796472">Teclado americano Dvorak</translation> <translation id="4522570452068850558">Saiba mais</translation> +<translation id="4527800702232535228">Esta pasta está sendo compartilhada com o Parallels Desktop</translation> <translation id="4552678318981539154">Comprar mais espaço</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984">Arquivo <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Macaco</translation> <translation id="4697043402264950621">Lista de arquivos classificada por <ph name="COLUMN_NAME" /> em ordem crescente.</translation> <translation id="4711094779914110278">Turco</translation> +<translation id="4712283082407695269">Abrindo "<ph name="PATH" />"</translation> <translation id="4713544552769165154">Este arquivo foi projetado para um computador que utiliza o software Macintosh. Ele não é compatível com seu dispositivo, que executa o Chrome OS. Procure um app substituto adequado na <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Saiba mais<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Foi realizado o backup de <ph name="FILE_COUNT" /> fotos</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Ocorreu um erro. Alguns itens podem não ter sido excluídos.</translation> <translation id="656398493051028875">Excluindo "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Link do Google Drive</translation> +<translation id="6594855146910089723">Esta pasta está sendo compartilhada com o Linux e o Parallels Desktop</translation> <translation id="6607272825297743757">Informações do arquivo</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> pastas compartilhadas com o Parallels Desktop</translation> <translation id="6629841649550503054">Backup completo para o <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb index bf1fc49d..b1597b9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Francês</translation> <translation id="3254434849914415189">Escolha a aplicação predefinida para ficheiros <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Contexto</translation> +<translation id="3272909651715601089">Não foi possível abrir "<ph name="PATH" />".</translation> <translation id="3280431534455935878">A preparar</translation> <translation id="3280987981688031357">Disco de vinil</translation> <translation id="3296763833017966289">Georgiana</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Fonético búlgaro</translation> <translation id="4479812471636796472">Teclado americano (Dvorak)</translation> <translation id="4522570452068850558">Detalhes</translation> +<translation id="4527800702232535228">Esta pasta é partilhada com o Parallels Desktop.</translation> <translation id="4552678318981539154">Comprar mais armazenamento</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984">Ficheiro <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Macaco</translation> <translation id="4697043402264950621">Lista de ficheiros ordenada por <ph name="COLUMN_NAME" /> por ordem ascendente.</translation> <translation id="4711094779914110278">Turco</translation> +<translation id="4712283082407695269">A abrir "<ph name="PATH" />"…</translation> <translation id="4713544552769165154">Este ficheiro foi concebido para um computador com software Macintosh. Por isso, não é compatível com o seu dispositivo, que utiliza o Chrome OS. Procure na <ph name="BEGIN_LINK" />Web Store do Chrome<ph name="END_LINK" /> uma aplicação de substituição adequada.<ph name="BEGIN_LINK_HELP" />Saiba mais<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Foi feita uma cópia de segurança de <ph name="FILE_COUNT" /> fotos</translation> <translation id="4725511304875193254">Corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Ocorreu um erro. É possível que alguns itens não tenham sido eliminados.</translation> <translation id="656398493051028875">A eliminar "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Link do Google Drive</translation> +<translation id="6594855146910089723">Esta pasta é partilhada com o Linux e o Parallels Desktop.</translation> <translation id="6607272825297743757">Informações do ficheiro</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> pastas partilhadas com o Parallels Desktop.</translation> <translation id="6629841649550503054">Foi feita uma cópia de segurança de todos os ficheiros no <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb index 7a46a17..bbd01ab 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Файлы Linux открываются…</translation> <translation id="1547964879613821194">Канадская (английская)</translation> <translation id="1556189134700913550">Применить ко всем</translation> +<translation id="1561842594491319104">Устройства Chrome</translation> <translation id="1572585716423026576">Установить как обои</translation> <translation id="158809615184981282">Фарерская клавиатура</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> ПБ</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Транслитерация (zdravo → здраво)</translation> <translation id="3067790092342515856">Файлы Windows</translation> <translation id="3078461028045006476">Поделиться с помощью приложения "<ph name="EXTENSION_NAME" />"</translation> +<translation id="3083975830683400843">Устройства Chromebit</translation> <translation id="3116361045094675131">Английская раскладка</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">ГОТОВО</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Авокадо</translation> <translation id="4823651846660089135">Устройство доступно только для чтения</translation> <translation id="4839847978919684242">Выбрано элементов: <ph name="SELCTED_FILES_COUNT" />.</translation> +<translation id="4843566743023903107">Устройства Chromebase</translation> <translation id="4849981557599196363">Немецкий (Бельгия)</translation> <translation id="4850886885716139402">Посмотреть</translation> <translation id="485316830061041779">Немецкий</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Приложения Linux смогут изменять файлы Google Диска. Изменения вступят в силу на всех ваших устройствах.</translation> <translation id="5955954492236143329">Объектов: <ph name="NUMBER_OF_ITEMS" /></translation> +<translation id="5957366693331451795">Устройства Chromebox</translation> <translation id="5982621672636444458">Сортировать</translation> <translation id="6005282720244019462">Латиноамериканская раскладка</translation> <translation id="6007237601604674381">Не удалось выполнить перемещение. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />Удалите файлы из папки "Загрузки".<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Форматировать устройство</translation> <translation id="7799329977874311193">Документ HTML</translation> +<translation id="7801354353640549019">Устройства Chromebook</translation> <translation id="7805768142964895445">Состояние</translation> <translation id="7821462174190887129">Обнаружены файлы (<ph name="FILE_COUNT" />). <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb index 1bd5787..a985c14 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">francoščina</translation> <translation id="3254434849914415189">Izberite privzeto aplikacijo za datoteke <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Kontekst</translation> +<translation id="3272909651715601089">Arhiva »<ph name="PATH" />« ni bilo mogoče odpreti.</translation> <translation id="3280431534455935878">Priprava</translation> <translation id="3280987981688031357">Vinilna plošča</translation> <translation id="3296763833017966289">gruzinščina</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">bolgarščina (fonetična)</translation> <translation id="4479812471636796472">Angleška tipkovnica Dvorak (ZDA)</translation> <translation id="4522570452068850558">Podrobnosti</translation> +<translation id="4527800702232535228">Ta mapa je deljena s programom Parallels Desktop.</translation> <translation id="4552678318981539154">Nakup dodatnega prostora za shranjevanje ...</translation> <translation id="4559767610552730302">Boke</translation> <translation id="4572815280350369984">Datoteka <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Opica</translation> <translation id="4697043402264950621">Seznam datotek, razvrščen glede na <ph name="COLUMN_NAME" />, v naraščajočem vrstnem redu.</translation> <translation id="4711094779914110278">turščina</translation> +<translation id="4712283082407695269">Odpiranje arhiva »<ph name="PATH" />«</translation> <translation id="4713544552769165154">Ta datoteka je zasnovana za računalnik, ki uporablja programsko opremo Macintosh. Ni združljiva z vašo napravo, ki uporablja sistem Chrome OS. Poiščite ustrezno nadomestno aplikacijo v <ph name="BEGIN_LINK" />Spletni trgovini Chrome<ph name="END_LINK" />.<ph name="BEGIN_LINK_HELP" />Več o tem<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Št. varnostno kopiranih fotografij: <ph name="FILE_COUNT" /></translation> <translation id="4725511304875193254">Valižanski ovčar</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Prišlo je do napake. Nekateri elementi morda niso izbrisani.</translation> <translation id="656398493051028875">Brisanje datoteke »<ph name="FILENAME" />« ...</translation> <translation id="6581162200855843583">Povezava Google Drive</translation> +<translation id="6594855146910089723">Ta mapa je deljena z Linuxom in programom Parallels Desktop</translation> <translation id="6607272825297743757">Podatki o datoteki</translation> <translation id="6609332149380188670">Št. map, deljenih s programom Parallels Desktop: <ph name="NUMBER_OF_ITEMS" /></translation> <translation id="6629841649550503054">Vse varnostno kopirano v <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb index cbb7a744..f8e2522 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -205,6 +205,7 @@ <translation id="3252266817569339921">Frëngjisht</translation> <translation id="3254434849914415189">Zgjidh aplikacionin e parazgjedhur për skedarët <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Konteksti</translation> +<translation id="3272909651715601089">Nuk mund të hapej "<ph name="PATH" />"</translation> <translation id="3280431534455935878">Po përgatitet</translation> <translation id="3280987981688031357">Disk gramafoni</translation> <translation id="3296763833017966289">Gjeorgjisht</translation> @@ -307,6 +308,7 @@ <translation id="4477219268485577442">Tastierë fonetike bullgare</translation> <translation id="4479812471636796472">Tastierë amerikane dvorak</translation> <translation id="4522570452068850558">Detajet</translation> +<translation id="4527800702232535228">Kjo dosje është ndarë me Parallels Desktop</translation> <translation id="4552678318981539154">Bli më shumë hapësirë ruajtëse</translation> <translation id="4559767610552730302">Efekti i turbullimit</translation> <translation id="4572815280350369984">Skedar <ph name="FILE_TYPE" /></translation> @@ -324,6 +326,7 @@ <translation id="4694604912444486114">Majmun</translation> <translation id="4697043402264950621">Lista e skedarëve është renditur sipas kolonës "<ph name="COLUMN_NAME" />" në rend rritës.</translation> <translation id="4711094779914110278">Turqisht</translation> +<translation id="4712283082407695269">Po hap "<ph name="PATH" />"</translation> <translation id="4713544552769165154">Ky skedar është i projektuar për kompjuterë që përdorin softuer të Macintosh. Kjo nuk përputhet me pajisjen tënde që punon me sistemin operativ Chrome. Kërko në <ph name="BEGIN_LINK" />Dyqanin ueb të Chrome<ph name="END_LINK" /> për një aplikacion të përshtatshëm zëvendësues.<ph name="BEGIN_LINK_HELP" />Mëso më shumë<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> fotografi u rezervuan</translation> <translation id="4725511304875193254">Korgi</translation> @@ -520,6 +523,7 @@ <translation id="6558280019477628686">Ndodhi një gabim. Disa artikuj mund të mos jenë fshirë.</translation> <translation id="656398493051028875">Po fshin "<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Lidhja e "Diskut të Google"</translation> +<translation id="6594855146910089723">Kjo dosje është ndarë me Linux dhe Parallels Desktop</translation> <translation id="6607272825297743757">Informacioni i skedarit</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> dosje të ndara me Parallels Desktop</translation> <translation id="6629841649550503054">Të gjitha u rezervuan te <ph name="BEGIN_LINK" />Disku i Google!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb index 45bb7c8e1..0ee95c9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">francuski</translation> <translation id="3254434849914415189">Izaberite podrazumevanu aplikaciju za datoteke <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Kontekst</translation> +<translation id="3272909651715601089">Nije uspelo otvaranje fajla „<ph name="PATH" />“</translation> <translation id="3280431534455935878">Priprema</translation> <translation id="3280987981688031357">Gramofonska ploča</translation> <translation id="3296763833017966289">gruzijski</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">bugarska fonetska</translation> <translation id="4479812471636796472">Jezik tastature: engleski (SAD dvorak)</translation> <translation id="4522570452068850558">Detalji</translation> +<translation id="4527800702232535228">Ovaj folder se deli pomoću Parallels Desktop-a</translation> <translation id="4552678318981539154">Kupi još memorijskog prostora</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984">Datoteka <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Majmun</translation> <translation id="4697043402264950621">Lista datoteka je sortirana po rastućem redosledu po kriterijumu <ph name="COLUMN_NAME" />.</translation> <translation id="4711094779914110278">turski</translation> +<translation id="4712283082407695269">Otvara se „<ph name="PATH" />“</translation> <translation id="4713544552769165154">Ova datoteka je dizajnirana za računar koji koristi Macintosh softver. Ona nije kompatibilna sa vašim uređajem koji koristi Chrome OS. Pretražite <ph name="BEGIN_LINK" />Chrome veb-prodavnicu<ph name="END_LINK" /> da biste pronašli odgovarajuću aplikaciju za zamenu.<ph name="BEGIN_LINK_HELP" />Saznajte više<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Napravljena je rezervna kopija slika (<ph name="FILE_COUNT" />)</translation> <translation id="4725511304875193254">Korgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Došlo je do greške. Neke stavke možda nisu izbrisane.</translation> <translation id="656398493051028875">Brisanje „<ph name="FILENAME" />“...</translation> <translation id="6581162200855843583">Veza Google diska</translation> +<translation id="6594855146910089723">Ovaj folder se deli pomoću Linux-a i Parallels Desktop-a</translation> <translation id="6607272825297743757">Informacije o datoteci</translation> <translation id="6609332149380188670">Direktorijumi (<ph name="NUMBER_OF_ITEMS" />) se dele sa Parallels Desktop-om</translation> <translation id="6629841649550503054">Rezervne kopije svih datoteka su napravljene na <ph name="BEGIN_LINK" />Google disku!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb index 6eba71b5a..7b4d6e6 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">француски</translation> <translation id="3254434849914415189">Изаберите подразумевану апликацију за датотеке <ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Контекст</translation> +<translation id="3272909651715601089">Није успело отварање фајла „<ph name="PATH" />“</translation> <translation id="3280431534455935878">Припрема</translation> <translation id="3280987981688031357">Грамофонска плоча</translation> <translation id="3296763833017966289">грузијски</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">бугарска фонетска</translation> <translation id="4479812471636796472">Језик тастатуре: енглески (САД дворак)</translation> <translation id="4522570452068850558">Детаљи</translation> +<translation id="4527800702232535228">Овај фолдер се дели помоћу Parallels Desktop-а</translation> <translation id="4552678318981539154">Купи још меморијског простора</translation> <translation id="4559767610552730302">Бокех</translation> <translation id="4572815280350369984">Датотека <ph name="FILE_TYPE" /></translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Мајмун</translation> <translation id="4697043402264950621">Листа датотека је сортирана по растућем редоследу по критеријуму <ph name="COLUMN_NAME" />.</translation> <translation id="4711094779914110278">турски</translation> +<translation id="4712283082407695269">Отвара се „<ph name="PATH" />“</translation> <translation id="4713544552769165154">Ова датотека је дизајнирана за рачунар који користи Macintosh софтвер. Она није компатибилна са вашим уређајем који користи Chrome ОС. Претражите <ph name="BEGIN_LINK" />Chrome веб-продавницу<ph name="END_LINK" /> да бисте пронашли одговарајућу апликацију за замену.<ph name="BEGIN_LINK_HELP" />Сазнајте више<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449">Направљена је резервна копија слика (<ph name="FILE_COUNT" />)</translation> <translation id="4725511304875193254">Корги</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Дошло је до грешке. Неке ставке можда нису избрисане.</translation> <translation id="656398493051028875">Брисање „<ph name="FILENAME" />“...</translation> <translation id="6581162200855843583">Веза Google диска</translation> +<translation id="6594855146910089723">Овај фолдер се дели помоћу Linux-а и Parallels Desktop-а</translation> <translation id="6607272825297743757">Информације о датотеци</translation> <translation id="6609332149380188670">Директоријуми (<ph name="NUMBER_OF_ITEMS" />) се деле са Parallels Desktop-ом</translation> <translation id="6629841649550503054">Резервне копије свих датотека су направљене на <ph name="BEGIN_LINK" />Google диску!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb index d7647dc..7c642d9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">franska</translation> <translation id="3254434849914415189">Välj standardapp för <ph name="FILE_TYPE" />-filer:</translation> <translation id="3264582393905923483">Sammanhang</translation> +<translation id="3272909651715601089">Det gick inte att öppna <ph name="PATH" /></translation> <translation id="3280431534455935878">Förbereder</translation> <translation id="3280987981688031357">Vinylskiva</translation> <translation id="3296763833017966289">georgiska</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Bulgariska (fonetiskt)</translation> <translation id="4479812471636796472">Dvorak-tangentbord för USA</translation> <translation id="4522570452068850558">Info</translation> +<translation id="4527800702232535228">Den här mappen delas med Parallels Desktop</translation> <translation id="4552678318981539154">Köp mer lagringsutrymme</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" />-fil</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Apa</translation> <translation id="4697043402264950621">Fillistan har sorterats efter <ph name="COLUMN_NAME" /> i stigande ordning.</translation> <translation id="4711094779914110278">turkiska</translation> +<translation id="4712283082407695269">Öppnar <ph name="PATH" /></translation> <translation id="4713544552769165154">Den här filen är avsedd för en Macintosh. Den är inte kompatibel med Chrome OS, det operativsystem som körs på din enhet. Sök på <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /> efter en lämplig app att använda i stället.<ph name="BEGIN_LINK_HELP" />Läs mer<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> foton har säkerhetskopierats</translation> <translation id="4725511304875193254">Welsh corgi</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">Ett fel uppstod. Vissa objekt kanske inte har raderats.</translation> <translation id="656398493051028875"><ph name="FILENAME" /> tas bort ...</translation> <translation id="6581162200855843583">Google Drive-länk</translation> +<translation id="6594855146910089723">Den här mappen delas med Linux och Parallels Desktop</translation> <translation id="6607272825297743757">Filinformation</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> mappar delas med Parallels Desktop</translation> <translation id="6629841649550503054">Allt har säkerhetskopierats på <ph name="BEGIN_LINK" />Google Drive!<ph name="END_LINK" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb index a23f9ba..f9a61ced 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">பிரெஞ்ச்</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> கோப்புகளுக்கான இயல்புநிலை பயன்பாட்டைத் தேர்வுசெய்:</translation> <translation id="3264582393905923483">சூழல்</translation> +<translation id="3272909651715601089">"<ph name="PATH" />" காப்பகத்தைத் திறக்க முடியவில்லை</translation> <translation id="3280431534455935878">தயாராகிறது</translation> <translation id="3280987981688031357">வினைல் ரெக்கார்டு</translation> <translation id="3296763833017966289">ஜார்ஜியன்</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">பல்கேரியன் ஒலிப்புமுறை</translation> <translation id="4479812471636796472">அமெரிக்க துவோரக் விசைப்பலகை</translation> <translation id="4522570452068850558">விவரங்கள்</translation> +<translation id="4527800702232535228">Parallels Desktopபுடன் இந்தக் கோப்புறை பகிரப்பட்டது</translation> <translation id="4552678318981539154">கூடுதல் சேமிப்பிடத்தை வாங்கு</translation> <translation id="4559767610552730302">பொக்கே</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> கோப்பு</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">குரங்கு</translation> <translation id="4697043402264950621"><ph name="COLUMN_NAME" /> அடிப்படையில் கோப்புப் பட்டியல் ஏறு வரிசையில் காட்டப்பட்டுள்ளது.</translation> <translation id="4711094779914110278">டர்கிஷ்</translation> +<translation id="4712283082407695269">"<ph name="PATH" />" காப்பகத்தைத் திறக்கிறது</translation> <translation id="4713544552769165154">Macintosh மென்பொருள் பயன்படுத்தும் கம்ப்யூட்டருக்காக இந்தக் கோப்பு வடிவமைக்கப்பட்டது. இது Chrome OSஸில் இயங்கும் உங்கள் சாதனத்திற்கு ஏற்றதல்ல. சரியான மாற்று ஆப்ஸிற்கு <ph name="BEGIN_LINK" />Chrome இணைய அங்காடியில்<ph name="END_LINK" /> தேடவும்.<ph name="BEGIN_LINK_HELP" />மேலும் அறிக<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> படங்கள் காப்புப் பிரதி எடுக்கப்பட்டன</translation> <translation id="4725511304875193254">கோர்கி</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">பிழை ஏற்பட்டது. சில உருப்படிகள் நீக்கப்படாமல் இருக்கக்கூடும்.</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" ஐ நீக்குகிறது...</translation> <translation id="6581162200855843583">Google இயக்கக இணைப்பு</translation> +<translation id="6594855146910089723">Linux, Parallels Desktop ஆகியவற்றுடன் இந்தக் கோப்புறை பகிரப்பட்டது</translation> <translation id="6607272825297743757">கோப்புத் தகவல்</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> கோப்புறைகள் Parallels Desktop உடன் பகிரப்பட்டன</translation> <translation id="6629841649550503054">எல்லாம் <ph name="BEGIN_LINK" />Google இயக்ககத்தில்<ph name="END_LINK" /> காப்புப் பிரதி எடுக்கப்பட்டன</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index cd50cbe3..fa8305b94 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Linux ఫైల్లను తెరుస్తోంది...</translation> <translation id="1547964879613821194">కెనడియన్ ఆంగ్లం</translation> <translation id="1556189134700913550">అన్నింటికీ వర్తింపజేయి</translation> +<translation id="1561842594491319104">Chrome పరికరాలు</translation> <translation id="1572585716423026576">వాల్పేపర్గా సెట్ చేయి</translation> <translation id="158809615184981282">ఫారోస్ కీబోర్డ్</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">లిప్యంతరీకరణ (zdravo → здраво)</translation> <translation id="3067790092342515856">Windows ఫైల్లు</translation> <translation id="3078461028045006476"><ph name="EXTENSION_NAME" />తో భాగస్వామ్యం చేయండి</translation> +<translation id="3083975830683400843">Chromebitలు</translation> <translation id="3116361045094675131">UK కీబోర్డ్</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">పూర్తయింది</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">వెన్నపండు</translation> <translation id="4823651846660089135">పరికరం చదవడానికి మాత్రమే</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> అంశాలు ఎంచుకోబడ్డాయి</translation> +<translation id="4843566743023903107">Chromebaseలు</translation> <translation id="4849981557599196363">జర్మన్ (బెల్జియం)</translation> <translation id="4850886885716139402">వీక్షణ</translation> <translation id="485316830061041779">జర్మన్</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">మీ Google డిస్క్లోని ఫైల్లను సవరించడానికి Linux యాప్లకు అనుమతి ఇవ్వండి. మార్పులు మీ ఇతర పరికరాలలో సమకాలీకరించబడతాయి.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> అంశాలు</translation> +<translation id="5957366693331451795">Chromeboxలు</translation> <translation id="5982621672636444458">క్రమబద్ధీకరణ ఎంపికలు</translation> <translation id="6005282720244019462">లాటిన్ అమెరికన్ కీబోర్డ్</translation> <translation id="6007237601604674381">తరలింపు విఫలమైంది. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />మీ డౌన్లోడ్ల ఫోల్డర్ నుండి ఫైల్లను తొలగించండి<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">ఈ పరికరాన్ని ఫార్మాట్ చేయి</translation> <translation id="7799329977874311193">HTML పత్రం</translation> +<translation id="7801354353640549019">Chromebookలు</translation> <translation id="7805768142964895445">స్థితి</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> కనుగొనబడ్డాయి. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb index 78d8a1c2..a5e024af 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Linux dosyaları açılıyor...</translation> <translation id="1547964879613821194">Kanada İngilizcesi</translation> <translation id="1556189134700913550">Tümüne uygula</translation> +<translation id="1561842594491319104">Chrome cihazlar</translation> <translation id="1572585716423026576">Duvar kağıdı yap</translation> <translation id="158809615184981282">Faroece klavye</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Harf çevirisi (zdravo → здраво)</translation> <translation id="3067790092342515856">Windows dosyaları</translation> <translation id="3078461028045006476"><ph name="EXTENSION_NAME" /> ile paylaş</translation> +<translation id="3083975830683400843">Chromebit'ler</translation> <translation id="3116361045094675131">İngilizce klavye</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">BİTTİ</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Avokado</translation> <translation id="4823651846660089135">Cihaz salt okunur</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> öğe seçildi</translation> +<translation id="4843566743023903107">Chromebase'ler</translation> <translation id="4849981557599196363">Almanca (Belçika)</translation> <translation id="4850886885716139402">Görüntüle</translation> <translation id="485316830061041779">Almanca</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Linux uygulamalarına Google Drive'ınızdaki dosyaları değiştirme izni verin. Değişiklikler, diğer cihazlarınızla senkronize edilecektir.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> öğe</translation> +<translation id="5957366693331451795">Chromebox'lar</translation> <translation id="5982621672636444458">Sıralama seçenekleri</translation> <translation id="6005282720244019462">Latin Amerika klavyesi</translation> <translation id="6007237601604674381">Taşıma başarısız oldu. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />İndirilenler klasörünüzdeki dosyaları silin<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Cihazı biçimlendir</translation> <translation id="7799329977874311193">HTML dokümanı</translation> +<translation id="7801354353640549019">Chromebook'lar</translation> <translation id="7805768142964895445">Durum</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> bulundu. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb index 8e1e76f..1e0a7ab 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Linux fayllari ochilmoqda...</translation> <translation id="1547964879613821194">Kanada (Ingliz)</translation> <translation id="1556189134700913550">Barchasiga qo‘llash</translation> +<translation id="1561842594491319104">Chrome qurilmalari</translation> <translation id="1572585716423026576">Fon rasmi sifatida belgilash</translation> <translation id="158809615184981282">Farer klaviaturasi</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Transliteratsiya (zdravo → здраво)</translation> <translation id="3067790092342515856">Windows fayllari</translation> <translation id="3078461028045006476"><ph name="EXTENSION_NAME" /> orqali yuborish</translation> +<translation id="3083975830683400843">Chromebit qurilmalari</translation> <translation id="3116361045094675131">Ingliz (Birlashgan Qirollik)</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">TAYYOR</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Avokado</translation> <translation id="4823651846660089135">Qurilma faqat o‘qish rejimida</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> ta element tanlandi</translation> +<translation id="4843566743023903107">Chromebase qurilmalari</translation> <translation id="4849981557599196363">Nemis (Belgiya)</translation> <translation id="4850886885716139402">Ko‘rish</translation> <translation id="485316830061041779">Nemis</translation> @@ -469,6 +472,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Linux ilovalarga Google Drive omboringizdagi fayllarni ochishga ruxsat bering. Oʻzgarishlar boshqa qurilmalaringizga sinxronlanadi.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> ta obyekt</translation> +<translation id="5957366693331451795">Chromeboxe qurilmalari</translation> <translation id="5982621672636444458">Saralash</translation> <translation id="6005282720244019462">Lotin Amerikasi klaviaturasi</translation> <translation id="6007237601604674381">Ko‘chirib bo‘lmadi. <ph name="ERROR_MESSAGE" /></translation> @@ -628,6 +632,7 @@ <ph name="MARKUP_4" />Yuklanishlar jildidagi fayllarni o‘chirib tashlang<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Qurilmani formatlash</translation> <translation id="7799329977874311193">HTML hujjat</translation> +<translation id="7801354353640549019">Chromebook qurilmalari</translation> <translation id="7805768142964895445">Holat</translation> <translation id="7821462174190887129"><ph name="FILE_COUNT" /> topildi. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb index 3ca5ac72..3a1e1b86 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -60,6 +60,7 @@ <translation id="1538729222189715449">Đang mở tệp Linux...</translation> <translation id="1547964879613821194">Tiếng Anh ở Canada</translation> <translation id="1556189134700913550">Áp dụng cho tất cả</translation> +<translation id="1561842594491319104">Thiết bị Chrome</translation> <translation id="1572585716423026576">Đặt làm hình nền</translation> <translation id="158809615184981282">Bàn phím dành cho tiếng Faroe</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation> @@ -189,6 +190,7 @@ <translation id="3064388234319122767">Chuyển ngữ (zdravo → здраво)</translation> <translation id="3067790092342515856">Tệp Windows</translation> <translation id="3078461028045006476">Chia sẻ với <ph name="EXTENSION_NAME" /></translation> +<translation id="3083975830683400843">Chromebit</translation> <translation id="3116361045094675131">Bàn phím Vương quốc Anh</translation> <translation id="3126026824346185272">Ctrl</translation> <translation id="3144126448740580210">XONG</translation> @@ -341,6 +343,7 @@ <translation id="4804827417948292437">Quả bơ</translation> <translation id="4823651846660089135">Thiết bị chỉ đọc</translation> <translation id="4839847978919684242"><ph name="SELCTED_FILES_COUNT" /> mục được chọn</translation> +<translation id="4843566743023903107">Chromebase</translation> <translation id="4849981557599196363">Tiếng Đức (Bỉ)</translation> <translation id="4850886885716139402">Xem</translation> <translation id="485316830061041779">Tiếng Đức</translation> @@ -470,6 +473,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Cấp cho các ứng dụng Linux quyền sửa đổi tệp trong Google Drive. Các mục thay đổi sẽ đồng bộ hóa với những thiết bị khác của bạn.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> mục</translation> +<translation id="5957366693331451795">Chromebox</translation> <translation id="5982621672636444458">Tùy chọn sắp xếp</translation> <translation id="6005282720244019462">Bàn phím tiếng Mỹ Latinh</translation> <translation id="6007237601604674381">Di chuyển không thành công. <ph name="ERROR_MESSAGE" /></translation> @@ -629,6 +633,7 @@ <ph name="MARKUP_4" />xóa các tệp khỏi thư mục Tải xuống của bạn<ph name="MARKUP_5" /></translation> <translation id="7794058097940213561">Định dạng thiết bị</translation> <translation id="7799329977874311193">Tài liệu HTML</translation> +<translation id="7801354353640549019">Chromebook</translation> <translation id="7805768142964895445">Trạng thái</translation> <translation id="7821462174190887129">Đã tìm thấy <ph name="FILE_COUNT" />. <ph name="LINE_BREAK1" />
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb index 2b48554..a7e3e9e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">Isi-French</translation> <translation id="3254434849914415189">Khetha uhlelo lokusebenza oluzenzakalelayo lwamafayela we-<ph name="FILE_TYPE" />:</translation> <translation id="3264582393905923483">Okuqukethwe</translation> +<translation id="3272909651715601089">Ayikwazanga ukuvula i-"<ph name="PATH" />"</translation> <translation id="3280431534455935878">Iyalungiselela</translation> <translation id="3280987981688031357">Irekhodi levayinali</translation> <translation id="3296763833017966289">Isi-Georgian</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">Ifonethikhi yesi-Bulgarian</translation> <translation id="4479812471636796472">Ikhibhodi ye-US Dvorak</translation> <translation id="4522570452068850558">Imininingwane</translation> +<translation id="4527800702232535228">Le folda yabiwa Nedeskithophu ye-Parallels</translation> <translation id="4552678318981539154">Thenga isitoreji esiningi</translation> <translation id="4559767610552730302">I-Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ifayela</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">Inkawu</translation> <translation id="4697043402264950621">Uhlu lwefayela luhlungwe nge-<ph name="COLUMN_NAME" /> nge-oda elikhuphukayo.</translation> <translation id="4711094779914110278">Isi-Turkish</translation> +<translation id="4712283082407695269">Ivula i-"<ph name="PATH" />"</translation> <translation id="4713544552769165154">Leli fayela lakhelwe ikhompyutha esebenzisa isofthiwe ye-Macintosh. Lokhu akusebenzisani nedivayisi yakho esebenzisa i-Chrome OS. Sicela useshe <ph name="BEGIN_LINK" />Isitolo sewebhu se-Chrome<ph name="END_LINK" /> ngohlelo lokusebenza olufanele lokumiselela.<ph name="BEGIN_LINK_HELP" />Funda kabanzi<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> izithombe ezenziwe isipele</translation> <translation id="4725511304875193254">I-Corgi</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">Kuvele iphutha. Ezinye izinto kungenzeka azisuswanga.</translation> <translation id="656398493051028875">Isusa i-"<ph name="FILENAME" />"...</translation> <translation id="6581162200855843583">Isixhumanisi se-Google Drayivu</translation> +<translation id="6594855146910089723">Le folda yabiwa ne-Linux kanye Nedeskithophu ye-Parallels</translation> <translation id="6607272825297743757">Ulwazi lwefayela</translation> <translation id="6609332149380188670">amafolda angu-<ph name="NUMBER_OF_ITEMS" /> abelenwe ne-Parallels Desktop</translation> <translation id="6629841649550503054">Konke kwenziwe isipele ku-<ph name="BEGIN_LINK" />Google Drayivu!<ph name="END_LINK" /></translation>
diff --git a/ui/message_center/views/notification_view_md.cc b/ui/message_center/views/notification_view_md.cc index 2a8f16f5..ea6410c4 100644 --- a/ui/message_center/views/notification_view_md.cc +++ b/ui/message_center/views/notification_view_md.cc
@@ -55,6 +55,7 @@ #include "ui/views/focus/focus_manager.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/native_cursor.h" #include "ui/views/style/typography.h" #include "ui/views/widget/widget.h"
diff --git a/ui/native_theme/native_theme_win.cc b/ui/native_theme/native_theme_win.cc index 95095614..02cc2133 100644 --- a/ui/native_theme/native_theme_win.cc +++ b/ui/native_theme/native_theme_win.cc
@@ -11,6 +11,7 @@ #include <vssym32.h> #include "base/bind.h" +#include "base/callback.h" #include "base/check.h" #include "base/command_line.h" #include "base/notreached.h"
diff --git a/ui/ozone/platform/scenic/sysmem_buffer_collection.cc b/ui/ozone/platform/scenic/sysmem_buffer_collection.cc index 398300e..767cf08 100644 --- a/ui/ozone/platform/scenic/sysmem_buffer_collection.cc +++ b/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
@@ -441,7 +441,9 @@ vk_image_info->tiling = is_mappable() ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TILING_OPTIMAL; - vk_image_info->usage = VK_IMAGE_USAGE_SAMPLED_BIT; + vk_image_info->usage = VK_IMAGE_USAGE_SAMPLED_BIT | + VK_IMAGE_USAGE_TRANSFER_SRC_BIT | + VK_IMAGE_USAGE_TRANSFER_DST_BIT; if (usage_ == gfx::BufferUsage::SCANOUT || usage_ == gfx::BufferUsage::SCANOUT_CPU_READ_WRITE) { vk_image_info->usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate.h b/ui/views/accessibility/view_ax_platform_node_delegate.h index 923e54a..f4ba9a4 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate.h +++ b/ui/views/accessibility/view_ax_platform_node_delegate.h
@@ -87,13 +87,10 @@ base::Optional<bool> GetTableHasColumnOrRowHeaderNode() const override; std::vector<int32_t> GetColHeaderNodeIds() const override; std::vector<int32_t> GetColHeaderNodeIds(int col_index) const override; - - // Ordered-set-like and item-like nodes. bool IsOrderedSetItem() const override; bool IsOrderedSet() const override; base::Optional<int> GetPosInSet() const override; base::Optional<int> GetSetSize() const override; - void SetPopupFocusOverride() override; void EndPopupFocusOverride() override; bool IsFocusedForTesting() override;
diff --git a/ui/views/accessible_pane_view.cc b/ui/views/accessible_pane_view.cc index 9bbcda8..fa9a820 100644 --- a/ui/views/accessible_pane_view.cc +++ b/ui/views/accessible_pane_view.cc
@@ -9,6 +9,7 @@ #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node_data.h" #include "ui/views/focus/focus_search.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_tracker.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/animation/ink_drop_host_view.cc b/ui/views/animation/ink_drop_host_view.cc index 590ae89..6b66522 100644 --- a/ui/views/animation/ink_drop_host_view.cc +++ b/ui/views/animation/ink_drop_host_view.cc
@@ -19,6 +19,7 @@ #include "ui/views/animation/square_ink_drop_ripple.h" #include "ui/views/controls/focus_ring.h" #include "ui/views/controls/highlight_path_generator.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/view_class_properties.h"
diff --git a/ui/views/bubble/bubble_dialog_delegate_view.cc b/ui/views/bubble/bubble_dialog_delegate_view.cc index 6e2593fc..89a41ffe 100644 --- a/ui/views/bubble/bubble_dialog_delegate_view.cc +++ b/ui/views/bubble/bubble_dialog_delegate_view.cc
@@ -24,6 +24,7 @@ #include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/layout/layout_manager.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" #include "ui/views/views_features.h" #include "ui/views/widget/widget.h" @@ -408,11 +409,6 @@ client_view_->layer()->SetIsFastRoundedCorner(true); } - if (fixed_width_) { - // TODO(pbos): Make sure this reacts to or NOTREACHED()s changes to margins. - client_view_->set_fixed_width(fixed_width_ - margins().width()); - } - return client_view_; } @@ -533,12 +529,6 @@ UpdateHighlightedButton(true); } -void BubbleDialogDelegate::SetFixedWidth(int width) { - // SetFixedWidth should be called before |client_view_| is created. - DCHECK(!client_view_); - fixed_width_ = width; -} - void BubbleDialogDelegate::SetArrow(BubbleBorder::Arrow arrow) { SetArrowWithoutResizing(arrow); // If SetArrow() is called before CreateWidget(), there's no need to update
diff --git a/ui/views/bubble/bubble_dialog_delegate_view.h b/ui/views/bubble/bubble_dialog_delegate_view.h index a05f22b..bd9cc7b0 100644 --- a/ui/views/bubble/bubble_dialog_delegate_view.h +++ b/ui/views/bubble/bubble_dialog_delegate_view.h
@@ -174,10 +174,6 @@ // view. void SetHighlightedButton(Button* highlighted_button); - // Set a fixed width for the dialog. The client view will size itself to - // preferred height for this width, minus dialog margins. - void SetFixedWidth(int width); - // The bubble's parent window - this can only be usefully set before creating // the bubble's widget. If there is one, the bubble will be stacked above it, // and it will become the Views parent window for the bubble. @@ -339,9 +335,6 @@ bool focus_traversable_from_anchor_view_ = true; ViewTracker highlighted_button_tracker_; - // Use a fixed dialog width instead of the |client_view_| preferred size. - int fixed_width_ = 0; - // Insets applied to the |anchor_view_| bounds. gfx::Insets anchor_view_insets_;
diff --git a/ui/views/bubble/bubble_dialog_model_host.cc b/ui/views/bubble/bubble_dialog_model_host.cc index b251773..c8221491 100644 --- a/ui/views/bubble/bubble_dialog_model_host.cc +++ b/ui/views/bubble/bubble_dialog_model_host.cc
@@ -19,6 +19,7 @@ #include "ui/views/layout/box_layout.h" #include "ui/views/layout/grid_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views { namespace { @@ -152,7 +153,7 @@ set_close_on_deactivate(model_->close_on_deactivate(GetPassKey())); - SetFixedWidth(LayoutProvider::Get()->GetDistanceMetric( + set_fixed_width(LayoutProvider::Get()->GetDistanceMetric( anchor_view ? views::DISTANCE_BUBBLE_PREFERRED_WIDTH : views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH));
diff --git a/ui/views/bubble/footnote_container_view.cc b/ui/views/bubble/footnote_container_view.cc index 7f321e4..4c4f2c5 100644 --- a/ui/views/bubble/footnote_container_view.cc +++ b/ui/views/bubble/footnote_container_view.cc
@@ -15,6 +15,7 @@ #include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/layout/box_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/bubble/info_bubble.cc b/ui/views/bubble/info_bubble.cc index b0a6701f..76ffbef1 100644 --- a/ui/views/bubble/info_bubble.cc +++ b/ui/views/bubble/info_bubble.cc
@@ -15,6 +15,7 @@ #include "ui/views/controls/label.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" namespace views {
diff --git a/ui/views/bubble/tooltip_icon.cc b/ui/views/bubble/tooltip_icon.cc index c1625ec..fa42d321 100644 --- a/ui/views/bubble/tooltip_icon.cc +++ b/ui/views/bubble/tooltip_icon.cc
@@ -11,6 +11,7 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/bubble/info_bubble.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/mouse_watcher_view_host.h" namespace views {
diff --git a/ui/views/controls/button/button.cc b/ui/views/controls/button/button.cc index b6d2547..11cfaf00 100644 --- a/ui/views/controls/button/button.cc +++ b/ui/views/controls/button/button.cc
@@ -27,6 +27,7 @@ #include "ui/views/controls/button/radio_button.h" #include "ui/views/controls/button/toggle_button.h" #include "ui/views/controls/focus_ring.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/painter.h" #include "ui/views/style/platform_style.h"
diff --git a/ui/views/controls/button/menu_button.cc b/ui/views/controls/button/menu_button.cc index a0c9afd..da771b0 100644 --- a/ui/views/controls/button/menu_button.cc +++ b/ui/views/controls/button/menu_button.cc
@@ -10,6 +10,7 @@ #include "ui/events/event.h" #include "ui/views/controls/button/button_controller_delegate.h" #include "ui/views/controls/button/menu_button_controller.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/button/radio_button.cc b/ui/views/controls/button/radio_button.cc index efa7faa..53fbed91 100644 --- a/ui/views/controls/button/radio_button.cc +++ b/ui/views/controls/button/radio_button.cc
@@ -11,6 +11,7 @@ #include "ui/events/event_utils.h" #include "ui/gfx/canvas.h" #include "ui/gfx/paint_vector_icon.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/resources/grit/views_resources.h" #include "ui/views/vector_icons.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc index 5757613f..fea92c6 100644 --- a/ui/views/controls/combobox/combobox.cc +++ b/ui/views/controls/combobox/combobox.cc
@@ -318,7 +318,12 @@ } } -void Combobox::SetTooltipText(const base::string16& tooltip_text) { +base::string16 Combobox::GetTooltipTextAndAccessibleName() const { + return arrow_button_->GetTooltipText(); +} + +void Combobox::SetTooltipTextAndAccessibleName( + const base::string16& tooltip_text) { arrow_button_->SetTooltipText(tooltip_text); if (accessible_name_.empty()) accessible_name_ = tooltip_text; @@ -716,6 +721,7 @@ ADD_PROPERTY_METADATA(bool, Invalid) ADD_PROPERTY_METADATA(bool, SizeToLargestLabel) ADD_PROPERTY_METADATA(base::string16, AccessibleName) +ADD_PROPERTY_METADATA(base::string16, TooltipTextAndAccessibleName) END_METADATA } // namespace views
diff --git a/ui/views/controls/combobox/combobox.h b/ui/views/controls/combobox/combobox.h index b13f3a3..3fbab64 100644 --- a/ui/views/controls/combobox/combobox.h +++ b/ui/views/controls/combobox/combobox.h
@@ -16,6 +16,7 @@ #include "ui/base/models/combobox_model_observer.h" #include "ui/views/controls/button/button.h" #include "ui/views/controls/prefix_delegate.h" +#include "ui/views/metadata/view_factory.h" #include "ui/views/style/typography.h" namespace gfx { @@ -81,8 +82,10 @@ ui::ComboboxModel* model() const { return model_; } - // Set the tooltip text, and the accessible name if it is currently empty. - void SetTooltipText(const base::string16& tooltip_text); + // Gets/Sets the tooltip text, and the accessible name if it is currently + // empty. + base::string16 GetTooltipTextAndAccessibleName() const; + void SetTooltipTextAndAccessibleName(const base::string16& tooltip_text); // Set the accessible name of the combobox. void SetAccessibleName(const base::string16& name); @@ -223,6 +226,14 @@ DISALLOW_COPY_AND_ASSIGN(Combobox); }; +BEGIN_VIEW_BUILDER(VIEWS_EXPORT, Combobox, View) +VIEW_BUILDER_PROPERTY(int, SelectedIndex) +VIEW_BUILDER_PROPERTY(bool, Invalid) +VIEW_BUILDER_PROPERTY(bool, SizeToLargestLabel) +VIEW_BUILDER_PROPERTY(base::string16, AccessibleName) +VIEW_BUILDER_PROPERTY(base::string16, TooltipTextAndAccessibleName) +END_VIEW_BUILDER(VIEWS_EXPORT, Combobox) + } // namespace views #endif // UI_VIEWS_CONTROLS_COMBOBOX_COMBOBOX_H_
diff --git a/ui/views/controls/combobox/combobox_unittest.cc b/ui/views/controls/combobox/combobox_unittest.cc index 4be54a4..3cb55f5a 100644 --- a/ui/views/controls/combobox/combobox_unittest.cc +++ b/ui/views/controls/combobox/combobox_unittest.cc
@@ -830,13 +830,14 @@ EXPECT_TRUE(menu_model->IsVisibleAt(0)); } -// Verifies setting the tooltip text will call NotifyAccessibilityEvent. +// Verifies SetTooltipTextAndAccessibleName will call NotifyAccessibilityEvent. TEST_F(ComboboxTest, SetTooltipTextNotifiesAccessibilityEvent) { InitCombobox(nullptr); base::string16 test_tooltip_text = ASCIIToUTF16("Test Tooltip Text"); test::AXEventCounter counter(AXEventManager::Get()); EXPECT_EQ(0, counter.GetCount(ax::mojom::Event::kTextChanged)); - combobox_->SetTooltipText(test_tooltip_text); + combobox_->SetTooltipTextAndAccessibleName(test_tooltip_text); + EXPECT_EQ(test_tooltip_text, combobox_->GetTooltipTextAndAccessibleName()); EXPECT_EQ(1, counter.GetCount(ax::mojom::Event::kTextChanged)); EXPECT_EQ(test_tooltip_text, combobox_->GetAccessibleName()); ui::AXNodeData data;
diff --git a/ui/views/controls/editable_combobox/editable_combobox.cc b/ui/views/controls/editable_combobox/editable_combobox.cc index a1c221b..3700e17 100644 --- a/ui/views/controls/editable_combobox/editable_combobox.cc +++ b/ui/views/controls/editable_combobox/editable_combobox.cc
@@ -52,6 +52,7 @@ #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/layout_manager.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/style/typography.h" #include "ui/views/view.h"
diff --git a/ui/views/controls/focus_ring.cc b/ui/views/controls/focus_ring.cc index 850a09e..35251aa4 100644 --- a/ui/views/controls/focus_ring.cc +++ b/ui/views/controls/focus_ring.cc
@@ -13,6 +13,7 @@ #include "ui/gfx/canvas.h" #include "ui/views/controls/focusable_border.h" #include "ui/views/controls/highlight_path_generator.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/view_class_properties.h"
diff --git a/ui/views/controls/image_view.cc b/ui/views/controls/image_view.cc index f31b625b..603fb4b 100644 --- a/ui/views/controls/image_view.cc +++ b/ui/views/controls/image_view.cc
@@ -12,6 +12,7 @@ #include "ui/accessibility/ax_enums.mojom.h" #include "ui/accessibility/ax_node_data.h" #include "ui/gfx/canvas.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/label.cc b/ui/views/controls/label.cc index 66ce6e7..ffa6208 100644 --- a/ui/views/controls/label.cc +++ b/ui/views/controls/label.cc
@@ -32,6 +32,7 @@ #include "ui/views/background.h" #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/focus/focus_manager.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/native_cursor.h" #include "ui/views/selection_controller.h"
diff --git a/ui/views/controls/link.cc b/ui/views/controls/link.cc index 6d14843..0ef69a5 100644 --- a/ui/views/controls/link.cc +++ b/ui/views/controls/link.cc
@@ -17,6 +17,7 @@ #include "ui/gfx/color_utils.h" #include "ui/gfx/font_list.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/native_cursor.h" #include "ui/views/style/platform_style.h"
diff --git a/ui/views/controls/menu/menu_host_root_view.cc b/ui/views/controls/menu/menu_host_root_view.cc index 416eb5b2..83a09ec 100644 --- a/ui/views/controls/menu/menu_host_root_view.cc +++ b/ui/views/controls/menu/menu_host_root_view.cc
@@ -7,6 +7,7 @@ #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/submenu_view.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc index aaaddc97..46a8788 100644 --- a/ui/views/controls/menu/menu_item_view.cc +++ b/ui/views/controls/menu/menu_item_view.cc
@@ -43,6 +43,7 @@ #include "ui/views/controls/menu/menu_separator.h" #include "ui/views/controls/menu/submenu_view.h" #include "ui/views/controls/separator.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/typography.h" #include "ui/views/vector_icons.h" #include "ui/views/view_class_properties.h"
diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index 979e2222..4771d1d6 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.cc +++ b/ui/views/controls/menu/menu_scroll_view_container.cc
@@ -22,6 +22,7 @@ #include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/submenu_view.h" #include "ui/views/layout/flex_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/round_rect_painter.h" #include "ui/views/view.h" #include "ui/views/view_class_properties.h"
diff --git a/ui/views/controls/menu/menu_separator.cc b/ui/views/controls/menu/menu_separator.cc index fc7c6cb..539e7993 100644 --- a/ui/views/controls/menu/menu_separator.cc +++ b/ui/views/controls/menu/menu_separator.cc
@@ -9,6 +9,7 @@ #include "ui/gfx/canvas.h" #include "ui/native_theme/native_theme.h" #include "ui/views/controls/menu/menu_config.h" +#include "ui/views/metadata/metadata_impl_macros.h" #if defined(OS_WIN) #include "ui/display/win/dpi.h"
diff --git a/ui/views/controls/menu/submenu_view.cc b/ui/views/controls/menu/submenu_view.cc index 96b9276..253c795 100644 --- a/ui/views/controls/menu/submenu_view.cc +++ b/ui/views/controls/menu/submenu_view.cc
@@ -22,6 +22,7 @@ #include "ui/views/controls/menu/menu_host.h" #include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/menu_scroll_view_container.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/root_view.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/controls/message_box_view.cc b/ui/views/controls/message_box_view.cc index 4d16c56..221a34cb 100644 --- a/ui/views/controls/message_box_view.cc +++ b/ui/views/controls/message_box_view.cc
@@ -27,6 +27,7 @@ #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/grid_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" #include "ui/views/window/client_view.h" #include "ui/views/window/dialog_delegate.h"
diff --git a/ui/views/controls/native/native_view_host.cc b/ui/views/controls/native/native_view_host.cc index d8e5cf4..f9e1aa1 100644 --- a/ui/views/controls/native/native_view_host.cc +++ b/ui/views/controls/native/native_view_host.cc
@@ -12,6 +12,7 @@ #include "ui/base/cursor/cursor.h" #include "ui/gfx/canvas.h" #include "ui/views/controls/native/native_view_host_wrapper.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/painter.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/controls/resize_area.cc b/ui/views/controls/resize_area.cc index 7c9c4178..10d404f 100644 --- a/ui/views/controls/resize_area.cc +++ b/ui/views/controls/resize_area.cc
@@ -8,6 +8,7 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/base/cursor/cursor.h" #include "ui/views/controls/resize_area_delegate.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/native_cursor.h" namespace views {
diff --git a/ui/views/controls/scroll_view.cc b/ui/views/controls/scroll_view.cc index 36ee16f..1911f19 100644 --- a/ui/views/controls/scroll_view.cc +++ b/ui/views/controls/scroll_view.cc
@@ -23,6 +23,7 @@ #include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/controls/focus_ring.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/controls/scrollbar/base_scroll_bar_button.cc b/ui/views/controls/scrollbar/base_scroll_bar_button.cc index c67f1d4..1e34ac20 100644 --- a/ui/views/controls/scrollbar/base_scroll_bar_button.cc +++ b/ui/views/controls/scrollbar/base_scroll_bar_button.cc
@@ -8,6 +8,7 @@ #include "base/bind_helpers.h" #include "ui/display/screen.h" #include "ui/events/event_utils.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/scrollbar/base_scroll_bar_thumb.cc b/ui/views/controls/scrollbar/base_scroll_bar_thumb.cc index 17581d9..0c222e30 100644 --- a/ui/views/controls/scrollbar/base_scroll_bar_thumb.cc +++ b/ui/views/controls/scrollbar/base_scroll_bar_thumb.cc
@@ -7,6 +7,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/geometry/rect.h" #include "ui/views/controls/scrollbar/scroll_bar.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace { // The distance the mouse can be dragged outside the bounds of the thumb during
diff --git a/ui/views/controls/scrollbar/cocoa_scroll_bar.mm b/ui/views/controls/scrollbar/cocoa_scroll_bar.mm index df22c8b..e2fd6a5 100644 --- a/ui/views/controls/scrollbar/cocoa_scroll_bar.mm +++ b/ui/views/controls/scrollbar/cocoa_scroll_bar.mm
@@ -14,6 +14,7 @@ #include "ui/compositor/scoped_layer_animation_settings.h" #include "ui/gfx/canvas.h" #include "ui/views/controls/scrollbar/base_scroll_bar_thumb.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/scrollbar/overlay_scroll_bar.cc b/ui/views/controls/scrollbar/overlay_scroll_bar.cc index e58df08..1dd7283a 100644 --- a/ui/views/controls/scrollbar/overlay_scroll_bar.cc +++ b/ui/views/controls/scrollbar/overlay_scroll_bar.cc
@@ -16,6 +16,7 @@ #include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views { namespace {
diff --git a/ui/views/controls/scrollbar/scroll_bar.cc b/ui/views/controls/scrollbar/scroll_bar.cc index 5255712d..51e7b62 100644 --- a/ui/views/controls/scrollbar/scroll_bar.cc +++ b/ui/views/controls/scrollbar/scroll_bar.cc
@@ -29,6 +29,7 @@ #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/controls/scroll_view.h" #include "ui/views/controls/scrollbar/base_scroll_bar_thumb.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" namespace views {
diff --git a/ui/views/controls/scrollbar/scroll_bar_views.cc b/ui/views/controls/scrollbar/scroll_bar_views.cc index 49c0e345..a56e8729 100644 --- a/ui/views/controls/scrollbar/scroll_bar_views.cc +++ b/ui/views/controls/scrollbar/scroll_bar_views.cc
@@ -18,6 +18,7 @@ #include "ui/views/controls/scrollbar/base_scroll_bar_thumb.h" #include "ui/views/controls/scrollbar/scroll_bar.h" #include "ui/views/layout/flex_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" namespace views {
diff --git a/ui/views/controls/separator.cc b/ui/views/controls/separator.cc index 60f6d91..dc2e4e4 100644 --- a/ui/views/controls/separator.cc +++ b/ui/views/controls/separator.cc
@@ -11,6 +11,7 @@ #include "ui/gfx/canvas.h" #include "ui/gfx/scoped_canvas.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/slider.cc b/ui/views/controls/slider.cc index 89d4052..3f9646f 100644 --- a/ui/views/controls/slider.cc +++ b/ui/views/controls/slider.cc
@@ -27,6 +27,7 @@ #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/rect.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" namespace views {
diff --git a/ui/views/controls/styled_label.cc b/ui/views/controls/styled_label.cc index 8429239f..cf89dffc 100644 --- a/ui/views/controls/styled_label.cc +++ b/ui/views/controls/styled_label.cc
@@ -20,6 +20,7 @@ #include "ui/gfx/text_utils.h" #include "ui/native_theme/native_theme.h" #include "ui/views/controls/label.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" namespace views {
diff --git a/ui/views/controls/tabbed_pane/tabbed_pane.cc b/ui/views/controls/tabbed_pane/tabbed_pane.cc index 887bd2b..4e43dde3 100644 --- a/ui/views/controls/tabbed_pane/tabbed_pane.cc +++ b/ui/views/controls/tabbed_pane/tabbed_pane.cc
@@ -32,6 +32,7 @@ #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/flex_layout.h" #include "ui/views/layout/layout_manager.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/controls/table/table_view.cc b/ui/views/controls/table/table_view.cc index 056db10..1b254a0 100644 --- a/ui/views/controls/table/table_view.cc +++ b/ui/views/controls/table/table_view.cc
@@ -41,6 +41,7 @@ #include "ui/views/controls/table/table_utils.h" #include "ui/views/controls/table/table_view_observer.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/style/typography.h"
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc index bd1a7e40..f22c34d 100644 --- a/ui/views/controls/textfield/textfield.cc +++ b/ui/views/controls/textfield/textfield.cc
@@ -53,6 +53,7 @@ #include "ui/views/controls/views_text_services_context_menu.h" #include "ui/views/drag_utils.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/native_cursor.h" #include "ui/views/painter.h" #include "ui/views/style/platform_style.h"
diff --git a/ui/views/controls/throbber.cc b/ui/views/controls/throbber.cc index ab4e3d8..924a718 100644 --- a/ui/views/controls/throbber.cc +++ b/ui/views/controls/throbber.cc
@@ -16,6 +16,7 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/native_theme/common_theme.h" #include "ui/native_theme/native_theme.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views {
diff --git a/ui/views/controls/tree/tree_view.cc b/ui/views/controls/tree/tree_view.cc index 8d7c8a8..6425c11 100644 --- a/ui/views/controls/tree/tree_view.cc +++ b/ui/views/controls/tree/tree_view.cc
@@ -41,6 +41,7 @@ #include "ui/views/controls/scroll_view.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/controls/tree/tree_view_controller.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/vector_icons.h"
diff --git a/ui/views/controls/webview/BUILD.gn b/ui/views/controls/webview/BUILD.gn index e4a99da2..24c0c6a 100644 --- a/ui/views/controls/webview/BUILD.gn +++ b/ui/views/controls/webview/BUILD.gn
@@ -6,6 +6,8 @@ sources = [ "unhandled_keyboard_event_handler.cc", "unhandled_keyboard_event_handler.h", + "web_bubble_dialog_view.cc", + "web_bubble_dialog_view.h", "web_contents_set_background_color.cc", "web_contents_set_background_color.h", "web_dialog_view.cc", @@ -49,6 +51,7 @@ "//ui/gfx", "//ui/gfx/geometry", "//ui/views", + "//ui/webui", ] if (is_linux || is_chromeos || is_android || is_fuchsia) {
diff --git a/ui/views/controls/webview/DEPS b/ui/views/controls/webview/DEPS index dc5914b..483fd56 100644 --- a/ui/views/controls/webview/DEPS +++ b/ui/views/controls/webview/DEPS
@@ -6,4 +6,5 @@ "+ui/content_accelerators", "+ui/views", "+ui/web_dialogs", + "+ui/webui", ]
diff --git a/ui/views/controls/webview/web_bubble_dialog_view.cc b/ui/views/controls/webview/web_bubble_dialog_view.cc new file mode 100644 index 0000000..c7262ad --- /dev/null +++ b/ui/views/controls/webview/web_bubble_dialog_view.cc
@@ -0,0 +1,109 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/controls/webview/web_bubble_dialog_view.h" + +#include <memory> + +#include "content/public/browser/keyboard_event_processing_result.h" +#include "content/public/browser/native_web_keyboard_event.h" +#include "ui/gfx/geometry/rounded_corners_f.h" +#include "ui/views/layout/fill_layout.h" +#include "ui/views/widget/widget.h" + +namespace views { + +namespace { + +bool IsEscapeEvent(const content::NativeWebKeyboardEvent& event) { + return event.GetType() == + content::NativeWebKeyboardEvent::Type::kRawKeyDown && + event.windows_key_code == ui::VKEY_ESCAPE; +} + +// The min / max size available to the WebBubbleDialogView. +// These are arbitrary sizes that match those set by ExtensionPopup. +// TODO(tluk): Determine the correct size constraints for the +// WebBubbleDialogView. +constexpr gfx::Size kMinSize(25, 25); +constexpr gfx::Size kMaxSize(800, 600); + +class BubbleWebView : public WebView { + public: + BubbleWebView(content::BrowserContext* browser_context, + WebBubbleDialogView* parent) + : WebView(browser_context), parent_(parent) { + EnableSizingFromWebContents(kMinSize, kMaxSize); + } + + ~BubbleWebView() override = default; + + // WebView: + void PreferredSizeChanged() override { + WebView::PreferredSizeChanged(); + parent_->OnWebViewSizeChanged(); + } + + // content::WebContentsDelegate: + bool HandleContextMenu(content::RenderFrameHost* render_frame_host, + const content::ContextMenuParams& params) override { + // Ignores context menu. + return true; + } + content::KeyboardEventProcessingResult PreHandleKeyboardEvent( + content::WebContents* source, + const content::NativeWebKeyboardEvent& event) override { + // Close the bubble if an escape event is detected. Handle this here to + // prevent the renderer from capturing the event and not propagating it up. + if (IsEscapeEvent(event) && GetWidget()) { + GetWidget()->CloseWithReason(views::Widget::ClosedReason::kEscKeyPressed); + return content::KeyboardEventProcessingResult::HANDLED; + } + return content::KeyboardEventProcessingResult::NOT_HANDLED; + } + + private: + WebBubbleDialogView* parent_; +}; + +} // namespace + +WebBubbleDialogView::WebBubbleDialogView( + content::BrowserContext* browser_context, + View* anchor_view) + : BubbleDialogDelegateView(anchor_view, BubbleBorder::TOP_RIGHT), + web_view_(AddChildView( + std::make_unique<BubbleWebView>(browser_context, this))) { + SetButtons(ui::DIALOG_BUTTON_NONE); + set_margins(gfx::Insets()); + + SetLayoutManager(std::make_unique<FillLayout>()); +} + +WebBubbleDialogView::~WebBubbleDialogView() = default; + +void WebBubbleDialogView::OnWebViewSizeChanged() { + SizeToContents(); +} + +gfx::Size WebBubbleDialogView::CalculatePreferredSize() const { + // Constrain the size to popup min/max. + gfx::Size preferred_size = BubbleDialogDelegateView::CalculatePreferredSize(); + preferred_size.SetToMax(kMinSize); + preferred_size.SetToMin(kMaxSize); + return preferred_size; +} + +void WebBubbleDialogView::AddedToWidget() { + BubbleDialogDelegateView::AddedToWidget(); + web_view_->holder()->SetCornerRadii(gfx::RoundedCornersF(GetCornerRadius())); +} + +void WebBubbleDialogView::ShowUI() { + DCHECK(GetWidget()); + GetWidget()->Show(); + web_view_->GetWebContents()->Focus(); +} + +} // namespace views
diff --git a/ui/views/controls/webview/web_bubble_dialog_view.h b/ui/views/controls/webview/web_bubble_dialog_view.h new file mode 100644 index 0000000..96ae5c65 --- /dev/null +++ b/ui/views/controls/webview/web_bubble_dialog_view.h
@@ -0,0 +1,80 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_VIEWS_CONTROLS_WEBVIEW_WEB_BUBBLE_DIALOG_VIEW_H_ +#define UI_VIEWS_CONTROLS_WEBVIEW_WEB_BUBBLE_DIALOG_VIEW_H_ + +#include <memory> +#include <utility> + +#include "base/memory/weak_ptr.h" +#include "ui/views/bubble/bubble_dialog_delegate_view.h" +#include "ui/views/controls/webview/webview.h" +#include "ui/views/controls/webview/webview_export.h" +#include "ui/webui/mojo_bubble_web_ui_controller.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace views { + +class Widget; + +// A BubbleDialogDelegateView that hosts WebUI and resizes to fit the hosted +// WebContents. +class WEBVIEW_EXPORT WebBubbleDialogView + : public BubbleDialogDelegateView, + public ui::MojoBubbleWebUIController::Embedder { + public: + // |CreateWebBubbleDialog()| returns a Widget instance owned by its + // NativeWidget. When the NativeWidget is destroyed (in response to a native + // destruction message), it deletes the Widget from its destructor. + template <typename T> + static Widget* CreateWebBubbleDialog( + std::unique_ptr<WebBubbleDialogView> bubble_view, + const GURL& url) { + bubble_view->LoadURL<T>(url); + return BubbleDialogDelegateView::CreateBubble(std::move(bubble_view)); + } + + WebBubbleDialogView(content::BrowserContext* browser_context, + View* anchor_view); + WebBubbleDialogView(const WebBubbleDialogView&) = delete; + WebBubbleDialogView& operator=(const WebBubbleDialogView&) = delete; + ~WebBubbleDialogView() override; + + void OnWebViewSizeChanged(); + WebView* web_view() { return web_view_; } + + // BubbleDialogDelegateView: + gfx::Size CalculatePreferredSize() const override; + void AddedToWidget() override; + + // MojoBubbleWebUIController::Embedder: + void ShowUI() override; + + private: + // The type T enables WebBubbleDialogView to know what WebUIController is + // being used for the bubble's WebUI and allows it to make sure the associated + // WebUI is a MojoBubbleWebUIController at compile time. + template <typename T> + void LoadURL(const GURL& url) { + web_view_->LoadInitialURL(url); + T* webui_bubble_controller = web_view_->GetWebContents() + ->GetWebUI() + ->GetController() + ->template GetAs<T>(); + // Depends on the WebUIController object being constructed synchronously + // when the navigation is started in LoadInitialURL(). + webui_bubble_controller->set_embedder(weak_ptr_factory_.GetWeakPtr()); + } + + WebView* web_view_; + base::WeakPtrFactory<WebBubbleDialogView> weak_ptr_factory_{this}; +}; + +} // namespace views + +#endif // UI_VIEWS_CONTROLS_WEBVIEW_WEB_BUBBLE_DIALOG_VIEW_H_
diff --git a/ui/views/controls/webview/web_bubble_dialog_view_unittest.cc b/ui/views/controls/webview/web_bubble_dialog_view_unittest.cc new file mode 100644 index 0000000..56738eb --- /dev/null +++ b/ui/views/controls/webview/web_bubble_dialog_view_unittest.cc
@@ -0,0 +1,86 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/controls/webview/web_bubble_dialog_view.h" + +#include <memory> +#include <utility> + +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/test_browser_context.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/views/test/views_test_base.h" +#include "ui/views/widget/unique_widget_ptr.h" + +namespace views { +namespace test { + +class WebBubbleDialogViewTest : public ViewsTestBase { + public: + WebBubbleDialogViewTest() + : ViewsTestBase(std::unique_ptr<base::test::TaskEnvironment>( + std::make_unique<content::BrowserTaskEnvironment>())) {} + WebBubbleDialogViewTest(const WebBubbleDialogViewTest&) = delete; + WebBubbleDialogViewTest& operator=(const WebBubbleDialogViewTest&) = delete; + ~WebBubbleDialogViewTest() override = default; + + // ViewsTestBase: + void SetUp() override { + ViewsTestBase::SetUp(); + browser_context_ = std::make_unique<content::TestBrowserContext>(); + + anchor_widget_ = std::make_unique<Widget>(); + Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); + anchor_widget_->Init(std::move(params)); + auto bubble_view = std::make_unique<WebBubbleDialogView>( + browser_context_.get(), anchor_widget_->GetContentsView()); + bubble_view_ = bubble_view.get(); + bubble_widget_ = + BubbleDialogDelegateView::CreateBubble(std::move(bubble_view)); + } + void TearDown() override { + bubble_widget_->CloseNow(); + anchor_widget_.reset(); + ViewsTestBase::TearDown(); + } + + protected: + WebBubbleDialogView* bubble_view() { return bubble_view_; } + Widget* bubble_widget() { return bubble_widget_; } + + private: + std::unique_ptr<content::TestBrowserContext> browser_context_; + views::UniqueWidgetPtr anchor_widget_; + Widget* bubble_widget_ = nullptr; + WebBubbleDialogView* bubble_view_ = nullptr; +}; + +TEST_F(WebBubbleDialogViewTest, TestBubbleResize) { + views::WebView* const web_view = bubble_view()->web_view(); + constexpr gfx::Size web_view_initial_size(100, 100); + web_view->SetPreferredSize(gfx::Size(100, 100)); + bubble_view()->OnWebViewSizeChanged(); + const gfx::Size widget_initial_size = + bubble_widget()->GetWindowBoundsInScreen().size(); + // The bubble should be at least as big as the webview. + EXPECT_GE(widget_initial_size.width(), web_view_initial_size.width()); + EXPECT_GE(widget_initial_size.height(), web_view_initial_size.height()); + + // Resize the webview. + constexpr gfx::Size web_view_final_size(200, 200); + web_view->SetPreferredSize(web_view_final_size); + bubble_view()->OnWebViewSizeChanged(); + + // Ensure the bubble resizes as expected. + const gfx::Size widget_final_size = + bubble_widget()->GetWindowBoundsInScreen().size(); + EXPECT_LT(widget_initial_size.width(), widget_final_size.width()); + EXPECT_LT(widget_initial_size.height(), widget_final_size.height()); + // The bubble should be at least as big as the webview. + EXPECT_GE(widget_final_size.width(), web_view_final_size.width()); + EXPECT_GE(widget_final_size.height(), web_view_final_size.height()); +} + +} // namespace test +} // namespace views
diff --git a/ui/views/controls/webview/webview.cc b/ui/views/controls/webview/webview.cc index 61e127e..9ad6b1b 100644 --- a/ui/views/controls/webview/webview.cc +++ b/ui/views/controls/webview/webview.cc
@@ -22,6 +22,7 @@ #include "ui/accessibility/platform/ax_platform_node.h" #include "ui/events/event.h" #include "ui/views/focus/focus_manager.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/views_delegate.h" namespace views {
diff --git a/ui/views/examples/combobox_example.cc b/ui/views/examples/combobox_example.cc index 2af95c16..c255dab 100644 --- a/ui/views/examples/combobox_example.cc +++ b/ui/views/examples/combobox_example.cc
@@ -5,13 +5,15 @@ #include "ui/views/examples/combobox_example.h" #include <memory> +#include <utility> #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "ui/gfx/geometry/insets.h" #include "ui/views/controls/combobox/combobox.h" #include "ui/views/examples/examples_window.h" -#include "ui/views/layout/box_layout.h" +#include "ui/views/layout/box_layout_view.h" +#include "ui/views/layout/fill_layout.h" namespace views { namespace examples { @@ -41,21 +43,33 @@ ComboboxExample::~ComboboxExample() = default; void ComboboxExample::CreateExampleView(View* container) { - container->SetLayoutManager(std::make_unique<BoxLayout>( - BoxLayout::Orientation::kVertical, gfx::Insets(10, 0), 5)); + container->SetLayoutManager(std::make_unique<FillLayout>()); - combobox_ = container->AddChildView( - std::make_unique<Combobox>(std::make_unique<ComboboxModelExample>())); + Combobox* disabled_combobox; + + auto view = Builder<BoxLayoutView>() + .SetOrientation(BoxLayout::Orientation::kVertical) + .SetInsideBorderInsets(gfx::Insets(10, 0)) + .SetBetweenChildSpacing(5) + .AddChildren({Builder<Combobox>().CopyAddressTo(&combobox_), + Builder<Combobox>() + .CopyAddressTo(&disabled_combobox) + .SetEnabled(false)}) + .Build(); + + combobox_->SetOwnedModel(std::make_unique<ComboboxModelExample>()); combobox_->set_callback(base::BindRepeating(&ComboboxExample::ValueChanged, base::Unretained(this))); + // The index is set outside of the builder because SetOwnedModel will override + // set indices. combobox_->SetSelectedIndex(3); - - auto* disabled_combobox = container->AddChildView( - std::make_unique<Combobox>(std::make_unique<ComboboxModelExample>())); + disabled_combobox->SetOwnedModel(std::make_unique<ComboboxModelExample>()); disabled_combobox->set_callback(base::BindRepeating( &ComboboxExample::ValueChanged, base::Unretained(this))); + // The index is set outside of the builder because SetOwnedModel will override + // set indices. disabled_combobox->SetSelectedIndex(4); - disabled_combobox->SetEnabled(false); + container->AddChildView(std::move(view)); } void ComboboxExample::ValueChanged() {
diff --git a/ui/views/metadata/metadata_types.cc b/ui/views/metadata/metadata_types.cc index ef38d3a..8ed567c 100644 --- a/ui/views/metadata/metadata_types.cc +++ b/ui/views/metadata/metadata_types.cc
@@ -14,6 +14,25 @@ namespace views { namespace metadata { +PropertyFlags operator|(PropertyFlags op1, PropertyFlags op2) { + return static_cast<PropertyFlags>(static_cast<uint32_t>(op1) | + static_cast<uint32_t>(op2)); +} + +PropertyFlags operator&(PropertyFlags op1, PropertyFlags op2) { + return static_cast<PropertyFlags>(static_cast<uint32_t>(op1) & + static_cast<uint32_t>(op2)); +} + +PropertyFlags operator^(PropertyFlags op1, PropertyFlags op2) { + return static_cast<PropertyFlags>(static_cast<uint32_t>(op1) ^ + static_cast<uint32_t>(op2)); +} + +bool operator!(PropertyFlags op) { + return !static_cast<bool>(op); +} + ClassMetaData::ClassMetaData() = default; ClassMetaData::ClassMetaData(std::string file, int line) : line_(line) {
diff --git a/ui/views/metadata/metadata_types.h b/ui/views/metadata/metadata_types.h index 001e6b3b..1d55967 100644 --- a/ui/views/metadata/metadata_types.h +++ b/ui/views/metadata/metadata_types.h
@@ -16,15 +16,27 @@ namespace views { namespace metadata { -enum class PropertyFlags { +enum class PropertyFlags : uint32_t { // By default, properties are read/write. This flag indicates that the given // property metadata instance needs no special attention. kEmpty = 0x00, // Property metadata instance should be treated as read-only. Calling // SetValueAsString() will trigger a NOTREACHED() error under debug. kReadOnly = 0x01, + // Property metadata can be serialized to or from a string. Needs to make sure + // this flag is set to have meaningful SetValueAsString() and + // GetValueFromString(). + kSerializable = 0x100, }; +VIEWS_EXPORT extern PropertyFlags operator|(PropertyFlags op1, + PropertyFlags op2); +VIEWS_EXPORT extern PropertyFlags operator&(PropertyFlags op1, + PropertyFlags op2); +VIEWS_EXPORT extern PropertyFlags operator^(PropertyFlags op1, + PropertyFlags op2); +VIEWS_EXPORT extern bool operator!(PropertyFlags op); + // Interface for classes that provide ClassMetaData (via macros in // metadata_header_macros.h). GetClassMetaData() is automatically overridden and // implemented in the relevant macros, so a class must merely have
diff --git a/ui/views/metadata/property_metadata.h b/ui/views/metadata/property_metadata.h index 9804f78..c9431211 100644 --- a/ui/views/metadata/property_metadata.h +++ b/ui/views/metadata/property_metadata.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/strings/string16.h" #include "ui/views/metadata/metadata_cache.h" +#include "ui/views/metadata/metadata_types.h" #include "ui/views/metadata/type_conversion.h" #include "ui/views/views_export.h" @@ -31,14 +32,21 @@ ~ClassPropertyReadOnlyMetaData() override = default; base::string16 GetValueAsString(void* obj) const override { + if (!kIsSerializable) + return base::string16(); return TypeConverter<TValue>::ToString((static_cast<TClass*>(obj)->*Get)()); } PropertyFlags GetPropertyFlags() const override { - return PropertyFlags::kReadOnly; + return kIsSerializable + ? (PropertyFlags::kReadOnly | PropertyFlags::kSerializable) + : PropertyFlags::kReadOnly; } private: + static constexpr bool kIsSerializable = + TypeConverter<TValue>::is_serializable; + DISALLOW_COPY_AND_ASSIGN(ClassPropertyReadOnlyMetaData); }; @@ -61,16 +69,24 @@ ~ClassPropertyMetaData() override = default; void SetValueAsString(void* obj, const base::string16& new_value) override { + if (!kIsSerializable) + return; if (base::Optional<TValue> result = - TypeConverter<TValue>::FromString(new_value)) + TypeConverter<TValue>::FromString(new_value)) { (static_cast<TClass*>(obj)->*Set)(result.value()); + } } PropertyFlags GetPropertyFlags() const override { - return PropertyFlags::kEmpty; + return kIsSerializable + ? (PropertyFlags::kEmpty | PropertyFlags::kSerializable) + : PropertyFlags::kEmpty; } private: + static constexpr bool kIsSerializable = + TypeConverter<TValue>::is_serializable; + DISALLOW_COPY_AND_ASSIGN(ClassPropertyMetaData); };
diff --git a/ui/views/metadata/type_conversion.h b/ui/views/metadata/type_conversion.h index b8c92bb..284fd02 100644 --- a/ui/views/metadata/type_conversion.h +++ b/ui/views/metadata/type_conversion.h
@@ -46,6 +46,8 @@ // General Type Conversion Template Functions --------------------------------- template <typename T> struct TypeConverter { + static constexpr bool is_serializable = std::is_enum<T>::value; + static bool IsSerializable() { return is_serializable; } static base::string16 ToString(ArgType<T> source_value); static base::Optional<T> FromString(const base::string16& source_value); }; @@ -107,6 +109,8 @@ #define DECLARE_CONVERSIONS(T) \ template <> \ struct VIEWS_EXPORT TypeConverter<T> { \ + static constexpr bool is_serializable = true; \ + static bool IsSerializable() { return is_serializable; } \ static base::string16 ToString(ArgType<T> source_value); \ static base::Optional<T> FromString(const base::string16& source_value); \ }; @@ -138,6 +142,8 @@ template <typename T> struct TypeConverter<base::Optional<T>> { + static constexpr bool is_serializable = TypeConverter<T>::is_serializable; + static bool IsSerializable() { return is_serializable; } static base::string16 ToString(ArgType<base::Optional<T>> source_value) { if (!source_value) return GetNullOptStr();
diff --git a/ui/views/metadata/type_conversion_unittest.cc b/ui/views/metadata/type_conversion_unittest.cc index 3f9df42f..d1630597 100644 --- a/ui/views/metadata/type_conversion_unittest.cc +++ b/ui/views/metadata/type_conversion_unittest.cc
@@ -9,57 +9,68 @@ #include "testing/platform_test.h" #include "ui/gfx/geometry/insets.h" #include "ui/gfx/geometry/rect.h" - -namespace MD = views::metadata; +#include "ui/views/controls/button/button.h" using TypeConversionTest = PlatformTest; +namespace views { + +// Used in CheckIsSerializable test case. +enum TestResult { + TEST_TRUE, + TEST_FALSE, +}; +DEFINE_ENUM_CONVERTERS(TestResult, + {TEST_TRUE, base::ASCIIToUTF16("TRUE")}, + {TEST_FALSE, base::ASCIIToUTF16("FALSE")}) + TEST_F(TypeConversionTest, TestConversion_IntToString) { int from_int = 5; - base::string16 to_string = MD::TypeConverter<int>::ToString(from_int); + base::string16 to_string = metadata::TypeConverter<int>::ToString(from_int); EXPECT_EQ(to_string, base::ASCIIToUTF16("5")); } TEST_F(TypeConversionTest, TestConversion_StringToInt) { base::string16 from_string = base::ASCIIToUTF16("10"); - EXPECT_EQ(MD::TypeConverter<int>::FromString(from_string), 10); + EXPECT_EQ(metadata::TypeConverter<int>::FromString(from_string), 10); } // This tests whether the converter handles a bogus input string, in which case // the return value should be nullopt. TEST_F(TypeConversionTest, TestConversion_BogusStringToInt) { base::string16 from_string = base::ASCIIToUTF16("Foo"); - EXPECT_EQ(MD::TypeConverter<int>::FromString(from_string), base::nullopt); + EXPECT_EQ(metadata::TypeConverter<int>::FromString(from_string), + base::nullopt); } TEST_F(TypeConversionTest, TestConversion_BogusStringToFloat) { base::string16 from_string = base::ASCIIToUTF16("1.2"); - EXPECT_EQ(MD::TypeConverter<float>::FromString(from_string), 1.2f); + EXPECT_EQ(metadata::TypeConverter<float>::FromString(from_string), 1.2f); } TEST_F(TypeConversionTest, TestConversion_OptionalIntToString) { base::Optional<int> src; base::string16 to_string = - MD::TypeConverter<base::Optional<int>>::ToString(src); - EXPECT_EQ(to_string, MD::GetNullOptStr()); + metadata::TypeConverter<base::Optional<int>>::ToString(src); + EXPECT_EQ(to_string, metadata::GetNullOptStr()); src = 5; - to_string = MD::TypeConverter<base::Optional<int>>::ToString(src); + to_string = metadata::TypeConverter<base::Optional<int>>::ToString(src); EXPECT_EQ(to_string, base::ASCIIToUTF16("5")); } TEST_F(TypeConversionTest, TestConversion_StringToOptionalInt) { base::Optional<int> ret; - EXPECT_EQ( - MD::TypeConverter<base::Optional<int>>::FromString(MD::GetNullOptStr()), - base::make_optional(ret)); + EXPECT_EQ(metadata::TypeConverter<base::Optional<int>>::FromString( + metadata::GetNullOptStr()), + base::make_optional(ret)); - EXPECT_EQ(MD::TypeConverter<base::Optional<int>>::FromString( + EXPECT_EQ(metadata::TypeConverter<base::Optional<int>>::FromString( base::ASCIIToUTF16("10")), 10); - EXPECT_EQ(MD::TypeConverter<base::Optional<int>>::FromString( + EXPECT_EQ(metadata::TypeConverter<base::Optional<int>>::FromString( base::ASCIIToUTF16("ab0")), base::nullopt); } @@ -69,21 +80,21 @@ shadow_values.emplace_back(gfx::Vector2d(1, 2), .3, SkColorSetARGB(128, 255, 0, 0)); - EXPECT_EQ(MD::TypeConverter<gfx::ShadowValues>::ToString(shadow_values), + EXPECT_EQ(metadata::TypeConverter<gfx::ShadowValues>::ToString(shadow_values), base::ASCIIToUTF16("[ (1,2),0.30,rgba(255,0,0,128) ]")); shadow_values.emplace_back(gfx::Vector2d(9, 8), .76, SkColorSetARGB(20, 0, 64, 255)); EXPECT_EQ( - MD::TypeConverter<gfx::ShadowValues>::ToString(shadow_values), + metadata::TypeConverter<gfx::ShadowValues>::ToString(shadow_values), base::ASCIIToUTF16( "[ (1,2),0.30,rgba(255,0,0,128); (9,8),0.76,rgba(0,64,255,20) ]")); } TEST_F(TypeConversionTest, TestConversion_StringToShadowValues) { base::Optional<gfx::ShadowValues> opt_result = - MD::TypeConverter<gfx::ShadowValues>::FromString(base::ASCIIToUTF16( + metadata::TypeConverter<gfx::ShadowValues>::FromString(base::ASCIIToUTF16( "[ (6,4),0.53,rgba(23,44,0,255); (93,83),4.33,rgba(10,20,0,15) ]")); EXPECT_EQ(opt_result.has_value(), true); @@ -105,13 +116,55 @@ TEST_F(TypeConversionTest, TestConversion_InsetsToString) { base::string16 to_string = - MD::TypeConverter<gfx::Insets>::ToString(gfx::Insets(3, 5, 7, 9)); + metadata::TypeConverter<gfx::Insets>::ToString(gfx::Insets(3, 5, 7, 9)); EXPECT_EQ(to_string, base::ASCIIToUTF16("{3, 5, 7, 9}")); } TEST_F(TypeConversionTest, TestConversion_StringToInsets) { base::string16 from_string = base::ASCIIToUTF16("{2, 3, 4, 5}"); - EXPECT_EQ(MD::TypeConverter<gfx::Insets>::FromString(from_string), + EXPECT_EQ(metadata::TypeConverter<gfx::Insets>::FromString(from_string), gfx::Insets(2, 3, 4, 5)); } + +TEST_F(TypeConversionTest, CheckIsSerializable) { + // Test types with explicitly added converters. + EXPECT_TRUE(metadata::TypeConverter<int8_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<int16_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<int32_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<int64_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<uint8_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<uint16_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<uint32_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<uint64_t>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<float>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<double>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<bool>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<const char*>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<base::string16>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<gfx::ShadowValues>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<gfx::Size>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<gfx::Range>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<gfx::Insets>::IsSerializable()); + + // Test enum type. + EXPECT_TRUE(metadata::TypeConverter<TestResult>::IsSerializable()); + + // Test aliased types. + EXPECT_TRUE(metadata::TypeConverter<int>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<SkColor>::IsSerializable()); + + // Test types with no explicit or aliased converters. + EXPECT_FALSE(metadata::TypeConverter< + views::Button::PressedCallback>::IsSerializable()); + EXPECT_FALSE(metadata::TypeConverter<views::FocusRing*>::IsSerializable()); + + // Test base::Optional type. + EXPECT_TRUE( + metadata::TypeConverter<base::Optional<const char*>>::IsSerializable()); + EXPECT_TRUE(metadata::TypeConverter<base::Optional<int>>::IsSerializable()); + EXPECT_FALSE(metadata::TypeConverter< + base::Optional<views::FocusRing*>>::IsSerializable()); +} + +} // namespace views
diff --git a/ui/views/test/view_metadata_test_utils.cc b/ui/views/test/view_metadata_test_utils.cc index 2ea6b8e..2001344 100644 --- a/ui/views/test/view_metadata_test_utils.cc +++ b/ui/views/test/view_metadata_test_utils.cc
@@ -16,8 +16,11 @@ EXPECT_NE(meta_data, nullptr); for (auto* property : *meta_data) { base::string16 value = property->GetValueAsString(view); - if (property->GetPropertyFlags() != metadata::PropertyFlags::kReadOnly) + metadata::PropertyFlags flags = property->GetPropertyFlags(); + if (!(flags & metadata::PropertyFlags::kReadOnly) && + !!(flags & metadata::PropertyFlags::kSerializable)) { property->SetValueAsString(view, value); + } } }
diff --git a/ui/views/touchui/touch_selection_menu_views.cc b/ui/views/touchui/touch_selection_menu_views.cc index 7975690c..6e0dfa4 100644 --- a/ui/views/touchui/touch_selection_menu_views.cc +++ b/ui/views/touchui/touch_selection_menu_views.cc
@@ -22,6 +22,7 @@ #include "ui/touch_selection/touch_selection_menu_runner.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/layout/box_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views { namespace {
diff --git a/ui/views/view.h b/ui/views/view.h index eeae0fa..2003eeb 100644 --- a/ui/views/view.h +++ b/ui/views/view.h
@@ -48,7 +48,6 @@ #include "ui/gfx/native_widget_types.h" #include "ui/views/layout/layout_types.h" #include "ui/views/metadata/metadata_header_macros.h" -#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/metadata/view_factory.h" #include "ui/views/paint_info.h" #include "ui/views/view_targeter.h"
diff --git a/ui/views/widget/root_view.cc b/ui/views/widget/root_view.cc index 87beb3f..2ebd95f 100644 --- a/ui/views/widget/root_view.cc +++ b/ui/views/widget/root_view.cc
@@ -22,6 +22,7 @@ #include "ui/gfx/canvas.h" #include "ui/views/drag_controller.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_targeter.h" #include "ui/views/widget/root_view_targeter.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/widget/widget_delegate.cc b/ui/views/widget/widget_delegate.cc index 1f2ba4c..6c4cb04 100644 --- a/ui/views/widget/widget_delegate.cc +++ b/ui/views/widget/widget_delegate.cc
@@ -14,6 +14,7 @@ #include "ui/display/display.h" #include "ui/display/screen.h" #include "ui/gfx/image/image_skia.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view.h" #include "ui/views/views_delegate.h" #include "ui/views/widget/widget.h"
diff --git a/ui/views/window/client_view.cc b/ui/views/window/client_view.cc index bfb78f0..5527e26 100644 --- a/ui/views/window/client_view.cc +++ b/ui/views/window/client_view.cc
@@ -11,6 +11,7 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/base/hit_test.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" @@ -43,14 +44,17 @@ if (!contents_view_) return gfx::Size(); - if (fixed_width_) { - return gfx::Size(fixed_width_, - contents_view_->GetHeightForWidth(fixed_width_)); - } - return contents_view_->GetPreferredSize(); } +int ClientView::GetHeightForWidth(int width) const { + // |contents_view_| is allowed to be NULL up until the point where this view + // is attached to a Container. + if (!contents_view_) + return 0; + return contents_view_->GetHeightForWidth(width); +} + gfx::Size ClientView::GetMaximumSize() const { // |contents_view_| is allowed to be NULL up until the point where this view // is attached to a Container.
diff --git a/ui/views/window/client_view.h b/ui/views/window/client_view.h index b95430e..28749e1 100644 --- a/ui/views/window/client_view.h +++ b/ui/views/window/client_view.h
@@ -30,8 +30,6 @@ ClientView(Widget* widget, View* contents_view); ~ClientView() override = default; - void set_fixed_width(int width) { fixed_width_ = width; } - // Returned value signals whether the Widget can be closed. Specialized // ClientView subclasses can override this default behavior to allow the // close to be blocked until the user corrects mistakes, accepts a warning @@ -54,6 +52,7 @@ // Overridden from View: gfx::Size CalculatePreferredSize() const override; + int GetHeightForWidth(int width) const override; gfx::Size GetMinimumSize() const override; gfx::Size GetMaximumSize() const override; @@ -73,8 +72,6 @@ private: // The View that this ClientView contains. View* contents_view_; - - int fixed_width_ = 0; }; } // namespace views
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc index 5e8aa157..9caf9166 100644 --- a/ui/views/window/dialog_client_view.cc +++ b/ui/views/window/dialog_client_view.cc
@@ -20,6 +20,7 @@ #include "ui/views/controls/button/md_text_button.h" #include "ui/views/layout/grid_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/view_observer.h" #include "ui/views/view_tracker.h" @@ -99,8 +100,17 @@ // DialogClientView, View overrides: gfx::Size DialogClientView::CalculatePreferredSize() const { - gfx::Size contents_size = ClientView::CalculatePreferredSize(); const gfx::Insets& content_margins = GetDialogDelegate()->margins(); + + gfx::Size contents_size; + const int fixed_width = GetDialogDelegate()->fixed_width(); + if (fixed_width) { + const int content_width = fixed_width - content_margins.width(); + contents_size = gfx::Size(content_width, + ClientView::GetHeightForWidth(content_width)); + } else { + contents_size = ClientView::CalculatePreferredSize(); + } contents_size.Enlarge(content_margins.width(), content_margins.height()); return GetBoundingSizeForVerticalStack( contents_size, button_row_container_->GetPreferredSize());
diff --git a/ui/views/window/dialog_delegate.h b/ui/views/window/dialog_delegate.h index b543d96..e048899 100644 --- a/ui/views/window/dialog_delegate.h +++ b/ui/views/window/dialog_delegate.h
@@ -154,6 +154,10 @@ const gfx::Insets& margins() const { return margins_; } void set_margins(const gfx::Insets& margins) { margins_ = margins; } + // Set a fixed width for the dialog. Used by DialogClientView. + void set_fixed_width(int fixed_width) { fixed_width_ = fixed_width; } + int fixed_width() const { return fixed_width_; } + template <typename T> T* SetExtraView(std::unique_ptr<T> extra_view) { T* view = extra_view.get(); @@ -317,6 +321,9 @@ // margins. gfx::Insets margins_{0}; + // Use a fixed dialog width for dialog. Used by DialogClientView. + int fixed_width_ = 0; + // The time the dialog is created. base::TimeTicks creation_time_;
diff --git a/ui/views/window/non_client_view.cc b/ui/views/window/non_client_view.cc index 0fe58fc..06c6cc4 100644 --- a/ui/views/window/non_client_view.cc +++ b/ui/views/window/non_client_view.cc
@@ -11,6 +11,7 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/base/hit_test.h" #include "ui/gfx/geometry/rect_conversions.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/rect_based_targeting_utils.h" #include "ui/views/view_targeter.h" #include "ui/views/widget/root_view.h"
diff --git a/ui/webui/BUILD.gn b/ui/webui/BUILD.gn index bc3709a..4d523c55 100644 --- a/ui/webui/BUILD.gn +++ b/ui/webui/BUILD.gn
@@ -4,6 +4,8 @@ static_library("webui") { sources = [ + "mojo_bubble_web_ui_controller.cc", + "mojo_bubble_web_ui_controller.h", "mojo_web_ui_controller.cc", "mojo_web_ui_controller.h", "webui_allowlist.cc",
diff --git a/ui/webui/mojo_bubble_web_ui_controller.cc b/ui/webui/mojo_bubble_web_ui_controller.cc new file mode 100644 index 0000000..b91ba17f --- /dev/null +++ b/ui/webui/mojo_bubble_web_ui_controller.cc
@@ -0,0 +1,17 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/webui/mojo_bubble_web_ui_controller.h" + +#include "content/public/browser/web_ui.h" + +namespace ui { + +MojoBubbleWebUIController::MojoBubbleWebUIController(content::WebUI* contents, + bool enable_chrome_send) + : MojoWebUIController(contents, enable_chrome_send) {} + +MojoBubbleWebUIController::~MojoBubbleWebUIController() = default; + +} // namespace ui
diff --git a/ui/webui/mojo_bubble_web_ui_controller.h b/ui/webui/mojo_bubble_web_ui_controller.h new file mode 100644 index 0000000..5bd42a2e --- /dev/null +++ b/ui/webui/mojo_bubble_web_ui_controller.h
@@ -0,0 +1,43 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_WEBUI_MOJO_BUBBLE_WEB_UI_CONTROLLER_H_ +#define UI_WEBUI_MOJO_BUBBLE_WEB_UI_CONTROLLER_H_ + +#include "base/callback_forward.h" +#include "base/memory/weak_ptr.h" +#include "ui/webui/mojo_web_ui_controller.h" + +namespace content { +class WebUI; +} // namespace content + +namespace ui { + +class MojoBubbleWebUIController : public MojoWebUIController { + public: + class Embedder { + public: + virtual void ShowUI() = 0; + }; + + // By default MojoBubbleWebUIController do not have normal WebUI bindings. + // Pass |enable_chrome_send| as true if these are needed. + explicit MojoBubbleWebUIController(content::WebUI* contents, + bool enable_chrome_send = false); + MojoBubbleWebUIController(const MojoBubbleWebUIController&) = delete; + MojoBubbleWebUIController& operator=(const MojoBubbleWebUIController&) = + delete; + ~MojoBubbleWebUIController() override; + + void set_embedder(base::WeakPtr<Embedder> embedder) { embedder_ = embedder; } + base::WeakPtr<Embedder> embedder() { return embedder_; } + + private: + base::WeakPtr<Embedder> embedder_; +}; + +} // namespace ui + +#endif // UI_WEBUI_MOJO_BUBBLE_WEB_UI_CONTROLLER_H_
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java index 63569c6..674de113 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/TabTest.java
@@ -270,7 +270,7 @@ @Test @SmallTest - @MinWebLayerVersion(87) // Bug fix in 87. + @MinWebLayerVersion(88) // Bug fix in 88. // This is a regression test for https://crbug.com/1075744 . public void testRotationDoesntChangeVisibility() throws Exception { String url = mActivityTestRule.getTestDataURL("rotation.html");
diff --git a/weblayer/public/java/org/chromium/weblayer/MediaRouteDialogFragment.java b/weblayer/public/java/org/chromium/weblayer/MediaRouteDialogFragment.java index 5780c7d..fb75ae6 100644 --- a/weblayer/public/java/org/chromium/weblayer/MediaRouteDialogFragment.java +++ b/weblayer/public/java/org/chromium/weblayer/MediaRouteDialogFragment.java
@@ -16,7 +16,7 @@ * * @since 87 */ -class MediaRouteDialogFragment extends RemoteFragment { +public class MediaRouteDialogFragment extends RemoteFragment { private static final String FRAGMENT_TAG = "WebLayerMediaRouteDialogFragment"; static IRemoteFragment create(BrowserFragment browserFragment) {
diff --git a/weblayer/shell/android/shell_apk/AndroidManifest.xml b/weblayer/shell/android/shell_apk/AndroidManifest.xml index dd1feaf..4cca29631 100644 --- a/weblayer/shell/android/shell_apk/AndroidManifest.xml +++ b/weblayer/shell/android/shell_apk/AndroidManifest.xml
@@ -43,15 +43,22 @@ <activity android:name="TelemetryActivity" android:theme="@android:style/Theme.Holo.Light.NoActionBar"> </activity> - <activity android:name="org.chromium.weblayer.test.ExternalNavigationTest$DummyActivityForSpecialScheme" - android:exported="true" > - <intent-filter> - <action android:name="android.intent.action.VIEW" /> - <category android:name="android.intent.category.DEFAULT" /> - <category android:name="android.intent.category.BROWSABLE" /> - <data android:host="weblayertest" android:scheme="weblayer" /> - </intent-filter> - </activity> + <activity android:name="org.chromium.weblayer.test.ExternalNavigationTest$DummyActivityForSpecialScheme" + android:exported="true" > + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + <data android:host="weblayertest" android:scheme="weblayer" /> + </intent-filter> + </activity> + + <!-- Cast support --> + <meta-data + android:name= + "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" + android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/> + {% if weblayer_package is defined %} <meta-data android:name="org.chromium.weblayer.WebLayerPackage" android:value="{{ weblayer_package }}"/>
diff --git a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java index ec3bcecf..7c5a26e 100644 --- a/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java +++ b/weblayer/shell/android/shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java
@@ -72,8 +72,10 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * Activity for managing the Demo Shell. @@ -143,6 +145,17 @@ } } + // Used for any state that is per Tab. + private static final class PerTabState { + public final FaviconFetcher mFaviconFetcher; + public final TabCallback mTabCallback; + + PerTabState(FaviconFetcher faviconFetcher, TabCallback tabCallback) { + mFaviconFetcher = faviconFetcher; + mTabCallback = tabCallback; + } + } + private static final String TAG = "WebLayerShell"; private static final float DEFAULT_TEXT_SIZE = 15.0F; private static final int EDITABLE_URL_TEXT_VIEW = 0; @@ -157,8 +170,12 @@ private View mTopContentsContainer; private View mAltTopContentsContainer; private TabListCallback mTabListCallback; + private NewTabCallback mNewTabCallback; + private FullscreenCallback mFullscreenCallback; + private NavigationCallback mNavigationCallback; + private ErrorPageCallback mErrorPageCallback; private List<Tab> mPreviousTabList = new ArrayList<>(); - private Map<Tab, FaviconFetcher> mTabToFaviconFetcher = new HashMap<>(); + private Map<Tab, PerTabState> mTabToPerTabState = new HashMap<>(); private Runnable mExitFullscreenRunnable; private boolean mIsTopViewVisible = true; private View mBottomView; @@ -374,13 +391,25 @@ @Override protected void onDestroy() { super.onDestroy(); + // NOTE: It's important to unregister any state installed on browser/tab as during a + // configuration change (such as rotation) the activity is destroyed but the + // browser/fragment/tabs are not. mUrlViewContainer.reset(); if (mTabListCallback != null) { - mBrowser.unregisterTabListCallback(mTabListCallback); - mTabListCallback = null; + unregisterBrowserAndTabCallbacks(); } } + private void unregisterBrowserAndTabCallbacks() { + assert mBrowser != null; + mBrowser.unregisterTabListCallback(mTabListCallback); + mTabListCallback = null; + + Set<Tab> tabs = new HashSet(mTabToPerTabState.keySet()); + for (Tab tab : tabs) unregisterTabCallbacks(tab); + mTabToPerTabState.clear(); + } + private void onWebLayerReady(WebLayer webLayer, Bundle savedInstanceState) { if (isFinishing() || isDestroyed()) return; @@ -418,9 +447,12 @@ } }); - setTabCallbacks(mBrowser.getActiveTab(), fragment); + createTabCallbacks(); + + registerTabCallbacks(mBrowser.getActiveTab()); updateTopView(); + mTabListCallback = new TabListCallback() { @Override public void onActiveTabChanged(Tab activeTab) { @@ -435,6 +467,10 @@ public void onTabRemoved(Tab tab) { closeTab(tab); } + @Override + public void onWillDestroyBrowserAndAllTabs() { + unregisterBrowserAndTabCallbacks(); + } }; mBrowser.registerTabListCallback(mTabListCallback); View nonEditUrlView = mBrowser.getUrlBarController().createUrlBarView( @@ -489,16 +525,17 @@ .toString(); } - private void setTabCallbacks(Tab tab, Fragment fragment) { - tab.setNewTabCallback(new NewTabCallback() { + private void createTabCallbacks() { + mNewTabCallback = new NewTabCallback() { @Override public void onNewTab(Tab newTab, @NewTabType int type) { - setTabCallbacks(newTab, fragment); + registerTabCallbacks(newTab); mPreviousTabList.add(mBrowser.getActiveTab()); mBrowser.setActiveTab(newTab); } - }); - tab.setFullscreenCallback(new FullscreenCallback() { + }; + + mFullscreenCallback = new FullscreenCallback() { private int mSystemVisibilityToRestore; @Override @@ -533,8 +570,36 @@ getWindow().setAttributes(attrs); } } - }); - tab.registerTabCallback(new TabCallback() { + }; + + mNavigationCallback = new NavigationCallback() { + @Override + public void onLoadStateChanged(boolean isLoading, boolean toDifferentDocument) { + mLoadProgressBar.setVisibility( + isLoading && toDifferentDocument ? View.VISIBLE : View.INVISIBLE); + } + + @Override + public void onLoadProgressChanged(double progress) { + mLoadProgressBar.setProgress((int) Math.round(100 * progress)); + } + }; + + mErrorPageCallback = new ErrorPageCallback() { + @Override + public boolean onBackToSafety() { + WebLayerShellActivity.this.onBackPressed(); + return true; + } + }; + } + + private void registerTabCallbacks(Tab tab) { + tab.setNewTabCallback(mNewTabCallback); + tab.setFullscreenCallback(mFullscreenCallback); + tab.getNavigationController().registerNavigationCallback(mNavigationCallback); + tab.setErrorPageCallback(mErrorPageCallback); + TabCallback tabCallback = new TabCallback() { @Override public void onVisibleUriChanged(Uri uri) { mUrlViewContainer.setDisplayedChild(NONEDITABLE_URL_TEXT_VIEW); @@ -561,32 +626,27 @@ intent.setAction(Intent.ACTION_MAIN); activity.startActivity(intent); } - }); - tab.getNavigationController().registerNavigationCallback(new NavigationCallback() { - @Override - public void onLoadStateChanged(boolean isLoading, boolean toDifferentDocument) { - mLoadProgressBar.setVisibility( - isLoading && toDifferentDocument ? View.VISIBLE : View.INVISIBLE); - } - - @Override - public void onLoadProgressChanged(double progress) { - mLoadProgressBar.setProgress((int) Math.round(100 * progress)); - } - }); - tab.setErrorPageCallback(new ErrorPageCallback() { - @Override - public boolean onBackToSafety() { - fragment.getActivity().onBackPressed(); - return true; - } - }); - mTabToFaviconFetcher.put(tab, tab.createFaviconFetcher(new FaviconCallback() { + }; + tab.registerTabCallback(tabCallback); + FaviconFetcher faviconFetcher = tab.createFaviconFetcher(new FaviconCallback() { @Override public void onFaviconChanged(Bitmap favicon) { updateFavicon(tab); } - })); + }); + mTabToPerTabState.put(tab, new PerTabState(faviconFetcher, tabCallback)); + } + + private void unregisterTabCallbacks(Tab tab) { + tab.setNewTabCallback(null); + tab.setFullscreenCallback(null); + tab.getNavigationController().unregisterNavigationCallback(mNavigationCallback); + tab.setErrorPageCallback(null); + PerTabState perTabState = mTabToPerTabState.get(tab); + assert perTabState != null; + tab.unregisterTabCallback(perTabState.mTabCallback); + perTabState.mFaviconFetcher.destroy(); + mTabToPerTabState.remove(tab); } private void closeTab(Tab tab) { @@ -594,6 +654,7 @@ if (mBrowser.getActiveTab() == null && !mPreviousTabList.isEmpty()) { mBrowser.setActiveTab(mPreviousTabList.remove(mPreviousTabList.size() - 1)); } + unregisterTabCallbacks(tab); } private Fragment getOrCreateBrowserFragment(Bundle savedInstanceState) { @@ -709,9 +770,10 @@ private void updateFavicon(@NonNull Tab tab) { if (tab == mBrowser.getActiveTab()) { - assert mTabToFaviconFetcher.containsKey(tab); + assert mTabToPerTabState.containsKey(tab); ((ImageView) findViewById(R.id.favicon_image_view)) - .setImageBitmap(mTabToFaviconFetcher.get(tab).getFaviconForCurrentNavigation()); + .setImageBitmap(mTabToPerTabState.get(tab) + .mFaviconFetcher.getFaviconForCurrentNavigation()); } } }