diff --git a/DEPS b/DEPS index e37e86bf..b8ef076b3 100644 --- a/DEPS +++ b/DEPS
@@ -199,7 +199,7 @@ # 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': '5a956ce54b35ca9efb4da87c29e09d33778bba69', + 'skia_revision': 'aa14b751ec92c01b908c1c44f184bc168005f690', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -211,11 +211,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': '6cc845bb0a603587ac36b900558d483e05f02f8c', + 'angle_revision': '2e54a1e7fc49e1c1c659d7be659b832954112106', # 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': '51045556acd0fe0a1b687ef00725a57f0f19a91b', + 'swiftshader_revision': '14dcbed947ce755af1fcbfb3ba8e643b4e769860', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -250,7 +250,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '5635d5edc489a19d8e6faef48c644942a4b3f777', + 'freetype_revision': 'd3befe1c72999805bc3960d29780cd8f505a180d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. @@ -278,7 +278,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': '71cbfd12184c9f1755d472f693081db140591811', + 'devtools_frontend_revision': 'f5d9ca20659a2d80f3d85178c85fb83b8c4cda53', # 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. @@ -314,11 +314,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'shaderc_revision': '73b54fac553a81f60f59e67c00606851b95df434', + 'shaderc_revision': 'ac375b4b8f699f26c697fab54348494a9911a7e6', # 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': 'fd5fd05db039710c797ee8bac5e6d999173e5fc3', + 'dawn_revision': 'f2a003d4e94cbb529d638e9a1b8a551c9f3371ab', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -678,7 +678,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'XfiL15_KnBhKANygHuqTd6sC98qNjsQr-9CVHjaOO1sC', + 'version': '3GRMk878gb4_w69FpkytItdValBJSnCiRix7DdYgaCsC', }, ], 'condition': 'checkout_android', @@ -1270,7 +1270,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'acc731df2fbbc812874dc3650b48c516f1732aff', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b998b78079b8d83e83cce03d5033ac7611d5d204', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1348,7 +1348,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'KCvPgDT9ElXgLDlESjoOiJOZUOdxGZR9UlQLZcdITKEC' + 'version': 'E4N2C-h-D4Q8yrrjhY-MF-wOIKLW6q4A1xxR7lAY57QC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1477,7 +1477,7 @@ }, 'src/third_party/usrsctp/usrsctplib': - Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '07f871bda23943c43c9e74cc54f25130459de830', + Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '37a9dc3e18bfdcc972946dff0206155cee6b5dd0', 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@8136d17f7954681a37d65630dc1ceeefcb2b5a35', @@ -1544,7 +1544,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': 'IVFOp-Te_OC8Hb0U5-sVhId98p1bYPyyIfuRG1_azZEC', + 'version': 'bndDOcFTE8fhEv3eYMFfXRk-9u1_2cE7UtJANTXxnKsC', }, ], 'dep_type': 'cipd', @@ -1554,7 +1554,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': 'blyrcy7Sj3SVM1D1ALLFTRtSxoOKvF0OWnGXubSAbyQC', + 'version': 'VKdCj6PUrZFaxbpwkU_ZBfi__KMY28BcRPUy2Kig7EUC', }, ], 'dep_type': 'cipd', @@ -1564,7 +1564,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/mac-amd64', - 'version': 'A1gA-0qf7jDyzvaC64y1M7gCo29AH4NKhihm_wregxsC', + 'version': 'wURoizH_SOJXQLqhoZ0Zz9ZsYd19jwbG4jNVfTSvizwC', }, ], 'dep_type': 'cipd', @@ -1578,7 +1578,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@bb909177c051195dd3aa762251521c7b3aee543b', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@df0912e564b3e549923d57294132e26f676b009b', 'condition': 'checkout_src_internal', }, @@ -1586,7 +1586,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'd2HjboYu_QYN9FwTV1LlSlgOSPGXGdVeDzsaug4mYj8C', + 'version': 'Dc324A45jFra-wmwYe5t54n-UQsaTaGxVmYQQTLkvdgC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1597,7 +1597,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'a7JNNdrIYqF1l0nhvhLyfntJzKyyTSAn3NGUmqI--TsC', + 'version': 'psOpkf4ytTeiy_Iuyyk1kAgvsdmXAHcD6wJ-MbztilMC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/system_webview_bundle.gni b/android_webview/system_webview_bundle.gni index 3fa013c..7edfdcde 100644 --- a/android_webview/system_webview_bundle.gni +++ b/android_webview/system_webview_bundle.gni
@@ -88,14 +88,6 @@ proguard_android_sdk_dep = webview_framework_dep } - # NOTE: Only sign bundle for official builds since this is very slow. - if (enable_chrome_android_internal && use_signing_keys && - is_official_build) { - sign_bundle = true - keystore_path = webview_keystore_path - keystore_name = webview_keystore_name - keystore_password = webview_keystore_password - } forward_variables_from(invoker, "*") } }
diff --git a/ash/accessibility/accessibility_controller_impl.cc b/ash/accessibility/accessibility_controller_impl.cc index e8b4a29b..1f484d4b 100644 --- a/ash/accessibility/accessibility_controller_impl.cc +++ b/ash/accessibility/accessibility_controller_impl.cc
@@ -627,7 +627,7 @@ user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); registry->RegisterIntegerPref( prefs::kAccessibilityScreenMagnifierMouseFollowingMode, - static_cast<int>(MagnifierMouseFollowingMode::kNone), + static_cast<int>(MagnifierMouseFollowingMode::kEdge), user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); registry->RegisterBooleanPref( prefs::kAccessibilityCaretHighlightEnabled, false,
diff --git a/ash/public/cpp/accessibility_controller_enums.h b/ash/public/cpp/accessibility_controller_enums.h index e421a91..3a222a72 100644 --- a/ash/public/cpp/accessibility_controller_enums.h +++ b/ash/public/cpp/accessibility_controller_enums.h
@@ -183,17 +183,16 @@ // written to prefs so they should not be changed. New values should be added at // the end. enum class MagnifierMouseFollowingMode { - // Default value, indicates no mouse following mode chosen. - kNone, - // Continuous following mode. - kContinuous, + kContinuous = 0, // Centered following mode. - kCentered, + kCentered = 1, // Edge following mode. - kEdge, + kEdge = 2, + + kMaxValue = kEdge }; } // namespace ash
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb index f4a910b..8f293f45 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb
@@ -70,7 +70,7 @@ <translation id="3140353188828248647">पता बार को फ़ोकस करें</translation> <translation id="3256109297135787951">अपने शेल्फ़ पर मौजूद किसी आइटम से हाइलाइट हटाएं</translation> <translation id="3288816184963444640">अभी वाली विंडो बंद करें</translation> -<translation id="3407560819924487926">काम का प्रबंधक सामने लाएं</translation> +<translation id="3407560819924487926">काम का मैनेजर सामने लाएं</translation> <translation id="3422679037938588196">अपनी खोज के पिछले मिलान पर जाएं</translation> <translation id="353037708190149633">अपनी मौजूदा विंडो में खुले सभी पेजों को नए फ़ोल्डर में बुकमार्क के रूप में सेव करें</translation> <translation id="355103131818127604">लिंक को बैकग्राउंड में नए टैब में खोलें</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index 39fe2efe..68d4340 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -576,6 +576,7 @@ <translation id="5992218262414051481">উচ্চ বৈষাদৃশ্যৰ ম’ড সক্ষম কৰা হ’ল। ইয়াক ট’গল অফ কৰিবলৈ আকৌ Ctrl+Search+H টিপক।</translation> <translation id="6018164090099858612">প্ৰতিবিম্বকৰণ ম’ড বন্ধ কৰি আছে</translation> <translation id="602001110135236999">বাওঁফাললৈ স্ক্ৰ’ল কৰক</translation> +<translation id="602472752137106327">আটাইবোৰ ডেস্ক ম'ডটোৰ পৰা ৱিণ্ড' দেখুৱাওক, ৰেডিঅ'ৰ বুটাম বাছনি কৰা হ'ল</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ছিগনেলৰ ক্ষমতা <ph name="SIGNAL_STRENGTH" />, আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে</translation> <translation id="6030495522958826102">স্ক্ৰীনখনৰ তলৰ বাওঁফালৰ কোণটোলৈ মেনুখন নিয়া হৈছে।</translation> <translation id="6032620807120418574">পূৰ্ণ স্ক্ৰীন ৰেকৰ্ড কৰিবলৈ যিকোনো ঠাইত ক্লিক কৰক</translation> @@ -674,6 +675,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{এটা অংক বাকী আছে}one{# টা অংক বাকী আছে}other{# টা অংক বাকী আছে}}</translation> <translation id="6878400149835617132">শ্বৰ্টকাট অফ কৰা হৈছে</translation> <translation id="6886172995547742638">আপোনাৰ <ph name="DEVICE_TYPE" />ৰ কাৰ্যদক্ষতা কমিব পাৰে। এটা প্ৰমাণীকৃত <ph name="PREFERRED_MINIMUM_POWER" /> ৱাট অথবা তাতকৈ উচ্চখাপৰ ইউএছবি-চি পাৱাৰ এডাপ্টৰ ব্যৱহাৰ কৰক।</translation> +<translation id="688631446150864480">অন্য ৱিণ্ড’ ব্যৱহাৰ কৰিবলৈ ডাউন এৰ' কীটো টিপক</translation> <translation id="6896758677409633944">প্ৰতিলিপি কৰক</translation> <translation id="6910714959251846841">এই আপডে’টটো কৰিবলৈ হ’লে আপোনাৰ ডিভাইচটো পাৱাৰৱাশ্ব কৰাটো প্ৰয়োজনীয়। শেহতীয়া <ph name="SYSTEM_APP_NAME" /> আপডে’টৰ বিষয়ে অধিক জানক।</translation> <translation id="6919251195245069855">আপোনাৰ স্মার্ট কার্ডখন চিনাক্ত কৰিব পৰা নগ'ল। আকৌ চেষ্টা কৰক।</translation> @@ -836,6 +838,7 @@ <translation id="8297006494302853456">দুৰ্বল</translation> <translation id="8308637677604853869">পূৰ্বৱৰ্তী মেনু</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ৱিণ্ড' বাছনি কৰা হ'ল</translation> <translation id="8351131234907093545">টোকা সৃষ্টি কৰক</translation> <translation id="8371779926711439835">এটা বৰ্ণ আগলৈ যাওক</translation> <translation id="8375916635258623388">এই <ph name="DEVICE_NAME" /> আৰু আপোনাৰ ফ’ন স্বয়ংক্ৰিয়ভাৱে সংযোগ হ’ব</translation> @@ -859,6 +862,7 @@ <translation id="8477270416194247200">বাতিল কৰিবলৈ Alt+Search বা Shift টিপক।</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" />এ <ph name="SPECIFIED_RESOLUTION" /> সমৰ্থন নকৰে। ৰিজ’লিউশ্বনটো <ph name="FALLBACK_RESOLUTION" />লৈ সলনি কৰা হৈছে। সালসলনিসমূহ ৰাখিবলৈ নিশ্চিত কৰকত ক্লিক কৰক। পূৰ্বৱৰ্তী ছেটিংসমূহ <ph name="TIMEOUT_SECONDS" />ত পুনঃস্থাপন কৰা হ’ব।</translation> <translation id="8513108775083588393">স্বয়ং-ঘূৰ্ণন</translation> +<translation id="851458219935658693">বৰ্তমানৰ ডেস্ক ম'ডটোৰ পৰা ৱিণ্ড' দেখুৱাওক, ৰেডিঅ'ৰ বুটাম বাছনি কৰা হ'ল</translation> <translation id="8517041960877371778">আপোনাৰ <ph name="DEVICE_TYPE" /> অন কৰি থোৱা অৱস্থাত চার্জ নহ'ব পাৰে।</translation> <translation id="8553395910833293175">ইতিমধ্যে আটাইবোৰ ডেস্কক দায়িত্ব প্ৰদান কৰা হৈছে।</translation> <translation id="8563862697512465947">জাননীৰ ছেটিংসমূহ</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index 652e443..6c9b349e 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">Modus mit hohem Kontrast aktiviert. Drücken Sie Strg + Suche + H, um ihn zu deaktivieren.</translation> <translation id="6018164090099858612">Spiegelungsmodus wird beendet</translation> <translation id="602001110135236999">Nach links scrollen</translation> +<translation id="602472752137106327">Fenster von allen Desktops werden angezeigt, Optionsfeld ausgewählt</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Signalstärke bei <ph name="SIGNAL_STRENGTH" />, von Ihrem Administrator verwaltet</translation> <translation id="6030495522958826102">Menü wurde nach links unten auf dem Bildschirm verschoben.</translation> <translation id="6032620807120418574">Klicken Sie auf eine beliebige Stelle, um den ganzen Bildschirm aufzunehmen</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Noch eine Ziffer}other{Noch # Ziffern}}</translation> <translation id="6878400149835617132">Tastenkombination deaktiviert</translation> <translation id="6886172995547742638">Die Leistungsfähigkeit Ihres <ph name="DEVICE_TYPE" /> kann hierdurch beeinträchtigt werden. Verwenden Sie ein zugelassenes USB-C-Netzteil mit einer Leistung von mindestens <ph name="PREFERRED_MINIMUM_POWER" /> W.</translation> +<translation id="688631446150864480">Drücken Sie den Abwärtspfeil, um zwischen Fenstern zu wechseln</translation> <translation id="6896758677409633944">Kopieren</translation> <translation id="6910714959251846841">Damit dieses Update installiert werden kann, muss auf Ihrem Gerät ein Powerwash durchgeführt werden. Informieren Sie sich über das aktuelle <ph name="SYSTEM_APP_NAME" />-Update.</translation> <translation id="6919251195245069855">Ihre Smartcard wurde nicht erkannt. Bitte versuchen Sie es noch einmal.</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">Schwach</translation> <translation id="8308637677604853869">Vorheriges Menü</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363">Fenster „<ph name="WINDOW_TITLE" />“ ausgewählt</translation> <translation id="8351131234907093545">Notiz erstellen</translation> <translation id="8371779926711439835">Weiter um einen Buchstaben</translation> <translation id="8375916635258623388"><ph name="DEVICE_NAME" /> und Ihr Smartphone werden automatisch miteinander verbunden</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">Drücken Sie Alt + Such-Taste oder die Umschalttaste, um die Aktivierung aufzuheben.</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> unterstützt <ph name="SPECIFIED_RESOLUTION" /> nicht. Die Auflösung wurde zu <ph name="FALLBACK_RESOLUTION" /> geändert. Bitte bestätigen, um die Änderungen beizubehalten. Die vorherigen Einstellungen werden in <ph name="TIMEOUT_SECONDS" /> wiederhergestellt.</translation> <translation id="8513108775083588393">Autom. drehen</translation> +<translation id="851458219935658693">Fenster des aktuellen Desktops werden angezeigt, Optionsfeld ausgewählt</translation> <translation id="8517041960877371778">Ihr <ph name="DEVICE_TYPE" /> wird möglicherweise nicht aufgeladen, wenn es eingeschaltet ist.</translation> <translation id="8553395910833293175">Ist bereits allen Desktops zugewiesen.</translation> <translation id="8563862697512465947">Benachrichtigungseinstellungen</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index a492c94..d9e33568b 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -416,7 +416,7 @@ <translation id="4505050298327493054">Mahaigain aktiboa.</translation> <translation id="4513946894732546136">Iritzia</translation> <translation id="4527045527269911712">Bluetooth bidezko "<ph name="DEVICE_NAME" />" gailuak parekatzeko baimena nahi du.</translation> -<translation id="453661520163887813"><ph name="TIME" /> geratzen dira guztiz kargatu arte</translation> +<translation id="453661520163887813"><ph name="TIME" /> guztiz kargatu arte</translation> <translation id="4538824937723742295">Atera pantaila osoaren argazkia</translation> <translation id="4544483149666270818">Hautatu grabatu nahi duzun leihoa</translation> <translation id="4560576029703263363">Aktibatuta</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index 11261660..9b3ad0cb 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">Le mode Contraste élevé est activé. Appuyez de nouveau sur Ctrl+Recherche+H pour le désactiver.</translation> <translation id="6018164090099858612">Sortie du mode Miroir…</translation> <translation id="602001110135236999">Vers la gauche</translation> +<translation id="602472752137106327">Afficher toutes les fenêtres du bureau, case d'option cochée</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, force du signal : <ph name="SIGNAL_STRENGTH" />, géré par votre administrateur</translation> <translation id="6030495522958826102">Le menu a été déplacé dans l'angle inférieur gauche de l'écran.</translation> <translation id="6032620807120418574">Cliquez n'importe où pour capturer tout l'écran</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{1 chiffre manquant}one{# chiffre manquant}other{# chiffres manquants}}</translation> <translation id="6878400149835617132">Raccourci désactivé</translation> <translation id="6886172995547742638">Cela peut nuire aux performances de votre <ph name="DEVICE_TYPE" />. Utilisez un adaptateur secteur USB-C de <ph name="PREFERRED_MINIMUM_POWER" /> W ou plus.</translation> +<translation id="688631446150864480">Appuyez sur la flèche vers le bas pour changer de fenêtre</translation> <translation id="6896758677409633944">Copier</translation> <translation id="6910714959251846841">Cette mise à jour nécessite que vous utilisiez la fonctionnalité Powerwash sur votre appareil. Obtenez de plus amples informations sur la dernière mise à jour <ph name="SYSTEM_APP_NAME" />.</translation> <translation id="6919251195245069855">Impossible de reconnaître votre carte à puce. Veuillez réessayer.</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">Faible</translation> <translation id="8308637677604853869">Menu précédent</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363">Fenêtre <ph name="WINDOW_TITLE" /> sélectionnée</translation> <translation id="8351131234907093545">Créer une note</translation> <translation id="8371779926711439835">Avancer par lettre</translation> <translation id="8375916635258623388">L'appareil <ph name="DEVICE_NAME" /> et votre téléphone seront associés automatiquement</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">Appuyez sur Alt+Rechercher ou Maj pour annuler.</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> n'est pas compatible avec la résolution <ph name="SPECIFIED_RESOLUTION" />. La résolution <ph name="FALLBACK_RESOLUTION" /> sera utilisée à la place. Cliquez sur "Confirmer" pour conserver les modifications. Les paramètres précédents seront restaurés dans <ph name="TIMEOUT_SECONDS" />.</translation> <translation id="8513108775083588393">Rotation auto</translation> +<translation id="851458219935658693">Afficher les fenêtres du bureau actuel, case d'option cochée</translation> <translation id="8517041960877371778">Il est possible que votre appareil <ph name="DEVICE_TYPE" /> ne se recharge pas lorsqu'il est allumé.</translation> <translation id="8553395910833293175">Association déjà faite sur tous les bureaux.</translation> <translation id="8563862697512465947">Paramètres de notification</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index 5bad2d6..76e7f53 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -111,7 +111,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> पर स्क्रीन शेयर कर रहा है</translation> <translation id="1885785240814121742">फ़िंगरप्रिंट से अनलॉक करें</translation> <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="1919743966458266018">काम के मैनेजर को खोलने का शॉर्टकट बदल गया है. कृपया <ph name="OLD_SHORTCUT" /> के बजाय <ph name="NEW_SHORTCUT" /> का उपयोग करें.</translation> <translation id="1923539912171292317">अपने-आप क्लिक</translation> <translation id="1928739107511554905">अपडेट पाने के लिए, अटैच किए गए कीबोर्ड से अपने Chromebook को रीस्टार्ट करने के लिए टचस्क्रीन का इस्तेमाल करें.</translation> <translation id="1951012854035635156">Assistant</translation> @@ -506,7 +506,7 @@ <translation id="5331975486040154427">USB-C डिवाइस (बायां पिछला पोर्ट)</translation> <translation id="5352250171825660495">गहरे रंग वाली थीम चालू है</translation> <translation id="5379115545237091094">कई बार कोशिश की जा चुकी है</translation> -<translation id="5397578532367286026">chrome.com पर इस उपयोगकर्ता के उपयोग और इतिहास से जुड़ी जानकारी की प्रबंधक (<ph name="MANAGER_EMAIL" />) समीक्षा कर सकता है.</translation> +<translation id="5397578532367286026">chrome.com पर इस उपयोगकर्ता के उपयोग और इतिहास से जुड़ी जानकारी की मैनेजर (<ph name="MANAGER_EMAIL" />) समीक्षा कर सकता है.</translation> <translation id="5400461572260843123">फटाफट सेटिंग, सूचना केंद्र को ऐक्सेस करने के लिए, सर्च + बाएं तीर के निशान को दबाएं.</translation> <translation id="5426063383988017631">सेटिंग मेन्यू को बंद किया गया</translation> <translation id="5428899915242071344">टेक्स्ट चुनना शुरू करें</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index 7069db7..cd54adc 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">Жоғары контраст режимі қосылды. Оны өшіру үшін қайтадан Ctrl+Search+H пернелерін басыңыз.</translation> <translation id="6018164090099858612">Айна режимінен шығуда</translation> <translation id="602001110135236999">Солға айналдыру</translation> +<translation id="602472752137106327">Терезелерді барлық жұмыс үстелінен көрсету, ауыстырып қосқыш таңдалды</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, сигнал күші: <ph name="SIGNAL_STRENGTH" />, әкімші басқарады</translation> <translation id="6030495522958826102">Мәзір экранның төменгі сол жақ бұрышына жылжытылды.</translation> <translation id="6032620807120418574">Толық экранды жазу үшін кез келген жерді басыңыз.</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Бір цифр қалды.}other{# цифр қалды.}}</translation> <translation id="6878400149835617132">Таңбаша өшірілді</translation> <translation id="6886172995547742638"><ph name="DEVICE_TYPE" /> құрылғысы нашар жұмыс істеуі мүмкін. Сертификаты бар <ph name="PREFERRED_MINIMUM_POWER" /> Вт немесе одан жоғары кернеулі USB-C қуат адаптерін пайдаланыңыз.</translation> +<translation id="688631446150864480">Терезелерді ауыстыру үшін төменге бағыттауыш пернені басыңыз.</translation> <translation id="6896758677409633944">Көшіру</translation> <translation id="6910714959251846841">Бұл жаңартылған нұсқаны орнату үшін құрылғыны зауыттық параметрлерге қайтару қажет. <ph name="SYSTEM_APP_NAME" /> қолданбасының ең жаңа нұсқасы туралы толығырақ.</translation> <translation id="6919251195245069855">Смарт карта анықталмады. Қайталап көріңіз.</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">Әлсіз</translation> <translation id="8308637677604853869">Алдыңғы мәзір</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> терезесі таңдалды</translation> <translation id="8351131234907093545">Ескертпе жасау</translation> <translation id="8371779926711439835">Бір әріпке алға жылжу</translation> <translation id="8375916635258623388"><ph name="DEVICE_NAME" /> және телефоныңыз автоматты түрде жалғанады</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">Бас тарту үшін Alt+Іздеу не Shift пернесін басыңыз.</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> дисплейі <ph name="SPECIFIED_RESOLUTION" /> ажыратымдылығына қолдау көрсетпейді. Ажыратымдылық <ph name="FALLBACK_RESOLUTION" /> етіп өзгертілді. Өзгерістерді сақтау үшін "Растау" түймесін басыңыз. Алдыңғы параметрлер <ph name="TIMEOUT_SECONDS" /> кейін қалпына келтіріледі.</translation> <translation id="8513108775083588393">Автоматты бұру</translation> +<translation id="851458219935658693">Терезелерді қазіргі жұмыс үстелінен көрсету, ауыстырып қосқыш таңдалды.</translation> <translation id="8517041960877371778"><ph name="DEVICE_TYPE" /> іске қосылғанда зарядталмауы мүмкін.</translation> <translation id="8553395910833293175">Барлық жұмыс үстеліне әлдеқашан тағайындалған.</translation> <translation id="8563862697512465947">Хабарландыру параметрлері</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb index 3a43dbb..5fed116 100644 --- a/ash/strings/ash_strings_ky.xtb +++ b/ash/strings/ash_strings_ky.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">Жогорку контраст режими иштетилди. Аны өчүрүү үчүн Ctrl+Search+H баскычтарын кайра басыңыз.</translation> <translation id="6018164090099858612">Күзгү режиминен чыгууда</translation> <translation id="602001110135236999">Солго сыдыруу</translation> +<translation id="602472752137106327">Бардык иш такталардагы терезелерди көрсөтүү, радио баскычы тандалды</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Сигналдын күчү <ph name="SIGNAL_STRENGTH" />, Администраторуңуз башкарат</translation> <translation id="6030495522958826102">Меню экрандын төмөнкү сол бурчуна жылдырылды.</translation> <translation id="6032620807120418574">Толук экранды жаздыруу үчүн каалаган жерин басыңыз</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{Бир сан калды}other{# сан калды}}</translation> <translation id="6878400149835617132">Ыкчам баскыч өчүрүлдү</translation> <translation id="6886172995547742638"><ph name="DEVICE_TYPE" /> түзмөгүңүз начар иштеши мүмкүн. Тастыкталган <ph name="PREFERRED_MINIMUM_POWER" /> Вт же андан жогору USB-C кубаттагыч адаптерин колдонуңуз.</translation> +<translation id="688631446150864480">Терезелерди которуштуруу үчүн Ылдый жебени басыңыз</translation> <translation id="6896758677409633944">Көчүрүү</translation> <translation id="6910714959251846841">Бул жаңыртууну орнотуу үчүн түзмөгүңүздү жууп салуу талап кылынат. <ph name="SYSTEM_APP_NAME" /> колдонмосундагы акыркы жаңыртуу жөнүндө кененирээк маалымат алуу.</translation> <translation id="6919251195245069855">Акылдуу картаңыз таанылган жок. Кайталап көрүңүз.</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">Начар</translation> <translation id="8308637677604853869">Мурунку меню</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> терезеси тандалды</translation> <translation id="8351131234907093545">Эскертүү түзүү</translation> <translation id="8371779926711439835">Бир тамга алдыга өтүү</translation> <translation id="8375916635258623388">Бул <ph name="DEVICE_NAME" /> түзмөгү телефонуңузга автоматтык түрдө туташат</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">Өчүрүп коюу үчүн Alt+Search же Shift баскычтарын басыңыз.</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> дааналыкты колдоого албайт. Дааналыгы төмөнкүгө өзгөртүлдү: <ph name="FALLBACK_RESOLUTION" />. Өзгөртүүлөрдү сактоо үчүн "Ырастоо" баскычын басыңыз. Мурунку жөндөөлөр <ph name="TIMEOUT_SECONDS" /> кийин калыбына келтирилет.</translation> <translation id="8513108775083588393">Авто буруу</translation> +<translation id="851458219935658693">Учурдагы иш тактадагы терезелерди көрсөтүү, радио баскычы тандалды</translation> <translation id="8517041960877371778"><ph name="DEVICE_TYPE" /> түзмөгүңүз өчүп турганда кубатталбай калышы мүмкүн.</translation> <translation id="8553395910833293175">Бардык иш такталар дайындалган.</translation> <translation id="8563862697512465947">Билдирмелердин жөндөөлөрү</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index a708134a..185e956 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -575,6 +575,7 @@ <translation id="5992218262414051481">ഉയർന്ന ദൃശ്യതീവ്രത മോഡ് പ്രവർത്തനക്ഷമമാക്കി. ഇത് ഓഫാക്കാൻ, Ctrl+തിരയൽ+H വീണ്ടും അമർത്തുക.</translation> <translation id="6018164090099858612">മിറർ മോഡിൽ നിന്ന് പുറത്തുകടക്കുന്നു</translation> <translation id="602001110135236999">ഇടത്തോട്ട് സ്ക്രോൾ ചെയ്യുക</translation> +<translation id="602472752137106327">എല്ലാ ഡെസ്കുകളിൽ നിന്നുമുള്ള വിൻഡോകൾ കാണിക്കുക, റേഡിയോ ബട്ടൺ തിരഞ്ഞെടുത്തു</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, സിഗ്നൽ ശക്തി <ph name="SIGNAL_STRENGTH" />, നിങ്ങളുടെ അഡ്മിൻ മാനേജ് ചെയ്യുന്നത്</translation> <translation id="6030495522958826102">സ്ക്രീനിന്റെ ചുവടെ ഇടത് കോണിലേക്ക് മെനു നീക്കിയിരിക്കുന്നു.</translation> <translation id="6032620807120418574">പൂർണ്ണ സ്ക്രീൻ റെക്കോർഡ് ചെയ്യാൻ എവിടെയെങ്കിലും ക്ലിക്ക് ചെയ്യുക</translation> @@ -673,6 +674,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ഒരു അക്കം ശേഷിക്കുന്നു}other{# അക്കങ്ങൾ ശേഷിക്കുന്നു}}</translation> <translation id="6878400149835617132">കുറുക്കുവഴി ഓഫാക്കിയിരിക്കുന്നു</translation> <translation id="6886172995547742638">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> ഉപകരണം കുറഞ്ഞ പ്രകടനം കാഴ്ച വച്ചേക്കാം. സർട്ടിഫൈ ചെയ്ത <ph name="PREFERRED_MINIMUM_POWER" />W അല്ലെങ്കിൽ USB-C പവർ അഡാപ്റ്റർ ഉപയോഗിക്കുക.</translation> +<translation id="688631446150864480">വിന്ഡോകോൾക്കിടയിൽ മാറാൻ താഴേക്കുള്ള അമ്പടയാള കീ അമർത്തുക</translation> <translation id="6896758677409633944">പകര്ത്തുക</translation> <translation id="6910714959251846841">ഈ അപ്ഡേറ്റിനായി നിങ്ങളുടെ ഉപകരണം powerwash ചെയ്യേണ്ടതുണ്ട്. ഏറ്റവും പുതിയ <ph name="SYSTEM_APP_NAME" /> അപ്ഡേറ്റിനെ കുറിച്ച് കൂടുതലറിയുക.</translation> <translation id="6919251195245069855">നിങ്ങളുടെ സ്മാർട്ട് കാർഡ് തിരിച്ചറിയാൻ കഴിഞ്ഞില്ല. വീണ്ടും ശ്രമിക്കൂ.</translation> @@ -838,6 +840,7 @@ <translation id="8297006494302853456">ദുര്ബലം</translation> <translation id="8308637677604853869">മുൻ മെനു</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> വിന്ഡോ തിരഞ്ഞടുത്തു</translation> <translation id="8351131234907093545">കുറിപ്പ് സൃഷ്ടിക്കുക</translation> <translation id="8371779926711439835">ഒരക്ഷരം മുന്നിലേക്ക് പോവുക</translation> <translation id="8375916635258623388">ഈ <ph name="DEVICE_NAME" /> ഉം നിങ്ങളുടെ ഫോണും സ്വമേധയാ കണക്റ്റ് ചെയ്യും</translation> @@ -861,6 +864,7 @@ <translation id="8477270416194247200">റദ്ദാക്കാൻ Alt+തിരയൽ അല്ലെങ്കിൽ Shift അമർത്തുക.</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" />, <ph name="SPECIFIED_RESOLUTION" /> എന്നതിനെ പിന്തുണയ്ക്കുന്നില്ല. റെസല്യൂഷൻ <ph name="FALLBACK_RESOLUTION" /> എന്നതിലേക്ക് മാറ്റി. മാറ്റങ്ങൾ നിലനിർത്താൻ 'സ്ഥിരീകരിക്കുക' ക്ലിക്ക് ചെയ്യുക. മുമ്പത്തെ ക്രമീകരണം <ph name="TIMEOUT_SECONDS" /> സെക്കൻഡിൽ പുനഃസ്ഥാപിക്കും.</translation> <translation id="8513108775083588393">സ്വയം തിരിയുക</translation> +<translation id="851458219935658693">നിലവിലെ ഡെസ്കിൽ നിന്ന് വിൻഡോകൾ കാണിക്കുക, റേഡിയോ ബട്ടൺ തിരഞ്ഞെടുത്തു</translation> <translation id="8517041960877371778">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> ഓണായിരിക്കുമ്പോൾ അത് ചാർജ്ജാകാതിരിക്കാം.</translation> <translation id="8553395910833293175">എല്ലാ ഡെസ്ക്കുകൾക്കും ഇതിനകം അസൈൻ ചെയ്തിട്ടുണ്ട്.</translation> <translation id="8563862697512465947">വിജ്ഞാപന ക്രമീകരണങ്ങള്</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 6d958c8..cc9f8e9 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">उच्च कन्ट्रास्ट मोड सक्षम गरिएको छ। यसलाई टगल गर्दै निष्क्रिय पार्न फेरि Ctrl+Search+H थिच्नुहोस्।</translation> <translation id="6018164090099858612">मिरर मोडबाट बाहिर निस्कँदै</translation> <translation id="602001110135236999">बायाँतिर स्क्रोल गर्नुहोस्</translation> +<translation id="602472752137106327">सबै डेस्कमा भएका विन्डोहरू देखाइयोस्, रेडियो बटन चयन गरियो</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, सिग्नलको क्षमता <ph name="SIGNAL_STRENGTH" />, तपाईंका प्रशासकले व्यवस्थित गर्नुभएको छ</translation> <translation id="6030495522958826102">मेनु सारेर स्क्रिनको फेदको बायाँ कुनामा लगियो।</translation> <translation id="6032620807120418574">फुल स्क्रिनमा रेकर्ड गर्न कुनै पनि ठाउँमा क्लिक गर्नुहोस्</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{एउटा अङ्क बाँकी छ}other{# वटा अङ्क बाँकी छन्}}</translation> <translation id="6878400149835617132">सर्टकट निष्क्रिय पारियो</translation> <translation id="6886172995547742638">तपाईंको <ph name="DEVICE_TYPE" /> को कार्यक्षमता घट्न सक्छ। <ph name="PREFERRED_MINIMUM_POWER" />W वा सोभन्दा बढी क्षमताको आधिकारिक USB-C पावर एड्याप्टर प्रयोग गर्नुहोस्।</translation> +<translation id="688631446150864480">एउटा विन्डोबाट अर्को विन्डोमा जान डाउन एरो की थिच्नुहोस्</translation> <translation id="6896758677409633944">प्रतिलिपि गर्नुहोस्</translation> <translation id="6910714959251846841">यस अद्यावधिका लागि तपाईंको यन्त्र पावरवास गर्नु पर्ने हुन्छ। <ph name="SYSTEM_APP_NAME" /> को पछिल्लो अद्यावधिकबारे थप जान्नुहोस्।</translation> <translation id="6919251195245069855">तपाईंको स्मार्ट कार्ड पहिचान गर्न सकिएन। फेरि प्रयास गर्नुहोस्।</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">कमजोर</translation> <translation id="8308637677604853869">अघिल्लो मेनु</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> नामक विन्डो चयन गरियो</translation> <translation id="8351131234907093545">टिपोट सिर्जना गर्नुहोस्</translation> <translation id="8371779926711439835">कर्सरलाई एक अक्षर अगाडि लैजानुहोस्</translation> <translation id="8375916635258623388">यो <ph name="DEVICE_NAME" /> र तपाईंको फोन स्वतः जोडिने छन्</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">रद्द गर्न Alt+Search वा Shift बटनमा थिच्नुहोस्।</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> ले <ph name="SPECIFIED_RESOLUTION" /> समर्थन गर्दैन। रिजोल्युसन परिवर्तन गरी<ph name="FALLBACK_RESOLUTION" /> पारियो। परिवर्तनहरू सुरक्षित गर्न पुष्टि गर्नुहोस् नामक बटनमा क्लिक गर्नुहोस्। अघिल्ला सेटिङहरूलाई <ph name="TIMEOUT_SECONDS" /> भित्र पुनर्स्थापना गरिने छ।</translation> <translation id="8513108775083588393">स्वतः परिक्रमा</translation> +<translation id="851458219935658693">हालको डेस्कमा भएका विन्डोहरू देखाइयोस्, रेडियो बटन चयन गरियो</translation> <translation id="8517041960877371778">खुला हुँदा तपाईँको <ph name="DEVICE_TYPE" /> चार्ज नहुन सक्छ।</translation> <translation id="8553395910833293175">सबै डेस्कलाई काम जिम्मा दिइसकिएको छ।</translation> <translation id="8563862697512465947">सूचनाका सेटिङहरू</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index 9e4d96e..448f2b7 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -575,6 +575,7 @@ <translation id="5992218262414051481">ਉੱਚ ਵਖਰੇਵਾਂ ਮੋਡ ਚਾਲੂ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਸਨੂੰ ਬੰਦ 'ਤੇ ਟੌਗਲ ਕਰਨ ਲਈ ਦੁਬਾਰਾ Ctrl+Search+H ਦਬਾਓ।</translation> <translation id="6018164090099858612">"ਮਿਰਰ ਮੋਡ" ਤੋਂ ਬਾਹਰ ਨਿਕਲਿਆ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="602001110135236999">ਖੱਬੇ ਪਾਸੇ ਸਕ੍ਰੋਲ ਕਰੋ</translation> +<translation id="602472752137106327">ਸਾਰੇ ਡੈਸਕਾਂ ਤੋਂ ਉਹ ਵਿੰਡੋ ਦਿਖਾਓ ਜਿਸ ਵਿੱਚ ਰੇਡੀਓ ਬਟਨ ਨੂੰ ਚੁਣਿਆ ਹੋਵੇ</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ <ph name="SIGNAL_STRENGTH" />, ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation> <translation id="6030495522958826102">ਮੀਨੂ ਨੂੰ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਖੱਬੇ ਕੋਨੇ ਵਿੱਚ ਲਿਜਾਇਆ ਗਿਆ।</translation> <translation id="6032620807120418574">ਪੂਰੀ ਸਕ੍ਰੀਨ ਨੂੰ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਕਿਤੇ ਵੀ ਕਲਿੱਕ ਕਰੋ</translation> @@ -673,6 +674,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ਇੱਕ ਅੰਕ ਬਾਕੀ}one{# ਅੰਕ ਬਾਕੀ}other{# ਅੰਕ ਬਾਕੀ}}</translation> <translation id="6878400149835617132">ਸ਼ਾਰਟਕੱਟ ਬੰਦ ਹੈ</translation> <translation id="6886172995547742638">ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ <ph name="DEVICE_TYPE" /> ਉਮੀਦ ਨਾਲੋਂ ਘੱਟ ਕਾਰਗੁਜ਼ਾਰੀ ਕਰੇ। ਕੋਈ ਪ੍ਰਮਾਣਿਤ <ph name="PREFERRED_MINIMUM_POWER" />W ਜਾਂ ਵੱਧ ਦਾ USB-C ਪਾਵਰ ਅਡਾਪਟਰ ਵਰਤੋ।</translation> +<translation id="688631446150864480">ਵਿੰਡੋ ਸਵਿੱਚ ਕਰਨ ਲਈ ਹੇਠਾਂ ਤੀਰ ਵਾਲੀ ਕੁੰਜੀ ਦਬਾਓ</translation> <translation id="6896758677409633944">ਕਾਪੀ ਕਰੋ</translation> <translation id="6910714959251846841">ਇਸ ਅੱਪਡੇਟ ਲਈ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਪਾਵਰਵਾਸ਼ ਕੀਤੇ ਜਾਣ ਦੀ ਲੋੜ ਹੈ। ਨਵੀਨਤਮ <ph name="SYSTEM_APP_NAME" /> ਅੱਪਡੇਟ ਬਾਰੇ ਹੋਰ ਜਾਣੋ।</translation> <translation id="6919251195245069855">ਤੁਹਾਡਾ ਸਮਾਰਟ ਕਾਰਡ ਪਛਾਣਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> @@ -838,6 +840,7 @@ <translation id="8297006494302853456">ਕਮਜ਼ੋਰ</translation> <translation id="8308637677604853869">ਪਿਛਲਾ ਮੀਨੂ</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ਵਿੰਡੋ ਨੂੰ ਚੁਣਿਆ ਗਿਆ</translation> <translation id="8351131234907093545">ਨੋਟ-ਕਥਨ ਬਣਾਓ</translation> <translation id="8371779926711439835">ਇੱਕ ਅੱਖਰ ਅੱਗੇ ਜਾਓ</translation> <translation id="8375916635258623388">ਇਹ <ph name="DEVICE_NAME" /> ਅਤੇ ਤੁਹਾਡਾ ਫ਼ੋਨ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਕਨੈਕਟ ਹੋ ਜਾਣਗੇ</translation> @@ -861,6 +864,7 @@ <translation id="8477270416194247200">ਰੱਦ ਕਰਨ ਲਈ Alt+Search ਜਾਂ Shift ਦਬਾਓ।</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ। ਰੈਜ਼ੋਲਿਊਸ਼ਨ <ph name="FALLBACK_RESOLUTION" /> ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ ਸੀ। ਤਬਦੀਲੀਆਂ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਲਈ 'ਤਸਦੀਕ ਕਰੋ' 'ਤੇ ਕਲਿੱਕ ਕਰੋ। ਪਿਛਲੀਆਂ ਸੈਟਿੰਗਾਂ ਨੂੰ <ph name="TIMEOUT_SECONDS" /> ਵਿੱਚ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> <translation id="8513108775083588393">ਸਵੈ-ਘੁੰਮਾਓ</translation> +<translation id="851458219935658693">ਮੌਜੂਦਾ ਡੈਸਕ ਤੋਂ ਉਹ ਵਿੰਡੋ ਦਿਖਾਓ ਜਿਸ ਵਿੱਚ ਰੇਡੀਓ ਬਟਨ ਨੂੰ ਚੁਣਿਆ ਹੋਵੇ</translation> <translation id="8517041960877371778">ਤੁਹਾਡੀ <ph name="DEVICE_TYPE" /> ਚਾਲੂ ਹੋਣ ਵੇਲੇ ਚਾਰਜ ਨਹੀਂ ਹੋ ਸਕਦੀ।</translation> <translation id="8553395910833293175">ਪਹਿਲਾਂ ਹੀ ਸਾਰੇ ਡੈਸਕਾਂ ਦੇ ਜ਼ਿੰਮੇ ਲਗਾਇਆ ਗਿਆ।</translation> <translation id="8563862697512465947">ਸੂਚਨਾ ਸੈਟਿੰਗਾਂ</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 85006d7a..aecd56b5 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">அதிக ஒளி மாறுபாட்டுப் பயன்முறை இயக்கப்பட்டது. அதை முடக்க, Ctrl+தேடல்+Hஐ மீண்டும் அழுத்தவும்.</translation> <translation id="6018164090099858612">கண்ணாடிப் பயன்முறையிலிருந்து வெளியேறுகிறது</translation> <translation id="602001110135236999">இடப்புறம் செல்</translation> +<translation id="602472752137106327">அனைத்து டெஸ்க்குகளிலும் உள்ள சாளரங்களைக் காட்டும், ரேடியோ பட்டன் தேர்ந்தெடுக்கப்பட்டது</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, சிக்னல் வலிமை: <ph name="SIGNAL_STRENGTH" />, உங்கள் நிர்வாகி நிர்வகிக்கிறார்</translation> <translation id="6030495522958826102">திரையின் கீழ் இடது மூலைக்கு மெனு நகர்த்தப்பட்டது.</translation> <translation id="6032620807120418574">முழுத்திரையையும் ரெக்கார்டு செய்ய எங்கேனும் கிளிக் செய்யவும்</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{இன்னும் ஓர் இலக்கத்தை உள்ளிட வேண்டும்}other{இன்னும் # இலக்கங்களை உள்ளிட வேண்டும்}}</translation> <translation id="6878400149835617132">ஷார்ட்கட் முடக்கப்பட்டுள்ளது</translation> <translation id="6886172995547742638">உங்கள் <ph name="DEVICE_TYPE" /> இன் செயல்திறன் குறையலாம். சான்றளிக்கப்பட்ட <ph name="PREFERRED_MINIMUM_POWER" />W அல்லது அதற்கும் அதிகமான USB-C பவர் அடாப்டரைப் பயன்படுத்தவும்.</translation> +<translation id="688631446150864480">சாளரங்களுக்கு இடையே மாற கீழ்நோக்கிய அம்புக்குறி விசையை அழுத்துக</translation> <translation id="6896758677409633944">நகலெடு</translation> <translation id="6910714959251846841">இந்தப் புதுப்பிப்பைப் பெற, உங்கள் சாதனத்தைப் பவர்வாஷ் செய்ய வேண்டும். சமீபத்திய <ph name="SYSTEM_APP_NAME" /> புதுப்பிப்பைப் பற்றி மேலும் அறிக.</translation> <translation id="6919251195245069855">உங்கள் ஸ்மார்ட் கார்டை அடையாளம் காண முடியவில்லை. மீண்டும் முயலவும்.</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">வலுவாக இல்லை</translation> <translation id="8308637677604853869">முந்தைய மெனு</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> சாளரம் தேர்ந்தெடுக்கப்பட்டது</translation> <translation id="8351131234907093545">குறிப்பை உருவாக்கு</translation> <translation id="8371779926711439835">எழுத்து வாரியாக முன்செல்</translation> <translation id="8375916635258623388">இந்த <ph name="DEVICE_NAME" /> உம் உங்கள் ஃபோனும் தானாக இணைக்கப்படும்</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">ரத்துசெய்ய, Alt+தேடல் அல்லது Shift விசையை அழுத்தவும்.</translation> <translation id="8492573885090281069"><ph name="SPECIFIED_RESOLUTION" /> தெளிவுத்திறனை <ph name="DISPLAY_NAME" /> ஆதரிக்கவில்லை. தெளிவுத்திறன் <ph name="FALLBACK_RESOLUTION" />க்கு மாற்றப்பட்டது. மாற்றங்களை உறுதிசெய்ய 'உறுதிப்படுத்து' என்பதைக் கிளிக் செய்யவும். இன்னும் <ph name="TIMEOUT_SECONDS" /> இல் முந்தைய அமைப்புகளுக்கு மீட்டமைக்கப்படும்.</translation> <translation id="8513108775083588393">தானாகச் சுழற்று</translation> +<translation id="851458219935658693">தற்போதைய டெஸ்கில் உள்ள சாளரங்களைக் காட்டும், ரேடியோ பட்டன் தேர்ந்தெடுக்கப்பட்டது</translation> <translation id="8517041960877371778">இயக்கப்பட்டிருக்கும் போது உங்கள் <ph name="DEVICE_TYPE" /> இல் சார்ஜ் ஏறாது.</translation> <translation id="8553395910833293175">எல்லா டெஸ்க்குகளுக்கும் ஏற்கெனவே ஒதுக்கப்பட்டுள்ளது.</translation> <translation id="8563862697512465947">அறிவிப்பு அமைப்புகள்</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index f3714c5..b5fe91a0 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -578,6 +578,7 @@ <translation id="5992218262414051481">అధిక క్రాంటాస్ట్ మోడ్ ఆరంభించబడింది. దానిని ఆఫ్కు టోగుల్ చేయడం కోసం మళ్లీ Ctrl+Search+Hను నొక్కండి.</translation> <translation id="6018164090099858612">ప్రతిబింబ మోడ్ నుండి నిష్క్రమిస్తోంది</translation> <translation id="602001110135236999">ఎడమకు స్క్రోల్ చేయి</translation> +<translation id="602472752137106327">అన్ని డెస్క్ల నుండి విండోలను చూపండి, రేడియో బటన్ ఎంచుకోబడింది</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది</translation> <translation id="6030495522958826102">స్క్రీన్లో కింద ఎడమ వైపు మూలకు మెనూ తరలించబడింది.</translation> <translation id="6032620807120418574">ఫుల్ స్క్రీన్ను రికార్డ్ చేయడానికి ఎక్కడైనా క్లిక్ చేయండి</translation> @@ -676,6 +677,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ఒక అంకె మిగిలింది}other{# అంకెలు మిగిలాయి}}</translation> <translation id="6878400149835617132">షార్ట్కట్ ఆఫ్ చేయబడింది</translation> <translation id="6886172995547742638">మీ <ph name="DEVICE_TYPE" /> తక్కువ పనితీరుకు లోనవ్వొచ్చు. సర్టిఫై చేయబడిన <ph name="PREFERRED_MINIMUM_POWER" />W లేదా అంతకంటే ఎక్కువ USB-C పవర్ అడాప్టర్ను ఉపయోగించండి.</translation> +<translation id="688631446150864480">విండోలను స్విచ్ చేయడానికి కింది వైపు బాణాన్ని నొక్కండి</translation> <translation id="6896758677409633944">కాపీ చేయి</translation> <translation id="6910714959251846841">ఈ అప్డేట్ కోసం మీ పరికరాన్ని పవర్వాష్ చేయాలి. తాజా <ph name="SYSTEM_APP_NAME" /> అప్డేట్ గురించి మరింత తెలుసుకోండి.</translation> <translation id="6919251195245069855">మీ స్మార్ట్ కార్డ్ను గుర్తించడం సాధ్యం కాలేదు. మళ్ళీ ప్రయత్నించండి.</translation> @@ -841,6 +843,7 @@ <translation id="8297006494302853456">బలహీనం</translation> <translation id="8308637677604853869">మునుపటి మెనూ</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> విండో ఎంచుకోబడింది</translation> <translation id="8351131234907093545">గమనికను సృష్టించండి</translation> <translation id="8371779926711439835">ఒక అక్షరం ముందుకు</translation> <translation id="8375916635258623388">ఈ <ph name="DEVICE_NAME" /> మరియు మీ ఫోన్ ఆటోమెటిక్గా కనెక్ట్ చేయబడతాయి</translation> @@ -864,6 +867,7 @@ <translation id="8477270416194247200">రద్దు చేయడానికి Alt+Search లేదా Shiftను నొక్కండి.</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" />ను సపోర్ట్ చేయదు. <ph name="FALLBACK_RESOLUTION" />కు రిజల్యూషన్ మార్చబడింది. మార్పులను అలాగే ఉంచడానికి 'ధృవీకరించు'ను క్లిక్ చేయండి. మునుపటి సెట్టింగ్లు <ph name="TIMEOUT_SECONDS" />లో రీస్టోర్ చేయబడతాయి.</translation> <translation id="8513108775083588393">ఆటో-రొటేట్</translation> +<translation id="851458219935658693">ప్రస్తుత డెస్క్ నుండి విండోలను చూపండి, రేడియో బటన్ ఎంచుకోబడింది</translation> <translation id="8517041960877371778">మీ <ph name="DEVICE_TYPE" /> ఆన్లో ఉన్నప్పుడు ఛార్జ్ కాకపోవచ్చు.</translation> <translation id="8553395910833293175">ఇప్పటికే అన్ని డెస్క్లకు కేటాయింపు జరిగిపోయింది.</translation> <translation id="8563862697512465947">నోటిఫికేషన్ సెట్టింగ్లు</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index c945e5b5..c8e82bb 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -577,6 +577,7 @@ <translation id="5992218262414051481">اعلی تناسب امتزاج کی وضع فعال ہے۔ اسے آف ٹوگل کرنے کیلئے Ctrl+Search+H کو دوبارہ دبائیں۔</translation> <translation id="6018164090099858612">مرر وضع سے باہر نکل رہے ہیں</translation> <translation id="602001110135236999">بائیں اسکرول کریں</translation> +<translation id="602472752137106327">تمام ڈیسکس سے ونڈوز دکھائیں، ریڈیو بٹن کا انتخاب کیا گیا</translation> <translation id="6025324406281560198"><ph name="SECURITY_STATUS" />، <ph name="CONNECTION_STATUS" />، سگنل کی مضبوطی <ph name="SIGNAL_STRENGTH" />، آپ کے منتظم کے زیر انتظام ہے</translation> <translation id="6030495522958826102">مینو کو اسکرین کو نچلے بائیں کونے میں منتقل کر دیا گیا۔</translation> <translation id="6032620807120418574">فُل اسکرین ریکارڈ کرنے کے لیے کہیں بھی کلک کریں</translation> @@ -675,6 +676,7 @@ <translation id="685782768769951078">{NUM_DIGITS,plural, =1{ایک ہندسہ باقی ہے}other{# ہندسے باقی ہیں}}</translation> <translation id="6878400149835617132">شارٹ کٹ آف ہے</translation> <translation id="6886172995547742638">آپ کے <ph name="DEVICE_TYPE" /> کی کارکردگی کم ہو سکتی ہے سندیافتہ <ph name="PREFERRED_MINIMUM_POWER" />W یا اعلی USB-C پاور ایڈاپٹر استعمال کریں۔</translation> +<translation id="688631446150864480">ونڈوز کو سوئچ کرنے کیلئے نیچے تیر کے نشان والی کلید کو دبائیں</translation> <translation id="6896758677409633944">کاپی کریں</translation> <translation id="6910714959251846841">اس اپ ڈیٹ کیلئے آپ کے آلے کی پاور واشنگ درکار ہے۔ تازہ ترین <ph name="SYSTEM_APP_NAME" /> اپ ڈیٹ کے بارے میں مزید جانیں۔</translation> <translation id="6919251195245069855">آپ کے اسمارٹ کارڈ کی شناخت نہیں کی جا سکی۔ پھر آزمائيں۔</translation> @@ -840,6 +842,7 @@ <translation id="8297006494302853456">کمزور</translation> <translation id="8308637677604853869">پچھلا مینو</translation> <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> +<translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ونڈو کا انتخاب کیا گیا</translation> <translation id="8351131234907093545">نوٹ بنائیں</translation> <translation id="8371779926711439835">ایک حرف آگے جائیں</translation> <translation id="8375916635258623388">یہ <ph name="DEVICE_NAME" /> اور آپ کا فون خود کار طور پر منسلک ہو جائیں گے</translation> @@ -863,6 +866,7 @@ <translation id="8477270416194247200">منسوخ کرنے کے لیے Alt+Search یا Shift دبائیں۔</translation> <translation id="8492573885090281069"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> کو سپورٹ نہیں کرتا ہے۔ ریزولیوشن کو تبدیل کر کے <ph name="FALLBACK_RESOLUTION" /> کر دیا گیا تھا۔ تبدیلیاں باقی رکھنے کے لیے تصدیق کریں پر کلک کریں۔ گزشتہ تبدیلیوں کو <ph name="TIMEOUT_SECONDS" /> میں بحال کر دیا جائے گا۔</translation> <translation id="8513108775083588393">خودکار گھمائیں</translation> +<translation id="851458219935658693">موجودہ ڈیسک سے ونڈوز دکھائیں، ریڈیو بٹن کا انتخاب کیا گیا</translation> <translation id="8517041960877371778">ہو سکتا ہے کہ آپ کا <ph name="DEVICE_TYPE" /> آن ہونے کی صورت میں چارج نہ ہو۔</translation> <translation id="8553395910833293175">پہلے ہی تمام ڈیسکس کو تفویض کر دیا گیا۔</translation> <translation id="8563862697512465947">اطلاع کی ترتیبات</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 72bcf8c0..84d0c74f 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -599,7 +599,7 @@ <translation id="6165508094623778733">Tìm hiểu thêm</translation> <translation id="6179832488876878285">Bạn có thể ghim các tệp quan trọng của mình ở đây. Hãy mở ứng dụng Files để bắt đầu.</translation> <translation id="622484624075952240">Xuống</translation> -<translation id="6236290670123303279">Quản lý các tùy chọn cài đặt</translation> +<translation id="6236290670123303279">Quản lý chế độ cài đặt</translation> <translation id="6237231532760393653">1X</translation> <translation id="6254629735336163724">Đã khóa theo chiều ngang</translation> <translation id="6259254695169772643">Sử dụng bút cảm ứng để chọn</translation>
diff --git a/ash/wm/resize_shadow_and_cursor_unittest.cc b/ash/wm/resize_shadow_and_cursor_unittest.cc index eca7794..e1a40f52 100644 --- a/ash/wm/resize_shadow_and_cursor_unittest.cc +++ b/ash/wm/resize_shadow_and_cursor_unittest.cc
@@ -180,6 +180,37 @@ EXPECT_EQ(ui::mojom::CursorType::kNull, GetCurrentCursorType()); } +TEST_F(ResizeShadowAndCursorTest, NoResizeShadowOnNonToplevelWindow) { + ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); + ASSERT_TRUE(WindowState::Get(window())->IsNormalStateType()); + + auto* embedded = views::Widget::CreateWindowWithContext( + new TestWidgetDelegate(), GetContext(), gfx::Rect(0, 0, 100, 100)); + embedded->Show(); + window()->AddChild(embedded->GetNativeWindow()); + + embedded->GetNativeWindow()->SetName("BBB"); + window()->SetName("AAAA"); + embedded->SetBounds(gfx::Rect(10, 10, 100, 100)); + + generator.MoveMouseTo(50, 11); + VerifyResizeShadow(false); + EXPECT_EQ(ui::mojom::CursorType::kNull, GetCurrentCursorType()); + + EXPECT_FALSE( + Shell::Get()->resize_shadow_controller()->GetShadowForWindowForTest( + embedded->GetNativeWindow())); + + generator.MoveMouseTo(gfx::Point(50, 0)); + VerifyResizeShadow(true); + EXPECT_EQ(HTTOP, ResizeShadowHitTest()); + EXPECT_EQ(ui::mojom::CursorType::kNorthResize, GetCurrentCursorType()); + + EXPECT_FALSE( + Shell::Get()->resize_shadow_controller()->GetShadowForWindowForTest( + embedded->GetNativeWindow())); +} + // Test that the resize shadows stay visible and that the cursor stays the same // as long as a user is resizing a window. TEST_F(ResizeShadowAndCursorTest, MouseDrag) {
diff --git a/ash/wm/toplevel_window_event_handler.cc b/ash/wm/toplevel_window_event_handler.cc index a62a4d4a..c485a9a6 100644 --- a/ash/wm/toplevel_window_event_handler.cc +++ b/ash/wm/toplevel_window_event_handler.cc
@@ -64,8 +64,11 @@ } void ShowResizeShadow(aura::Window* window, int component) { - // Window resize in tablet mode is disabled (except in splitscreen). - if (Shell::Get()->tablet_mode_controller()->InTabletMode()) { + // Don't show resize shadow if + // 1) the window is not toplevel. + // 2) the device is in tablet mode. + if (Shell::Get()->tablet_mode_controller()->InTabletMode() || + window != window->GetToplevelWindow()) { return; }
diff --git a/base/BUILD.gn b/base/BUILD.gn index 4dbbf64..9530d40 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -131,6 +131,16 @@ } } +config("perfetto_config") { + if (use_perfetto_client_library) { + defines = [ + # Use TRACE_EVENT macro implementation from Perfetto. See + # trace_event/trace_event_common.h. + "BASE_USE_PERFETTO_CLIENT_LIBRARY=1", + ] + } +} + # Base and everything it depends on should be a static library rather than # a source set. Base is more of a "library" in the classic sense in that many # small parts of it are used in many different contexts. This combined with a @@ -2225,7 +2235,10 @@ "//third_party/perfetto/include/perfetto/protozero", ] - all_dependent_configs += [ "//third_party/perfetto/gn:public_config" ] + all_dependent_configs += [ + ":perfetto_config", + "//third_party/perfetto/gn:public_config", + ] if (is_win) { sources += [ @@ -2245,6 +2258,10 @@ "trace_event/trace_event_android.cc", ] } + + if (use_perfetto_client_library) { + sources -= [ "trace_event/builtin_categories.cc" ] + } } else { sources += [ "trace_event/trace_event_stub.cc",
diff --git a/base/allocator/partition_allocator/partition_page.cc b/base/allocator/partition_allocator/partition_page.cc index 9f110bed..83686fa 100644 --- a/base/allocator/partition_allocator/partition_page.cc +++ b/base/allocator/partition_allocator/partition_page.cc
@@ -209,10 +209,9 @@ void DeferredUnmap::Unmap() { PA_DCHECK(ptr && size > 0); - // Currently this path is only called for direct-mapped allocations. If this - // changes, the if statement below has to be updated. - PA_DCHECK(!IsManagedByPartitionAllocNormalBuckets(ptr)); - if (IsManagedByPartitionAllocDirectMap(ptr)) { + if (features::IsPartitionAllocGigaCageEnabled()) { + // Currently this function is only called for direct-mapped allocations. + PA_DCHECK(IsManagedByPartitionAllocDirectMap(ptr)); internal::AddressPoolManager::GetInstance()->UnreserveAndDecommit( internal::GetDirectMapPool(), ptr, size); } else {
diff --git a/base/allocator/partition_allocator/partition_page.h b/base/allocator/partition_allocator/partition_page.h index 352fa8c..7631002 100644 --- a/base/allocator/partition_allocator/partition_page.h +++ b/base/allocator/partition_allocator/partition_page.h
@@ -121,18 +121,39 @@ ALWAYS_INLINE void SetFreelistHead(PartitionFreelistEntry* new_head); // Returns size of the region used within a slot. The used region comprises - // of actual allocated data, extras and possibly empty space. + // of actual allocated data, extras and possibly empty space in the middle. ALWAYS_INLINE size_t GetUtilizedSlotSize() const { // The returned size can be: // - The slot size for small buckets. - // - Exact needed size to satisfy allocation (incl. extras), for large + // - Exact size needed to satisfy allocation (incl. extras), for large // buckets and direct-mapped allocations (see also the comment in // CanStoreRawSize() for more info). - if (LIKELY(!CanStoreRawSize())) + if (LIKELY(!CanStoreRawSize())) { return bucket->slot_size; + } return GetRawSize(); } + // Returns the size available to the app. It can be equal or higher than the + // requested size. If higher, the overage won't exceed what's actually usable + // by the app without a risk of running out of an allocated region or into + // PartitionAlloc's internal data (like extras). + ALWAYS_INLINE size_t GetUsableSize(PartitionRoot<thread_safe>* root) const { + // The returned size can be: + // - The slot size minus extras, for small buckets. This could be more than + // requested size. + // - Raw size minus extras, for large buckets and direct-mapped allocations + // (see also the comment in CanStoreRawSize() for more info). This is + // equal to requested size. + size_t size_to_ajdust; + if (LIKELY(!CanStoreRawSize())) { + size_to_ajdust = bucket->slot_size; + } else { + size_to_ajdust = GetRawSize(); + } + return root->AdjustSizeForExtrasSubtract(size_to_ajdust); + } + // Returns the total size of the slots that are currently provisioned. ALWAYS_INLINE size_t GetProvisionedSize() const { size_t num_provisioned_slots =
diff --git a/base/allocator/partition_allocator/partition_root.cc b/base/allocator/partition_allocator/partition_root.cc index 8d5386f..e1707d2c 100644 --- a/base/allocator/partition_allocator/partition_root.cc +++ b/base/allocator/partition_allocator/partition_root.cc
@@ -461,6 +461,7 @@ // TLS in ThreadCache not supported on other OSes. with_thread_cache = false; #else + internal::ThreadCache::EnsureThreadSpecificDataInitialized(); with_thread_cache = (opts.thread_cache == PartitionOptions::ThreadCache::kEnabled); @@ -489,7 +490,8 @@ // bucket->slot_size is the current size of the allocation. size_t current_slot_size = slot_span->bucket->slot_size; - char* char_ptr = static_cast<char*>(SlotSpan::ToSlotSpanStartPtr(slot_span)); + char* slot_start = + static_cast<char*>(SlotSpan::ToSlotSpanStartPtr(slot_span)); if (new_slot_size == current_slot_size) { // No need to move any memory around, but update size and cookie below. // That's because raw_size may have changed. @@ -507,19 +509,19 @@ // Shrink by decommitting unneeded pages and making them inaccessible. size_t decommit_size = current_slot_size - new_slot_size; - DecommitSystemPagesForData(char_ptr + new_slot_size, decommit_size, + DecommitSystemPagesForData(slot_start + new_slot_size, decommit_size, PageUpdatePermissions); } else if (new_slot_size <= DirectMapExtent::FromSlotSpan(slot_span)->map_size) { // Grow within the actually allocated memory. Just need to make the // pages accessible again. size_t recommit_slot_size_growth = new_slot_size - current_slot_size; - RecommitSystemPagesForData(char_ptr + current_slot_size, + RecommitSystemPagesForData(slot_start + current_slot_size, recommit_slot_size_growth, PageUpdatePermissions); #if DCHECK_IS_ON() - memset(char_ptr + current_slot_size, kUninitializedByte, + memset(slot_start + current_slot_size, kUninitializedByte, recommit_slot_size_growth); #endif } else { @@ -528,16 +530,19 @@ return false; } + slot_span->SetRawSize(raw_size); + slot_span->bucket->slot_size = new_slot_size; + #if DCHECK_IS_ON() // Write a new trailing cookie. if (allow_cookies) { - internal::PartitionCookieWriteValue(char_ptr + raw_size - - internal::kCookieSize); + char* user_data_start = + static_cast<char*>(AdjustPointerForExtrasAdd(slot_start)); + size_t usable_size = slot_span->GetUsableSize(this); + internal::PartitionCookieWriteValue(user_data_start + usable_size); } #endif - slot_span->SetRawSize(raw_size); - slot_span->bucket->slot_size = new_slot_size; return true; } @@ -584,7 +589,7 @@ internal::ScopedGuard<thread_safe> guard{lock_}; // TODO(palmer): See if we can afford to make this a CHECK. PA_DCHECK(IsValidSlotSpan(slot_span)); - old_usable_size = GetUsableSize(ptr); + old_usable_size = slot_span->GetUsableSize(this); if (UNLIKELY(slot_span->bucket->is_direct_mapped())) { // We may be able to perform the realloc in place by changing the @@ -616,8 +621,9 @@ // Write a new trailing cookie only when it is possible to keep track // raw size (otherwise we wouldn't know where to look for it later). if (allow_cookies) { + size_t usable_size = slot_span->GetUsableSize(this); internal::PartitionCookieWriteValue(static_cast<char*>(ptr) + - new_size); + usable_size); } #endif }
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 7353de2..bf455cc 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -437,20 +437,19 @@ // Allocates memory, without initializing extras. // // - |flags| are as in AllocFlags(). - // - |raw_size| should accommodate extras on top of AllocFlags()'s + // - |raw_size| accommodates for extras on top of AllocFlags()'s // |requested_size|. - // - |utilized_slot_size| and |is_already_zeroed| are output only. - // |utilized_slot_size| is guaranteed to be larger or equal to - // |raw_size|. + // - |usable_size| and |is_already_zeroed| are output only. |usable_size| is + // guaranteed to be larger or equal to AllocFlags()'s |requested_size|. ALWAYS_INLINE void* RawAlloc(Bucket* bucket, int flags, size_t raw_size, - size_t* utilized_slot_size, + size_t* usable_size, bool* is_already_zeroed); ALWAYS_INLINE void* AllocFromBucket(Bucket* bucket, int flags, size_t raw_size, - size_t* utilized_slot_size, + size_t* usable_size, bool* is_already_zeroed) EXCLUSIVE_LOCKS_REQUIRED(lock_); @@ -757,7 +756,7 @@ Bucket* bucket, int flags, size_t raw_size, - size_t* utilized_slot_size, + size_t* usable_size, bool* is_already_zeroed) { SlotSpan* slot_span = bucket->active_slot_spans_head; // Check that this slot span is neither full nor freed. @@ -767,7 +766,10 @@ void* slot_start = slot_span->freelist_head; if (LIKELY(slot_start)) { *is_already_zeroed = false; - *utilized_slot_size = bucket->slot_size; + // This is a fast path, so avoid calling GetUsableSize() on Release builds + // as it is more costly. Copy its small bucket path instead. + *usable_size = AdjustSizeForExtrasSubtract(bucket->slot_size); + PA_DCHECK(*usable_size == slot_span->GetUsableSize(this)); // If these DCHECKs fire, you probably corrupted memory. TODO(palmer): See // if we can afford to make these CHECKs. @@ -799,7 +801,7 @@ (slot_span->bucket->is_direct_mapped() && (bucket == &sentinel_bucket))); - *utilized_slot_size = slot_span->GetUtilizedSlotSize(); + *usable_size = slot_span->GetUsableSize(this); } return slot_start; @@ -893,12 +895,11 @@ // Note: ref-count and cookies can be 0-sized. // // For more context, see the other "Layout inside the slot" comment below. -#if BUILDFLAG(USE_BACKUP_REF_PTR) || DCHECK_IS_ON() || ZERO_RANDOMLY_ON_FREE +#if DCHECK_IS_ON() || ZERO_RANDOMLY_ON_FREE const size_t utilized_slot_size = slot_span->GetUtilizedSlotSize(); #endif - #if BUILDFLAG(USE_BACKUP_REF_PTR) || DCHECK_IS_ON() - const size_t usable_size = AdjustSizeForExtrasSubtract(utilized_slot_size); + const size_t usable_size = slot_span->GetUsableSize(this); #endif void* slot_start = AdjustPointerForExtrasSubtract(ptr); @@ -1060,20 +1061,15 @@ } // static -// Gets the allocated size of the |ptr|, from the point of view of the app, not -// PartitionAlloc. It can be equal or higher than the requested size. If higher, -// the overage won't exceed what's actually usable by the app without a risk of -// running out of an allocated region or into PartitionAlloc's internal data. -// Used as malloc_usable_size. +// Returns the size available to the app. It can be equal or higher than the +// requested size. If higher, the overage won't exceed what's actually usable +// by the app without a risk of running out of an allocated region or into +// PartitionAlloc's internal data. Used as malloc_usable_size. template <bool thread_safe> ALWAYS_INLINE size_t PartitionRoot<thread_safe>::GetUsableSize(void* ptr) { - SlotSpan* slot_span = SlotSpan::FromSlotInnerPtr(ptr); + auto* slot_span = SlotSpan::FromSlotInnerPtr(ptr); auto* root = FromSlotSpan(slot_span); - - size_t size = slot_span->GetUtilizedSlotSize(); - // Adjust back by subtracing extras (if any). - size = root->AdjustSizeForExtrasSubtract(size); - return size; + return slot_span->GetUsableSize(root); } // Return the capacity of the underlying slot (adjusted for extras). This @@ -1167,7 +1163,7 @@ PA_CHECK(raw_size >= requested_size); // check for overflows uint16_t bucket_index = SizeToBucketIndex(raw_size); - size_t utilized_slot_size; + size_t usable_size; bool is_already_zeroed; void* slot_start = nullptr; @@ -1201,31 +1197,37 @@ tcache = internal::ThreadCache::Create(this); with_thread_cache = true; } - slot_start = tcache->GetFromCache(bucket_index, &utilized_slot_size); + size_t slot_size; + slot_start = tcache->GetFromCache(bucket_index, &slot_size); is_already_zeroed = false; + // LIKELY: median hit rate in the thread cache is 95%, from metrics. + if (LIKELY(slot_start)) { + // This follows the logic of SlotSpanMetadata::GetUsableSize for small + // buckets, which is too expensive to call here. + // Keep it in sync! + usable_size = AdjustSizeForExtrasSubtract(slot_size); + #if DCHECK_IS_ON() - // Make sure that the allocated pointer comes from the same place it would - // for a non-thread cache allocation. - if (slot_start) { + // Make sure that the allocated pointer comes from the same place it would + // for a non-thread cache allocation. SlotSpan* slot_span = SlotSpan::FromSlotStartPtr(slot_start); PA_DCHECK(IsValidSlotSpan(slot_span)); PA_DCHECK(slot_span->bucket == &bucket_at(bucket_index)); + PA_DCHECK(slot_span->bucket->slot_size == slot_size); + PA_DCHECK(usable_size == slot_span->GetUsableSize(this)); // All large allocations must go through the RawAlloc path to correctly - // set |utilized_slot_size|. + // set |usable_size|. PA_DCHECK(!slot_span->CanStoreRawSize()); PA_DCHECK(!slot_span->bucket->is_direct_mapped()); - } #endif - - // UNLIKELY: median hit rate in the thread cache is 95%, from metrics. - if (UNLIKELY(!slot_start)) { + } else { slot_start = RawAlloc(buckets + bucket_index, flags, raw_size, - &utilized_slot_size, &is_already_zeroed); + &usable_size, &is_already_zeroed); } } else { - slot_start = RawAlloc(buckets + bucket_index, flags, raw_size, - &utilized_slot_size, &is_already_zeroed); + slot_start = RawAlloc(buckets + bucket_index, flags, raw_size, &usable_size, + &is_already_zeroed); } if (UNLIKELY(!slot_start)) @@ -1261,7 +1263,7 @@ // to save raw_size, i.e. only for large allocations. For small allocations, // we have no other choice than putting the cookie at the very end of the // slot, thus creating the "empty" space. - size_t usable_size = AdjustSizeForExtrasSubtract(utilized_slot_size); + // The value given to the application is just after the ref-count and cookie. void* ret = AdjustPointerForExtrasAdd(slot_start); @@ -1303,10 +1305,10 @@ Bucket* bucket, int flags, size_t raw_size, - size_t* utilized_slot_size, + size_t* usable_size, bool* is_already_zeroed) { internal::ScopedGuard<thread_safe> guard{lock_}; - return AllocFromBucket(bucket, flags, raw_size, utilized_slot_size, + return AllocFromBucket(bucket, flags, raw_size, usable_size, is_already_zeroed); }
diff --git a/base/allocator/partition_allocator/pcscan.cc b/base/allocator/partition_allocator/pcscan.cc index cbaed8b..192e92e4 100644 --- a/base/allocator/partition_allocator/pcscan.cc +++ b/base/allocator/partition_allocator/pcscan.cc
@@ -13,6 +13,7 @@ #include <vector> #include "base/allocator/partition_allocator/address_pool_manager.h" +#include "base/allocator/partition_allocator/address_pool_manager_bitmap.h" #include "base/allocator/partition_allocator/object_bitmap.h" #include "base/allocator/partition_allocator/page_allocator.h" #include "base/allocator/partition_allocator/page_allocator_constants.h" @@ -221,15 +222,17 @@ public: void Populate(const SuperPages& super_pages) { for (uintptr_t super_page_base : super_pages) { +#if DCHECK_IS_ON() PA_DCHECK(!(super_page_base % kSuperPageAlignment)); PA_DCHECK(IsManagedByPartitionAllocNormalBuckets( reinterpret_cast<char*>(super_page_base))); +#endif bitset_.Set(NormalBucketPoolOffset(super_page_base)); } } ALWAYS_INLINE bool Test(uintptr_t maybe_ptr) const { -#if defined(PA_HAS_64_BITS_POINTERS) +#if DCHECK_IS_ON() PA_DCHECK(IsManagedByPartitionAllocNormalBuckets( reinterpret_cast<char*>(maybe_ptr))); #endif @@ -257,8 +260,8 @@ struct BitmapLookupPolicy { ALWAYS_INLINE bool TestOnHeapPointer(uintptr_t maybe_ptr) const { -#if defined(PA_HAS_64_BITS_POINTERS) - PA_DCHECK(PartitionAddressSpace::IsInNormalBucketPool( +#if DCHECK_IS_ON() + PA_DCHECK(IsManagedByPartitionAllocNormalBuckets( reinterpret_cast<void*>(maybe_ptr))); #endif return task_.super_pages_bitmap_.Test(maybe_ptr); @@ -358,8 +361,7 @@ SlotSpan::FromSlotInnerPtr(reinterpret_cast<void*>(base)); PA_DCHECK(root == PartitionRoot<thread_safe>::FromSlotSpan(target_slot_span)); - const size_t usable_size = root->AdjustSizeForExtrasSubtract( - target_slot_span->GetUtilizedSlotSize()); + const size_t usable_size = target_slot_span->GetUsableSize(root); // Range check for inner pointers. if (maybe_ptr >= base + usable_size) return 0; @@ -387,9 +389,7 @@ auto* slot_span = SlotSpan::FromSlotInnerPtr(object); // Use zero as a zapping value to speed up the fast bailout check in // ScanPartitions. - memset( - object, 0, - root->AdjustSizeForExtrasSubtract(slot_span->GetUtilizedSlotSize())); + memset(object, 0, slot_span->GetUsableSize(root)); }); } } @@ -427,22 +427,20 @@ using ScanFunction = size_t (ScanLoop::*)(uintptr_t*, uintptr_t*) const; static ScanFunction GetScanFunction() { -#if defined(ARCH_CPU_X86_64) - // We define vectorized versions of the scanning loop only for 64bit since - // they require support of the 64bit GigaCage. - if (UNLIKELY(!features::IsPartitionAllocGigaCageEnabled())) + if (UNLIKELY(!features::IsPartitionAllocGigaCageEnabled())) { return &ScanLoop::RunUnvectorizedNoGigaCage; - + } + // We define vectorized versions of the scanning loop only for 64bit since + // they require support of the 64bit GigaCage, and only for x86 because + // a special instruction set is required. +#if defined(ARCH_CPU_X86_64) base::CPU cpu; if (cpu.has_avx2()) return &ScanLoop::RunAVX2; - else if (cpu.has_sse3()) + if (cpu.has_sse3()) return &ScanLoop::RunSSE3; - else - return &ScanLoop::RunUnvectorized; -#else - return &ScanLoop::RunUnvectorizedNoGigaCage; #endif // defined(ARCH_CPU_X86_64) + return &ScanLoop::RunUnvectorized; } #if defined(PA_HAS_64_BITS_POINTERS) @@ -539,6 +537,7 @@ quarantine_size += RunUnvectorized(payload, end); return quarantine_size; } +#endif // defined(ARCH_CPU_X86_64) ALWAYS_INLINE NO_SANITIZE("thread") size_t RunUnvectorized(uintptr_t* begin, uintptr_t* end) const { @@ -546,7 +545,15 @@ size_t quarantine_size = 0; for (; begin < end; ++begin) { uintptr_t maybe_ptr = *begin; +#if defined(PA_HAS_64_BITS_POINTERS) + // On 64bit architectures, call IsInNormalBucketPool instead of + // IsManagedByPartitionAllocNormalBuckets to avoid redundant load of + // PartitionAddressSpace::normal_bucket_pool_base_address_. if (LIKELY(!IsInNormalBucketPool(maybe_ptr))) +#else + if (LIKELY(!IsManagedByPartitionAllocNormalBuckets( + reinterpret_cast<void*>(maybe_ptr)))) +#endif continue; quarantine_size += pcscan_task_.TryMarkObjectInNormalBucketPool<BitmapLookupPolicy>( @@ -554,7 +561,6 @@ } return quarantine_size; } -#endif // defined(ARCH_CPU_X86_64) ALWAYS_INLINE NO_SANITIZE("thread") size_t RunUnvectorizedNoGigaCage(uintptr_t* begin, uintptr_t* end) const {
diff --git a/base/allocator/partition_allocator/thread_cache.cc b/base/allocator/partition_allocator/thread_cache.cc index d72100ea..030632a 100644 --- a/base/allocator/partition_allocator/thread_cache.cc +++ b/base/allocator/partition_allocator/thread_cache.cc
@@ -29,6 +29,7 @@ // PartitionRoot can use it. static std::atomic<bool> g_has_instance; +static bool g_thread_cache_key_created = false; } // namespace constexpr base::TimeDelta ThreadCacheRegistry::kPurgeInterval; @@ -62,6 +63,7 @@ void ThreadCacheRegistry::DumpStats(bool my_thread_only, ThreadCacheStats* stats) { + ThreadCache::EnsureThreadSpecificDataInitialized(); memset(reinterpret_cast<void*>(stats), 0, sizeof(ThreadCacheStats)); PartitionAutoLock scoped_locker(GetLock()); @@ -106,6 +108,8 @@ } void ThreadCacheRegistry::StartPeriodicPurge() { + ThreadCache::EnsureThreadSpecificDataInitialized(); + // Can be called several times, don't post multiple tasks. if (!has_pending_purge_task_) PostDelayedPurgeTask(); @@ -182,11 +186,23 @@ } // static -void ThreadCache::Init(PartitionRoot<ThreadSafe>* root) { - PA_CHECK(root->buckets[kBucketCount - 1].slot_size == kSizeThreshold); +void ThreadCache::EnsureThreadSpecificDataInitialized() { + // Using the registry lock to protect from concurrent initialization without + // adding a special-pupose lock. + PartitionAutoLock scoped_locker(ThreadCacheRegistry::Instance().GetLock()); + if (g_thread_cache_key_created) + return; bool ok = PartitionTlsCreate(&g_thread_cache_key, Delete); PA_CHECK(ok); + g_thread_cache_key_created = true; +} + +// static +void ThreadCache::Init(PartitionRoot<ThreadSafe>* root) { + PA_CHECK(root->buckets[kBucketCount - 1].slot_size == kSizeThreshold); + + EnsureThreadSpecificDataInitialized(); // Make sure that only one PartitionRoot wants a thread cache. bool expected = false; @@ -208,7 +224,7 @@ // // This also means that deallocation must use RawFreeStatic(), hence the // operator delete() implementation below. - size_t utilized_slot_size; + size_t usable_size; bool already_zeroed; auto* bucket = @@ -216,7 +232,7 @@ sizeof(ThreadCache)); void* buffer = root->RawAlloc(bucket, PartitionAllocZeroFill, sizeof(ThreadCache), - &utilized_slot_size, &already_zeroed); + &usable_size, &already_zeroed); ThreadCache* tcache = new (buffer) ThreadCache(root); // This may allocate. @@ -308,7 +324,7 @@ Bucket& bucket = buckets_[bucket_index]; int count = bucket.limit / kBatchFillRatio; - size_t utilized_slot_size; + size_t usable_size; bool is_already_zeroed; PA_DCHECK(!root_->buckets[bucket_index].CanStoreRawSize()); @@ -329,8 +345,8 @@ void* ptr = root_->AllocFromBucket( &root_->buckets[bucket_index], PartitionAllocFastPathOrReturnNull | PartitionAllocReturnNull, - root_->buckets[bucket_index].slot_size /* raw_size */, - &utilized_slot_size, &is_already_zeroed); + root_->buckets[bucket_index].slot_size /* raw_size */, &usable_size, + &is_already_zeroed); // Either the previous allocation would require a slow path allocation, or // the central allocator is out of memory. If the bucket was filled with
diff --git a/base/allocator/partition_allocator/thread_cache.h b/base/allocator/partition_allocator/thread_cache.h index 988f83b8..954d069 100644 --- a/base/allocator/partition_allocator/thread_cache.h +++ b/base/allocator/partition_allocator/thread_cache.h
@@ -151,6 +151,10 @@ static void Init(PartitionRoot<ThreadSafe>* root); static void Init(PartitionRoot<NotThreadSafe>* root) { IMMEDIATE_CRASH(); } + // Can be called several times, must be called before any ThreadCache + // interactions. + static void EnsureThreadSpecificDataInitialized(); + static ThreadCache* Get() { return reinterpret_cast<ThreadCache*>(PartitionTlsGet(g_thread_cache_key)); }
diff --git a/base/files/file_path_watcher_kqueue.cc b/base/files/file_path_watcher_kqueue.cc index 8cf4bb2b..4a5b83c 100644 --- a/base/files/file_path_watcher_kqueue.cc +++ b/base/files/file_path_watcher_kqueue.cc
@@ -299,11 +299,12 @@ return false; } - // FileDescriptorWatcher may attempt to run its callback after the controller - // has been deleted, so bind to this via a WeakPtr. + // It's safe to use Unretained() because the watch is cancelled and the + // callback cannot be invoked after |kqueue_watch_controller_| (which is a + // member of |this|) has been deleted. kqueue_watch_controller_ = FileDescriptorWatcher::WatchReadable( kqueue_, BindRepeating(&FilePathWatcherKQueue::OnKQueueReadable, - weak_factory_.GetWeakPtr())); + Unretained(this))); return true; } @@ -392,6 +393,7 @@ if (!UpdateWatches(&send_notification)) { callback_.Run(target_, true /* error */); Cancel(); + return; } }
diff --git a/base/files/file_path_watcher_kqueue.h b/base/files/file_path_watcher_kqueue.h index 480fd26..503529a 100644 --- a/base/files/file_path_watcher_kqueue.h +++ b/base/files/file_path_watcher_kqueue.h
@@ -13,7 +13,6 @@ #include "base/files/file_descriptor_watcher_posix.h" #include "base/files/file_path.h" #include "base/files/file_path_watcher.h" -#include "base/memory/weak_ptr.h" namespace base { @@ -122,8 +121,6 @@ // Throughout the lifetime of this, OnKQueueReadable() will be called when // data is available in |kqueue_|. std::unique_ptr<FileDescriptorWatcher::Controller> kqueue_watch_controller_; - - WeakPtrFactory<FilePathWatcherKQueue> weak_factory_{this}; }; } // namespace base
diff --git a/base/files/file_path_watcher_unittest.cc b/base/files/file_path_watcher_unittest.cc index 596140cd..dcdbda1e 100644 --- a/base/files/file_path_watcher_unittest.cc +++ b/base/files/file_path_watcher_unittest.cc
@@ -129,15 +129,22 @@ TestDelegate& operator=(const TestDelegate&) = delete; ~TestDelegate() override = default; + // Configure this delegate so that it expects an error. + void set_expect_error() { expect_error_ = true; } + + // TestDelegateBase: void OnFileChanged(const FilePath& path, bool error) override { - if (error) - ADD_FAILURE() << "Error " << path.value(); - else + if (error != expect_error_) { + ADD_FAILURE() << "Unexpected change for \"" << path + << "\" with |error| = " << (error ? "true" : "false"); + } else { collector_->OnChange(this); + } } private: scoped_refptr<NotificationCollector> collector_; + bool expect_error_ = false; }; class FilePathWatcherTest : public testing::Test { @@ -947,6 +954,23 @@ ASSERT_FALSE(WaitForEvents()); } +// Do not crash when a directory is moved; https://crbug.com/1156603. +TEST_F(FilePathWatcherTest, TrivialDirMove) { + const FilePath tmp_dir = temp_dir_.GetPath(); + const FilePath sub_dir = tmp_dir.Append(FILE_PATH_LITERAL("subdir")); + + ASSERT_TRUE(CreateDirectory(sub_dir)); + + FilePathWatcher watcher; + auto delegate = std::make_unique<TestDelegate>(collector()); + delegate->set_expect_error(); + ASSERT_TRUE(SetupWatch(sub_dir, &watcher, delegate.get(), + FilePathWatcher::Type::kTrivial)); + + ASSERT_TRUE(Move(sub_dir, tmp_dir.Append(FILE_PATH_LITERAL("over_here")))); + ASSERT_TRUE(WaitForEvents()); +} + #endif // defined(OS_MAC) } // namespace
diff --git a/base/memory/checked_ptr.md b/base/memory/checked_ptr.md index 6e96762..950c95f 100644 --- a/base/memory/checked_ptr.md +++ b/base/memory/checked_ptr.md
@@ -301,6 +301,12 @@ If we increment a `CheckedPtr` pointing at a non-PA allocation until it points past the end of the allocation, that pointer may happen to be pointing at the beginning of a PA superpage. Advancing the pointer through `operator+=()` assumes that the pointer stays within an allocation. So when this happens, it is as if we skipped an `AddRef()`, and `Release()` may decrement a non-existent ref count field. +#### Pointers to address in another process + +If `CheckedPtr` is used to store an address in another process. The same address could be used in PA for the current process. Resulting in CheckedPtr trying to increment the ref count that doesn't exist. + +`sandbox::GetProcessBaseAddress()` was an example of a function that returns an address in another process as `void*`, resulting in this issue. + #### Other TODO(bartekn): Document runtime errors encountered by BackupRefPtr
diff --git a/base/system/sys_info_posix.cc b/base/system/sys_info_posix.cc index a3cc489..60427461b 100644 --- a/base/system/sys_info_posix.cc +++ b/base/system/sys_info_posix.cc
@@ -5,6 +5,7 @@ #include "base/system/sys_info.h" #include <errno.h> +#include <sched.h> #include <stddef.h> #include <stdint.h> #include <string.h> @@ -57,7 +58,21 @@ return 1; } - return static_cast<int>(res); + int num_cpus = static_cast<int>(res); + +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) + // Restrict the CPU count based on the process's CPU affinity mask, if + // available. + cpu_set_t* cpu_set = CPU_ALLOC(num_cpus); + size_t cpu_set_size = CPU_ALLOC_SIZE(num_cpus); + int ret = sched_getaffinity(0, cpu_set_size, cpu_set); + if (ret == 0) { + num_cpus = CPU_COUNT_S(cpu_set_size, cpu_set); + } + CPU_FREE(cpu_set); +#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS + + return num_cpus; } base::LazyInstance<base::internal::LazySysInfoValue<int, NumberOfProcessors>>::
diff --git a/base/test/trace_event_analyzer_unittest.cc b/base/test/trace_event_analyzer_unittest.cc index 259fd952..d7c50560 100644 --- a/base/test/trace_event_analyzer_unittest.cc +++ b/base/test/trace_event_analyzer_unittest.cc
@@ -581,17 +581,17 @@ BeginTracing(); { - TRACE_EVENT_ASYNC_STEP_INTO0("c", "n", 0xA, "s1"); - TRACE_EVENT_ASYNC_END0("c", "n", 0xA); - TRACE_EVENT_ASYNC_BEGIN0("c", "n", 0xB); - TRACE_EVENT_ASYNC_BEGIN0("c", "n", 0xC); - TRACE_EVENT_ASYNC_STEP_PAST0("c", "n", 0xB, "s1"); - TRACE_EVENT_ASYNC_STEP_INTO0("c", "n", 0xC, "s1"); - TRACE_EVENT_ASYNC_STEP_INTO1("c", "n", 0xC, "s2", "a", 1); - TRACE_EVENT_ASYNC_END0("c", "n", 0xB); - TRACE_EVENT_ASYNC_END0("c", "n", 0xC); - TRACE_EVENT_ASYNC_BEGIN0("c", "n", 0xA); - TRACE_EVENT_ASYNC_STEP_INTO0("c", "n", 0xA, "s2"); + TRACE_EVENT_ASYNC_STEP_INTO0("cat", "n", 0xA, "s1"); + TRACE_EVENT_ASYNC_END0("cat", "n", 0xA); + TRACE_EVENT_ASYNC_BEGIN0("cat", "n", 0xB); + TRACE_EVENT_ASYNC_BEGIN0("cat", "n", 0xC); + TRACE_EVENT_ASYNC_STEP_PAST0("cat", "n", 0xB, "s1"); + TRACE_EVENT_ASYNC_STEP_INTO0("cat", "n", 0xC, "s1"); + TRACE_EVENT_ASYNC_STEP_INTO1("cat", "n", 0xC, "s2", "a", 1); + TRACE_EVENT_ASYNC_END0("cat", "n", 0xB); + TRACE_EVENT_ASYNC_END0("cat", "n", 0xC); + TRACE_EVENT_ASYNC_BEGIN0("cat", "n", 0xA); + TRACE_EVENT_ASYNC_STEP_INTO0("cat", "n", 0xA, "s2"); } EndTracing();
diff --git a/base/trace_event/builtin_categories.cc b/base/trace_event/builtin_categories.cc index bc1c3e3b..96aa117 100644 --- a/base/trace_event/builtin_categories.cc +++ b/base/trace_event/builtin_categories.cc
@@ -11,4 +11,4 @@ constexpr const char* BuiltinCategories::kCategoriesForTesting[]; } // namespace trace_event -} // namespace base +} // namespace base \ No newline at end of file
diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h index ad3e86f..3a3f56c 100644 --- a/base/trace_event/builtin_categories.h +++ b/base/trace_event/builtin_categories.h
@@ -9,7 +9,7 @@ #include "base/macros.h" #include "base/stl_util.h" #include "base/trace_event/common/trace_event_common.h" -#include "build/build_config.h" +#include "base/tracing_buildflags.h" // List of builtin category names. If you want to use a new category name in // your code and you get a static assert, this is the right place to register @@ -23,7 +23,7 @@ #define INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(X) \ /* These entries must go first to be consistent with the \ * CategoryRegistry::kCategory* consts.*/ \ - X("tracing categories exhausted; must increase kMaxCategories") \ + X("tracing categories exhausted. must increase kMaxCategories") \ X("tracing already shutdown") \ X("__metadata") \ /* The rest of the list is in alphabetical order */ \ @@ -149,9 +149,8 @@ X("startup") \ X("sync") \ X("sync_lock_contention") \ - X("thread_pool") \ X("test_gpu") \ - X("test_tracing") \ + X("thread_pool") \ X("toplevel") \ X("toplevel.flow") \ X("ui") \ @@ -261,10 +260,102 @@ X(TRACE_DISABLED_BY_DEFAULT("worker.scheduler")) \ X(TRACE_DISABLED_BY_DEFAULT("xr.debug")) +#define INTERNAL_TRACE_LIST_BUILTIN_CATEGORY_GROUPS(X) \ + X("base,toplevel") \ + X("benchmark,drm") \ + X("benchmark,latencyInfo,rail") \ + X("benchmark,loading") \ + X("benchmark,rail") \ + X("benchmark,uma") \ + X("benchmark,viz") \ + X("blink.animations,devtools.timeline,benchmark,rail") \ + X("blink,benchmark") \ + X("blink,benchmark,rail," TRACE_DISABLED_BY_DEFAULT("blink.debug.layout")) \ + X("blink,blink_style") \ + X("blink,devtools.timeline") \ + X("blink,loading") \ + X("blink,rail") \ + X("blink.user_timing,rail") \ + X("blink_gc,devtools.timeline") \ + X("browser,content,navigation") \ + X("browser,navigation") \ + X("browser,navigation,benchmark") \ + X("browser,startup") \ + X("category1,category2") \ + X("cc,benchmark") \ + X("cc,input") \ + X("cc," TRACE_DISABLED_BY_DEFAULT("devtools.timeline")) \ + X("content,navigation") \ + X("devtools.timeline,rail") \ + X("drm,hwoverlays") \ + X("dwrite,fonts") \ + X("fonts,ui") \ + X("gpu,benchmark") \ + X("gpu,startup") \ + X("gpu,toplevel.flow") \ + X("inc2,inc") \ + X("inc,inc2") \ + X("input,benchmark") \ + X("input,benchmark,devtools.timeline") \ + X("input,latency") \ + X("input,rail") \ + X("input,views") \ + X("ipc,security") \ + X("ipc,toplevel") \ + X("loading,rail") \ + X("loading,rail,devtools.timeline") \ + X("media,gpu") \ + X("media,rail") \ + X("navigation,benchmark,rail") \ + X("navigation,rail") \ + X("renderer,benchmark,rail") \ + X("renderer,webkit") \ + X("renderer_host,navigation") \ + X("renderer_host," TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow")) \ + X("shutdown,viz") \ + X("startup,benchmark,rail") \ + X("startup,rail") \ + X("ui,input") \ + X("ui,latency") \ + X("v8,devtools.timeline") \ + X("v8,devtools.timeline," TRACE_DISABLED_BY_DEFAULT("v8.compile")) \ + X("viz,benchmark") \ + X("WebCore,benchmark,rail") \ + X(TRACE_DISABLED_BY_DEFAULT("cc.debug") "," TRACE_DISABLED_BY_DEFAULT( \ + "viz.quads") "," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers")) \ + X(TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") "," \ + TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") "," \ + TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture")) + #define INTERNAL_TRACE_INIT_CATEGORY_NAME(name) name, #define INTERNAL_TRACE_INIT_CATEGORY(name) {0, 0, name}, +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) +PERFETTO_DEFINE_TEST_CATEGORY_PREFIXES("cat", + "foo", + "test", + "kTest", + "noise", + "Testing", + "NotTesting", + TRACE_DISABLED_BY_DEFAULT("test"), + TRACE_DISABLED_BY_DEFAULT("Testing"), + TRACE_DISABLED_BY_DEFAULT("NotTesting")); + +#define INTERNAL_CATEGORY(X) perfetto::Category(X), +#define INTERNAL_CATEGORY_GROUP(X) perfetto::Category::Group(X), + +// Define a Perfetto TrackEvent data source using the list of categories defined +// above. See https://perfetto.dev/docs/instrumentation/track-events. +PERFETTO_DEFINE_CATEGORIES( + INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(INTERNAL_CATEGORY) + INTERNAL_TRACE_LIST_BUILTIN_CATEGORY_GROUPS(INTERNAL_CATEGORY_GROUP)); + +#undef INTERNAL_CATEGORY +#undef INTERNAL_CATEGORY_GROUP +#endif // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + namespace base { namespace trace_event { @@ -291,15 +382,26 @@ // Static-only class providing access to the compile-time registry of trace // categories. +// TODO(skyostil): Remove after migrating to the Perfetto client API. class BASE_EXPORT BuiltinCategories { public: // Returns a built-in category name at |index| in the registry. static constexpr const char* At(size_t index) { +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + return perfetto::internal::kCategories[index].name; +#else return kBuiltinCategories[index]; +#endif } // Returns the amount of built-in categories in the registry. - static constexpr size_t Size() { return base::size(kBuiltinCategories); } + static constexpr size_t Size() { +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + return perfetto::internal::kCategoryCount; +#else + return base::size(kBuiltinCategories); +#endif + } // Where in the builtin category list to start when populating the // about://tracing UI. @@ -330,17 +432,18 @@ // The array of category names used only for testing. It's kept separately // from the main list to avoid allocating the space for them in the binary. static constexpr const char* kCategoriesForTesting[] = { - "\001\002\003\n\r", - "a", - "all", - "b", - "b1", - "c", - "c0", - "c1", - "c2", - "c3", - "c4", + "test_\001\002\003\n\r", + "test_a", + "test_all", + "test_b", + "test_b1", + "test_c", + "test_c0", + "test_c1", + "test_c2", + "test_c3", + "test_c4", + "test_tracing", "cat", "cat1", "cat2", @@ -349,33 +452,32 @@ "cat5", "cat6", "category", - "drink", - "excluded_cat", - "filtered_cat", + "test_drink", + "test_excluded_cat", + "test_filtered_cat", "foo", - "inc", - "inc2", - "included", - "inc_wildcard_", - "inc_wildcard_abc", - "inc_wildchar_bla_end", - "inc_wildchar_x_end", + "test_inc", + "test_inc2", + "test_included", + "test_inc_wildcard_", + "test_inc_wildcard_abc", + "test_inc_wildchar_bla_end", + "test_inc_wildchar_x_end", "kTestCategory", - "log", "noise", - "other_included", + "test_other_included", "test", "test_category", "Testing", "TraceEventAgentTestCategory", - "unfiltered_cat", - "x", - TRACE_DISABLED_BY_DEFAULT("c9"), - TRACE_DISABLED_BY_DEFAULT("cat"), - TRACE_DISABLED_BY_DEFAULT("filtered_cat"), + "test_unfiltered_cat", + "test_x", + TRACE_DISABLED_BY_DEFAULT("test_c9"), + TRACE_DISABLED_BY_DEFAULT("test_cat"), + TRACE_DISABLED_BY_DEFAULT("test_filtered_cat"), TRACE_DISABLED_BY_DEFAULT("NotTesting"), TRACE_DISABLED_BY_DEFAULT("Testing"), - TRACE_DISABLED_BY_DEFAULT("unfiltered_cat")}; + TRACE_DISABLED_BY_DEFAULT("test_unfiltered_cat")}; // Returns whether |str| is in |array| of |array_len|. static constexpr bool IsStringInArray(const char* str,
diff --git a/base/trace_event/common/trace_event_common.h b/base/trace_event/common/trace_event_common.h index 684c8a6..17947a95 100644 --- a/base/trace_event/common/trace_event_common.h +++ b/base/trace_event/common/trace_event_common.h
@@ -5,16 +5,6 @@ #ifndef BASE_TRACE_EVENT_COMMON_TRACE_EVENT_COMMON_H_ #define BASE_TRACE_EVENT_COMMON_TRACE_EVENT_COMMON_H_ -// This header file defines the set of trace_event macros without specifying -// how the events actually get collected and stored. If you need to expose trace -// events to some other universe, you can copy-and-paste this file as well as -// trace_event.h, modifying the macros contained there as necessary for the -// target platform. The end result is that multiple libraries can funnel events -// through to a shared trace event collector. - -// IMPORTANT: To avoid conflicts, if you need to modify this file for a library, -// land your change in base/ first, and then copy-and-paste it. - // Trace events are for tracking application performance and resource usage. // Macros are provided to track: // Begin and end of function calls @@ -194,6 +184,100 @@ // trace points would carry a significant performance cost of acquiring a lock // and resolving the category. +// There are currently two implementations of the tracing macros. Firstly, +// Perfetto (https://perfetto.dev/) implements a compatible set of macros which +// we are migrating to. The Perfetto implementation is enabled through the +// use_perfetto_client_library GN arg. If that flag is disabled, we fall back to +// the legacy implementation in the latter half of this file (and +// trace_event.h). +// TODO(skyostil): Remove the legacy macro implementation. + +// Normally we'd use BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) for this, but +// because v8 includes trace_event_common.h directly (in non-Perfetto mode), we +// can't depend on any other header files here. +#if defined(BASE_USE_PERFETTO_CLIENT_LIBRARY) +//////////////////////////////////////////////////////////////////////////////// +// Perfetto trace macros + +#include "base/threading/platform_thread.h" +#include "base/time/time.h" + +// Export Perfetto symbols in the same way as //base symbols. +#define PERFETTO_COMPONENT_EXPORT BASE_EXPORT + +// Enable legacy trace event macros (e.g., TRACE_EVENT{0,1,2}). +#define PERFETTO_ENABLE_LEGACY_TRACE_EVENTS 1 + +// Macros for reading the current trace time (bypassing any virtual time +// overrides). +#define TRACE_TIME_TICKS_NOW() ::base::subtle::TimeTicksNowIgnoringOverride() +#define TRACE_TIME_NOW() ::base::subtle::TimeNowIgnoringOverride() + +// Implementation detail: trace event macros create temporary variables +// to keep instrumentation overhead low. These macros give each temporary +// variable a unique name based on the line number to prevent name collisions. +#define INTERNAL_TRACE_EVENT_UID(name_prefix) PERFETTO_UID(name_prefix) + +// Special trace event macro to trace task execution with the location where it +// was posted from. +// TODO(skyostil): Convert this into a regular typed trace event. +#define TRACE_TASK_EXECUTION(run_function, task) \ + INTERNAL_TRACE_TASK_EXECUTION(run_function, task) + +// Special trace event macro to trace log messages. +// TODO(skyostil): Convert this into a regular typed trace event. +#define TRACE_LOG_MESSAGE(file, message, line) \ + INTERNAL_TRACE_LOG_MESSAGE(file, message, line) + +// Declare debug annotation converters for base time types, so they can be +// passed as trace event arguments. +// TODO(skyostil): Serialize timestamps using perfetto::TracedValue instead. +namespace perfetto { +namespace protos { +namespace pbzero { +class DebugAnnotation; +} // namespace pbzero +} // namespace protos +namespace internal { + +void BASE_EXPORT +WriteDebugAnnotation(protos::pbzero::DebugAnnotation* annotation, + ::base::TimeTicks); +void BASE_EXPORT +WriteDebugAnnotation(protos::pbzero::DebugAnnotation* annotation, ::base::Time); + +} // namespace internal +} // namespace perfetto + +// Pull in the tracing macro definitions from Perfetto. +#include "third_party/perfetto/include/perfetto/tracing.h" + +namespace perfetto { +namespace legacy { + +template <> +bool BASE_EXPORT ConvertThreadId(const ::base::PlatformThreadId& thread, + uint64_t* track_uuid_out, + int32_t* pid_override_out, + int32_t* tid_override_out); + +} // namespace legacy + +template <> +BASE_EXPORT TraceTimestamp +ConvertTimestampToTraceTimeNs(const ::base::TimeTicks& ticks); + +} // namespace perfetto + +#else // !defined(BASE_USE_PERFETTO_CLIENT_LIBRARY) +//////////////////////////////////////////////////////////////////////////////// +// Legacy trace macros + +// What follows is the legacy TRACE_EVENT macro implementation, which is being +// replaced by the Perfetto-based implementation above. New projects wishing to +// enable tracing should use the Perfetto SDK. See +// https://perfetto.dev/docs/instrumentation/tracing-sdk. + // Check that nobody includes this file directly. Clients are supposed to // include the surrounding "trace_event.h" of their project instead. #if defined(TRACE_EVENT0) @@ -1034,4 +1118,5 @@ #define TRACE_EVENT_SCOPE_NAME_PROCESS ('p') #define TRACE_EVENT_SCOPE_NAME_THREAD ('t') +#endif // !defined(BASE_USE_PERFETTO_CLIENT_LIBRARY) #endif // BASE_TRACE_EVENT_COMMON_TRACE_EVENT_COMMON_H_
diff --git a/base/trace_event/trace_arguments.cc b/base/trace_event/trace_arguments.cc index 0f283e0..1cb0c3db 100644 --- a/base/trace_event/trace_arguments.cc +++ b/base/trace_event/trace_arguments.cc
@@ -284,5 +284,14 @@ *out += ")"; } +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) +void ConvertableToTraceFormat::Add( + perfetto::protos::pbzero::DebugAnnotation* annotation) const { + std::string json; + AppendAsTraceFormat(&json); + annotation->set_legacy_json_value(json); +} +#endif // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + } // namespace trace_event } // namespace base
diff --git a/base/trace_event/trace_arguments.h b/base/trace_event/trace_arguments.h index b658e8dd..42a086d2a 100644 --- a/base/trace_event/trace_arguments.h +++ b/base/trace_event/trace_arguments.h
@@ -15,6 +15,7 @@ #include "base/base_export.h" #include "base/trace_event/common/trace_event_common.h" +#include "base/tracing_buildflags.h" // Trace macro can have one or two optional arguments, each one of them // identified by a name (a C string literal) and a value, which can be an @@ -136,12 +137,20 @@ // class must implement this interface. Note that unlike other values, // these objects will be owned by the TraceArguments instance that points // to them. -class BASE_EXPORT ConvertableToTraceFormat { +class BASE_EXPORT ConvertableToTraceFormat +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + : public perfetto::DebugAnnotation +#endif +{ public: ConvertableToTraceFormat() = default; ConvertableToTraceFormat(const ConvertableToTraceFormat&) = delete; ConvertableToTraceFormat& operator=(const ConvertableToTraceFormat&) = delete; +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + ~ConvertableToTraceFormat() override = default; +#else virtual ~ConvertableToTraceFormat() = default; +#endif // Append the class info to the provided |out| string. The appended // data must be a valid JSON object. Strings must be properly quoted, and @@ -165,6 +174,11 @@ virtual bool AppendToProto(ProtoAppender* appender); virtual void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead); + +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + // DebugAnnotation implementation. + void Add(perfetto::protos::pbzero::DebugAnnotation*) const override; +#endif }; const int kTraceMaxNumArgs = 2;
diff --git a/base/trace_event/trace_event.h b/base/trace_event/trace_event.h index 49ea036..bfaa635 100644 --- a/base/trace_event/trace_event.h +++ b/base/trace_event/trace_event.h
@@ -27,7 +27,9 @@ #include "base/trace_event/trace_arguments.h" #include "base/trace_event/trace_category.h" #include "base/trace_event/trace_log.h" -#include "build/build_config.h" +#include "base/tracing_buildflags.h" + +#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) // By default, const char* argument values are assumed to have long-lived scope // and will not be copied. Use this macro to force a const char* to be copied. @@ -94,6 +96,10 @@ #define TRACE_EVENT_API_GET_NUM_TRACES_RECORDED \ trace_event_internal::GetNumTracesRecorded +#endif // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + +// Legacy TRACE_EVENT_API entrypoints. Do not use from new code. + // Add a trace event to the platform tracing system. // base::trace_event::TraceEventHandle TRACE_EVENT_API_ADD_TRACE_EVENT( // char phase, @@ -181,6 +187,7 @@ // Implementation detail: trace event macros create temporary variables // to keep instrumentation overhead low. These macros give each temporary // variable a unique name based on the line number to prevent name collisions. +#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) #define INTERNAL_TRACE_EVENT_UID3(a, b) trace_event_unique_##a##b #define INTERNAL_TRACE_EVENT_UID2(a, b) INTERNAL_TRACE_EVENT_UID3(a, b) #define INTERNAL_TRACE_EVENT_UID(name_prefix) \ @@ -388,6 +395,7 @@ ##__VA_ARGS__); \ } \ } while (0) +#endif // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) namespace trace_event_internal { @@ -708,6 +716,8 @@ &args, TRACE_EVENT_FLAG_NONE); } +#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + // Used by TRACE_EVENTx macros. Do not use directly. class TRACE_EVENT_API_CLASS_EXPORT ScopedTracer { public: @@ -758,6 +768,8 @@ trace_event_internal::ScopedTraceBinaryEfficient \ INTERNAL_TRACE_EVENT_UID(scoped_trace)(category_group, name); +#endif // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + } // namespace trace_event_internal namespace base {
diff --git a/base/trace_event/trace_event_impl.cc b/base/trace_event/trace_event_impl.cc index dd902bd..6c2ef93 100644 --- a/base/trace_event/trace_event_impl.cc +++ b/base/trace_event/trace_event_impl.cc
@@ -21,6 +21,51 @@ #include "base/trace_event/trace_log.h" #include "base/trace_event/traced_value.h" +#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + +// Define static storage for trace event categories (see +// PERFETTO_DEFINE_CATEGORIES). +PERFETTO_TRACK_EVENT_STATIC_STORAGE(); + +namespace perfetto { +namespace legacy { + +template <> +bool ConvertThreadId(const ::base::PlatformThreadId& thread, + uint64_t* track_uuid_out, + int32_t* pid_override_out, + int32_t* tid_override_out) { + // Only support threads in the current process. + *track_uuid_out = perfetto::ThreadTrack::ForThread( + static_cast<base::PlatformThreadId>(thread)) + .uuid; + return true; +} + +} // namespace legacy + +template <> +TraceTimestamp ConvertTimestampToTraceTimeNs(const ::base::TimeTicks& ticks) { + return {TrackEvent::GetTraceClockId(), ticks.since_origin().InNanoseconds()}; +} + +namespace internal { + +void WriteDebugAnnotation(protos::pbzero::DebugAnnotation* annotation, + ::base::TimeTicks ticks) { + annotation->set_uint_value(ticks.since_origin().InMilliseconds()); +} + +void WriteDebugAnnotation(protos::pbzero::DebugAnnotation* annotation, + ::base::Time time) { + annotation->set_uint_value(time.since_origin().InMilliseconds()); +} + +} // namespace internal +} // namespace perfetto + +#endif // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) + namespace base { namespace trace_event {
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc index 346a6b3..179e55d 100644 --- a/base/trace_event/trace_event_unittest.cc +++ b/base/trace_event/trace_event_unittest.cc
@@ -4,6 +4,7 @@ #include "base/trace_event/trace_event.h" +#include <inttypes.h> #include <math.h> #include <stddef.h> #include <stdint.h> @@ -66,7 +67,7 @@ const char kAsyncId2Str[] = "0x6"; constexpr const char kRecordAllCategoryFilter[] = "*"; -constexpr const char kAllCategory[] = "all"; +constexpr const char kAllCategory[] = "test_all"; class TraceEventTestFixture : public testing::Test { public: @@ -393,122 +394,124 @@ return hits; } -constexpr const char kControlCharacters[] = "\001\002\003\n\r"; +constexpr const char kControlCharacters[] = "test_\001\002\003\n\r"; void TraceWithAllMacroVariants(WaitableEvent* task_complete_event) { { - TRACE_EVENT0("all", "TRACE_EVENT0 call"); - TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1"); - TRACE_EVENT2("all", "TRACE_EVENT2 call", - "name1", "\"value1\"", + TRACE_EVENT0("test_all", "TRACE_EVENT0 call"); + TRACE_EVENT1("test_all", "TRACE_EVENT1 call", "name1", "value1"); + TRACE_EVENT2("test_all", "TRACE_EVENT2 call", "name1", "\"value1\"", "name2", "value\\2"); - TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call", + TRACE_EVENT_INSTANT0("test_all", "TRACE_EVENT_INSTANT0 call", TRACE_EVENT_SCOPE_GLOBAL); - TRACE_EVENT_INSTANT1("all", "TRACE_EVENT_INSTANT1 call", + TRACE_EVENT_INSTANT1("test_all", "TRACE_EVENT_INSTANT1 call", TRACE_EVENT_SCOPE_PROCESS, "name1", "value1"); - TRACE_EVENT_INSTANT2("all", "TRACE_EVENT_INSTANT2 call", - TRACE_EVENT_SCOPE_THREAD, - "name1", "value1", - "name2", "value2"); + TRACE_EVENT_INSTANT2("test_all", "TRACE_EVENT_INSTANT2 call", + TRACE_EVENT_SCOPE_THREAD, "name1", "value1", "name2", + "value2"); - TRACE_EVENT_BEGIN0("all", "TRACE_EVENT_BEGIN0 call"); - TRACE_EVENT_BEGIN1("all", "TRACE_EVENT_BEGIN1 call", "name1", "value1"); - TRACE_EVENT_BEGIN2("all", "TRACE_EVENT_BEGIN2 call", - "name1", "value1", + TRACE_EVENT_BEGIN0("test_all", "TRACE_EVENT_BEGIN0 call"); + TRACE_EVENT_BEGIN1("test_all", "TRACE_EVENT_BEGIN1 call", "name1", + "value1"); + TRACE_EVENT_BEGIN2("test_all", "TRACE_EVENT_BEGIN2 call", "name1", "value1", "name2", "value2"); - TRACE_EVENT_END0("all", "TRACE_EVENT_END0 call"); - TRACE_EVENT_END1("all", "TRACE_EVENT_END1 call", "name1", "value1"); - TRACE_EVENT_END2("all", "TRACE_EVENT_END2 call", - "name1", "value1", + TRACE_EVENT_END0("test_all", "TRACE_EVENT_END0 call"); + TRACE_EVENT_END1("test_all", "TRACE_EVENT_END1 call", "name1", "value1"); + TRACE_EVENT_END2("test_all", "TRACE_EVENT_END2 call", "name1", "value1", "name2", "value2"); - TRACE_EVENT_ASYNC_BEGIN0("all", "TRACE_EVENT_ASYNC_BEGIN0 call", kAsyncId); - TRACE_EVENT_ASYNC_BEGIN1("all", "TRACE_EVENT_ASYNC_BEGIN1 call", kAsyncId, - "name1", "value1"); - TRACE_EVENT_ASYNC_BEGIN2("all", "TRACE_EVENT_ASYNC_BEGIN2 call", kAsyncId, - "name1", "value1", - "name2", "value2"); + TRACE_EVENT_ASYNC_BEGIN0("test_all", "TRACE_EVENT_ASYNC_BEGIN0 call", + kAsyncId); + TRACE_EVENT_ASYNC_BEGIN1("test_all", "TRACE_EVENT_ASYNC_BEGIN1 call", + kAsyncId, "name1", "value1"); + TRACE_EVENT_ASYNC_BEGIN2("test_all", "TRACE_EVENT_ASYNC_BEGIN2 call", + kAsyncId, "name1", "value1", "name2", "value2"); - TRACE_EVENT_ASYNC_STEP_INTO0("all", "TRACE_EVENT_ASYNC_STEP_INTO0 call", - kAsyncId, "step_begin1"); - TRACE_EVENT_ASYNC_STEP_INTO1("all", "TRACE_EVENT_ASYNC_STEP_INTO1 call", - kAsyncId, "step_begin2", "name1", "value1"); + TRACE_EVENT_ASYNC_STEP_INTO0("test_all", + "TRACE_EVENT_ASYNC_STEP_INTO0 call", kAsyncId, + "step_begin1"); + TRACE_EVENT_ASYNC_STEP_INTO1("test_all", + "TRACE_EVENT_ASYNC_STEP_INTO1 call", kAsyncId, + "step_begin2", "name1", "value1"); - TRACE_EVENT_ASYNC_END0("all", "TRACE_EVENT_ASYNC_END0 call", kAsyncId); - TRACE_EVENT_ASYNC_END1("all", "TRACE_EVENT_ASYNC_END1 call", kAsyncId, + TRACE_EVENT_ASYNC_END0("test_all", "TRACE_EVENT_ASYNC_END0 call", kAsyncId); + TRACE_EVENT_ASYNC_END1("test_all", "TRACE_EVENT_ASYNC_END1 call", kAsyncId, "name1", "value1"); - TRACE_EVENT_ASYNC_END2("all", "TRACE_EVENT_ASYNC_END2 call", kAsyncId, - "name1", "value1", - "name2", "value2"); + TRACE_EVENT_ASYNC_END2("test_all", "TRACE_EVENT_ASYNC_END2 call", kAsyncId, + "name1", "value1", "name2", "value2"); - TRACE_COUNTER1("all", "TRACE_COUNTER1 call", 31415); - TRACE_COUNTER2("all", "TRACE_COUNTER2 call", - "a", 30000, - "b", 1415); + TRACE_COUNTER1("test_all", "TRACE_COUNTER1 call", 31415); + TRACE_COUNTER2("test_all", "TRACE_COUNTER2 call", "a", 30000, "b", 1415); - TRACE_COUNTER_WITH_TIMESTAMP1("all", "TRACE_COUNTER_WITH_TIMESTAMP1 call", + TRACE_COUNTER_WITH_TIMESTAMP1("test_all", + "TRACE_COUNTER_WITH_TIMESTAMP1 call", TimeTicks::FromInternalValue(42), 31415); - TRACE_COUNTER_WITH_TIMESTAMP2("all", "TRACE_COUNTER_WITH_TIMESTAMP2 call", - TimeTicks::FromInternalValue(42), - "a", 30000, "b", 1415); + TRACE_COUNTER_WITH_TIMESTAMP2( + "test_all", "TRACE_COUNTER_WITH_TIMESTAMP2 call", + TimeTicks::FromInternalValue(42), "a", 30000, "b", 1415); - TRACE_COUNTER_ID1("all", "TRACE_COUNTER_ID1 call", 0x319009, 31415); - TRACE_COUNTER_ID2("all", "TRACE_COUNTER_ID2 call", 0x319009, - "a", 30000, "b", 1415); + TRACE_COUNTER_ID1("test_all", "TRACE_COUNTER_ID1 call", 0x319009, 31415); + TRACE_COUNTER_ID2("test_all", "TRACE_COUNTER_ID2 call", 0x319009, "a", + 30000, "b", 1415); - TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0("all", - "TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0 call", + TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( + "test_all", "TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0 call", kAsyncId, kThreadId, TimeTicks::FromInternalValue(12345)); - TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0("all", - "TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0 call", + TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0( + "test_all", "TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0 call", kAsyncId, kThreadId, TimeTicks::FromInternalValue(23456)); - TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0("all", - "TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0 call", + TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( + "test_all", "TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0 call", kAsyncId2, kThreadId, TimeTicks::FromInternalValue(34567)); - TRACE_EVENT_ASYNC_STEP_PAST0("all", "TRACE_EVENT_ASYNC_STEP_PAST0 call", - kAsyncId2, "step_end1"); - TRACE_EVENT_ASYNC_STEP_PAST1("all", "TRACE_EVENT_ASYNC_STEP_PAST1 call", - kAsyncId2, "step_end2", "name1", "value1"); + TRACE_EVENT_ASYNC_STEP_PAST0("test_all", + "TRACE_EVENT_ASYNC_STEP_PAST0 call", kAsyncId2, + "step_end1"); + TRACE_EVENT_ASYNC_STEP_PAST1("test_all", + "TRACE_EVENT_ASYNC_STEP_PAST1 call", kAsyncId2, + "step_end2", "name1", "value1"); - TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0("all", - "TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0 call", + TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( + "test_all", "TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0 call", kAsyncId2, kThreadId, TimeTicks::FromInternalValue(45678)); - TRACE_EVENT_OBJECT_CREATED_WITH_ID("all", "tracked object 1", 0x42); - TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( - "all", "tracked object 1", 0x42, "hello"); - TRACE_EVENT_OBJECT_DELETED_WITH_ID("all", "tracked object 1", 0x42); + TRACE_EVENT_OBJECT_CREATED_WITH_ID("test_all", "tracked object 1", 0x42); + TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("test_all", "tracked object 1", 0x42, + "hello"); + TRACE_EVENT_OBJECT_DELETED_WITH_ID("test_all", "tracked object 1", 0x42); TraceScopedTrackableObject<int, kAllCategory> trackable("tracked object 2", 0x2128506); trackable.snapshot("world"); - TRACE_EVENT_OBJECT_CREATED_WITH_ID( - "all", "tracked object 3", TRACE_ID_WITH_SCOPE("scope", 0x42)); - TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( - "all", "tracked object 3", TRACE_ID_WITH_SCOPE("scope", 0x42), "hello"); - TRACE_EVENT_OBJECT_DELETED_WITH_ID( - "all", "tracked object 3", TRACE_ID_WITH_SCOPE("scope", 0x42)); + TRACE_EVENT_OBJECT_CREATED_WITH_ID("test_all", "tracked object 3", + TRACE_ID_WITH_SCOPE("scope", 0x42)); + TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID("test_all", "tracked object 3", + TRACE_ID_WITH_SCOPE("scope", 0x42), + "hello"); + TRACE_EVENT_OBJECT_DELETED_WITH_ID("test_all", "tracked object 3", + TRACE_ID_WITH_SCOPE("scope", 0x42)); TRACE_EVENT1(kControlCharacters, kControlCharacters, kControlCharacters, kControlCharacters); uint64_t context_id = 0x20151021; - TRACE_EVENT_ENTER_CONTEXT("all", "TRACE_EVENT_ENTER_CONTEXT call", + TRACE_EVENT_ENTER_CONTEXT("test_all", "TRACE_EVENT_ENTER_CONTEXT call", TRACE_ID_WITH_SCOPE("scope", context_id)); - TRACE_EVENT_LEAVE_CONTEXT("all", "TRACE_EVENT_LEAVE_CONTEXT call", + TRACE_EVENT_LEAVE_CONTEXT("test_all", "TRACE_EVENT_LEAVE_CONTEXT call", TRACE_ID_WITH_SCOPE("scope", context_id)); - TRACE_EVENT_ASYNC_BEGIN0("all", "async default process scope", 0x1000); - TRACE_EVENT_ASYNC_BEGIN0("all", "async local id", TRACE_ID_LOCAL(0x2000)); - TRACE_EVENT_ASYNC_BEGIN0("all", "async global id", TRACE_ID_GLOBAL(0x3000)); - TRACE_EVENT_ASYNC_BEGIN0("all", "async global id with scope string", - TRACE_ID_WITH_SCOPE("scope string", - TRACE_ID_GLOBAL(0x4000))); + TRACE_EVENT_ASYNC_BEGIN0("test_all", "async default process scope", 0x1000); + TRACE_EVENT_ASYNC_BEGIN0("test_all", "async local id", + TRACE_ID_LOCAL(0x2000)); + TRACE_EVENT_ASYNC_BEGIN0("test_all", "async global id", + TRACE_ID_GLOBAL(0x3000)); + TRACE_EVENT_ASYNC_BEGIN0( + "test_all", "async global id with scope string", + TRACE_ID_WITH_SCOPE("scope string", TRACE_ID_GLOBAL(0x4000))); } // Scope close causes TRACE_EVENT0 etc to send their END events. if (task_complete_event) @@ -963,10 +966,9 @@ void TraceManyInstantEvents(int thread_id, int num_events, WaitableEvent* task_complete_event) { for (int i = 0; i < num_events; i++) { - TRACE_EVENT_INSTANT2("all", "multi thread event", - TRACE_EVENT_SCOPE_THREAD, - "thread", thread_id, - "event", i); + TRACE_EVENT_INSTANT2("test_all", "multi thread event", + TRACE_EVENT_SCOPE_THREAD, "thread", thread_id, "event", + i); } if (task_complete_event) @@ -1238,7 +1240,7 @@ TraceLog::GetInstance()->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE); for (size_t i = 0; i < max_traces; i++) { - TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_x", "y", TRACE_EVENT_SCOPE_THREAD); } EndTraceAndFlush(); } while (num_flush_callbacks_ < 2); @@ -1248,7 +1250,7 @@ TraceLog::GetInstance()->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE); for (size_t i = 0; i < traces; i++) { - TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_x", "y", TRACE_EVENT_SCOPE_THREAD); } EndTraceAndFlush(); if (num_flush_callbacks_ < 2) { @@ -1262,7 +1264,7 @@ TraceLog::GetInstance()->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE); for (size_t i = 0; i < traces; i++) { - TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_x", "y", TRACE_EVENT_SCOPE_THREAD); } EndTraceAndFlush(); } @@ -1333,43 +1335,44 @@ // Include existent category -> only events of that category Clear(); included_categories.clear(); - TraceLog::GetInstance()->SetEnabled(TraceConfig("inc", ""), + TraceLog::GetInstance()->SetEnabled(TraceConfig("test_inc", ""), TraceLog::RECORDING_MODE); - TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc", "name", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc2", "name", TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); DropTracedMetadataRecords(); - EXPECT_TRUE(FindMatchingValue("cat", "inc")); - EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc")); + EXPECT_FALSE(FindNonMatchingValue("cat", "test_inc")); // Include existent wildcard -> all categories matching wildcard Clear(); included_categories.clear(); TraceLog::GetInstance()->SetEnabled( - TraceConfig("inc_wildcard_*,inc_wildchar_?_end", ""), + TraceConfig("test_inc_wildcard_*,test_inc_wildchar_?_end", ""), TraceLog::RECORDING_MODE); - TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included", - TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included", - TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc", - TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildcard_abc", "included", + TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildcard_", "included", + TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildchar_x_end", "included", + TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildchar_bla_end", "not_inc", + TRACE_EVENT_SCOPE_THREAD); TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD); TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildcard_category,other_category", "included", - TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0( - "non_included_category,inc_wildcard_category", "included", - TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildcard_category,test_other_category", + "included", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_non_included_category,test_inc_wildcard_category", + "included", TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); - EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); - EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); - EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc_wildcard_abc")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc_wildcard_")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc_wildchar_x_end")); EXPECT_FALSE(FindMatchingValue("name", "not_inc")); - EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_category,other_category")); - EXPECT_TRUE(FindMatchingValue("cat", - "non_included_category,inc_wildcard_category")); + EXPECT_TRUE(FindMatchingValue( + "cat", "test_inc_wildcard_category,test_other_category")); + EXPECT_TRUE(FindMatchingValue( + "cat", "test_non_included_category,test_inc_wildcard_category")); included_categories.clear(); @@ -1387,35 +1390,35 @@ // Exclude existent category -> only events of other categories Clear(); - TraceLog::GetInstance()->SetEnabled(TraceConfig("-inc", ""), + TraceLog::GetInstance()->SetEnabled(TraceConfig("-test_inc", ""), TraceLog::RECORDING_MODE); - TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc2,inc", "name", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc,inc2", "name", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc", "name", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc2", "name", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc2,test_inc", "name", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc,test_inc2", "name", TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); - EXPECT_TRUE(FindMatchingValue("cat", "inc2")); - EXPECT_FALSE(FindMatchingValue("cat", "inc")); - EXPECT_TRUE(FindMatchingValue("cat", "inc2,inc")); - EXPECT_TRUE(FindMatchingValue("cat", "inc,inc2")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc2")); + EXPECT_FALSE(FindMatchingValue("cat", "test_inc")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc2,test_inc")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc,test_inc2")); // Exclude existent wildcard -> all categories not matching wildcard Clear(); TraceLog::GetInstance()->SetEnabled( - TraceConfig("-inc_wildcard_*,-inc_wildchar_?_end", ""), + TraceConfig("-test_inc_wildcard_*,-test_inc_wildchar_?_end", ""), TraceLog::RECORDING_MODE); - TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", - TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", - TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc", - TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included", - TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildcard_abc", "not_inc", + TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildcard_", "not_inc", + TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildchar_x_end", "not_inc", + TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_inc_wildchar_bla_end", "included", + TRACE_EVENT_SCOPE_THREAD); TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD); TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); - EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); + EXPECT_TRUE(FindMatchingValue("cat", "test_inc_wildchar_bla_end")); EXPECT_TRUE(FindMatchingValue("cat", "cat1")); EXPECT_TRUE(FindMatchingValue("cat", "cat2")); EXPECT_FALSE(FindMatchingValue("name", "not_inc")); @@ -1426,7 +1429,7 @@ TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) { BeginTrace(); - unsigned long long id = 0xfeedbeeffeedbeefull; + uint64_t id = 0xfeedbeeffeedbeefull; TRACE_EVENT_ASYNC_BEGIN0("cat", "name1", id); TRACE_EVENT_ASYNC_STEP_INTO0("cat", "name1", id, "step1"); TRACE_EVENT_ASYNC_END0("cat", "name1", id); @@ -1441,7 +1444,7 @@ EXPECT_TRUE(FindNamePhase("name1", "F")); std::string id_str; - StringAppendF(&id_str, "0x%llx", id); + StringAppendF(&id_str, "0x%" PRIx64, id); EXPECT_TRUE(FindNamePhaseKeyValue("name1", "S", "id", id_str.c_str())); EXPECT_TRUE(FindNamePhaseKeyValue("name1", "T", "id", id_str.c_str())); @@ -1692,43 +1695,45 @@ BeginTrace(); TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc"), "first", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("included", "first", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_included", "first", TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); { const DictionaryValue* item = nullptr; ListValue& trace_parsed = trace_parsed_; EXPECT_NOT_FIND_("disabled-by-default-cc"); - EXPECT_FIND_("included"); + EXPECT_FIND_("test_included"); } Clear(); BeginSpecificTrace("disabled-by-default-cc"); TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc"), "second", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("other_included", "second", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0("test_other_included", "second", + TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); { const DictionaryValue* item = nullptr; ListValue& trace_parsed = trace_parsed_; EXPECT_FIND_("disabled-by-default-cc"); - EXPECT_FIND_("other_included"); + EXPECT_FIND_("test_other_included"); } Clear(); - BeginSpecificTrace("other_included"); - TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("cc") ",other_included", - "first", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_INSTANT0("other_included," TRACE_DISABLED_BY_DEFAULT("cc"), - "second", TRACE_EVENT_SCOPE_THREAD); + BeginSpecificTrace("test_other_included"); + TRACE_EVENT_INSTANT0("test_other_included," TRACE_DISABLED_BY_DEFAULT("cc"), + "test_first", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_INSTANT0( + "test," TRACE_DISABLED_BY_DEFAULT("cc") ",test_other_included", "second", + TRACE_EVENT_SCOPE_THREAD); EndTraceAndFlush(); { const DictionaryValue* item = nullptr; ListValue& trace_parsed = trace_parsed_; - EXPECT_FIND_("disabled-by-default-cc,other_included"); - EXPECT_FIND_("other_included,disabled-by-default-cc"); + EXPECT_FIND_("test,disabled-by-default-cc,test_other_included"); + EXPECT_FIND_("test_other_included,disabled-by-default-cc"); } } @@ -2339,10 +2344,10 @@ trace_log->logged_events_.reset( TraceBuffer::CreateTraceBufferVectorOfSize(100)); do { - TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( - "all", "with_timestamp", 0, 0, TimeTicks::Now()); - TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( - "all", "with_timestamp", 0, 0, TimeTicks::Now()); + TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0("test_all", "with_timestamp", + 0, 0, TimeTicks::Now()); + TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0("test_all", "with_timestamp", 0, + 0, TimeTicks::Now()); } while (!trace_log->BufferIsFull()); EndTraceAndFlush(); @@ -2673,21 +2678,22 @@ TraceLog::GetInstance()->SetEnabled( TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE), TraceLog::RECORDING_MODE); - TRACE_EVENT_BEGIN0("a", "begin_end"); + TRACE_EVENT_BEGIN0("test_a", "begin_end"); { - TRACE_EVENT0("b", "duration"); - TRACE_EVENT0("b1", "duration1"); + TRACE_EVENT0("test_b", "duration"); + TRACE_EVENT0("test_b1", "duration1"); } - TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL); - TRACE_EVENT_END0("a", "begin_end"); + TRACE_EVENT_INSTANT0("test_c", "instant", TRACE_EVENT_SCOPE_GLOBAL); + TRACE_EVENT_END0("test_a", "begin_end"); - EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b")); - EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b")); - EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[b1]\x1b")); - EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[b1] (")); - EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b] (")); - EXPECT_NE(std::string::npos, g_log_buffer->find("| instant[c]\x1b")); - EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a] (")); + EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[test_a]\x1b")); + EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[test_b]\x1b")); + EXPECT_NE(std::string::npos, + g_log_buffer->find("| | duration1[test_b1]\x1b")); + EXPECT_NE(std::string::npos, g_log_buffer->find("| | duration1[test_b1] (")); + EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[test_b] (")); + EXPECT_NE(std::string::npos, g_log_buffer->find("| instant[test_c]\x1b")); + EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[test_a] (")); EndTraceAndFlush(); delete g_log_buffer; @@ -2711,7 +2717,7 @@ TraceLog::RECORDING_MODE); { // This should not cause deadlock or infinite recursion. - TRACE_EVENT0("b", "duration"); + TRACE_EVENT0("test_b", "duration"); } EndTraceAndFlush(); @@ -2725,13 +2731,13 @@ TraceLog::GetInstance()->SetTimeOffset(time_offset); { - TRACE_EVENT0("all", "duration1"); - TRACE_EVENT0("all", "duration2"); + TRACE_EVENT0("test_all", "duration1"); + TRACE_EVENT0("test_all", "duration2"); } - TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( - "all", "with_timestamp", 0, 0, TimeTicks::Now()); - TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( - "all", "with_timestamp", 0, 0, TimeTicks::Now()); + TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0("test_all", "with_timestamp", 0, + 0, TimeTicks::Now()); + TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0("test_all", "with_timestamp", 0, 0, + TimeTicks::Now()); EndTraceAndFlush(); DropTracedMetadataRecords(); @@ -2778,10 +2784,10 @@ EXPECT_EQ(TraceLog::FILTERING_MODE, TraceLog::GetInstance()->enabled_modes()); { void* ptr = this; - TRACE_EVENT0("c0", "name0"); - TRACE_EVENT_ASYNC_BEGIN0("c1", "name1", ptr); - TRACE_EVENT_INSTANT0("c0", "name0", TRACE_EVENT_SCOPE_THREAD); - TRACE_EVENT_ASYNC_END0("c1", "name1", ptr); + TRACE_EVENT0("test_c0", "name0"); + TRACE_EVENT_ASYNC_BEGIN0("test_c1", "name1", ptr); + TRACE_EVENT_INSTANT0("test_c0", "name0", TRACE_EVENT_SCOPE_THREAD); + TRACE_EVENT_ASYNC_END0("test_c1", "name1", ptr); } // Recording mode is enabled when filtering mode is turned on. @@ -2789,26 +2795,22 @@ TraceLog::RECORDING_MODE); EXPECT_EQ(TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE, TraceLog::GetInstance()->enabled_modes()); - { - TRACE_EVENT0("c2", "name2"); - } + { TRACE_EVENT0("test_c2", "name2"); } // Only recording mode is disabled and filtering mode will continue to run. TraceLog::GetInstance()->SetDisabled(TraceLog::RECORDING_MODE); EXPECT_EQ(TraceLog::FILTERING_MODE, TraceLog::GetInstance()->enabled_modes()); - { - TRACE_EVENT0("c0", "name0"); - } + { TRACE_EVENT0("test_c0", "name0"); } // Filtering mode is disabled and no tracing mode should be enabled. TraceLog::GetInstance()->SetDisabled(TraceLog::FILTERING_MODE); EXPECT_EQ(0, TraceLog::GetInstance()->enabled_modes()); EndTraceAndFlush(); - EXPECT_FALSE(FindMatchingValue("cat", "c0")); - EXPECT_FALSE(FindMatchingValue("cat", "c1")); + EXPECT_FALSE(FindMatchingValue("cat", "test_c0")); + EXPECT_FALSE(FindMatchingValue("cat", "test_c1")); EXPECT_FALSE(FindMatchingValue("name", "name0")); EXPECT_FALSE(FindMatchingValue("name", "name1")); - EXPECT_TRUE(FindMatchingValue("cat", "c2")); + EXPECT_TRUE(FindMatchingValue("cat", "test_c2")); EXPECT_TRUE(FindMatchingValue("name", "name2")); EXPECT_EQ(6u, filter_hits_counter.filter_trace_event_hit_count); EXPECT_EQ(3u, filter_hits_counter.end_event_hit_count); @@ -2820,9 +2822,7 @@ TraceLog::GetInstance()->SetEnabled(TraceConfig("", ""), TraceLog::RECORDING_MODE); EXPECT_EQ(TraceLog::RECORDING_MODE, TraceLog::GetInstance()->enabled_modes()); - { - TRACE_EVENT0("c0", "name0"); - } + { TRACE_EVENT0("test_c0", "name0"); } // Filtering mode is also enabled and all events must be filtered-out. TestEventFilter::set_filter_return_value(false); @@ -2830,27 +2830,23 @@ TraceLog::FILTERING_MODE); EXPECT_EQ(TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE, TraceLog::GetInstance()->enabled_modes()); - { - TRACE_EVENT0("c1", "name1"); - } + { TRACE_EVENT0("test_c1", "name1"); } // Only filtering mode is disabled and recording mode should continue to run // with all events being recorded. TraceLog::GetInstance()->SetDisabled(TraceLog::FILTERING_MODE); EXPECT_EQ(TraceLog::RECORDING_MODE, TraceLog::GetInstance()->enabled_modes()); - { - TRACE_EVENT0("c2", "name2"); - } + { TRACE_EVENT0("test_c2", "name2"); } // Recording mode is disabled and no tracing mode should be enabled. TraceLog::GetInstance()->SetDisabled(TraceLog::RECORDING_MODE); EXPECT_EQ(0, TraceLog::GetInstance()->enabled_modes()); EndTraceAndFlush(); - EXPECT_TRUE(FindMatchingValue("cat", "c0")); - EXPECT_TRUE(FindMatchingValue("cat", "c2")); + EXPECT_TRUE(FindMatchingValue("cat", "test_c0")); + EXPECT_TRUE(FindMatchingValue("cat", "test_c2")); EXPECT_TRUE(FindMatchingValue("name", "name0")); EXPECT_TRUE(FindMatchingValue("name", "name2")); - EXPECT_FALSE(FindMatchingValue("cat", "c1")); + EXPECT_FALSE(FindMatchingValue("cat", "test_c1")); EXPECT_FALSE(FindMatchingValue("name", "name1")); EXPECT_EQ(1u, filter_hits_counter.filter_trace_event_hit_count); EXPECT_EQ(1u, filter_hits_counter.end_event_hit_count); @@ -2867,16 +2863,16 @@ const char config_json[] = "{" " \"included_categories\": [" - " \"filtered_cat\"," - " \"unfiltered_cat\"," - " \"" TRACE_DISABLED_BY_DEFAULT("filtered_cat") "\"," - " \"" TRACE_DISABLED_BY_DEFAULT("unfiltered_cat") "\"]," + " \"test_filtered_cat\"," + " \"test_unfiltered_cat\"," + " \"" TRACE_DISABLED_BY_DEFAULT("test_filtered_cat") "\"," + " \"" TRACE_DISABLED_BY_DEFAULT("test_unfiltered_cat") "\"]," " \"event_filters\": [" " {" " \"filter_predicate\": \"testing_predicate\", " " \"included_categories\": [" - " \"filtered_cat\"," - " \"" TRACE_DISABLED_BY_DEFAULT("filtered_cat") "\"]" + " \"test_filtered_cat\"," + " \"" TRACE_DISABLED_BY_DEFAULT("test_filtered_cat") "\"]" " }" " " " ]" @@ -2891,15 +2887,15 @@ trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); ASSERT_TRUE(TraceLog::GetInstance()->IsEnabled()); - TRACE_EVENT0("filtered_cat", "a snake"); - TRACE_EVENT0("filtered_cat", "a mushroom"); - TRACE_EVENT0("unfiltered_cat", "a horse"); + TRACE_EVENT0("test_filtered_cat", "a snake"); + TRACE_EVENT0("test_filtered_cat", "a mushroom"); + TRACE_EVENT0("test_unfiltered_cat", "a horse"); - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("filtered_cat"), "a dog"); - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("unfiltered_cat"), "a pony"); + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("test_filtered_cat"), "a dog"); + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("test_unfiltered_cat"), "a pony"); // This is scoped so we can test the end event being filtered. - { TRACE_EVENT0("filtered_cat", "another cat whoa"); } + { TRACE_EVENT0("test_filtered_cat", "another cat whoa"); } EndTraceAndFlush(); @@ -2917,14 +2913,14 @@ std::string config_json = StringPrintf( "{" " \"included_categories\": [" - " \"filtered_cat\"," - " \"unfiltered_cat\"," - " \"" TRACE_DISABLED_BY_DEFAULT("filtered_cat") "\"]," + " \"test_filtered_cat\"," + " \"test_unfiltered_cat\"," + " \"" TRACE_DISABLED_BY_DEFAULT("test_filtered_cat") "\"]," " \"event_filters\": [" " {" " \"filter_predicate\": \"%s\", " " \"included_categories\": [" - " \"filtered_cat\"," + " \"test_filtered_cat\"," " \"" TRACE_DISABLED_BY_DEFAULT("*") "\"], " " \"filter_args\": {" " \"event_name_allowlist\": [\"a snake\", \"a dog\"]" @@ -2940,11 +2936,11 @@ trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); - TRACE_EVENT0("filtered_cat", "a snake"); - TRACE_EVENT0("filtered_cat", "a mushroom"); - TRACE_EVENT0("unfiltered_cat", "a cat"); - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("filtered_cat"), "a dog"); - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("filtered_cat"), "a pony"); + TRACE_EVENT0("test_filtered_cat", "a snake"); + TRACE_EVENT0("test_filtered_cat", "a mushroom"); + TRACE_EVENT0("test_unfiltered_cat", "a cat"); + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("test_filtered_cat"), "a dog"); + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("test_filtered_cat"), "a pony"); EndTraceAndFlush(); @@ -2965,17 +2961,17 @@ std::string config_json = StringPrintf( "{" " \"included_categories\": [" - " \"filtered_cat\"," - " \"unfiltered_cat\"," - " \"" TRACE_DISABLED_BY_DEFAULT("filtered_cat") "\"," - " \"" TRACE_DISABLED_BY_DEFAULT("unfiltered_cat") "\"]," - " \"excluded_categories\": [\"excluded_cat\"]," + " \"test_filtered_cat\"," + " \"test_unfiltered_cat\"," + " \"" TRACE_DISABLED_BY_DEFAULT("test_filtered_cat") "\"," + " \"" TRACE_DISABLED_BY_DEFAULT("test_unfiltered_cat") "\"]," + " \"excluded_categories\": [\"test_excluded_cat\"]," " \"event_filters\": [" " {" " \"filter_predicate\": \"%s\", " " \"included_categories\": [" " \"*\"," - " \"" TRACE_DISABLED_BY_DEFAULT("filtered_cat") "\"]" + " \"" TRACE_DISABLED_BY_DEFAULT("test_filtered_cat") "\"]" " }" " ]" "}", @@ -2986,11 +2982,11 @@ trace_config, TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE); EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); - TRACE_EVENT0("filtered_cat", "a snake"); - TRACE_EVENT0("excluded_cat", "a mushroom"); - TRACE_EVENT0("unfiltered_cat", "a cat"); - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("filtered_cat"), "a dog"); - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("unfiltered_cat"), "a pony"); + TRACE_EVENT0("test_filtered_cat", "a snake"); + TRACE_EVENT0("test_excluded_cat", "a mushroom"); + TRACE_EVENT0("test_unfiltered_cat", "a cat"); + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("test_filtered_cat"), "a dog"); + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("test_unfiltered_cat"), "a pony"); EndTraceAndFlush();
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc index 9c63abc..5a7f642 100644 --- a/base/trace_event/trace_log.cc +++ b/base/trace_event/trace_log.cc
@@ -1885,6 +1885,7 @@ thread_now, thread_instruction_now); } +#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) ScopedTraceBinaryEfficient::ScopedTraceBinaryEfficient( const char* category_group, const char* name) { @@ -1911,5 +1912,6 @@ event_handle_); } } +#endif // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) } // namespace trace_event_internal
diff --git a/base/trace_event/typed_macros.h b/base/trace_event/typed_macros.h index 3ef00848..1e7c3bf8 100644 --- a/base/trace_event/typed_macros.h +++ b/base/trace_event/typed_macros.h
@@ -7,7 +7,6 @@ #include "base/base_export.h" #include "base/trace_event/trace_event.h" -#include "base/trace_event/typed_macros_internal.h" #include "base/tracing_buildflags.h" #include "build/build_config.h" @@ -16,6 +15,9 @@ #include "base/tracing/protos/chrome_track_event.pbzero.h" #include "third_party/perfetto/include/perfetto/tracing/event_context.h" +#if !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) +#include "base/trace_event/typed_macros_internal.h" + #if defined(TRACE_EVENT_BEGIN) #error "Another copy of perfetto tracing macros have been included" #endif @@ -84,4 +86,5 @@ TRACING_INTERNAL_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_INSTANT, category, name, \ ##__VA_ARGS__) +#endif // !BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) #endif // BASE_TRACE_EVENT_TYPED_MACROS_H_
diff --git a/build/android/docs/android_app_bundles.md b/build/android/docs/android_app_bundles.md index 1edcba4..e71fe27f 100644 --- a/build/android/docs/android_app_bundles.md +++ b/build/android/docs/android_app_bundles.md
@@ -56,11 +56,6 @@ # be 'foo_bundle' otherwise. bundle_name = "FooBundle" - # Signing your bundle is required to upload it to the Play Store - # but since signing is very slow, avoid doing it for non official - # builds. Signing the bundle is not required for local testing. - sign_bundle = is_official_build - # Enable language-based splits for this bundle. Which means that # resources and assets specific to a given language will be placed # into their own split APK in the final .apks archive.
diff --git a/build/android/gyp/create_app_bundle.py b/build/android/gyp/create_app_bundle.py index 359535b..afb5672 100755 --- a/build/android/gyp/create_app_bundle.py +++ b/build/android/gyp/create_app_bundle.py
@@ -106,9 +106,6 @@ action='store_true', help='Treat all warnings as errors.') - parser.add_argument('--keystore-path', help='Keystore path') - parser.add_argument('--keystore-password', help='Keystore password') - parser.add_argument('--key-name', help='Keystore key name') parser.add_argument( '--validate-services', action='store_true', @@ -122,13 +119,6 @@ if len(options.module_zips) == 0: raise Exception('The module zip list cannot be empty.') - # Signing is optional, but all --keyXX parameters should be set. - if options.keystore_path or options.keystore_password or options.key_name: - if not options.keystore_path or not options.keystore_password or \ - not options.key_name: - raise Exception('When signing the bundle, use --keystore-path, ' - '--keystore-password and --key-name.') - # Merge all uncompressed assets into a set. uncompressed_list = [] if options.uncompressed_assets: @@ -500,10 +490,6 @@ tmp_bundle = os.path.join(tmp_dir, 'tmp_bundle') - tmp_unsigned_bundle = tmp_bundle - if options.keystore_path: - tmp_unsigned_bundle = tmp_bundle + '.unsigned' - # Important: bundletool requires that the bundle config file is # named with a .pb.json extension. tmp_bundle_config = tmp_bundle + '.BundleConfig.pb.json' @@ -516,7 +502,7 @@ bundletool.BUNDLETOOL_JAR_PATH, 'build-bundle', '--modules=' + ','.join(module_zips), - '--output=' + tmp_unsigned_bundle, + '--output=' + tmp_bundle, '--config=' + tmp_bundle_config, ] @@ -532,25 +518,7 @@ # isolated splits disabled and 2s for bundles with isolated splits # enabled. Consider making this run in parallel or move into a separate # step before enabling isolated splits by default. - _MaybeCheckServicesAndProvidersPresentInBase(tmp_unsigned_bundle, - module_zips) - - if options.keystore_path: - # NOTE: As stated by the public documentation, apksigner cannot be used - # to sign the bundle (because it rejects anything that isn't an APK). - # The signature and digest algorithm selection come from the internal - # App Bundle documentation. There is no corresponding public doc :-( - signing_cmd_args = [ - 'jarsigner', '-sigalg', 'SHA256withRSA', '-digestalg', 'SHA-256', - '-keystore', 'file:' + options.keystore_path, - '-storepass' , options.keystore_password, - '-signedjar', tmp_bundle, - tmp_unsigned_bundle, - options.key_name, - ] - build_utils.CheckOutput(signing_cmd_args, - print_stderr=True, - fail_on_output=options.warnings_as_errors) + _MaybeCheckServicesAndProvidersPresentInBase(tmp_bundle, module_zips) shutil.move(tmp_bundle, options.out_bundle)
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 115b4cfa..be333b60 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -4460,11 +4460,6 @@ # enable_language_splits: Optional. If true, enable APK splits based # on languages. # - # sign_bundle: Optional. If true, sign the bundle. Default is false - # because signing is very slow, and there is no reason to do it - # unless one wants to upload the bundle to the Play Store (e.g. - # for official builds). - # # keystore_path: optional keystore path, used only when generating APKs. # keystore_name: optional keystore name, used only when generating APKs. # keystore_password: optional keystore password, used only when @@ -4836,8 +4831,6 @@ _all_rebased_module_zip_paths = rebase_path(_all_module_zip_paths, root_build_dir) - _sign_bundle = defined(invoker.sign_bundle) && invoker.sign_bundle - _enable_language_splits = defined(invoker.enable_language_splits) && invoker.enable_language_splits @@ -4858,13 +4851,6 @@ _rebased_keystore_path = rebase_path(_keystore_path, root_build_dir) - if (_sign_bundle) { - # For now, the same keys are used to sign the bundle and the set of - # generated APKs. In the future, signing the bundle may require a - # different set of keys. - _bundle_keystore_name = _keystore_name - } - _bundle_target_name = "${_target_name}__bundle" action_with_pydeps(_bundle_target_name) { # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. @@ -4880,16 +4866,6 @@ "--pathmap-out-path=$_rebased_bundle_path.pathmap.txt", "--module-zips=$_all_rebased_module_zip_paths", ] - if (_sign_bundle) { - args += [ - "--keystore-path", - _rebased_keystore_path, - "--keystore-password", - _keystore_password, - "--key-name", - _bundle_keystore_name, - ] - } if (_split_dimensions != []) { args += [ "--split-dimensions=$_split_dimensions" ] }
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index de22922..5b014e3 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -733,6 +733,23 @@ } } + # Pin to LLVM's legacy pass manager so we can switch independently of a Clang roll. + # TODO(https://crbug.com/1173188): remove once we've rolled a Clang with the new PM as the default PM. + if (is_clang && !is_nacl && !use_xcode_clang && + default_toolchain != "//build/toolchain/cros:target") { + cflags += [ + "-Xclang", + "-fno-experimental-new-pass-manager", + ] + if (use_thin_lto) { + if (is_win) { + ldflags += [ "-opt:noltonewpassmanager" ] + } else if (!is_mac) { + ldflags += [ "-Wl,--lto-legacy-pass-manager" ] + } + } + } + # This flag enforces that member pointer base types are complete. It helps # prevent us from running into problems in the Microsoft C++ ABI (see # https://crbug.com/847724).
diff --git a/build/config/fuchsia/BUILD.gn b/build/config/fuchsia/BUILD.gn index 427f364..7ee1923d 100644 --- a/build/config/fuchsia/BUILD.gn +++ b/build/config/fuchsia/BUILD.gn
@@ -13,13 +13,6 @@ # but on other platforms it's much higher, so a variety of code assumes more # will be available. Raise to 8M which matches e.g. macOS. ldflags = [ "-Wl,-z,stack-size=0x800000" ] - - if (target_cpu != "arm64") { - # TODO(https://crbug.com/1086134): RELR packing of dynamic relocations is - # enabled by default in the Fuchsia toolchain, but is not fully supported - # in Chromium builds except on ARM64. - ldflags += [ "-Wl,--pack-dyn-relocs=none" ] - } } # Settings for executables.
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 230e319..64ae2c8c 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20210202.3.1 +0.20210203.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 230e319..64ae2c8c 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20210202.3.1 +0.20210203.1.1
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc index ab6116e4..f9b3a198 100644 --- a/cc/test/layer_tree_test.cc +++ b/cc/test/layer_tree_test.cc
@@ -53,6 +53,7 @@ #include "testing/gmock/include/gmock/gmock.h" #include "ui/base/ui_base_features.h" #include "ui/gfx/geometry/size_conversions.h" +#include "ui/gl/gl_implementation.h" #include "ui/gl/gl_switches.h" namespace cc { @@ -970,6 +971,13 @@ base::RunLoop::QuitCurrentWhenIdleDeprecated(); } +bool LayerTreeTest::use_swangle() const { + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + return (gl::GetGLImplementation() == gl::kGLImplementationEGLANGLE) && + (command_line->GetSwitchValueASCII(::switches::kUseANGLE) == + gl::kANGLEImplementationSwiftShaderName); +} + void LayerTreeTest::DispatchAddNoDamageAnimation( Animation* animation_to_receive_animation, double animation_duration) {
diff --git a/cc/test/layer_tree_test.h b/cc/test/layer_tree_test.h index 7f8345d..0662dc9 100644 --- a/cc/test/layer_tree_test.h +++ b/cc/test/layer_tree_test.h
@@ -229,6 +229,7 @@ return false; #endif } + bool use_swangle() const; const viz::RendererType renderer_type_;
diff --git a/cc/trees/layer_tree_host_pixeltest_filters.cc b/cc/trees/layer_tree_host_pixeltest_filters.cc index c6193ce..d0a7567 100644 --- a/cc/trees/layer_tree_host_pixeltest_filters.cc +++ b/cc/trees/layer_tree_host_pixeltest_filters.cc
@@ -605,7 +605,11 @@ RunPixelTest( background, - base::FilePath(FILE_PATH_LITERAL("backdrop_filter_on_scaled_layer_.png")) + base::FilePath( + (use_swangle() || use_skia_vulkan()) + ? FILE_PATH_LITERAL("backdrop_filter_on_scaled_layer_.png") + : FILE_PATH_LITERAL( + "backdrop_filter_on_scaled_layer_legacy_swiftshader_.png")) .InsertBeforeExtensionASCII(GetRendererSuffix())); } @@ -718,7 +722,11 @@ RunPixelTest( background, - base::FilePath(FILE_PATH_LITERAL("scaled_render_surface_layer_.png")) + base::FilePath( + (use_swangle() || use_skia_vulkan()) + ? FILE_PATH_LITERAL("scaled_render_surface_layer_.png") + : FILE_PATH_LITERAL( + "scaled_render_surface_layer_legacy_swiftshader_.png")) .InsertBeforeExtensionASCII(GetRendererSuffix())); }
diff --git a/cc/trees/layer_tree_host_pixeltest_scrollbars.cc b/cc/trees/layer_tree_host_pixeltest_scrollbars.cc index d8c4420..b531ed86 100644 --- a/cc/trees/layer_tree_host_pixeltest_scrollbars.cc +++ b/cc/trees/layer_tree_host_pixeltest_scrollbars.cc
@@ -173,14 +173,22 @@ scale_transform.Scale(scale, scale); layer->SetTransform(scale_transform); - if (renderer_type_ == viz::RendererType::kSkiaGL || + if (use_swangle() || use_skia_vulkan() || + renderer_type_ == viz::RendererType::kSkiaGL || renderer_type_ == viz::RendererType::kSkiaDawn) pixel_comparator_ = std::make_unique<FuzzyPixelOffByOneComparator>(true); - RunPixelTest(background, - use_skia_vulkan() - ? base::FilePath(FILE_PATH_LITERAL("spiral_64_scale_vk.png")) - : base::FilePath(FILE_PATH_LITERAL("spiral_64_scale.png"))); + RunPixelTest( + background, + base::FilePath( + use_swangle() + ? (use_skia_vulkan() ? FILE_PATH_LITERAL("spiral_64_scale_vk.png") + : FILE_PATH_LITERAL("spiral_64_scale.png")) + : (use_skia_vulkan() + ? FILE_PATH_LITERAL( + "spiral_64_scale_legacy_swiftshader_vk.png") + : FILE_PATH_LITERAL( + "spiral_64_scale_legacy_swiftshader.png")))); } class LayerTreeHostOverlayScrollbarsPixelTest
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index 77a2f43..ad89a94 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -841,6 +841,7 @@ "java/src/org/chromium/chrome/browser/notifications/NotificationUmaTracker.java", "java/src/org/chromium/chrome/browser/notifications/NotificationWrapperBuilderFactory.java", "java/src/org/chromium/chrome/browser/notifications/StandardNotificationBuilder.java", + "java/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetrics.java", "java/src/org/chromium/chrome/browser/notifications/channels/ChannelsUpdater.java", "java/src/org/chromium/chrome/browser/notifications/channels/ChromeChannelDefinitions.java", "java/src/org/chromium/chrome/browser/notifications/channels/SiteChannelsManager.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni index 7cd6f8a..418a6010a 100644 --- a/chrome/android/chrome_junit_test_java_sources.gni +++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -137,6 +137,7 @@ "junit/src/org/chromium/chrome/browser/notifications/NotificationTriggerBackgroundTaskTest.java", "junit/src/org/chromium/chrome/browser/notifications/NotificationTriggerSchedulerTest.java", "junit/src/org/chromium/chrome/browser/notifications/PendingIntentProviderTest.java", + "junit/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetricsTest.java", "junit/src/org/chromium/chrome/browser/notifications/channels/ChromeChannelDefinitionsTest.java", "junit/src/org/chromium/chrome/browser/ntp/cards/InnerNodeTest.java", "junit/src/org/chromium/chrome/browser/offline/measurements/OfflineMeasurementsBackgroundTaskUnitTest.java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureParameters.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureParameters.java index 6292bc39..4ee01f6 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureParameters.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureParameters.java
@@ -36,6 +36,11 @@ private String mDebugSocketId; /** + * Number of consecutive script runs. Provided via --num-runs. + */ + private int mNumRuns; + + /** * Loads test parameters from command line. */ public static PasswordChangeFixtureParameters loadFromCommandLine() { @@ -49,12 +54,15 @@ params.mPassword = CommandLine.getInstance().getSwitchValue("password", ""); params.mDebugBundleId = CommandLine.getInstance().getSwitchValue("debug-bundle-id"); params.mDebugSocketId = CommandLine.getInstance().getSwitchValue("debug-socket-id"); + params.mNumRuns = + Integer.parseInt(CommandLine.getInstance().getSwitchValue("num-runs", "1")); assert params.mAutofillAssistantUrl != null : "--autofill-assistant-url must be provided."; assert params.mDomainUrl != null : "--domain-url must be provided."; assert params.mUsername != null : "--username must be provided."; assert params.mDebugBundleId != null : "--debug-bundle-id must be provided."; assert params.mDebugSocketId != null : "--debug-socket-id must be provided."; + assert params.mNumRuns > 0 : "--num-runs must be greater than 0."; return params; } @@ -82,4 +90,8 @@ public String getDebugSocketId() { return mDebugSocketId; } + + public int getNumRuns() { + return mNumRuns; + } }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureSingleRunTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureSingleRunTest.java index 3320528..1a855a7 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureSingleRunTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureSingleRunTest.java
@@ -7,19 +7,19 @@ import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.junit.Assert.assertTrue; - import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntil; import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition; import static org.chromium.chrome.browser.autofill_assistant.PasswordChangeFixtureTestUtils.MAX_WAIT_TIME_IN_MS; import static org.chromium.chrome.browser.autofill_assistant.PasswordChangeFixtureTestUtils.TAG; import static org.chromium.chrome.browser.autofill_assistant.PasswordChangeFixtureTestUtils.checkCredentialsDifferByPassword; +import static org.chromium.chrome.browser.autofill_assistant.PasswordChangeFixtureTestUtils.clearBrowsingData; import static org.chromium.chrome.browser.autofill_assistant.PasswordChangeFixtureTestUtils.logPasswordStoreCredentials; import static org.chromium.chrome.browser.autofill_assistant.PasswordChangeFixtureTestUtils.validateFullRun; import android.support.test.InstrumentationRegistry; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -28,6 +28,8 @@ import org.chromium.base.Log; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Manual; +import org.chromium.chrome.browser.browsing_data.BrowsingDataType; +import org.chromium.chrome.browser.browsing_data.TimePeriod; import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; @@ -97,6 +99,7 @@ @After public void tearDown() { mPasswordStoreBridge.clearAllPasswords(); + waitUntil(() -> mPasswordStoreBridge.getPasswordStoreCredentialsCount() == 0); TestThreadUtils.runOnUiThreadBlocking(() -> { mPasswordStoreBridge.destroy(); }); } @@ -112,19 +115,11 @@ } /** - * Checks the script successfully changes password in Chrome password manager. There should be - * only one entry for that domain with the new password. + * Performs and validates a single password change script run. + * + * @return Updated credential. */ - @Test - @Manual - public void testPasswordChangeFlow() throws Exception { - PasswordStoreCredential credential = - new PasswordStoreCredential(new GURL(mParameters.getDomainUrl()), - mParameters.getUsername(), mParameters.getPassword()); - - // Insert credential into the password store. - mPasswordStoreBridge.insertPasswordCredential(credential); - + private PasswordStoreCredential testSingleRun(PasswordStoreCredential credential) { // Run password change script for user. runScriptForUser(credential.getUsername()); @@ -135,14 +130,69 @@ waitUntil(() -> checkCredentialsDifferByPassword(credential, mNewCredential)); // Assert store contains a single credential. - assertTrue("Store does not contain a single credential", + Assert.assertTrue("Store does not contain a single credential", mPasswordStoreBridge.getPasswordStoreCredentialsCount() == 1); + return mNewCredential; + } + + /** + * Runs the script multiple times (defined by --num-runs) consecutively. Checks the script + * successfully changes password in Chrome password manager. There should be only one entry for + * that domain with the new password. + */ + @Test + @Manual + public void testMultipleRuns() throws Exception { + PasswordStoreCredential credential = + new PasswordStoreCredential(new GURL(mParameters.getDomainUrl()), + mParameters.getUsername(), mParameters.getPassword()); + + // Insert initial credential into the password store. + mPasswordStoreBridge.insertPasswordCredential(credential); + + // Wait until insert operation finishes. + waitUntil(() -> mPasswordStoreBridge.getPasswordStoreCredentialsCount() == 1); + + for (int i = 0; i < mParameters.getNumRuns(); i++) { + // Run and test script. + credential = testSingleRun(credential); + Log.i(TAG, "[EVENT: Run #%s succeded]", String.valueOf(i + 1)); + } + logPasswordStoreCredentials(mPasswordStoreBridge, "Final password store state"); } /** - * Check the script fails at login due to wrong credentials. + * Clear all browsing data (E.g Cookies, site settings, history). Checks the script + * successfully changes password in Chrome password manager. + */ + @Test + @Manual + public void testSingleRunNoCookies() throws Exception { + clearBrowsingData(new int[] {BrowsingDataType.HISTORY, BrowsingDataType.CACHE, + BrowsingDataType.COOKIES, BrowsingDataType.SITE_SETTINGS}, + TimePeriod.ALL_TIME); + Log.i(TAG, "[EVENT: Site settings cleared]"); + + PasswordStoreCredential credential = + new PasswordStoreCredential(new GURL(mParameters.getDomainUrl()), + mParameters.getUsername(), mParameters.getPassword()); + + // Insert credential into the password store. + mPasswordStoreBridge.insertPasswordCredential(credential); + + // Wait until insert operation finishes. + waitUntil(() -> mPasswordStoreBridge.getPasswordStoreCredentialsCount() == 1); + + // Run and test password change. + testSingleRun(credential); + + logPasswordStoreCredentials(mPasswordStoreBridge, "Final password store state"); + } + + /** + * Checks the script fails at login due to wrong credentials. */ @Test @Manual @@ -154,6 +204,9 @@ // Insert credential into the password store. mPasswordStoreBridge.insertPasswordCredential(credential); + // Wait until insert operation finishes. + waitUntil(() -> mPasswordStoreBridge.getPasswordStoreCredentialsCount() == 1); + // Run script. runScriptForUser(credential.getUsername()); @@ -167,11 +220,11 @@ // Assert password store contains only one credential. int countOfCredentials = mPasswordStoreBridge.getPasswordStoreCredentialsCount(); - assertTrue("Store does not contain a single credential", countOfCredentials == 1); + Assert.assertTrue("Store does not contain a single credential", countOfCredentials == 1); // Assert initial credential has not changed. PasswordStoreCredential[] credentials = mPasswordStoreBridge.getAllCredentials(); - assertTrue("Initial credential was changed", credential.equals(credentials[0])); + Assert.assertTrue("Initial credential was changed", credential.equals(credentials[0])); logPasswordStoreCredentials(mPasswordStoreBridge, "Final password store state"); } @@ -187,6 +240,6 @@ @Override public void onEdit(PasswordStoreCredential credential) { - Log.i(TAG, "EVENT: Credential %s edited", credential.toString()); + Log.i(TAG, "[EVENT: Credential %s edited]", credential.toString()); } }
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureTestUtils.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureTestUtils.java index 7c3c60f0..e6d6e44 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureTestUtils.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/PasswordChangeFixtureTestUtils.java
@@ -12,8 +12,13 @@ import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.waitUntilViewMatchesCondition; import org.chromium.base.Log; +import org.chromium.base.test.util.CallbackHelper; +import org.chromium.chrome.browser.browsing_data.BrowsingDataBridge; import org.chromium.chrome.browser.password_manager.PasswordStoreBridge; import org.chromium.chrome.browser.password_manager.PasswordStoreCredential; +import org.chromium.content_public.browser.test.util.TestThreadUtils; + +import java.util.concurrent.TimeoutException; /** * Contains utilities for password change integration tests. @@ -41,6 +46,22 @@ } /** + * Clears the browser's data for a certain time period. + * + * @param dataTypes List of BrowsingDataType elements to remove. + * @param timePeriod Time period range for data removal. + * @throws TimeoutException + */ + public static void clearBrowsingData(int[] dataTypes, int timePeriod) throws TimeoutException { + CallbackHelper helper = new CallbackHelper(); + TestThreadUtils.runOnUiThreadBlocking(() -> { + BrowsingDataBridge.getInstance().clearBrowsingData( + helper::notifyCalled, dataTypes, timePeriod); + }); + helper.waitForCallback(0); + } + + /** * Validates full password change run UI flow. Accepts generated password. */ public static void validateFullRun() {
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/AutofillKeyboardAccessoryViewBridge.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/AutofillKeyboardAccessoryViewBridge.java index eb4bf24..cee3410 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/AutofillKeyboardAccessoryViewBridge.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/AutofillKeyboardAccessoryViewBridge.java
@@ -7,10 +7,12 @@ import android.content.Context; import android.content.DialogInterface; +import androidx.annotation.Nullable; + import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; -import org.chromium.chrome.browser.app.ChromeActivity; +import org.chromium.base.supplier.ObservableSupplier; import org.chromium.chrome.browser.keyboard_accessory.data.PropertyProvider; import org.chromium.components.autofill.AutofillDelegate; import org.chromium.components.autofill.AutofillSuggestion; @@ -26,9 +28,10 @@ public class AutofillKeyboardAccessoryViewBridge implements AutofillDelegate, DialogInterface.OnClickListener { private long mNativeAutofillKeyboardAccessory; - private ManualFillingComponent mManualFillingComponent; - private Context mContext; - private PropertyProvider<AutofillSuggestion[]> mChipProvider = + private @Nullable ObservableSupplier<ManualFillingComponent> mManualFillingComponentSupplier; + private @Nullable ManualFillingComponent mManualFillingComponent; + private @Nullable Context mContext; + private final PropertyProvider<AutofillSuggestion[]> mChipProvider = new PropertyProvider<>(AccessoryAction.AUTOFILL_SUGGESTION); private AutofillKeyboardAccessoryViewBridge() {} @@ -83,9 +86,12 @@ private void init(long nativeAutofillKeyboardAccessory, WindowAndroid windowAndroid) { mContext = windowAndroid.getActivity().get(); assert mContext != null; - if (mContext instanceof ChromeActivity) { - mManualFillingComponent = ((ChromeActivity) mContext).getManualFillingComponent(); - mManualFillingComponent.registerAutofillProvider(mChipProvider, this); + + mManualFillingComponentSupplier = ManualFillingComponentSupplier.from(windowAndroid); + if (mManualFillingComponentSupplier != null) { + ManualFillingComponent currentFillingComponent = + mManualFillingComponentSupplier.addObserver(this::connectToFillingComponent); + connectToFillingComponent(currentFillingComponent); } mNativeAutofillKeyboardAccessory = nativeAutofillKeyboardAccessory; @@ -104,6 +110,9 @@ */ @CalledByNative private void dismiss() { + if (mManualFillingComponentSupplier != null) { + mManualFillingComponentSupplier.removeObserver(this::connectToFillingComponent); + } mChipProvider.notifyObservers(new AutofillSuggestion[0]); mContext = null; } @@ -161,6 +170,18 @@ false /* isBoldLabel */); } + /** + * Used to register the filling component that receives and renders the autofill suggestions. + * Noop if the component hasn't changed or became null. + * @param fillingComponent The {@link ManualFillingComponent} displaying suggestions as chips. + */ + private void connectToFillingComponent(@Nullable ManualFillingComponent fillingComponent) { + if (mManualFillingComponent == fillingComponent) return; + mManualFillingComponent = fillingComponent; + if (mManualFillingComponent == null) return; + mManualFillingComponent.registerAutofillProvider(mChipProvider, this); + } + @NativeMethods interface Natives { void viewDismissed(long nativeAutofillKeyboardAccessoryView,
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java index bcd6997a..6f7d2eb 100644 --- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java +++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingCoordinator.java
@@ -30,6 +30,8 @@ * fields. */ class ManualFillingCoordinator implements ManualFillingComponent { + private final ManualFillingComponentSupplier mComponentSupplier = + new ManualFillingComponentSupplier(); private final ManualFillingMediator mMediator = new ManualFillingMediator(); private ObserverList<Observer> mObserverList = new ObserverList<>(); @@ -47,6 +49,8 @@ sheetStub.setLayoutResource(R.layout.keyboard_accessory_sheet); initialize(windowAndroid, new KeyboardAccessoryCoordinator(mMediator, barStub), new AccessorySheetCoordinator(sheetStub), sheetController); + mComponentSupplier.set(this); + mComponentSupplier.attach(windowAndroid.getUnownedUserDataHost()); } @VisibleForTesting @@ -57,6 +61,7 @@ @Override public void destroy() { + mComponentSupplier.destroy(); for (Observer observer : mObserverList) observer.onDestroy(); mMediator.destroy(); }
diff --git a/chrome/android/features/keyboard_accessory/public/BUILD.gn b/chrome/android/features/keyboard_accessory/public/BUILD.gn index 2818063..9f08197c 100644 --- a/chrome/android/features/keyboard_accessory/public/BUILD.gn +++ b/chrome/android/features/keyboard_accessory/public/BUILD.gn
@@ -14,6 +14,7 @@ ] sources = [ "java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponent.java", + "java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentSupplier.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/data/KeyboardAccessoryData.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/data/PropertyProvider.java", "java/src/org/chromium/chrome/browser/keyboard_accessory/data/Provider.java",
diff --git a/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentSupplier.java b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentSupplier.java new file mode 100644 index 0000000..36c5856 --- /dev/null +++ b/chrome/android/features/keyboard_accessory/public/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentSupplier.java
@@ -0,0 +1,35 @@ +// Copyright 2021 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.keyboard_accessory; + +import org.chromium.base.UnownedUserDataKey; +import org.chromium.base.supplier.ObservableSupplier; +import org.chromium.base.supplier.UnownedUserDataSupplier; +import org.chromium.ui.base.WindowAndroid; + +/** + * A {@link UnownedUserDataSupplier} which manages the supplier and UnownedUserData for a + * {@link ManualFillingComponent}. + */ +public class ManualFillingComponentSupplier + extends UnownedUserDataSupplier<ManualFillingComponent> { + private static final UnownedUserDataKey<ManualFillingComponentSupplier> KEY = + new UnownedUserDataKey<>(ManualFillingComponentSupplier.class); + + /** + * Return {@link ManualFillingComponent} supplier associated with the given {@link + * WindowAndroid}. + */ + public static ObservableSupplier<ManualFillingComponent> from(WindowAndroid windowAndroid) { + return KEY.retrieveDataFromHost(windowAndroid.getUnownedUserDataHost()); + } + + /** + * Constructs a ManualFillingComponentSupplier and attaches it to the {@link WindowAndroid} + */ + public ManualFillingComponentSupplier() { + super(KEY); + } +} \ No newline at end of file
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java index ed81aa09..3a8ce03 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
@@ -4,6 +4,7 @@ package org.chromium.chrome.features.start_surface; +import static android.os.Build.VERSION_CODES.M; import static android.os.Build.VERSION_CODES.N; import static android.os.Build.VERSION_CODES.P; @@ -67,6 +68,7 @@ import androidx.test.espresso.action.ViewActions; import androidx.test.espresso.contrib.RecyclerViewActions; import androidx.test.espresso.matcher.ViewMatchers; +import androidx.test.filters.LargeTest; import androidx.test.filters.MediumTest; import com.google.android.material.appbar.AppBarLayout; @@ -150,6 +152,8 @@ private static final String BASE_PARAMS = "force-fieldtrial-params=Study.Group:start_surface_variation"; + private static final long MAX_TIMEOUT_MS = 30000L; + /** Somehow {@link ViewActions#swipeUp} couldn't be performed */ private static final ViewAction SWIPE_UP_FROM_CENTER = new GeneralSwipeAction( Swipe.FAST, GeneralLocation.CENTER, GeneralLocation.TOP_CENTER, Press.FINGER); @@ -1751,10 +1755,9 @@ } @Test - @MediumTest + @LargeTest @Feature({"StartSurface"}) - @DisableIf.Build(sdk_is_less_than = P, message = "https://crbug.com/1170553") - @DisableIf.Build(supported_abis_includes = "x86", message = "https://crbug.com/1170553") + @DisableIf.Build(sdk_is_less_than = M, message = "https://crbug.com/1170553") @CommandLineFlags.Add({BASE_PARAMS + "/single/omnibox_focused_on_new_tab/true"}) public void testOmnibox_FocusedOnNewTabInSingleSurface() { if (!mImmediateReturn) { @@ -1770,11 +1773,12 @@ TestThreadUtils.runOnUiThreadBlocking( () -> mActivityTestRule.getActivity().getTabCreator(false).launchNTP()); TabUiTestHelper.verifyTabModelTabCount(mActivityTestRule.getActivity(), 2, 0); - onView(allOf(withId(R.id.url_bar), isDisplayed())); - + waitForView(withId(R.id.search_box_text)); TextView urlBar = mActivityTestRule.getActivity().findViewById(R.id.url_bar); - CriteriaHelper.pollUiThread(this::isKeyboardShown); - Assert.assertTrue(urlBar.isFocused()); + CriteriaHelper.pollUiThread(() + -> isKeyboardShown() && urlBar.isFocused(), + MAX_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); + waitForView(withId(R.id.voice_search_button)); Assert.assertTrue(TextUtils.isEmpty(urlBar.getText())); assertEquals( mActivityTestRule.getActivity().findViewById(R.id.toolbar_buttons).getVisibility(), @@ -1788,13 +1792,12 @@ TestThreadUtils.runOnUiThreadBlocking( () -> mActivityTestRule.getActivity().getTabCreator(false).launchNTP()); TabUiTestHelper.verifyTabModelTabCount(mActivityTestRule.getActivity(), 3, 0); - onView(allOf(withId(R.id.search_box_text), isDisplayed())); - CriteriaHelper.pollUiThread(this::isKeyboardShown); + waitForView(withId(R.id.search_box_text)); + CriteriaHelper.pollUiThread(() + -> isKeyboardShown() && urlBar.isFocused(), + MAX_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); + waitForView(withId(R.id.voice_search_button)); Assert.assertTrue(TextUtils.isEmpty(urlBar.getText())); - Assert.assertTrue(urlBar.isFocused()); - assertEquals( - mActivityTestRule.getActivity().findViewById(R.id.toolbar_buttons).getVisibility(), - View.INVISIBLE); // Navigates the Tab to show home button. TestThreadUtils.runOnUiThreadBlocking(() -> urlBar.setText("about:blank")); @@ -1802,7 +1805,7 @@ // Goes to the Start surface from tapping home button, and navigate from the Omnibox. The // new created Tab shouldn't get focus. - onView(allOf(withId(org.chromium.chrome.tab_ui.R.id.home_button), isDisplayed())); + waitForView(withId(org.chromium.chrome.tab_ui.R.id.home_button)); onView(withId(org.chromium.chrome.tab_ui.R.id.home_button)).perform(click()); CriteriaHelper.pollUiThread(this::isOverviewVisible); @@ -1812,15 +1815,15 @@ waitForView(withId(R.id.primary_tasks_surface_view), VIEW_GONE); TabUiTestHelper.verifyTabModelTabCount(mActivityTestRule.getActivity(), 4, 0); - onView(allOf(withId(R.id.search_box_text), isDisplayed())); - onView(allOf(withId(R.id.toolbar_buttons), isDisplayed())); + waitForView(withId(R.id.search_box_text)); + waitForView(withId(R.id.toolbar_buttons)); Assert.assertFalse(urlBar.isFocused()); } @Test - @MediumTest + @LargeTest @Feature({"StartSurface"}) - @DisableIf.Build(sdk_is_less_than = P, message = "https://crbug.com/1170553") + @DisableIf.Build(sdk_is_less_than = M, message = "https://crbug.com/1170553") @DisableIf.Build(supported_abis_includes = "x86", message = "https://crbug.com/1170553") @CommandLineFlags.Add({BASE_PARAMS + "/single/omnibox_focused_on_new_tab/true"}) public void testOmnibox_FocusedOnNewTabInSingleSurface_WithBackButton() { @@ -1837,12 +1840,13 @@ TestThreadUtils.runOnUiThreadBlocking( () -> mActivityTestRule.getActivity().getTabCreator(false).launchNTP()); TabUiTestHelper.verifyTabModelTabCount(mActivityTestRule.getActivity(), 2, 0); - onView(allOf(withId(R.id.search_box_text), isDisplayed())); - + waitForView(withId(R.id.search_box_text)); TextView urlBar = mActivityTestRule.getActivity().findViewById(R.id.url_bar); + CriteriaHelper.pollUiThread(() + -> isKeyboardShown() && urlBar.isFocused(), + MAX_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); + waitForView(withId(R.id.voice_search_button)); Assert.assertTrue(TextUtils.isEmpty(urlBar.getText())); - CriteriaHelper.pollUiThread(this::isKeyboardShown); - Assert.assertTrue(urlBar.isFocused()); assertEquals( mActivityTestRule.getActivity().findViewById(R.id.toolbar_buttons).getVisibility(), View.INVISIBLE); @@ -1850,6 +1854,11 @@ // Verifies that if the new created tab doesn't navigate, tapping back button will deleted // it from the TabModel. TestThreadUtils.runOnUiThreadBlocking(() -> urlBar.clearFocus()); + waitForView(withId(R.id.toolbar_buttons)); + CriteriaHelper.pollUiThread(() + -> !isKeyboardShown() && !urlBar.isFocused(), + MAX_TIMEOUT_MS, CriteriaHelper.DEFAULT_POLLING_INTERVAL); + // Back to the Start surface. pressBack(); CriteriaHelper.pollUiThread(this::isOverviewVisible); @@ -1858,6 +1867,7 @@ private boolean isKeyboardShown() { Activity activity = mActivityTestRule.getActivity(); + if (activity.getCurrentFocus() == null) return false; return mActivityTestRule.getKeyboardDelegate().isKeyboardShowing( activity, activity.getCurrentFocus()); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java index 4507000..fafbf00 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java
@@ -16,6 +16,7 @@ import org.chromium.base.task.PostTask; import org.chromium.chrome.browser.browserservices.BrowserServicesMetrics; import org.chromium.chrome.browser.browserservices.TrustedWebActivityClient; +import org.chromium.chrome.browser.notifications.WebPlatformNotificationMetrics; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabLaunchType; import org.chromium.chrome.browser.tabmodel.AsyncTabCreationParams; @@ -68,6 +69,8 @@ public static void launchTab(final int requestId, boolean incognito, GURL url, int disposition, String referrerUrl, int referrerPolicy, String extraHeaders, ResourceRequestBody postData) { + WebPlatformNotificationMetrics.getInstance().onNewTabLaunched(); + // Open popup window in custom tab. // Note that this is used by PaymentRequestEvent.openWindow(). if (disposition == WindowOpenDisposition.NEW_POPUP) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java index 17a57b8..81cafe6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/tab_activity_glue/ActivityTabWebContentsDelegateAndroid.java
@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenOptions; import org.chromium.chrome.browser.media.PictureInPicture; +import org.chromium.chrome.browser.notifications.WebPlatformNotificationMetrics; import org.chromium.chrome.browser.policy.PolicyAuditor; import org.chromium.chrome.browser.policy.PolicyAuditor.AuditEvent; import org.chromium.chrome.browser.tab.EmptyTabObserver; @@ -201,6 +202,8 @@ return; } + WebPlatformNotificationMetrics.getInstance().onTabFocused(); + // Do nothing if the tab can currently be interacted with by the user. if (mTab.isUserInteractable()) return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java index 6740d5de..6fa8b0d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
@@ -755,6 +755,8 @@ @CalledByNative private void closeNotification(final String notificationId, String scopeUrl, boolean hasQueriedWebApkPackage, String webApkPackage) { + WebPlatformNotificationMetrics.getInstance().onNotificationClosed(); + if (!hasQueriedWebApkPackage) { final String webApkPackageFound = WebApkValidator.queryFirstWebApkPackage( ContextUtils.getApplicationContext(), scopeUrl);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationServiceImpl.java index ecbbe84..861eab0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationServiceImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationServiceImpl.java
@@ -37,6 +37,11 @@ public static class Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + int actionIndex = intent.getIntExtra( + NotificationConstants.EXTRA_NOTIFICATION_INFO_ACTION_INDEX, -1); + boolean isActionButton = actionIndex != 0; + WebPlatformNotificationMetrics.getInstance().onNotificationClicked(isActionButton); + Log.i(TAG, "Received a notification intent in the NotificationService's receiver."); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // Android encourages us not to start services directly on N+, so instead we
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetrics.java new file mode 100644 index 0000000..1f711da --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetrics.java
@@ -0,0 +1,145 @@ +// Copyright 2021 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.notifications; + +import android.os.SystemClock; + +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.metrics.RecordUserAction; + +/** + * This class collects metrics about what happens when the user interacts with web platform + * notifications, for example how long it takes to show an Activity after a notification is clicked, + * or if an Activity is shown at all. + * + * Unfortunately, it would be very difficult to follow the code execution from the point a + * notification is clicked all the way to when an Activity is launched, so we use static state and + * call methods on this class from seemingly disparate places. A consequence of this is that we + * don't know for sure whether an Activity being focused is the result of a notification, so we use + * the heuristic that if an Activity focus occurs within 5 seconds after a notification click, that + * counts. + */ +public class WebPlatformNotificationMetrics { + private static final String METRIC_PREFIX = "Notifications.WebPlatform."; + private static final int ATTRIBUTION_THRESHOLD_MS = 5000; + private static final long INVALID_TIME = -1; + private static WebPlatformNotificationMetrics sInstance; + + private final Clock mClock; + private final Recorder mRecorder; + + // These variables carry data about the notification click. + private long mNotificationClickTimeMs = INVALID_TIME; + private boolean mActionButtonClicked; + private boolean mNewTabLaunched; + // These variables prevent a single notification click from triggering multiple recordings. + private boolean mNotificationClosed; + private boolean mTabFocused; + + /** Interface to provide the time. */ + interface Clock { + /** Gets the current time. */ + long getTime(); + } + + /** Delegate to record metrics. */ + interface Recorder { + /** Records an action. */ + void recordAction(String action); + + /** Records a duration. */ + void recordDuration(String name, long durationMs); + } + + /** + * Gets an instance of this class suitable for prod - it uses the system time and records to + * metrics. + */ + public static WebPlatformNotificationMetrics getInstance() { + if (sInstance == null) { + sInstance = new WebPlatformNotificationMetrics( + SystemClock::elapsedRealtime, new Recorder() { + @Override + public void recordAction(String action) { + RecordUserAction.record(action); + } + + @Override + public void recordDuration(String name, long durationMs) { + RecordHistogram.recordTimesHistogram(name, durationMs); + } + }); + } + + return sInstance; + } + + /** Creates an instance of this class allowing for dependency injection for testing. */ + WebPlatformNotificationMetrics(Clock clock, Recorder recorder) { + mClock = clock; + mRecorder = recorder; + } + + /** To be called when a notification is clicked. */ + public void onNotificationClicked(boolean actionButton) { + mNotificationClickTimeMs = mClock.getTime(); + mActionButtonClicked = actionButton; + mNewTabLaunched = false; + mNotificationClosed = false; + mTabFocused = false; + + recordAction("Click"); + } + + /** To be called when a new tab is created. */ + public void onNewTabLaunched() { + // The tab is going to be focused after being created, so the actual logging is done in + // onTabFocused. + mNewTabLaunched = true; + } + + /** To be called when a tab is focused. */ + public void onTabFocused() { + if (shouldIgnore()) return; + + // We don't want to record twice for the same notification. + if (mTabFocused) return; + mTabFocused = true; + + recordAction(mNewTabLaunched ? "NewActivity" : "FocusActivity"); + recordTime("TimeToActivity"); + } + + /** To be called when a notification is closed. */ + public void onNotificationClosed() { + if (shouldIgnore()) return; + + // We don't want to record twice for the same notification. + if (mNotificationClosed) return; + mNotificationClosed = true; + + recordAction("Close"); + recordTime("TimeToClose"); + } + + private void recordAction(String action) { + String target = mActionButtonClicked ? "ActionButton." : "Body."; + mRecorder.recordAction(METRIC_PREFIX + target + action); + } + + private void recordTime(String action) { + String target = mActionButtonClicked ? "ActionButton." : "Body."; + long now = mClock.getTime(); + + mRecorder.recordDuration(METRIC_PREFIX + target + action, now - mNotificationClickTimeMs); + } + + private boolean shouldIgnore() { + if (mNotificationClickTimeMs == INVALID_TIME) return true; + + long now = mClock.getTime(); + return (now - mNotificationClickTimeMs) > ATTRIBUTION_THRESHOLD_MS; + } +}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java index a3750552..af0df7b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridgeTest.java
@@ -320,7 +320,7 @@ // Replies are always delivered to an action button. assertThat(actionTester.toString(), getNotificationActions(actionTester), - Matchers.contains("Notifications.Persistent.Shown", + Matchers.hasItems("Notifications.Persistent.Shown", "Notifications.Persistent.ClickedActionButton")); } @@ -660,7 +660,7 @@ // Clicking on a notification should record the right user metrics. assertThat(actionTester.toString(), getNotificationActions(actionTester), - Matchers.contains( + Matchers.hasItems( "Notifications.Persistent.Shown", "Notifications.Persistent.Clicked")); Assert.assertEquals(1, RecordHistogram.getHistogramTotalCountForTesting(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java index f8928ad..4db210f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/TabPersistentStoreTest.java
@@ -29,6 +29,7 @@ import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisableIf; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; @@ -374,6 +375,7 @@ @UiThreadTest @Feature("TabPersistentStore") @DisableFeatures({ChromeFeatureList.CRITICAL_PERSISTED_TAB_DATA + "<Study"}) + @DisabledTest(message = "https://crbug.com/1174097") public void testCleanup() throws Exception { MockTabModelSelector mockSelector = new MockTabModelSelector(1, 1, null); Tab regularTab = mockSelector.getModel(false).getTabAt(0);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetricsTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetricsTest.java new file mode 100644 index 0000000..7bc79d6 --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/notifications/WebPlatformNotificationMetricsTest.java
@@ -0,0 +1,210 @@ +// Copyright 2021 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.notifications; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Arrays; +import java.util.Collection; + +/** + * Tests for {@link WebPlatformNotificationMetrics}. + * + * They are parameterized on whether the notification click occurred on the action button or on the + * body. + */ +@RunWith(Parameterized.class) +public class WebPlatformNotificationMetricsTest { + @Mock + private WebPlatformNotificationMetrics.Clock mClock; + @Mock + private WebPlatformNotificationMetrics.Recorder mRecorder; + + private WebPlatformNotificationMetrics mMetrics; + private boolean mActionButtonClicked; + + @Parameterized.Parameters + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][] {{true}, {false}}); + } + + public WebPlatformNotificationMetricsTest(boolean actionButtonClicked) { + mActionButtonClicked = actionButtonClicked; + } + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mMetrics = new WebPlatformNotificationMetrics(mClock, mRecorder); + + when(mClock.getTime()).thenReturn(1000L); + } + + @Test + public void recordsClick() { + mMetrics.onNotificationClicked(mActionButtonClicked); + + assertActionRecorded(mActionButtonClicked ? "Notifications.WebPlatform.ActionButton.Click" + : "Notifications.WebPlatform.Body.Click"); + assertNumActions(1); + } + + @Test + public void recordsFocus() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onTabFocused(); + + assertActionRecorded(mActionButtonClicked + ? "Notifications.WebPlatform.ActionButton.FocusActivity" + : "Notifications.WebPlatform.Body.FocusActivity"); + assertNumActions(2); // Click + FocusActivity. + } + + @Test + public void recordsNewActivity() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onNewTabLaunched(); + mMetrics.onTabFocused(); + + assertActionRecorded(mActionButtonClicked + ? "Notifications.WebPlatform.ActionButton.NewActivity" + : "Notifications.WebPlatform.Body.NewActivity"); + assertNumActions(2); // Click + NewActivity. + } + + @Test + public void recordsClose() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onNotificationClosed(); + + assertActionRecorded(mActionButtonClicked ? "Notifications.WebPlatform.ActionButton.Close" + : "Notifications.WebPlatform.Body.Close"); + assertNumActions(2); // Click + Close. + } + + @Test + public void recordsCloseAndFocus() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onNotificationClosed(); + + assertActionRecorded(mActionButtonClicked ? "Notifications.WebPlatform.ActionButton.Close" + : "Notifications.WebPlatform.Body.Close"); + + mMetrics.onTabFocused(); + + assertActionRecorded(mActionButtonClicked + ? "Notifications.WebPlatform.ActionButton.FocusActivity" + : "Notifications.WebPlatform.Body.FocusActivity"); + assertNumActions(3); // Click + Close + FocusActivity. + } + + @Test + public void recordsAtMostOneClosePerNotification() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onNotificationClosed(); + mMetrics.onNotificationClosed(); + + assertNumActions(2); // Click + Close. + } + + @Test + public void recordsCloseAfterFocus() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onTabFocused(); + mMetrics.onNotificationClosed(); + + assertNumActions(3); // Click + FocusActivity + Close. + } + + @Test + public void recordsAtMostOneFocusPerNotification() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onTabFocused(); + mMetrics.onTabFocused(); + + assertNumActions(2); // Click + Focus. + } + + @Test + public void recordsMultipleNotifications() { + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onTabFocused(); + + mMetrics.onNotificationClicked(mActionButtonClicked); + mMetrics.onTabFocused(); + + assertNumActions(4); // Click + Focus + Click + Focus. + } + + @Test + public void timeLimitOnClose() { + mMetrics.onNotificationClicked(mActionButtonClicked); + + when(mClock.getTime()).thenReturn(7000L); + mMetrics.onNotificationClosed(); + + assertNumActions(1); // Click. + } + + @Test + public void timeLimitOnFocus() { + mMetrics.onNotificationClicked(mActionButtonClicked); + + when(mClock.getTime()).thenReturn(7000L); + mMetrics.onTabFocused(); + + assertNumActions(1); // Click. + } + + @Test + public void recordsTimeToActivity() { + mMetrics.onNotificationClicked(mActionButtonClicked); + + when(mClock.getTime()).thenReturn(3000L); + mMetrics.onTabFocused(); + + assertDurationRecorded(mActionButtonClicked + ? "Notifications.WebPlatform.ActionButton.TimeToActivity" + : "Notifications.WebPlatform.Body.TimeToActivity", + 2000); + } + + @Test + public void recordsTimeToClose() { + mMetrics.onNotificationClicked(mActionButtonClicked); + + when(mClock.getTime()).thenReturn(4000L); + mMetrics.onNotificationClosed(); + + assertDurationRecorded(mActionButtonClicked + ? "Notifications.WebPlatform.ActionButton.TimeToClose" + : "Notifications.WebPlatform.Body.TimeToClose", + 3000); + } + + private void assertActionRecorded(String action) { + verify(mRecorder).recordAction(eq(action)); + } + + private void assertNumActions(int num) { + verify(mRecorder, times(num)).recordAction(anyString()); + } + + private void assertDurationRecorded(String name, long ms) { + verify(mRecorder).recordDuration(eq(name), eq(ms)); + } +}
diff --git a/chrome/android/modules/chrome_bundle_tmpl.gni b/chrome/android/modules/chrome_bundle_tmpl.gni index 0f67ea2f..031b806 100644 --- a/chrome/android/modules/chrome_bundle_tmpl.gni +++ b/chrome/android/modules/chrome_bundle_tmpl.gni
@@ -158,7 +158,6 @@ "lint_suppressions_dep", "min_sdk_version", "proguard_android_sdk_dep", - "sign_bundle", "static_library_provider", "static_library_synchronized_proguard", "version_code", @@ -175,14 +174,5 @@ # testing easier. This removes the need to manually specify, e.g., # "-m dev_ui" on every install or run. default_modules_for_testing = [ "dev_ui" ] - - # NOTE: Only sign bundle for official builds since this is very slow. - if (enable_chrome_android_internal && use_signing_keys && - is_official_build) { - sign_bundle = true - keystore_path = chrome_keystore_path - keystore_name = chrome_keystore_name - keystore_password = chrome_keystore_password - } } }
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 2fe3827..fc7905986 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -3797,14 +3797,14 @@ <message name="IDS_ARC_SIGN_IN_NETWORK_ERROR" desc="Android sign-in error because of network error"> Network connection was lost. Please check your connection or try another Wi-Fi network. </message> - <message name="IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR" desc="Android sign-in error because of service is unavailable"> + <message name="IDS_ARC_SIGN_IN_GMS_SIGNIN_ERROR" desc="Android sign-in error because of service is unavailable"> Couldn't reach Google Play. Error code: <ph name="ERROR_CODE">$1<ex>7</ex></ph>. </message> <message name="IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR" desc="Android sign-in error because of bad authentification"> - Couldn’t verify your account. Please try again or restart your Chromebook. + Couldn't verify your account. Please try again or restart your Chromebook. </message> - <message name="IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR" desc="Android sign-in error because of GMS services are unavailable"> - Couldn’t connect with Google services. Error code: <ph name="ERROR_CODE">$1<ex>7</ex></ph>. + <message name="IDS_ARC_SIGN_IN_GMS_CHECKIN_ERROR" desc="Android sign-in error because of GMS services are unavailable"> + Couldn't connect with Google services. Error code: <ph name="ERROR_CODE">$1<ex>7</ex></ph>. </message> <message name="IDS_ARC_SIGN_IN_CLOUD_PROVISION_FLOW_ACCOUNT_MISSING_ERROR" desc="Android permament sign-in error because of cloud provision flow failed"> Provisioning failed because your account details could not be retrieved. Please try again. Error code: <ph name="ERROR_CODE">$1<ex>7</ex></ph>.
diff --git a/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR.png.sha1 new file mode 100644 index 0000000..fa6412b1 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR.png.sha1
@@ -0,0 +1 @@ +04cec049f9ba732878a894c244907fb1ee71cc50 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_GMS_CHECKIN_ERROR.png.sha1 similarity index 100% rename from chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR.png.sha1 rename to chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_GMS_CHECKIN_ERROR.png.sha1
diff --git a/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_GMS_SIGNIN_ERROR.png.sha1 similarity index 100% rename from chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR.png.sha1 rename to chrome/app/chromeos_strings_grdp/IDS_ARC_SIGN_IN_GMS_SIGNIN_ERROR.png.sha1
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 258b28b..43ab783 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -10516,130 +10516,130 @@ Upload </message> - <!-- Native File System permission dialog --> - <message name="IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_TITLE" desc="Title of dialog for confirming write access to a file, or a directory and the files it contains, using the Native File System API"> + <!-- File System Access permission dialog --> + <message name="IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_TITLE" desc="Title of dialog for confirming write access to a file, or a directory and the files it contains, using the File System Access API"> Save changes to <ph name="FILE_OR_FOLDER_NAME">$1<ex>README.md</ex></ph>? </message> - <message name="IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming write access to files or directories using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming write access to files or directories using the File System Access API"> Save changes </message> - <message name="IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT" desc="Text of the dialog for confirming origin scoped write access to files using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT" desc="Text of the dialog for confirming origin scoped write access to files using the File System Access API"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> will be able to edit <ph name="FILENAME">$2<ex>README.md</ex></ph> until you close all tabs for this site </message> - <message name="IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT" desc="Text of the dialog for confirming origin scoped write access to a directory using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT" desc="Text of the dialog for confirming origin scoped write access to a directory using the File System Access API"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> will be able to edit files in <ph name="FOLDERNAME">$2<ex>My Project</ex></ph> until you close all tabs for this site </message> - <message name="IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT" desc="Text of dialog for confirming read access to files using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT" desc="Text of dialog for confirming read access to files using the File System Access API"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> will be able to view <ph name="FILENAME">$2<ex>README.md</ex></ph> until you close all tabs for this site </message> - <message name="IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT" desc="Text of dialog asking user if they intended to share a particular directory"> + <message name="IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT" desc="Text of dialog asking user if they intended to share a particular directory"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> will be able to view files in <ph name="FOLDERNAME">$2<ex>My Project</ex></ph> until you close all tabs for this site </message> - <message name="IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_TITLE" desc="Title of dialog asking user to confirm giving read and write access to a file using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_TITLE" desc="Title of dialog asking user to confirm giving read and write access to a file using the File System Access API"> Let site edit <ph name="FILE_NAME">$1<ex>README.md</ex></ph>? </message> - <message name="IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_TITLE" desc="Title of dialog asking user to confirm giving read and write access to (files in) a directory using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_TITLE" desc="Title of dialog asking user to confirm giving read and write access to (files in) a directory using the File System Access API"> Let site edit files? </message> - <message name="IDS_NATIVE_FILE_SYSTEM_READ_FILE_PERMISSION_TITLE" desc="Title of dialog asking user to confirm giving read access to a file using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_READ_FILE_PERMISSION_TITLE" desc="Title of dialog asking user to confirm giving read access to a file using the File System Access API"> Let site view <ph name="FILE_NAME">$1<ex>README.md</ex></ph>? </message> - <message name="IDS_NATIVE_FILE_SYSTEM_READ_DIRECTORY_PERMISSION_TITLE" desc="Title of dialog asking user if they intended to share a particular directory"> + <message name="IDS_FILE_SYSTEM_ACCESS_READ_DIRECTORY_PERMISSION_TITLE" desc="Title of dialog asking user if they intended to share a particular directory"> Let site view files? </message> - <message name="IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming write access to a file using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming write access to a file using the File System Access API"> Edit file </message> - <message name="IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming write access to a directory (and the files in it) using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming write access to a directory (and the files in it) using the File System Access API"> Edit files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_VIEW_FILE_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming read access to a file using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_VIEW_FILE_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming read access to a file using the File System Access API"> View file </message> - <message name="IDS_NATIVE_FILE_SYSTEM_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming read access to a directory (and the files in it) using the Native File System API"> + <message name="IDS_FILE_SYSTEM_ACCESS_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT" desc="Text of the 'allow' button in the dialog for confirming read access to a directory (and the files in it) using the File System Access API"> View files </message> - <!-- Native File System usage indicator --> - <message name="IDS_NATIVE_FILE_SYSTEM_WRITE_USAGE_TOOLTIP" desc="Tooltip for the omnibox Native File System API file write access usage indicator."> + <!-- File System Access usage indicator --> + <message name="IDS_FILE_SYSTEM_ACCESS_WRITE_USAGE_TOOLTIP" desc="Tooltip for the omnibox File System Access API file write access usage indicator."> This page is allowed to edit files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_DIRECTORY_USAGE_TOOLTIP" desc="Tooltip for the omnibox Native File System API directory read access usage indicator."> + <message name="IDS_FILE_SYSTEM_ACCESS_DIRECTORY_USAGE_TOOLTIP" desc="Tooltip for the omnibox File System Access API directory read access usage indicator."> This page is allowed to view files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT" desc="Text of the bubble showing what file an origin can currently write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT" desc="Text of the bubble showing what file an origin can currently write to"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can edit <ph name="FILENAME">$2<ex>README.md</ex></ph> </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_TEXT" desc="Text of the bubble showing what files an origin can currently write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_TEXT" desc="Text of the bubble showing what files an origin can currently write to"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can edit the following files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT" desc="Text of the bubble showing what file an origin can currently write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT" desc="Text of the bubble showing what file an origin can currently write to"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can edit files in <ph name="FOLDERNAME">$2<ex>My Project</ex></ph> </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT" desc="Text of the bubble showing what files an origin can currently write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT" desc="Text of the bubble showing what files an origin can currently write to"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can edit files in the following folders </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT" desc="Text of the bubble showing what files and directories an origin can currently write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT" desc="Text of the bubble showing what files and directories an origin can currently write to"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can edit the following files and folders </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT" desc="Text of the bubble showing what file an origin can currently access"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT" desc="Text of the bubble showing what file an origin can currently access"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can view <ph name="FILENAME">$2<ex>README.md</ex></ph> </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_TEXT" desc="Text of the bubble showing what files an origin can currently access"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_TEXT" desc="Text of the bubble showing what files an origin can currently access"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can view the following files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT" desc="Text of the bubble showing what files and directories an origin can currently access"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT" desc="Text of the bubble showing what files and directories an origin can currently access"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can view files in <ph name="FOLDERNAME">$2<ex>My Project</ex></ph> </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT" desc="Text of the bubble showing what files and directories an origin can currently access"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT" desc="Text of the bubble showing what files and directories an origin can currently access"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can view files in the following folders </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT" desc="Text of the bubble showing what files and directories an origin can currently access"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT" desc="Text of the bubble showing what files and directories an origin can currently access"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can view the following files and folders </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READ_AND_WRITE" desc="Text of the bubble showing what files and directories an origin can currently read and write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READ_AND_WRITE" desc="Text of the bubble showing what files and directories an origin can currently read and write to"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can view and edit the following files and folders </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SAVE_CHANGES" desc="Sub-heading for the files and directories with write access in the bubble showing what files and directories an origin can currently read and write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SAVE_CHANGES" desc="Sub-heading for the files and directories with write access in the bubble showing what files and directories an origin can currently read and write to"> Save changes </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_VIEW_CHANGES" desc="Sub-heading for the files and directories with read access in the bubble showing what files and directories an origin can currently read and write to"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_VIEW_CHANGES" desc="Sub-heading for the files and directories with read access in the bubble showing what files and directories an origin can currently read and write to"> View changes </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_FILES_TEXT" desc="Text to display a list of files in the native file system usage bubble"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_FILES_TEXT" desc="Text to display a list of files in the File System Access usage bubble"> {0, plural, offset:2 =1 {<ph name="FILE1">{1}<ex>README.md</ex></ph>} =2 {<ph name="FILE1">{1}<ex>README.md</ex></ph>, <ph name="FILE2">{2}<ex>Chrome.png</ex></ph>} other {<ph name="FILE1">{1}<ex>README.md</ex></ph>, <ph name="FILE2">{2}<ex>Chrome.png</ex></ph>, and # more} } </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_EXPAND" desc="Tooltip for and name of a button that shows (expands) a detailed list of files and directories"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_EXPAND" desc="Tooltip for and name of a button that shows (expands) a detailed list of files and directories"> Expand... </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_COLLAPSE" desc="Tooltip for and name of a button that hides (collapses) a detailed list of files and directories"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_COLLAPSE" desc="Tooltip for and name of a button that hides (collapses) a detailed list of files and directories"> Collapse... </message> - <message name="IDS_NATIVE_FILE_SYSTEM_USAGE_REMOVE_ACCESS" desc="Text of button in the bubble showing what files and directories an origin can currently access that removes all such access"> + <message name="IDS_FILE_SYSTEM_ACCESS_USAGE_REMOVE_ACCESS" desc="Text of button in the bubble showing what files and directories an origin can currently access that removes all such access"> Remove access </message> - <!-- Native File System restricted directory and file dialogs. --> - <message name="IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TITLE" desc="Title of dialog explaining that the user selected a directory that chrome doesn't want to expose to the web"> + <!-- File System Access restricted directory and file dialogs. --> + <message name="IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TITLE" desc="Title of dialog explaining that the user selected a directory that chrome doesn't want to expose to the web"> Can't open this folder </message> - <message name="IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TEXT" desc="Text of dialog explaining that the user selected a directory that chrome doesn't want to expose to the web"> + <message name="IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TEXT" desc="Text of dialog explaining that the user selected a directory that chrome doesn't want to expose to the web"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can’t open this folder because it contains system files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_BUTTON" desc="Text of the button in dialog explaining that the user selected a directory that chrome doesn't want to expose to the web"> + <message name="IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_BUTTON" desc="Text of the button in dialog explaining that the user selected a directory that chrome doesn't want to expose to the web"> Choose a different folder </message> - <message name="IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TITLE" desc="Title of dialog explaining that the user selected a file in a directory that chrome doesn't want to expose to the web"> + <message name="IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TITLE" desc="Title of dialog explaining that the user selected a file in a directory that chrome doesn't want to expose to the web"> Can't open this file </message> - <message name="IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TEXT" desc="Text of dialog explaining that the user selected a file in a directory that chrome doesn't want to expose to the web"> + <message name="IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TEXT" desc="Text of dialog explaining that the user selected a file in a directory that chrome doesn't want to expose to the web"> <ph name="ORIGIN">$1<ex>example.com</ex></ph> can’t open files in this folder because it contains system files </message> - <message name="IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_BUTTON" desc="Text of the button in dialog explaining that the user selected a file in a directory that chrome doesn't want to expose to the web"> + <message name="IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_BUTTON" desc="Text of the button in dialog explaining that the user selected a file in a directory that chrome doesn't want to expose to the web"> Choose a different file </message> @@ -11159,39 +11159,6 @@ </if> <if expr="is_macosx"> - <!-- These strings are placeholders for strings that are filled in via - field trials, so they are *not* used as-is except in tests. --> - <message name="IDS_MAC_SYSTEM_INFOBAR_TEXT_ARM" - desc="Mac system-specific infobar text for Arm64-on-Arm64." - translateable="false"> - Chrome can’t play premium videos or music on this device yet. Chrome will update automatically when this issue is fixed. - </message> - <message name="IDS_MAC_SYSTEM_INFOBAR_TEXT_ROSETTA" - desc="Mac system-specific infobar text for Intel-on-Arm64." - translateable="false"> - This is an x86-64 Chrome on Arm64, so things might not work quite right yet! - </message> - <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_TEXT_ARM" - desc="Mac system-specific infobar link text for Arm64-on-Arm64." - translateable="false"> - Learn more - </message> - <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_URL_ARM" - desc="Mac system-specific infobar link for Arm64-on-Arm64." - translateable="false"> - https://support.google.com/chrome/?p=mac_ARM - </message> - <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_TEXT_ROSETTA" - desc="Mac system-specific infobar link text for Intel-on-Arm64." - translateable="false"> - Learn more - </message> - <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_URL_ROSETTA" - desc="Mac system-specific infobar link for Intel-on-Arm64." - translateable="false"> - https://support.google.com/chrome/?p=mac_ARM - </message> - <!-- The Rosetta is required infobar --> <message name="IDS_ROSETTA_REQUIRED_INFOBAR_TEXT" desc="The infobar text when installation of Rosetta is required">
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_DIRECTORY_USAGE_TOOLTIP.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_DIRECTORY_USAGE_TOOLTIP.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_DIRECTORY_USAGE_TOOLTIP.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_DIRECTORY_USAGE_TOOLTIP.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_ALLOW_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_ALLOW_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_ALLOW_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_ALLOW_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_READ_DIRECTORY_PERMISSION_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_READ_DIRECTORY_PERMISSION_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_READ_DIRECTORY_PERMISSION_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_READ_DIRECTORY_PERMISSION_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_READ_FILE_PERMISSION_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_READ_FILE_PERMISSION_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_READ_FILE_PERMISSION_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_READ_FILE_PERMISSION_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_BUTTON.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_BUTTON.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_BUTTON.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_BUTTON.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_BUTTON.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_BUTTON.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_BUTTON.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_BUTTON.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_DIRECTORIES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_DIRECTORIES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_DIRECTORIES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_DIRECTORIES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_FILES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_FILES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_FILES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_FILES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READ_AND_WRITE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READ_AND_WRITE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READ_AND_WRITE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READ_AND_WRITE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SAVE_CHANGES.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SAVE_CHANGES.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SAVE_CHANGES.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SAVE_CHANGES.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_VIEW_CHANGES.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_VIEW_CHANGES.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_VIEW_CHANGES.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_VIEW_CHANGES.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_COLLAPSE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_COLLAPSE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_COLLAPSE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_COLLAPSE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_EXPAND.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_EXPAND.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_EXPAND.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_EXPAND.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_REMOVE_ACCESS.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_REMOVE_ACCESS.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_USAGE_REMOVE_ACCESS.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_USAGE_REMOVE_ACCESS.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_VIEW_FILE_PERMISSION_ALLOW_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_VIEW_FILE_PERMISSION_ALLOW_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_VIEW_FILE_PERMISSION_ALLOW_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_VIEW_FILE_PERMISSION_ALLOW_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_ALLOW_TEXT.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_ALLOW_TEXT.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_ALLOW_TEXT.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_ALLOW_TEXT.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_TITLE.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_TITLE.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_TITLE.png.sha1
diff --git a/chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_WRITE_USAGE_TOOLTIP.png.sha1 b/chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_WRITE_USAGE_TOOLTIP.png.sha1 similarity index 100% rename from chrome/app/generated_resources_grd/IDS_NATIVE_FILE_SYSTEM_WRITE_USAGE_TOOLTIP.png.sha1 rename to chrome/app/generated_resources_grd/IDS_FILE_SYSTEM_ACCESS_WRITE_USAGE_TOOLTIP.png.sha1
diff --git a/chrome/app/os_settings_search_tag_strings.grdp b/chrome/app/os_settings_search_tag_strings.grdp index 1c28610..06dc8a6 100644 --- a/chrome/app/os_settings_search_tag_strings.grdp +++ b/chrome/app/os_settings_search_tag_strings.grdp
@@ -1065,6 +1065,9 @@ <message name="IDS_OS_SETTINGS_TAG_A11Y_FULLSCREEN_MAGNIFIER_FOCUS_FOLLOWING" desc="Text for search result item which, when clicked, navigates the user to accessibility settings, with a toggle to enable/disable full-screen magnification keyboard focus-following."> Magnifier follows keyboard focus </message> + <message name="IDS_OS_SETTINGS_TAG_A11Y_FULLSCREEN_MAGNIFIER_MOUSE_FOLLOWING_MODE" desc="Text for search result item which, when clicked, navigates the user to accessibility settings, with a set of radio buttons to choose which mouse following mode to use for the full-screen magnifier. This feature allows the user of full screen magnifier to choose how the zoomed-in screen moves as their mouse moves within the screen. The options are 'Move screen continuously as mouse moves', 'Move screen keeping mouse at center of screen', and 'Move screen when mouse touches edges of screen'."> + Magnifier mouse following mode + </message> <message name="IDS_OS_SETTINGS_TAG_A11Y_DOCKED_MAGNIFIER" desc="Text for search result item which, when clicked, navigates the user to accessibility settings, with a toggle to enable/disable docked screen magnification."> Docked magnifier </message>
diff --git a/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_A11Y_FULLSCREEN_MAGNIFIER_MOUSE_FOLLOWING_MODE.png.sha1 b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_A11Y_FULLSCREEN_MAGNIFIER_MOUSE_FOLLOWING_MODE.png.sha1 new file mode 100644 index 0000000..8642e655 --- /dev/null +++ b/chrome/app/os_settings_search_tag_strings_grdp/IDS_OS_SETTINGS_TAG_A11Y_FULLSCREEN_MAGNIFIER_MOUSE_FOLLOWING_MODE.png.sha1
@@ -0,0 +1 @@ +b4b213ae4705b209c0b165e99e9df20f3f108572 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp index 30b4346..1285e48 100644 --- a/chrome/app/os_settings_strings.grdp +++ b/chrome/app/os_settings_strings.grdp
@@ -816,6 +816,18 @@ <message name="IDS_SETTINGS_SCREEN_MAGNIFIER_LABEL" desc="Label for checkbox which enables the fullscreen magnifier"> Enable fullscreen magnifier </message> + <message name="IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_RADIO_GROUP_TITLE" desc="The title of the radio group that allows the user to configure the mouse following mode of the full screen magnifier. This feature allows the user of full screen magnifier to choose how the zoomed-in screen moves as their mouse moves within the screen. The options are 'Move screen continuously as mouse moves', 'Move screen keeping mouse at center of screen', and 'Move screen when mouse touches edges of screen'."> + Mouse following mode + </message> + <message name="IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CONTINUOUS" desc="Label for the radio button that allows the user to choose the 'continuous' mouse following mode for the full screen magnifier, which moves the zoomed-in screen continuously (underneath the cursor in the opposite direction) as the mouse moves towards the edges of the screen. This feature allows the user of full screen magnifier to choose how the zoomed-in screen moves as their mouse moves within the screen. The options are 'Move screen continuously as mouse moves', 'Move screen keeping mouse at center of screen', and 'Move screen when mouse touches edges of screen'."> + Move screen continuously as mouse moves + </message> + <message name="IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CENTERED" desc="Label for the radio button that allows the user to choose the 'centered' mouse following mode for the full screen magnifier, which moves the zoomed-in screen while keeping the mouse at center of the screen. This feature allows the user of full screen magnifier to choose how the zoomed-in screen moves as their mouse moves within the screen. The options are 'Move screen continuously as mouse moves', 'Move screen keeping mouse at center of screen', and 'Move screen when mouse touches edges of screen'."> + Move screen keeping mouse at center of screen + </message> + <message name="IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_EDGE" desc="Label for the radio button that allows the user to choose the 'edge' mouse following mode for the full screen magnifier, which moves the zoomed-in screen when the mouse touches the edges of the screen. This feature allows the user of full screen magnifier to choose how the zoomed-in screen moves as their mouse moves within the screen. The options are 'Move screen continuously as mouse moves', 'Move screen keeping mouse at center of screen', and 'Move screen when mouse touches edges of screen'."> + Move screen when mouse touches edges of screen + </message> <message name="IDS_SETTINGS_SCREEN_MAGNIFIER_FOCUS_FOLLOWING_LABEL" desc="Label for toggle which enables keyboard focus following in the fullscreen magnifier"> Zoomed in screen follows keyboard focus </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CENTERED.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CENTERED.png.sha1 new file mode 100644 index 0000000..8642e655 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CENTERED.png.sha1
@@ -0,0 +1 @@ +b4b213ae4705b209c0b165e99e9df20f3f108572 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CONTINUOUS.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CONTINUOUS.png.sha1 new file mode 100644 index 0000000..8642e655 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CONTINUOUS.png.sha1
@@ -0,0 +1 @@ +b4b213ae4705b209c0b165e99e9df20f3f108572 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_EDGE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_EDGE.png.sha1 new file mode 100644 index 0000000..8642e655 --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_EDGE.png.sha1
@@ -0,0 +1 @@ +b4b213ae4705b209c0b165e99e9df20f3f108572 \ No newline at end of file
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_RADIO_GROUP_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_RADIO_GROUP_TITLE.png.sha1 new file mode 100644 index 0000000..a4dc28e --- /dev/null +++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_RADIO_GROUP_TITLE.png.sha1
@@ -0,0 +1 @@ +55252d9a1c8dcb52462e49a638875e3e83b88e0f \ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_bs.xtb b/chrome/app/resources/chromium_strings_bs.xtb index 43068aed..8584f0ae 100644 --- a/chrome/app/resources/chromium_strings_bs.xtb +++ b/chrome/app/resources/chromium_strings_bs.xtb
@@ -128,7 +128,7 @@ <translation id="4994636714258228724">Dodajte se u Chromium</translation> <translation id="5224391634244552924">Nema sačuvanih lozinki. Chromium može provjeravati vaše lozinke kada ih sačuvate.</translation> <translation id="5277894862589591112">Za primjenu promjena, ponovo pokrenite Chromium</translation> -<translation id="5357324149468831780">Ovim računom se upravlja. Administrator zahtijeva Chromium profil za pristup. Ovaj profil je u potpunosti odvojen od bilo kojeg ličnog profila. Vaš administrator može ukloniti podatke Chromiuma koji se generiraju tokom korištenja ovog profila (naprimjer kreirane oznake, historiju, lozinke i druge postavke). <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> +<translation id="5357324149468831780">Ovo je upravljani račun. Administrator zahtijeva Chromium profil za pristup. Ovaj profil je u potpunosti odvojen od bilo kojeg ličnog profila. Vaš administrator može ukloniti podatke Chromiuma koji se generiraju tokom korištenja ovog profila (naprimjer kreirane oznake, historiju, lozinke i druge postavke). <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="5358375970380395591">Prijavljujete se s upravljanim računom i dajete njegovom administratoru kontrolu nad svojim Chromium profilom. Vaši podaci iz Chromiuma, kao što su vaše aplikacije, oznake, historija, lozinke i druge postavke, trajno će se vezati za račun <ph name="USER_NAME" />. Moći ćete izbrisati ove podatke na kontrolnoj tabli Google računa, ali nećete moći povezati ove podatke s drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="5386450000063123300">Ažuriranje Chromiuma (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="538767207339317086">Dozvoli prijavljivanje u Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb index dbfa07a9..8afda22 100644 --- a/chrome/app/resources/chromium_strings_eu.xtb +++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -143,7 +143,7 @@ <translation id="5623402015214259806">{0,plural, =0{Chromium arakatzailearen eguneratze bat dago erabilgarri}=1{Chromium arakatzailearen eguneratze bat dago erabilgarri}other{Chromium arakatzailearen eguneratze batek # egun daramatza erabilgarri}}</translation> <translation id="5631814766731275228">Chromium profileko izena eta argazkia</translation> <translation id="5634636535844844681">Windows 7 edo sistema berriagoa behar da Chromium erabiltzeko.</translation> -<translation id="5642268154044585431">Beharrezkoa da Chromium-eko profil bat izatea</translation> +<translation id="5642268154044585431">Chromium-eko profil bat eduki behar da</translation> <translation id="5653831366781983928">Berrabiarazi Chromium</translation> <translation id="5698481217667032250">Bistaratu Chromium hizkuntza honetan</translation> <translation id="5736967399513123100">Babestutako multimedia-edukia Chromium-en erreproduzitzeko, Rosetta instalatu behar duzu. Orain instalatu nahi duzu?</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb index 0ac1e15..ab5916d 100644 --- a/chrome/app/resources/chromium_strings_hi.xtb +++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -52,7 +52,7 @@ <translation id="2799223571221894425">फिर से लॉन्च करें</translation> <translation id="2816712596130903444">क्या आप अलग Chromium प्रोफ़ाइल चाहते हैं?</translation> <translation id="2847479871509788944">क्रोमियम से निकालें...</translation> -<translation id="2885378588091291677">काम का प्रबंधक</translation> +<translation id="2885378588091291677">काम का मैनेजर</translation> <translation id="2910007522516064972">&क्रोमियम के बारे में</translation> <translation id="2942419255987443909">Chromium OS को <ph name="BEGIN_LINK_LINUX_OSS" />Linux डेवलपमेंट एनवायरमेंट (बीटा)<ph name="END_LINK_LINUX_OSS" /> की तरह ही, अतिरिक्त <ph name="BEGIN_LINK_CROS_OSS" />ओपन सोर्स सॉफ़्टवेयर<ph name="END_LINK_CROS_OSS" /> की मदद से कारगर बनाया गया है.</translation> <translation id="2977470724722393594">क्रोमियम अप टू डेट है</translation> @@ -209,7 +209,7 @@ <translation id="7196312274710523067">Chromium लॉन्च नहीं किया जा सका. फिर से कोशिश करें.</translation> <translation id="7197677400338048821">क्रोमियम आपके पासवर्ड की जांच नहीं कर सकता. 24 घंटे बाद कोशिश करें.</translation> <translation id="7205698830395646142">क्रोमियम मेन्यू में छिपाएं</translation> -<translation id="7223968959479464213">काम का प्रबंधक - क्रोमियम</translation> +<translation id="7223968959479464213">काम का मैनेजर - क्रोमियम</translation> <translation id="731644333568559921">क्रोमियम OS अपडेट करें</translation> <translation id="731795002583552498">क्रोमियम अपडेट हो रहा है</translation> <translation id="7318036098707714271">आपकी पसंदीदा फ़ाइल खराब या अमान्य है.
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index cf6c1bbe..13447e16 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Verstek</translation> <translation id="1252987234827889034">Profielfout het voorgekom</translation> <translation id="1254593899333212300">Direkte internetverbinding</translation> +<translation id="1257553931232494454">zoemvlakke</translation> <translation id="1259152067760398571">Veiligheidskontrole het gister plaasgevind</translation> <translation id="1260451001046713751">Laat altyd opspringers en herleidings van <ph name="HOST" /> af toe</translation> <translation id="1261380933454402672">Matig</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Dit beheer ook watter bladsy gewys word wanneer jy van die omnikassie af soek.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Gaan na Instellings > Google Play Winkel > Bestuur Android-voorkeure > Programme of Programbestuurder om programme te verwyder. Tik dan op die program wat jy wil deïnstalleer (jy sal dalk links of regs moet swiep om die program te kry). Tik dan op Deïnstalleer of Deaktiveer.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Stuur tans versoek …</translation> +<translation id="1733064249834771892">lettertipes</translation> <translation id="1733383495376208985">Enkripteer gesinkroniseerde data met jou eie <ph name="BEGIN_LINK" />sinkroniseringwagfrase<ph name="END_LINK" />. Dit sluit nie betaalmetodes en adresse van Google Pay af in nie.</translation> <translation id="1734212868489994726">Ligblou</translation> <translation id="1734230530703461088">Kon uitbreidings nie binne die tydlimiet laai nie. Kontak jou administrateur.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Loglêer word tans opgelaai.</translation> <translation id="1819721979226826163">Tik op Programkennisgewings > Google Play Dienste.</translation> <translation id="1820028137326691631">Voer wagwoord wat deur admin goedgekeur is, in</translation> +<translation id="182139138257690338">outomatiese aflaaie</translation> <translation id="1822140782238030981">Reeds 'n Chrome-gebruiker? Meld aan</translation> <translation id="18245044880483936">Rugsteundata sal nie deel vorm van jou kind se Drive-bergingkwota nie.</translation> <translation id="1825565032302550710">Poort moet tussen 1024 en 65535 wees</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">Herlaai program</translation> <translation id="2327492829706409234">Aktiveer program</translation> <translation id="2328561734797404498">Herbegin asseblief jou toestel om <ph name="APP_NAME" /> te gebruik.</translation> +<translation id="2329182534073751090">vensterplasing</translation> <translation id="2329597144923131178">Meld aan om jou boekmerke, geskiedenis, wagwoorde en ander instellings op al jou toestelle te kry.</translation> <translation id="2332131598580221120">Bekyk in winkel</translation> <translation id="2332192922827071008">Maak voorkeure oop</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Nuwe oortjie in groep</translation> <translation id="289644616180464099">SIM-kaart is gesluit</translation> <translation id="289695669188700754">Sleutel-ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Hierdie gepasmaakte instelling sal verwyder word wanneer jy al jou Incognito-vensters toemaak</translation> <translation id="2897878306272793870">Is jy seker jy wil <ph name="TAB_COUNT" /> oortjies oopmaak?</translation> <translation id="290105521672621980">Lêer gebruik ongesteunde kenmerke</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> kon nie met hierdie drukker kommunikeer nie. Maak seker dat die drukker ingeprop is en probeer weer.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Data word met jou sinkroniseringwagfrase geënkripteer. Dit sluit nie betaalmetodes en adresse van Google Pay af in nie.</translation> <translation id="2996722619877761919">Keer om na lang kant</translation> <translation id="3000236644796679448">Werwe kan vra om jou mikrofoon te gebruik (aanbeveel)</translation> +<translation id="3000378525979847272">Het <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> toegelaat</translation> <translation id="3000461861112256445">Mono-oudio</translation> <translation id="3001144475369593262">Kinderrekeninge</translation> <translation id="3003144360685731741">Voorkeurnetwerke</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Maak PDF in voorskou oop</translation> <translation id="3308116878371095290">Hierdie bladsy is verhoed om webkoekies te stel.</translation> <translation id="3308134619352333507">Versteek-knoppie</translation> +<translation id="3308738399950580893">advertensies</translation> <translation id="3308852433423051161">Laai tans Google Assistent …</translation> <translation id="3309330461362844500">Sertifikaatprofiel-ID</translation> <translation id="3311445899360743395">Data wat met hierdie program geassosieer word, kan van hierdie toestel verwyder word.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Hierdie lêer is geënkripteer. Vra die eienaar om dit te dekripteer.</translation> <translation id="3390013585654699824">Programbesonderhede</translation> <translation id="3390741581549395454">Linux-programme en -lêers is suksesvol gerugsteun. Opgradering sal binnekort begin.</translation> +<translation id="3391482648489541560">lêerwysiging</translation> <translation id="339178315942519818">Bekyk kennisgewings vanaf jou kletsprogramme op jou <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Deur die "Aanvaar en gaan voort"-knoppie te klik, stem jy in tot die verwerking wat hierbo vir hierdie Google-dienste beskryf word.</translation> <translation id="3399432415385675819">Kennisgewings sal gedeaktiveer word</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Battery-ontladingspoed in Watt (negatiewe waarde beteken battery laai tans)</translation> <translation id="4256316378292851214">Stoor video as …</translation> <translation id="4258348331913189841">Lêerstelsels</translation> +<translation id="4259381619085088639">jou teenwoordigheid</translation> <translation id="4259388776256904261">Dit kan 'n rukkie neem</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> kan gevaarlik wees. Stuur dit na Google Gevorderde Beskerming toe om te skandeer? Druk Shift+F6 om na die aflaaibalk toe te gaan.</translation> <translation id="4263223596040212967">Geen jou sleutelborduitleg na en probeer weer.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Stel 'n nuwe PIN vir jou sekuriteitsleutel op</translation> <translation id="4305402730127028764">Kopieer na <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Programme moet met inhoudtipe "<ph name="CONTENT_TYPE" />" bedien word</translation> +<translation id="4306812610847412719">knipbord</translation> <translation id="4307992518367153382">Basies</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K regstreeks)</translation> <translation id="4310139701823742692">Lêer is die verkeerde formaat. Gaan die PPD-lêer na en probeer weer.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Hulpsentrum</translation> <translation id="44141919652824029">Laat "<ph name="APP_NAME" />" toe om die lys van jou aangehegte USB-toestelle te kry?</translation> <translation id="4414232939543644979">Nuwe incognito-venster</translation> +<translation id="4414515549596849729">webkoekies en werfdata</translation> <translation id="4415213869328311284">Jy is gereed om jou <ph name="DEVICE_TYPE" /> te begin gebruik.</translation> <translation id="4415245286584082850">Geen toestelle gekry nie. Maak 'n hulpsentrumartikel in 'n nuwe oortjie oop.</translation> <translation id="4415276339145661267">Bestuur jou Google-rekening</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Aanbeveel (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Moenie op hierdie bladsy wys nie</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> het omgeval</translation> +<translation id="4500587658229086076">onveilige inhoud</translation> <translation id="450099669180426158">Uitroepteken-ikoon</translation> <translation id="4501530680793980440">Bevestig verwydering</translation> <translation id="4502423230170890588">Verwyder van hierdie toestel</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Blokkeer altyd inproppe wat nie gesandput is nie, op <ph name="HOST" /></translation> <translation id="4538792345715658285">Geïnstalleer deur ondernemingbeleid.</translation> <translation id="4541662893742891060">Kan nie aan hierdie profiel koppel nie. Kontak asseblief jou diensverskaffer vir tegniese steun.</translation> +<translation id="4541810033354695636">aangevulde realiteit</translation> <translation id="4542520061254486227">Lees jou data op <ph name="WEBSITE_1" /> en <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Sertifikaatbestuurder</translation> <translation id="4544174279960331769">Verstek- blou avatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">Ontwikkelaarnutsgoed</translation> <translation id="5113739826273394829">As jy hierdie ikoon klik, sal jy hierdie <ph name="DEVICE_TYPE" /> met die hand sluit. Volgende keer sal jy jou wagwoord moet invoer om in te gaan.</translation> <translation id="51143538739122961">Sit jou sekuriteitsleutel in en raak daaraan</translation> +<translation id="5114987907971894280">virtuele realiteit</translation> <translation id="5115309401544567011">Prop jou <ph name="DEVICE_TYPE" /> by 'n kragbron in.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Stoor oudio as …</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Laat loop hierdie keer</translation> <translation id="5464660706533281090">Hierdie instelling kan nie deur 'n kindergebruiker verander word nie.</translation> <translation id="5466374726908360271">Plak en soek vir “<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">Het <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> geblokkeer</translation> <translation id="5468119583641912100">Werwe kan vra om beskermde inhoud te speel (aanbeveel)</translation> <translation id="5468173180030470402">Soek tans na lêerdelings</translation> <translation id="5469852975082458401">Jy kan met 'n tekspyltjie deur bladsye navigeer. Druk F7 om af te skakel.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Beëindig alle Chrome-programme</translation> <translation id="5797070761912323120">Google kan jou geskiedenis gebruik om Search, advertensies en ander Google-dienste te personaliseer</translation> <translation id="5798301976526354562">Teksgrootte (is ook van toepassing op Intydse Onderskrifte)</translation> +<translation id="579907812742603813">beskermde inhoud</translation> <translation id="579915268381781820">Jou sekuriteitsleutel is verwyder.</translation> <translation id="5799508265798272974">Linux- virtuele masjien: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Bestemminglêer is afgekap of verwyder sedert die laaste aflaai.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Kanaal het verander. Herbegin jou toestel om veranderinge toe te pas.</translation> <translation id="5877584842898320529">Die geselekteerde drukker is nie beskikbaar nie of is nie reg geïnstalleer nie. <ph name="BR" /> Gaan jou drukker na of probeer 'n ander drukker kies.</translation> <translation id="5882919346125742463">Bekende netwerke</translation> +<translation id="5883356647197510494">Het <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> outomaties geblokkeer</translation> <translation id="5884474295213649357">Hierdie oortjie is aan 'n USB-toestel gekoppel.</translation> <translation id="5886009770935151472">Vinger 1</translation> <translation id="5889282057229379085">Maksimum getal intermediêre CA's: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Vind volgende</translation> <translation id="6461170143930046705">Soek tans na netwerke …</translation> <translation id="6463795194797719782">Wysig</translation> +<translation id="6464094930452079790">prente</translation> <translation id="6464825623202322042">Hierdie toestel</translation> <translation id="6465841119675156448">Sonder internet</translation> <translation id="6466988389784393586">Maak alle boekmerke oop</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Kon nie magtig nie</translation> <translation id="6494327278868541139">Wys besonderhede oor gevorderde beskerming</translation> <translation id="6494445798847293442">Nie 'n Sertifiseringoutoriteit nie</translation> +<translation id="6494750904506170417">opspringers en herleidings</translation> <translation id="6494974875566443634">Pasmaking</translation> <translation id="6495925982925244349">Netwerk <ph name="NETWORK_INDEX" /> van <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, seinsterkte <ph name="SIGNAL_STRENGTH" />%, deur jou administrateur bestuur, besonderhede</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Hierdie data het sensitiewe of gevaarlike inhoud}=1{Hierdie lêer het sensitiewe of gevaarlike inhoud}other{Hierdie lêers het sensitiewe of gevaarlike inhoud}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Wagwoord</translation> <translation id="6659213950629089752">Hierdie bladsy is deur die "<ph name="NAME" />"-uitbreiding gezoem</translation> <translation id="6659594942844771486">Oortjie</translation> +<translation id="6660413144148052430">ligging</translation> <translation id="666099631117081440">Drukbedieners</translation> <translation id="6663190258859265334">Powerwash jou <ph name="DEVICE_TYPE" /> en keer terug na die vorige weergawe.</translation> <translation id="6664237456442406323">Ongelukkig is jou rekenaar opgestel met 'n misvormde hardeware-ID. Dit verhinder die Chrome-bedryfstelsel om met die nuutste sekuriteitsoplossings op te dateer en jou rekenaar <ph name="BEGIN_BOLD" />kan dalk blootgestel word aan kwaadwillige aanvalle<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Sien wat nuut is</translation> <translation id="67269783048918309">Stuur gebruik- en diagnostiese data. Hierdie toestel stuur tans diagnostiese, toestel- en programgebruikdata outomaties na Google toe. Dit sal nie gebruik word om jou kind te identifiseer nie en sal met stelsel- en programstabiliteit en ander verbeteringe help. Sekere saamgestelde data sal ook Google-programme en -vennote, soos Android-ontwikkelaars, help. Hierdie <ph name="BEGIN_LINK1" />instelling<ph name="END_LINK1" /> word deur die eienaar afgedwing. As die bykomende Web- en Programaktiwiteit-instelling vir jou kind aangeskakel is, kan hierdie data in hul Google-rekening gestoor word. <ph name="BEGIN_LINK2" />Kom meer te wete<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Gekoppel, <ph name="BATTERY_PERCENTAGE" />% batterykrag</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Sertifikate is nie gelaai nie</translation> <translation id="6732900235521116609">Kan nie kortpad verwyder nie</translation> <translation id="6734468588183300211">Terwyl jy in Incognito is, kan werwe nie jou webkoekies gebruik om jou blaai-aktiwiteit op verskillende werwe te sien nie, byvoorbeeld, om advertensies te personaliseer. Kenmerke op sommige werwe kan breek.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Vra wanneer 'n werf stelseleksklusiewe boodskappe wil gebruik om toegang tot MIDI-toestelle te kry (aanbeveel)</translation> <translation id="6818198425579322765">Bladsytaal om te vertaal</translation> <translation id="6818802132960437751">Ingeboude virusbeskerming</translation> +<translation id="6820143000046097424">reekspoorte</translation> <translation id="682123305478866682">Saai werkskerm uit</translation> <translation id="6823174134746916417">Raakpaneel – tik-om-te-klik</translation> <translation id="6824564591481349393">Kopieer e-posadres</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Ruil data uit met enige toestel in die plaaslike netwerk of internet</translation> <translation id="7306521477691455105">Maak Instellings oop om <ph name="USB_DEVICE_NAME" /> aan <ph name="USB_VM_NAME" /> te koppel</translation> <translation id="7307129035224081534">Wag tans</translation> +<translation id="7308436126008021607">agtergrondsinkronisering</translation> <translation id="7309257895202129721">Wys kontroles</translation> <translation id="7310598146671372464">Kon nie aanmeld nie. Die bediener steun nie gespesifiseerde Kerberos-enkripsietipes nie. Kontak asseblief jou administrateur.</translation> <translation id="7320213904474460808">Verstek vir netwerk</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Onmiddellike terugsending word vereis}other{Stuur <ph name="DEVICE_TYPE" /> binne {NUM_DAYS} dae terug}}</translation> <translation id="7475671414023905704">Netscape se verlorewagwoord-URL</translation> <translation id="7476454130948140105">Die battery is te pap om op te dateer (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Het <ph name="PERMISSION" /> en nog <ph name="COUNT" /> outomaties geblokkeer</translation> <translation id="7477793887173910789">Beheer jou musiek, video's en meer</translation> <translation id="7478485216301680444">Kioskprogram kon nie geïnstalleer word nie.</translation> <translation id="7478623944308207463">Jou programme en instellings sal gesinkroniseer word op alle Chrome-bedryfstelseltoestelle waarop jy met jou Google-rekening aangemeld is. Gaan na <ph name="LINK_BEGIN" />Chrome-instellings<ph name="LINK_END" /> toe vir blaaiersinkroniseringopsies.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Deïnstalleer tans <ph name="APP" /> …</translation> <translation id="8289128870594824098">Skyfgrootte</translation> <translation id="8293206222192510085">Voeg boekmerk by</translation> +<translation id="829335040383910391">klank</translation> <translation id="8294431847097064396">Bron</translation> <translation id="8298429963694909221">Jy kan nou kennisgewings van jou foon af op jou <ph name="DEVICE_TYPE" /> ontvang. Wanneer jy kennisgewings op jou <ph name="DEVICE_TYPE" /> toemaak, sal hulle ook op jou foon toegemaak word. Maak seker dat jou foon in die omtrek is en dat Bluetooth en wi-fi aangeskakel is.</translation> <translation id="8299319456683969623">Jy is tans vanlyn.</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Voeg netwerkverbinding by</translation> <translation id="8319414634934645341">Uitgebreide sleutelgebruik</translation> <translation id="8320459152843401447">Jou hele skerm</translation> +<translation id="8321476692217554900">kennisgewings</translation> <translation id="8321837372750396788">Hierdie <ph name="DEVICE_TYPE" /> sal bestuur word deur <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Hierdie bladsy word geblokkeer om by jou mikrofoon in te gaan.</translation> <translation id="8323167517179506834">Tik URL</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Onlangs uit Google Drive</translation> <translation id="8407199357649073301">Loglêervlak:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-netwerk; koppel tans</translation> +<translation id="8409413588194360210">betalinghanteerders</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Het <ph name="PERMISSION" /> en nog <ph name="COUNT" /> toegelaat</translation> <translation id="8413385045638830869">Vra eers (aanbeveel)</translation> <translation id="8417548266957501132">Ouerwagwoord</translation> <translation id="8418445294933751433">Wys as oortjie</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> of <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Aandbeligting-kleurtemperatuur</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> wil: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> en meer</translation> +<translation id="865032292777205197">bewegingsensors</translation> <translation id="8650543407998814195">Hoewel jy nie meer by jou ou profiel kan ingaan nie, kan jy dit steeds verwyder.</translation> <translation id="8651585100578802546">Dwing hierdie bladsy om te herlaai</translation> <translation id="8652400352452647993">Pakketuitbreidingfout</translation> @@ -6785,6 +6814,7 @@ <translation id="8785622406424941542">Stilus</translation> <translation id="8787254343425541995">Laat instaanbedienerinstellings toe vir gedeelde netwerke</translation> <translation id="8791534160414513928">Stuur 'n "Moenie naspoor nie"-versoek saam met jou blaaiverkeer.</translation> +<translation id="8792626944327216835">mikrofoon</translation> <translation id="879413103056696865">Terwyl die warmkol aan is, sal jou <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nuwe venster</translation> <translation id="8797459392481275117">Moet nooit hierdie werf vertaal nie</translation> @@ -6824,6 +6854,7 @@ <translation id="8823559166155093873">Blokkeer webkoekies</translation> <translation id="8823704566850948458">Stel wagwoord voor …</translation> <translation id="8824701697284169214">Voeg bladsy by …</translation> +<translation id="8827125715368568315">Het <ph name="PERMISSION" /> en nog <ph name="COUNT" /> geblokkeer</translation> <translation id="8827289157496676362">Speld uitbreiding vas</translation> <translation id="8827752199525959199">Nog handelinge; wagwoord vir <ph name="USERNAME" /> op <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Moenie enige werf toelaat om Bluetooth-toestelle in die omtrek te ontdek nie</translation> @@ -6924,6 +6955,7 @@ <translation id="8932894639908691771">Skakelaartoegangopsies</translation> <translation id="8933960630081805351">Wys in vinder</translation> <translation id="8934732568177537184">Gaan voort</translation> +<translation id="8938306522009698937">hanteerders</translation> <translation id="8938800817013097409">USB C-toestel (regterpoort aan agterkant)</translation> <translation id="8940081510938872932">Jou rekenaar doen tans te veel dinge. Probeer later weer.</translation> <translation id="8941173171815156065">Herroep die toestemming "<ph name="PERMISSION" />"</translation> @@ -7228,6 +7260,7 @@ <translation id="987264212798334818">Algemeen</translation> <translation id="987897973846887088">Geen prente beskikbaar nie</translation> <translation id="988978206646512040">Leë wagfrase word nie toegelaat nie</translation> +<translation id="991413375315957741">beweging- of ligsensors</translation> <translation id="992032470292211616">Uitbreidings, programme en temas kan jou toestel beskadig. Is jy seker jy wil voortgaan?</translation> <translation id="992256792861109788">Pienk</translation> <translation id="992592832486024913">Deaktiveer ChromeVox (gesproke terugvoering)</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 18e6f4bc..93d3ccb 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">ነባሪ</translation> <translation id="1252987234827889034">የመገለጫ ስህተት ተከስቷል</translation> <translation id="1254593899333212300">ቀጥተኛ የበይነመረብ ግንኙነት</translation> +<translation id="1257553931232494454">የማጉላት ደረጃዎች</translation> <translation id="1259152067760398571">የደህንነት ፍተሻ ትላንትና ተካሂዷል</translation> <translation id="1260451001046713751">ሁልጊዜ ከ<ph name="HOST" /> የሚመጡ ብቅ-ባዮችን እና አቅጣጫ ማዞሮችን ፍቀድ</translation> <translation id="1261380933454402672">መለስተኛ</translation> @@ -672,6 +673,7 @@ <translation id="1729533290416704613">እንዲሁም ከኦምኒቦክሱ ሆነው ሲፈልጉ የሚታየውን ገጽ ይቆጣጠራል።</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />መተግበሪያዎችን ለማስወገድ ወደ ቅንብሮች > Google Play መደብር > የAndroid ምርጫዎችን ያስተዳድሩ >መተግበሪያዎች ወይም የመተግበሪያ አስተዳዳሪ ይሂዱ። ከዚያ ለማራገፍ የሚፈልጉትን መተግበሪያ መታ ያድርጉ (መተግበሪያውን ለማግኘት ወደ ቀኝ ወይም ወደ ግራ ማንሸራተት ሊኖርብዎት ይችላል)። ከዚያ አራግፍ ወይም አሰናክል የሚለውን መታ ያድርጉ።<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">ጥያቄ በመላክ ላይ...</translation> +<translation id="1733064249834771892">ቅርጸ-ቁምፊዎች</translation> <translation id="1733383495376208985">የሰመረ ውሂብ በራስዎ <ph name="BEGIN_LINK" />የስምረት ይለፍ ሐረግ<ph name="END_LINK" /> ያመስጥሩ። ይህ ከGoogle Pay የመክፈያ ዘዴዎችን እና አድራሻዎችን አያካትትም።</translation> <translation id="1734212868489994726">ፈካ ያለ ሰማያዊ</translation> <translation id="1734230530703461088">በጊዜ ገደቡ ውስጥ ቅጥያዎችን መጫን አልተሳካም። እባክዎ አስተዳዳሪዎን ያነጋግሩ።</translation> @@ -759,6 +761,7 @@ <translation id="1818913467757368489">የምዝግብ ማስታወሻ ሰቀላ በሂደት ላይ።</translation> <translation id="1819721979226826163">የመተግበሪያ ማሳወቂያዎች > Google Play አገልግሎቶችን መታ ያድርጉ።</translation> <translation id="1820028137326691631">በአስተዳዳሪ የቀረበውን የይለፍ ቃል ያስገቡ</translation> +<translation id="182139138257690338">ራስ-ሰር ውርዶች</translation> <translation id="1822140782238030981">አስቀድመው የChrome ተጠቃሚ ነዎት? በመለያ ይግቡ</translation> <translation id="18245044880483936">የምትኬ ውሂብ በልጅዎ የDrive ማከማቻ ኮታ ላይ አይቆጠርም።</translation> <translation id="1825565032302550710">ወደብ በ1024 እና 65535 መካከል መሆን አለበት</translation> @@ -1199,6 +1202,7 @@ <translation id="2326931316514688470">&መተግበሪያን ዳግም ጫን</translation> <translation id="2327492829706409234">መተግበሪያን አንቃ</translation> <translation id="2328561734797404498"><ph name="APP_NAME" />ን ለመጠቀም እባክዎ የእርስዎን መሣሪያ ዳግም ያስነሱት።</translation> +<translation id="2329182534073751090">የመስኮት ምደባ</translation> <translation id="2329597144923131178">የእርስዎን ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች በሁሉም መሣሪያዎችዎ ላይ ለማግኘት ወደ መለያ ይግቡ።</translation> <translation id="2332131598580221120">በመደብር ውስጥ ይመልከቱ</translation> <translation id="2332192922827071008">ምርጫዎችን ክፈት</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">በቡድን ውስጥ አዲስ ትር</translation> <translation id="289644616180464099">ሲም ካርድ ተዘግቷል</translation> <translation id="289695669188700754">ቁልፍ መታወቂያ፦ <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">ሁሉንም ማንነት የማያሳውቁ መስኮቶችዎን ሲዘጉ ይህ ብጁ ቅንብር ይወገዳል</translation> <translation id="2897878306272793870">እርግጠኛ ነዎት <ph name="TAB_COUNT" /> ትሮችን መክፈት ይፈልጋሉ?</translation> <translation id="290105521672621980">ፋይሉ ያልተደገፉ ባህሪያትን ይጠቀማል</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> ከአታሚ ጋር ሊግባባ አልቻለም። አታሚው መሰካቱን ያረጋግጡና እንደገና ይሞክሩ።</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">ውሂብ በስምረት ይለፍ ሐረግዎ ተመስጥሯል። ይህ ከGoogle Pay የመክፈያ ዘዴዎችን እና አድራሻዎችን አያካትትም።</translation> <translation id="2996722619877761919">በረጅም ጠርዝ ላይ ገልብጥ</translation> <translation id="3000236644796679448">ጣቢያዎች ማይክሮፎንዎን ለመጠቀም መጠየቅ ይችላሉ (የሚመከር)</translation> +<translation id="3000378525979847272">የተፈቀዱ <ph name="PERMISSION_1" />፣ <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">ሞኖ ኦዲዮ</translation> <translation id="3001144475369593262">የልጅ መለያዎች</translation> <translation id="3003144360685731741">ተመራጭ አውታረ መረቦች</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">PDF በቅድመ እይታ ክፈት</translation> <translation id="3308116878371095290">ይህ ገጽ ኩኪዎችን ከማቀናጀት ተከልክሏል።</translation> <translation id="3308134619352333507">አዘራር ደብቅ</translation> +<translation id="3308738399950580893">ማስታወቂያዎች</translation> <translation id="3308852433423051161">የGoogle ረዳትን በመጫን ላይ...</translation> <translation id="3309330461362844500">የእውቅና ማረጋገጫ መገለጫ መታወቂያ</translation> <translation id="3311445899360743395">ከዚህ መተግበሪያ ጋር የተጎዳኘ ውሂብ ከዚህ መሣሪያ ላይ ሊወገድ ይችላል።</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">ይህ ፋይል ተመስጥሯል። ባለቤቱ ምስጠራውን እንዲፈቱት ይጠይቋቸው።</translation> <translation id="3390013585654699824">የመተግበሪያ ዝርዝሮች</translation> <translation id="3390741581549395454">Linux መተግበሪያዎች እና ፋይሎች በተሳካ ሁኔታ በምትኬ ተቀምጠዋል። ደረጃ ማሻሻል ከትንሽ ጊዜ በኋላ ይጀምራል።</translation> +<translation id="3391482648489541560">የፋይል አርትዖት አደራረግ</translation> <translation id="339178315942519818">በእርስዎ <ph name="DEVICE_TYPE" /> ላይ ከእርስዎ የውይይት መተግበሪያዎች የመጡ ማሳወቂያዎችን ይመልከቱ</translation> <translation id="3396800784455899911">የ«እስማማለሁ እና ቀጥል» አዝራርን ጠቅ በማድረግ ለእነዚህ የGoogle አገልግሎቶች ከላይ በተብራራው ማስሄድ መስማማትዎን ያረጋግጣሉ።</translation> <translation id="3399432415385675819">ማሳወቂያዎች ይሰናከላሉ</translation> @@ -2892,6 +2900,7 @@ <translation id="425573743389990240">የባትሪ ትፋት ፍጥነት በዋት (አሉታዊ እሴት ማለት ባትሪ እየሞላ ነው)</translation> <translation id="4256316378292851214">ቪዲዮ አስ&ቀምጥ እንደ…</translation> <translation id="4258348331913189841">ስርዓተ ፋይሎች</translation> +<translation id="4259381619085088639">የእርስዎ መገኘት</translation> <translation id="4259388776256904261">ይህ ትንሽ ጊዜ ሊወስድ ይችላል</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> አደገኛ ሊሆን ይችላል። እንዲቃኝ ወደ Google የላቀ ጥበቃ ይላክ? የውርዶች አሞሌ አካባቢውን ለመቀየር Shift+F6 ይጫኑ።</translation> <translation id="4263223596040212967">የእርስዎን የቁልፍ ሰሌዳ አቀማመጥ ይፈትሹ እና እንደገና ይሞክሩ።</translation> @@ -2928,6 +2937,7 @@ <translation id="4303079906735388947">ለእርስዎ የደህንነት ቁልፍ አዲስ ፒን ያቀናብሩ</translation> <translation id="4305402730127028764">ወደ <ph name="DEVICE_NAME" /> ይቅዱ</translation> <translation id="4306119971288449206">መተግበሪያዎች በይዘት አይነት «<ph name="CONTENT_TYPE" />» ሊቀርቡ ይገባል</translation> +<translation id="4306812610847412719">ቅንጥብ ሰሌዳ</translation> <translation id="4307992518367153382">መሠረታዊ</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K በቀጥታ)</translation> <translation id="4310139701823742692">ፋይሉ በተሳሳተ ቅርጸት ነው ያለው። የPPD ፋይሉን ይመልከቱና እንደገና ይሞክሩ።</translation> @@ -3015,6 +3025,7 @@ <translation id="4412698727486357573">የእገዛ ማዕከል</translation> <translation id="44141919652824029">«<ph name="APP_NAME" />» የተያያዙ ዩኤስቢ መሣሪያዎችዎን ዝርዝር እንዲያገኝ ይፈቀድለት?</translation> <translation id="4414232939543644979">አዲስ ማን&ነትን የማያሳውቅ መስኮት</translation> +<translation id="4414515549596849729">ኩኪዎች እና የጣቢያ ውሂብ</translation> <translation id="4415213869328311284">የእርስዎን <ph name="DEVICE_TYPE" /> መጠቀም ለመጀመር ዝግጁ ነዎት።</translation> <translation id="4415245286584082850">ምንም መሣሪያዎች አልተገኙም። የእገዛ ማዕከል ጽሑፍ በአዲስ ትር ላይ ይክፈቱ።</translation> <translation id="4415276339145661267">የGoogle መለያዎን ያቀናብሩ</translation> @@ -3086,6 +3097,7 @@ <translation id="4493468155686877504">የተመከሩ (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">በዚህ ገጽ ላይ አታሳይ</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ተበላሽቷል</translation> +<translation id="4500587658229086076">ደህንነቱ ያልተጠበቀ ይዘት</translation> <translation id="450099669180426158">የቃለ አጋኖ አዶ</translation> <translation id="4501530680793980440">ማስወገድ ያረጋግጡ</translation> <translation id="4502423230170890588">ከዚህ መሣሪያ አስወግድ</translation> @@ -3126,6 +3138,7 @@ <translation id="4538684596480161368">በማጠሪያ ያልተቀመጡ ተሰኪዎች ሁልጊዜ <ph name="HOST" /> ላይ አግድ</translation> <translation id="4538792345715658285">በድርጅት መመሪያ የተጫነ።</translation> <translation id="4541662893742891060">ከዚህ መገለጫ ጋር መገናኘት አልተቻለም። ለቴክኒካዊ ድጋፍ እባክዎ አገልግሎት አቅራቢዎን ያነጋግሩ።</translation> +<translation id="4541810033354695636">ትክክለኛ እውነታ</translation> <translation id="4542520061254486227">የእርስዎን ውሂብ በ<ph name="WEBSITE_1" /> እና በ<ph name="WEBSITE_2" /> ላይ ያንብቡ</translation> <translation id="4543778593405494224">የእውቅና ማረጋገጫ አቀናባሪ</translation> <translation id="4544174279960331769">ነባሪ ሰማያዊ አምሳያ</translation> @@ -3598,6 +3611,7 @@ <translation id="5112577000029535889">&የገንቢ መሳሪያዎች</translation> <translation id="5113739826273394829">ይህን አዶ ጠቅ ካደረጉት ይህን <ph name="DEVICE_TYPE" /> እራስዎ ይቆልፉታል። በሚቀጥለው ጊዜ ለመግባት የይለፍ ቃልዎን መተየብ ይኖርብዎታል።</translation> <translation id="51143538739122961">የእርስዎን የደህንነት ቁልፍ ያስገቡ እና ይንኩት</translation> +<translation id="5114987907971894280">ምናባዊ እውነታ</translation> <translation id="5115309401544567011">እባክዎ የእርስዎን <ph name="DEVICE_TYPE" /> ወደ የኃይል ምንጭ ይሰኩት።</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">ተሰሚ/ኦዲዮ አስ&ቀምጥ እንደ…</translation> @@ -3897,6 +3911,7 @@ <translation id="5464632865477611176">አሁን አሂደው</translation> <translation id="5464660706533281090">ይህ ቅንብር በልጅ ተጠቃሚ ሊቀየር አይችልም።</translation> <translation id="5466374726908360271">ይለጥፉና «<ph name="SEARCH_TERMS" />»ን ይፈልጉ</translation> +<translation id="5467207440419968613">የታገዱ <ph name="PERMISSION_1" />፣ <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">ጣቢያዎች የተጠበቀ ይዘትን ለማጫወት መጠየቅ ይችላሉ (የሚመከር)</translation> <translation id="5468173180030470402">የፋይል ማጋራቶችን በመፈለግ ላይ</translation> <translation id="5469852975082458401">ገጾችን በጽሑፍ ጠቋሚ አማካኝነት ማሰስ ይችላሉ። ለማጥፋት F7ን ይጫኑ።</translation> @@ -4188,6 +4203,7 @@ <translation id="5794786537412027208">ከሁሉም የChrome መተግበሪያዎች ውጣ</translation> <translation id="5797070761912323120">Google ፍለጋን፣ ማስታወቂያዎችን እና ሌሎች የGoogle አገልግሎቶችን ግላዊነት ለማላበስ የእርስዎን ታሪክ ሊጠቀም ይችላል</translation> <translation id="5798301976526354562">የጽሑፍ መጠን (ለቀጥታ መግለጫ ጽሑፍም ይተገበራል)</translation> +<translation id="579907812742603813">ጥበቃ የሚደረግለት ይዘት</translation> <translation id="579915268381781820">የእርስዎ የደህንነት ቁልፍ ተወግዷል።</translation> <translation id="5799508265798272974">የLinux ምናባዊ ማሽን፦ <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">የመድረሻ ፋይሉ ከመጨረሻ ውርዱ በኋላ ተቋርጧል ወይም ተወግዷል።</translation> @@ -4261,6 +4277,7 @@ <translation id="5877064549588274448">ሰርጥ ተለውጧል። ለውጦችን ለመተግበር መሳሪያዎን ዳግም ያስጀምሩ።</translation> <translation id="5877584842898320529">የተመረጠው አታሚ የለም ወይም በትክክል አልተጫነም። <ph name="BR" /> አታሚዎን ይፈትሹት ወይም ሌላ አታሚ ለመምረጥ ይሞክሩ።</translation> <translation id="5882919346125742463">የታወቁ አውታረ መረቦች</translation> +<translation id="5883356647197510494">በራስ-ሰር የታገዱ <ph name="PERMISSION_1" />፣ <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">ይህ ትር ከአንድ የዩኤስቢ መሣሪያ ጋር የተገናኘ ነው።</translation> <translation id="5886009770935151472">ጣት 1</translation> <translation id="5889282057229379085">ከፍተኛ የመሃከለኛ CAዎች ብዛት፦ <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4760,6 +4777,7 @@ <translation id="6460601847208524483">ቀጣዩን አግኝ</translation> <translation id="6461170143930046705">አውታረ መረብን በመፈለግ ላይ...</translation> <translation id="6463795194797719782">&አርትዕ</translation> +<translation id="6464094930452079790">ምስሎች</translation> <translation id="6464825623202322042">ይህ መሣሪያ</translation> <translation id="6465841119675156448">ያለበይነመረብ</translation> <translation id="6466988389784393586">&ሀሉንም እልባቶች ክፈት</translation> @@ -4783,6 +4801,7 @@ <translation id="6491376743066338510">ፈቀዳ አልተሳካም</translation> <translation id="6494327278868541139">የበለጸጉ የጥበቃ ዝርዝሮችን አሳይ</translation> <translation id="6494445798847293442">የእውቅና ማረጋገጫ ባለሥልጣን አይደለም</translation> +<translation id="6494750904506170417">ብቅ-ባዮች እና አቅጣጫ ማዞሮች</translation> <translation id="6494974875566443634">ማበጀት</translation> <translation id="6495925982925244349">አውታረ መረብ <ph name="NETWORK_INDEX" /> ከ<ph name="NETWORK_COUNT" />፣ <ph name="NETWORK_NAME" />፣ <ph name="SECURITY_STATUS" />፣ <ph name="CONNECTION_STATUS" />፣ የሲግናል ጥንካሬ <ph name="SIGNAL_STRENGTH" />%፣ በእርስዎ አስተዳዳሪ የሚተዳደር፣ ዝርዝሮች</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{ይህ ውሂብ ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}=1{ይህ ፋይል ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}one{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}other{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}}</translation> @@ -4923,6 +4942,7 @@ <translation id="6657585470893396449">የይለፍ ቃል፦</translation> <translation id="6659213950629089752">ይህ ገጽ በ«<ph name="NAME" />» ቅጥያው ነው የጎላው</translation> <translation id="6659594942844771486">ትር</translation> +<translation id="6660413144148052430">አካባቢ</translation> <translation id="666099631117081440">የአትም አገልጋዮች</translation> <translation id="6663190258859265334">የእርስዎን <ph name="DEVICE_TYPE" /> ፖወርዋሽ ያድርጉት እና ወደ ቀዳሚው ስሪት ይመለሱ።</translation> <translation id="6664237456442406323">የአጋጣሚ ነገር ሆኖ ኮምፒውተርዎ በተበላሸ የሃርድዌር መታወቂያ ነው የተዋቀረው። ይሄ Chrome ስርዓተ ክወና በቅርብ ጊዜዎቹ የደህንነት ጥገናዎች እንዳይዘመን ያግደዋል፣ እና የእርስዎ ኮምፒውተር <ph name="BEGIN_BOLD" />ለተንኮል-አዘል ጥቃቶች የተጋለጠ ሊሆን ይችላል<ph name="END_BOLD" />።</translation> @@ -4977,6 +4997,7 @@ <translation id="672609503628871915">ምን አዲስ ነገር እንዳለ ይመልከቱ</translation> <translation id="67269783048918309">የአጠቃቀም እና የምርመራ ውሂብ ይላኩ። ይህ መሣሪያ በአሁኑ ጊዜ በራስ-ሰር የምርመራ፣ የመሣሪያ እና የመተግበሪያ አጠቃቀም ውሂብ ወደ Google እየላከ ነው። ይህ ልጅዎን ለመለየት ስራ ላይ አይውልም፣ እና የስርዓት እና የመተግበሪያ እርጋታን እና ሌሎች ማሻሻያዎችን ያግዛል። አንዳንድ ውሑድ ውሂብ እንዲሁም የGoogle መተግበሪያዎችን እና እንደ የAndroid ገንቢዎች ያሉ አጋሮችን ያግዛሉ። ይህ <ph name="BEGIN_LINK1" />ቅንብር<ph name="END_LINK1" /> በባለቤቱ ተፈጻሚ ይደረጋል። የተጨማሪ የድር እና መተግበሪያ እንቅስቃሴ ቅንብር ለልጅዎ በርቶ ከሆነ ይህ ውሂብ ወደ የGoogle መለያቸው ሊቀመጥ ይችላል። <ph name="BEGIN_LINK2" />የበለጠ ለመረዳት<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">ተገናኝቷል፣ <ph name="BATTERY_PERCENTAGE" />% ባትሪ</translation> +<translation id="6732087373923685049">ካሜራ</translation> <translation id="6732801395666424405">የእውቅና ማረጋገጫዎች አልተጫኑም</translation> <translation id="6732900235521116609">አቋራጭን ማስወገድ አልተቻለም</translation> <translation id="6734468588183300211">ማንነት በማያሳውቅ ሁኔታ ላይ ሳሉ፣ ጣቢያዎች የእርስዎን ኩኪዎች በመጠቀም በተለያዩ ጣቢያዎች ለምሳሌ ማስታወቂያዎችን ግላዊነት ለማላበስ ያደረጉትን የእርስዎን የአሰሳ እንቅስቃሴ መመልከት አይችሉም። በአንዳንድ ጣቢያዎች ላይ ያሉ ባህሪያት ሊሰበሩ ይችላሉ።</translation> @@ -5051,6 +5072,7 @@ <translation id="6817174620439930047">አንድ ጣቢያ የMIDI መሣሪያዎችን ለመድረስ ለሚመለከተው ሥርዓት ብቻ የተወሰኑ መልእክቶችን ለመጠቀም ሲፈልግ ጠይቅ (የሚመከር)</translation> <translation id="6818198425579322765">የሚተረጎመው የገጽ ቋንቋ</translation> <translation id="6818802132960437751">አብሮገነብ የቫይረስ መከላከያ</translation> +<translation id="6820143000046097424">ተከታታይ ወደቦች</translation> <translation id="682123305478866682">ዴስክቶፕ ውሰድ</translation> <translation id="6823174134746916417">የመዳሰሻ ሰሌዳ ለጠቅታ-መታ-ማድረግ</translation> <translation id="6824564591481349393">&ኢሜይል አድራሻ ቅዳ</translation> @@ -5484,6 +5506,7 @@ <translation id="730515362922783851">በአካባቢ አውታረመረብ ወይም በይነመረብ ላይ ከማናቸውም መሣሪያ ጋር ውሂብ ተለዋወጥ</translation> <translation id="7306521477691455105"><ph name="USB_DEVICE_NAME" />ን ለ<ph name="USB_VM_NAME" /> ጋር ለማገናኘት ቅንብሮችን ይክፈቱ</translation> <translation id="7307129035224081534">ባለበት ቆሟል</translation> +<translation id="7308436126008021607">የዳራ ስምረት</translation> <translation id="7309257895202129721">&ቁጥጥሮችን አሳይ</translation> <translation id="7310598146671372464">በመለያ መግባት አልተሳካም። አገልጋዩ የተጠቀሱትን የKerberos ምሥጠራ ዓይነቶች አይደግፍም። እባክዎ የእርስዎን አስተዳዳሪ ያነጋግሩ።</translation> <translation id="7320213904474460808">በነባሪነት ወደ አውታረ መረቡ ተመለስ</translation> @@ -5625,6 +5648,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{ወዲያውኑ መመለስ ያስፈልጋል}one{<ph name="DEVICE_TYPE" />ን በ{NUM_DAYS} ቀኖች ውስጥ ይመልሱ}other{<ph name="DEVICE_TYPE" />ን በ{NUM_DAYS} ቀኖች ውስጥ ይመልሱ}}</translation> <translation id="7475671414023905704">የNetscape የጠፋ የይለፍ ቃል URL</translation> <translation id="7476454130948140105">ባትሪ ለዝማኔ በጣም ዝቅተኛ ነው (<ph name="BATTERY_PERCENT" />)</translation> +<translation id="7476989672001283112">በራስ-ሰር የታገዱ <ph name="PERMISSION" /> እና <ph name="COUNT" />ተጨማሪ</translation> <translation id="7477793887173910789">የእርስዎን ሙዚቃ፣ ቪዲዮዎች እና ተጨማሪ ነገሮች ይቆጣጠሩ</translation> <translation id="7478485216301680444">የኪዮስክ መተግበሪያ ሊጫን አልቻለም።</translation> <translation id="7478623944308207463">የእርስዎ መተግበሪያዎች እና ቅንብሮች በGoogle መለያዎ በገቡባቸው ሁሉም የChrome OS መሣሪያዎች ላይ ይሰምራሉ። ለአሳሽ ስምረት አማራጮች ወደ <ph name="LINK_BEGIN" />የChrome ቅንብሮች<ph name="LINK_END" /> ይሂዱ።</translation> @@ -6373,6 +6397,7 @@ <translation id="8288032458496410887"><ph name="APP" /> ይራገፍ...</translation> <translation id="8289128870594824098">የዲስክ መጠን</translation> <translation id="8293206222192510085">እልባት ያክሉ</translation> +<translation id="829335040383910391">ድምፅ</translation> <translation id="8294431847097064396">ምንጭ</translation> <translation id="8298429963694909221">አሁን በእርስዎ <ph name="DEVICE_TYPE" /> ላይ ከእርስዎ ስልክ ማሳወቂያዎችን መቀበል ይችላሉ። በእርስዎ <ph name="DEVICE_TYPE" /> ላይ ማሳወቂያዎችን ማሰናበት እንዲሁም በስልክዎ ላይ ያሰናብታቸዋል። ስልክዎ በአቅራቢያ እንዳለ እንዲሁም ብሉቱዝ እና Wi-Fi እንደበራ ያረጋግጡ።</translation> <translation id="8299319456683969623">በአሁኑ ጊዜ ከመስመር ውጪ ነዎት።</translation> @@ -6391,6 +6416,7 @@ <translation id="8317671367883557781">የአውታረ መረብ ግንኙነት ያክሉ</translation> <translation id="8319414634934645341">የተስፋፋ ቁልፍ አጠቃቀም</translation> <translation id="8320459152843401447">የእርስዎ ሙሉ ማያ ገጽ</translation> +<translation id="8321476692217554900">ማሳወቂያዎች</translation> <translation id="8321837372750396788">ይህ <ph name="DEVICE_TYPE" /> በ<ph name="MANAGER" /> ነው የሚተዳደረው።</translation> <translation id="8322814362483282060">ይህ ገጽ ማይክሮፎንዎን እንዳይደርስበት ታግዷል።</translation> <translation id="8323167517179506834">ዩአርኤል ይተይቡ</translation> @@ -6456,7 +6482,9 @@ <translation id="8403562727702715619">በቅርቡ ከGoogle Drive</translation> <translation id="8407199357649073301">የምዝግብ ማስታወሻ ደረጃ፦</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> አውታረ መረብ፣ በመገናኘት ላይ</translation> +<translation id="8409413588194360210">የክፍያ ተቆጣጣሪዎች</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">የተፈቀዱ <ph name="PERMISSION" /> እና <ph name="COUNT" /> ተጨማሪ</translation> <translation id="8413385045638830869">በመጀመሪያ ጠይቅ (የሚመከር)</translation> <translation id="8417548266957501132">የወላጅ ይለፍ ቃል</translation> <translation id="8418445294933751433">&በትር አሳይ</translation> @@ -6652,6 +6680,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ወይም <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">የሌሊት ቀላል ቀለም የሙቀት መጠን</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> የሚከተሉትን ማድረግ ይፈልጋል፦ <ph name="FIRST_PERMISSION" />፣ <ph name="SECOND_PERMISSION" /> እና ተጨማሪ</translation> +<translation id="865032292777205197">የእንቅስቃሴ ዳሳሾች</translation> <translation id="8650543407998814195">ምንም እንኳ ከእንግዲህ የድሮ መገለጫዎን መድረስ ባይችሉም አሁንም ሊያስወግዱት ይችላሉ።</translation> <translation id="8651585100578802546">ይህ ገጽ እንደገና እንዲጀምር አስገድድ</translation> <translation id="8652400352452647993">የጥቅል ቅጥያ ስህተት</translation> @@ -6789,6 +6818,7 @@ <translation id="8785622406424941542">ስቲለስ</translation> <translation id="8787254343425541995">ለተጋሩ አውታረ መረቦች ተኪዎችን ይፍቀዱ</translation> <translation id="8791534160414513928">ከአሰሳ ትራፊክዎ ጋር የ«አትከታተል» ጥያቄ ይላኩ</translation> +<translation id="8792626944327216835">ማይክሮፎን</translation> <translation id="879413103056696865">የመገናኛ ነጥቡ በርቶ ሳለ የእርስዎ <ph name="PHONE_NAME" /> ይህን ያደርጋል፦</translation> <translation id="8795916974678578410">አዲስ መስኮት</translation> <translation id="8797459392481275117">ይህን ጣቢያ በጭራሽ አትተርጉም</translation> @@ -6828,6 +6858,7 @@ <translation id="8823559166155093873">ኩኪዎችን አግድ</translation> <translation id="8823704566850948458">የይለፍ ቃል ጠቁም...</translation> <translation id="8824701697284169214">&ገጽ አክል...</translation> +<translation id="8827125715368568315">የታገዱ <ph name="PERMISSION" /> እና <ph name="COUNT" /> ተጨማሪ</translation> <translation id="8827289157496676362">ቅጥያን አያይዝ</translation> <translation id="8827752199525959199">ተጨማሪ እርምጃዎች፣ በ<ph name="DOMAIN" /> ላይ የ<ph name="USERNAME" /> ይለፍ ቃል</translation> <translation id="882854468542856424">ማናቸውም ጣቢያ በአቅራቢያ ያሉ ብሉቱዝ መሣሪያዎችን ፈልጎ እንዲያገኝ አትፍቀድ</translation> @@ -6928,6 +6959,7 @@ <translation id="8932894639908691771">የማብሪያ/ማጥፊያ መዳረሻ አማራጮች</translation> <translation id="8933960630081805351">በፈላጊ ውስጥ &አሳይ</translation> <translation id="8934732568177537184">ቀጥል</translation> +<translation id="8938306522009698937">ተቆጣጣሪዎች</translation> <translation id="8938800817013097409">USB-C መሣሪያ (የቀኝ ወደብ ከኋላ በኩል)</translation> <translation id="8940081510938872932">ኮምፒውተርዎ አሁን በጣም ብዙ ነገሮችን እየሰራ ነው። ቀይተው እንደገና ይምክሩ።</translation> <translation id="8941173171815156065">ፈቃድ «<ph name="PERMISSION" />»ን ሻር</translation> @@ -7232,6 +7264,7 @@ <translation id="987264212798334818">አጠቃላይ</translation> <translation id="987897973846887088">ምንም ምስሎች አይገኙም</translation> <translation id="988978206646512040">ባዶ የይለፍ ሐረግ አይፈቀድም</translation> +<translation id="991413375315957741">የእንቅስቃሴ ወይም የብርሃን ዳሳሾች</translation> <translation id="992032470292211616">ቅጥያዎች፣ መተግበሪያዎች እና ገጽታዎች መሣሪያዎን ሊጎዱት ይችላሉ። እርግጠኛ ነዎት መቀጠል ይፈልጋሉ?</translation> <translation id="992256792861109788">ሮዝ</translation> <translation id="992592832486024913">ChromeVoxን (የሚነገር ግብረመልስ) አሰናክል</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 9ab7a0d5..75181ed 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -425,6 +425,7 @@ <translation id="1465827627707997754">পিজ্জাৰ টুকুৰা</translation> <translation id="1468571364034902819">এই প্ৰ’ফাইলটো ব্যৱহাৰ কৰিব নোৱাৰি</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{নতুন গোটত টেব যোগ দিয়ক}one{নতুন গোটত টেবসমূহ যোগ দিয়ক}other{নতুন গোটত টেবসমূহ যোগ দিয়ক}}</translation> +<translation id="1470350905258700113">এই ডিভাইচটো ব্যৱহাৰ কৰক</translation> <translation id="1470946456740188591">কেৰেট ব্ৰাউজিং অন অথবা অফ কৰিবলৈ শ্বৰ্টকাট Ctrl+Search+7 ব্যৱহাৰ কৰক</translation> <translation id="1472675084647422956">অধিক দেখুৱাওক</translation> <translation id="1474785664565228650">মাইক্ৰ’ফ’নৰ ছেটিঙত কৰা সালসলনিৰ বাবে Parallels Desktop পুনৰ লঞ্চ কৰাৰ আৱশ্যক। আগবাঢ়িবলৈ Parallels Desktop পুনৰ লঞ্চ কৰক।</translation> @@ -1395,6 +1396,7 @@ <translation id="2541002089857695151">সম্পূর্ণ স্ক্ৰীণৰ কাষ্টটিং অপ্টিমাইজ কৰিবনে?</translation> <translation id="2541706104884128042">শোৱাৰ নতুন সময় ছেট কৰা হ’ল</translation> <translation id="2542050502251273923">ff_debug ব্যৱহাৰ কৰি নেটৱৰ্ক সংযোগ পৰিচালক আৰু অন্য সেৱাসমূহৰ ডিবাগিঙৰ স্তৰ ছেট কৰে।</translation> +<translation id="2544292303401268586">এপ্ আপডে’ট কৰিবলৈ আপোনাৰ প্ৰশাসকে আপোনাৰ ডিভাইচটো ৰিষ্টাৰ্ট কৰিবলৈ অনুৰোধ জনাইছে। এয়া সম্পূৰ্ণ হ’বলৈ কেই মিনিটমান সময় লাগিব পাৰে।</translation> <translation id="2544853746127077729">নেটৱৰ্কে বিশ্বাসযোগ্যতাৰ প্ৰমাণপত্ৰ অগ্ৰাহ্য কৰিছে</translation> <translation id="2546283357679194313">কুকি আৰু ছাইট ডেটা</translation> <translation id="2548347166720081527"><ph name="PERMISSION" />ৰ অনুমতি দিয়া হৈছে</translation> @@ -2774,6 +2776,7 @@ <translation id="409579654357498729">Cloud Printত যোগ কৰক</translation> <translation id="4096508467498758490">বিকাশকর্তাৰ ম’ড এক্সটেনশ্বন অক্ষম কৰক</translation> <translation id="4097406557126260163">এপ্ আৰু এক্সটেনশ্বনসমূহ</translation> +<translation id="409742781329613461">Chromeৰ বাবে পৰামৰ্শ</translation> <translation id="4097560579602855702">Googleত সন্ধান কৰক</translation> <translation id="4098667039111970300">টুলবাৰত থকা ষ্টাইলাছ সঁজুলি</translation> <translation id="4099060993766194518">সন্ধানৰ ডিফ’ল্ট ইঞ্জিন পুনঃস্থাপন কৰিবনে?</translation> @@ -4082,6 +4085,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" />লৈ পঢ়া আৰু লিখাৰ এক্সেছ দিয়া হৈছে।</translation> <translation id="5678955352098267522">আপোনাৰ ডেটা <ph name="WEBSITE_1" />ত পঢ়ক</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" আঁতৰাবনে?</translation> +<translation id="5683806393796685434">অনুগ্ৰহ কৰি আপোনাৰ সক্ৰিয়কৰণ ক'ডটো দিয়ক</translation> <translation id="5684181005476681636">ৱাই-ফাইৰ সবিশেষ</translation> <translation id="5684661240348539843">সম্পত্তি চিনাক্তকাৰী</translation> <translation id="5687326903064479980">সময় মণ্ডল</translation> @@ -4332,6 +4336,7 @@ <translation id="5978277834170881274">&সাধাৰণ বানান পৰীক্ষক ব্যৱহাৰ কৰক</translation> <translation id="5979084224081478209">পাছৱৰ্ডবোৰ পৰীক্ষা কৰক</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{আপুনি ১ টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}one{আপুনি {NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}other{আপুনি {NUM_EXTENSIONS} টা সম্ভাব্য ক্ষতিকাৰক এক্সটেনশ্বন পুনৰ অন কৰিছে}}</translation> +<translation id="5979353814339191480">এই বিকল্পটো Chromebookত এখন ডেটাৰ আঁচনি অথবা ম'বাইল নেটৱৰ্কৰ ডংগলৰ জৰিয়তে অথবা এটা প'ৰ্টেবল হ'টস্প'টত টেডাৰিঙৰ সময়ত প্ৰযোজ্য হয়</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" />লৈ &অনুবাদ কৰক</translation> <translation id="5979469435153841984">কোনো এটা পৃষ্ঠা বুকমাৰ্ক কৰিবলৈ ঠিকনাৰ বাৰত থকা তৰাচিহ্নত ক্লিক কৰক</translation> <translation id="5984222099446776634">শেহতীয়াকৈ চোৱা</translation> @@ -4747,6 +4752,7 @@ <translation id="6460601847208524483">পৰৱৰ্তী বস্তু বিচাৰক</translation> <translation id="6461170143930046705">নেটৱৰ্কসমূহ বিচাৰি থকা হৈছে...</translation> <translation id="6463795194797719782">&সম্পাদনা কৰক</translation> +<translation id="6464825623202322042">এই ডিভাইচটো</translation> <translation id="6465841119675156448">ইণ্টাৰনেটৰ অবিহনে</translation> <translation id="6466988389784393586">সকলো বুকমাৰ্ক &খোলক</translation> <translation id="6467304607960172345">সম্পূর্ণ স্ক্ৰীণৰ ভিডিঅ’সমূহ অপ্টিমাইজ কৰক</translation> @@ -4809,6 +4815,7 @@ <translation id="653659894138286600">নথি আৰু প্ৰতিচ্ছবি স্কেন কৰক</translation> <translation id="6537613839935722475">নামত আখৰ, সংখ্যা আৰু হাইফেন (-) থাকিব পাৰে</translation> <translation id="6537880577641744343">কামাণ্ডাৰ</translation> +<translation id="6538098297809675636">আসোঁৱাহ চিনাক্তকৰণ ক'ড</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />টোকা:<ph name="END_BOLD" /> আপুনি কৰি থকা কার্যৰ বিষয়ে জানিলেহে বা আপোনাক এয়া সক্ষম কৰিবলৈ ক’লেহে সক্ষম কৰক, কাৰণ ডেটা সংগ্ৰহে কার্যদক্ষতা হ্ৰাস কৰিব পাৰে।</translation> <translation id="6541638731489116978">ছাইটসমূহে আপোনাৰ ম'শ্বন ছেন্সৰসমূহ এক্সেছ কৰাত অৱৰোধ কৰা হৈছে।</translation> <translation id="6545665334409411530">পুনৰাবৃত্তিৰ হাৰ</translation> @@ -6000,6 +6007,7 @@ <translation id="7904526211178107182">আপোনাৰ নেটৱর্কৰ অন্য ডিভাইচসমূহত Linux প’ৰ্টসমূহ উপলব্ধ কৰাওক।</translation> <translation id="7907837847548254634">ফ’কাছ কৰা বস্তুটোত এটা তাৎক্ষণিক হাইলাইট দেখুৱাওক</translation> <translation id="7908378463497120834">ক্ষমা কৰিব, আপোনাৰ বাহ্যিক ষ্ট'ৰেজ ডিভাইচৰ অতি কমেও এটা পাৰ্টিশ্বন মাউণ্ট কৰিব পৰা নগ'ল।</translation> +<translation id="7909324225945368569">আপোনাৰ প্ৰ’ফাইলটোৰ নতুন নাম দিয়ক</translation> <translation id="7909969815743704077">ইনক’গনিট’ ম’ডত ডাউনল’ড কৰা হৈছে</translation> <translation id="7910768399700579500">&নতুন ফ’ল্ডাৰ</translation> <translation id="7911118814695487383">Linux</translation> @@ -6615,6 +6623,7 @@ <translation id="8642900771896232685">২ছেকেণ্ড</translation> <translation id="8642947597466641025">পাঠৰ আকাৰ ডাঙৰ কৰক</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> বিপজ্জনক হ’ব পাৰে। স্কেন কৰিবলৈ Googleৰ সুৰক্ষা সম্পৰ্কীয় উন্নত সুবিধাটোলৈ পঠিয়াবনে?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{কোনো কুকি নাই}=1{১ টা অৱৰোধ কৰা হ’ল}one{# টা অৱৰোধ কৰা হ’ল}other{# টা অৱৰোধ কৰা হ’ল}}</translation> <translation id="8644655801811752511">এই সুৰক্ষা চাবিটো ৰিছেট কৰিব নোৱাৰি। চাবিটো ভৰোৱাৰ লগে লগে সেইটো ৰিছেট কৰি চাওক।</translation> <translation id="8645354835496065562">ছেন্সৰৰ এক্সেছ প্ৰদান কৰা কার্য অব্যাহত ৰাখক</translation> <translation id="8645920082661222035">বিপজ্জনক ঘটনাবোৰৰ সম্পর্কে অনুমান কৰে আৰু সেইবোৰ ঘটাৰ পূর্বে আপোনাক সকীয়নি দিয়ে</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 2197a6b..12df1248 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">По подразбиране</translation> <translation id="1252987234827889034">Възникна грешка в потребителския профил</translation> <translation id="1254593899333212300">Директна връзка с интернет</translation> +<translation id="1257553931232494454">нива на промяна на мащаба</translation> <translation id="1259152067760398571">Проверката на безопасността бе изпълнена вчера</translation> <translation id="1260451001046713751">Разрешаване винаги на изскачащите прозорци и пренасочванията от <ph name="HOST" /></translation> <translation id="1261380933454402672">Умерено</translation> @@ -668,6 +669,7 @@ <translation id="1729533290416704613">То също контролира коя страница се показва при търсене от полето за всичко.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />За да премахнете приложения, отворете „Настройки“ > „Google Play Магазин“ > „Управление на предпочитанията за Android“ > „Приложения“ или мениджъра на приложенията. Докоснете това, което искате да деинсталирате (може да се наложи да прекарате пръст надясно или наляво, за да го намерите). Докоснете „Деинсталиране“ или „Деактивиране“.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Заявката се изпраща...</translation> +<translation id="1733064249834771892">шрифтове</translation> <translation id="1733383495376208985">Шифроване на синхронизираните данни със собствения ви <ph name="BEGIN_LINK" />пропуск за синхронизиране<ph name="END_LINK" />. Това не включва начините на плащане и адресите от Google Pay.</translation> <translation id="1734212868489994726">Светлосиньо</translation> <translation id="1734230530703461088">Времето изтече, преди разширенията да се заредят. Моля, обърнете се към администратора си.</translation> @@ -755,6 +757,7 @@ <translation id="1818913467757368489">Качването на регистрационния файл е в ход.</translation> <translation id="1819721979226826163">Докоснете „Известия за прилож.“ > Услуги за Google Play.</translation> <translation id="1820028137326691631">Въведете паролата, предоставена от администратора</translation> +<translation id="182139138257690338">автоматични изтегляния</translation> <translation id="1822140782238030981">Вече сте потребител на Chrome? Влезте в профила си</translation> <translation id="18245044880483936">Данните в резервното копие не се отчитат в квотата на хранилището на детето ви в Диск.</translation> <translation id="1825565032302550710">Портът трябва да е число между 1024 и 65535</translation> @@ -1195,6 +1198,7 @@ <translation id="2326931316514688470">&Презареждане на приложението</translation> <translation id="2327492829706409234">Активиране на приложението</translation> <translation id="2328561734797404498">Рестартирайте устройството си, за да използвате <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">разположение на прозорците</translation> <translation id="2329597144923131178">Влезте в профила си и получете своите отметки, история, пароли и др. настройки на всички у-ва.</translation> <translation id="2332131598580221120">Преглед в магазина</translation> <translation id="2332192922827071008">Отваряне на предпочитанията</translation> @@ -1707,6 +1711,7 @@ <translation id="2894757982205307093">Нов раздел в групата</translation> <translation id="289644616180464099">SIM картата е заключена</translation> <translation id="289695669188700754">Идентификатор (ИД) на ключ: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Тази персонализирана настройка ще бъде премахната, когато затворите всички прозорци в режим „инкогнито“</translation> <translation id="2897878306272793870">Наистина ли искате да отворите <ph name="TAB_COUNT" /> раздела?</translation> <translation id="290105521672621980">Файлът използва неподдържани функции</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> не можа да установи връзка с този принтер. Уверете се, че той е включен, и опитайте отново.</translation> @@ -1796,6 +1801,7 @@ <translation id="2996286169319737844">Данните са шифровани с пропуска ви за синхронизиране. Това не включва начините на плащане и адресите от Google Pay.</translation> <translation id="2996722619877761919">Обръщане по дългата страна</translation> <translation id="3000236644796679448">Сайтовете могат да извеждат запитвания за използване на микрофона ви (препоръчително)</translation> +<translation id="3000378525979847272">Разрешени са „<ph name="PERMISSION_1" />“ и „<ph name="PERMISSION_2" />“</translation> <translation id="3000461861112256445">Монозвук</translation> <translation id="3001144475369593262">Профили на деца</translation> <translation id="3003144360685731741">Предпочитани мрежи</translation> @@ -2055,6 +2061,7 @@ <translation id="3305661444342691068">Отваряне на визуализация на PDF</translation> <translation id="3308116878371095290">Задаването на „бисквитки“ от тази страница е предотвратено.</translation> <translation id="3308134619352333507">Скриване на бутона</translation> +<translation id="3308738399950580893">реклами</translation> <translation id="3308852433423051161">Google Асистент се зарежда...</translation> <translation id="3309330461362844500">Идент. № на профила на сертификата</translation> <translation id="3311445899360743395">Данните, свързани с това приложение, може да бъдат премахнати от устройството.</translation> @@ -2115,6 +2122,7 @@ <translation id="3388788256054548012">Този файл е шифрован. Помолете собственика му да го разшифрова.</translation> <translation id="3390013585654699824">Подробности за приложението</translation> <translation id="3390741581549395454">Успешно бе създадено резервно копие на приложенията и файловете под Linux. Надстройването ще започне след малко.</translation> +<translation id="3391482648489541560">редактиране на файлове</translation> <translation id="339178315942519818">Преглеждайте на устройството си <ph name="DEVICE_TYPE" /> известията от приложенията си за чат</translation> <translation id="3396800784455899911">С кликването си върху бутона „Приемам и продължавам“ приемате описаното по-горе обработване за тези услуги на Google.</translation> <translation id="3399432415385675819">Известията ще бъдат деактивирани</translation> @@ -2892,6 +2900,7 @@ <translation id="425573743389990240">Скорост на разреждане на батерията във ватове (отрицателна стойност означава, че батерията се зарежда)</translation> <translation id="4256316378292851214">&Запазване на видеоклипа като...</translation> <translation id="4258348331913189841">Файлови системи</translation> +<translation id="4259381619085088639">присъствието ви</translation> <translation id="4259388776256904261">Това може да отнеме известно време</translation> <translation id="4260182282978351200">Файлът <ph name="FILE_NAME" /> може да е опасен. Искате ли да го изпратите до програмата на Google за разширена защита, за да бъде сканиран? Натиснете Shift + F6, за да преминете към лентата на изтеглянето.</translation> <translation id="4263223596040212967">Проверете клавиатурната си подредба и опитайте отново.</translation> @@ -2928,6 +2937,7 @@ <translation id="4303079906735388947">Настройте нов ПИН код за ключа си за сигурност</translation> <translation id="4305402730127028764">Копиране на <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Приложенията трябва да се показват с тип съдържание „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">буферна памет</translation> <translation id="4307992518367153382">Основни положения</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> КБ (<ph name="NUM_KILOBYTES_LIVE" /> КБ активни)</translation> <translation id="4310139701823742692">Файловият формат е неправилен. Проверете PPD файла и опитайте отново.</translation> @@ -3015,6 +3025,7 @@ <translation id="4412698727486357573">Помощен център</translation> <translation id="44141919652824029">Да се разреши ли на <ph name="APP_NAME" /> да получи списъка със свързани USB устройства?</translation> <translation id="4414232939543644979">Нов &прозорец в режим „инкогнито“</translation> +<translation id="4414515549596849729">„бисквитки“ и данни за сайтове</translation> <translation id="4415213869328311284">Вече можете да използвате <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Няма намерени устройства. Отваряне на статия в Помощния център в нов раздел.</translation> <translation id="4415276339145661267">Управление на профила ви в Google</translation> @@ -3086,6 +3097,7 @@ <translation id="4493468155686877504">Препоръчителен размер (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Да не се показва на тази страница</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> претърпя срив</translation> +<translation id="4500587658229086076">незащитено съдържание</translation> <translation id="450099669180426158">Икона на удивителен знак</translation> <translation id="4501530680793980440">Потвърждаване на премахването</translation> <translation id="4502423230170890588">Премахване от това устройство</translation> @@ -3126,6 +3138,7 @@ <translation id="4538684596480161368">Приставките извън тестова среда да се блокират винаги за <ph name="HOST" /></translation> <translation id="4538792345715658285">Инсталирано от корпоративно правило.</translation> <translation id="4541662893742891060">Не може да се установи връзка с този потребителски профил. За техническа поддръжка се обърнете към оператора си.</translation> +<translation id="4541810033354695636">обогатена реалност</translation> <translation id="4542520061254486227">Четене на данните ви от <ph name="WEBSITE_1" /> и <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Диспечер на сертификатите</translation> <translation id="4544174279960331769">Стандартен син аватар</translation> @@ -3598,6 +3611,7 @@ <translation id="5112577000029535889">&Инструменти за програмисти</translation> <translation id="5113739826273394829">Ако кликнете върху тази икона, ще заключите ръчно този <ph name="DEVICE_TYPE" />. За да влезете след това, ще трябва да въведете паролата си.</translation> <translation id="51143538739122961">Поставете ключа си за сигурност и го докоснете</translation> +<translation id="5114987907971894280">виртуална реалност</translation> <translation id="5115309401544567011">Моля, включете устройството си <ph name="DEVICE_TYPE" /> в източник на захранване.</translation> <translation id="5115338116365931134">Единичен вход за достъп</translation> <translation id="5116628073786783676">&Запазване на аудиоклипа като...</translation> @@ -3897,6 +3911,7 @@ <translation id="5464632865477611176">Стартиране този път</translation> <translation id="5464660706533281090">Тази настройка не може да бъде променена от дете.</translation> <translation id="5466374726908360271">Пост&авяне и търсене на „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Блокирани са „<ph name="PERMISSION_1" />“ и „<ph name="PERMISSION_2" />“</translation> <translation id="5468119583641912100">Сайтовете могат да извеждат запитвания за възпроизвеждане на защитено съдържание (препоръчително)</translation> <translation id="5468173180030470402">Търсят се споделени хранилища</translation> <translation id="5469852975082458401">Можете да навигирате в страниците с помощта на текстов курсор. Натиснете F7 за изключване на функцията.</translation> @@ -4189,6 +4204,7 @@ <translation id="5794786537412027208">Затваряне на всички приложения в Chrome</translation> <translation id="5797070761912323120">Възможно е да използваме историята ви, за да персонализираме търсенето, рекламите и други услуги на Google</translation> <translation id="5798301976526354562">Размер на текста (важи и за „Надписи на живо“)</translation> +<translation id="579907812742603813">защитено съдържание</translation> <translation id="579915268381781820">Ключът за сигурност бе премахнат.</translation> <translation id="5799508265798272974">Виртуална машина с Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Целевият файл е бил скъсен или премахнат след последното изтегляне.</translation> @@ -4262,6 +4278,7 @@ <translation id="5877064549588274448">Каналът бе променен. Рестартирайте устройството си, за да се приложат промените.</translation> <translation id="5877584842898320529">Избраният принтер не е налице или не е инсталиран правилно.<ph name="BR" /> Проверете го или опитайте да изберете друг.</translation> <translation id="5882919346125742463">Известни мрежи</translation> +<translation id="5883356647197510494">Автоматично са блокирани „<ph name="PERMISSION_1" />“ и „<ph name="PERMISSION_2" />“</translation> <translation id="5884474295213649357">Този раздел е свързан с USB устройство.</translation> <translation id="5886009770935151472">Пръст 1</translation> <translation id="5889282057229379085">Максимален брой междинни сертифициращи органи: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4761,6 +4778,7 @@ <translation id="6460601847208524483">Търсене на следващото</translation> <translation id="6461170143930046705">Търсят се мрежи...</translation> <translation id="6463795194797719782">&Редактиране</translation> +<translation id="6464094930452079790">изображения</translation> <translation id="6464825623202322042">Това устройство</translation> <translation id="6465841119675156448">Без интернет</translation> <translation id="6466988389784393586">&Отваряне на всички отметки</translation> @@ -4784,6 +4802,7 @@ <translation id="6491376743066338510">Упълномощаването не бе успешно</translation> <translation id="6494327278868541139">Показване на подробности за подобрената защита</translation> <translation id="6494445798847293442">Не е сертифициращ орган</translation> +<translation id="6494750904506170417">изскачащи прозорци и пренасочвания</translation> <translation id="6494974875566443634">Персонализиране</translation> <translation id="6495925982925244349">Мрежа <ph name="NETWORK_INDEX" /> от <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, сила на сигнала <ph name="SIGNAL_STRENGTH" />%, управлява се от администратора ви, подробности</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{В тези данни има деликатно или опасно съдържание}=1{В този файл има деликатно или опасно съдържание}other{В тези файлове има деликатно или опасно съдържание}}</translation> @@ -4924,6 +4943,7 @@ <translation id="6657585470893396449">Парола</translation> <translation id="6659213950629089752">Мащабът на тази страница бе променен от разширението <ph name="NAME" /></translation> <translation id="6659594942844771486">Раздел</translation> +<translation id="6660413144148052430">местоположение</translation> <translation id="666099631117081440">Сървъри за печат</translation> <translation id="6663190258859265334">Използвайте функцията Powerwash на <ph name="DEVICE_TYPE" />, за да възстановите предишната версия.</translation> <translation id="6664237456442406323">За съжаление компютърът ви е конфигуриран с неправилно образуван идентификационен номер на хардуера. Това не позволява на Chrome OS да се актуализира с най-новите корекции за сигурност и машината ви <ph name="BEGIN_BOLD" />може да е уязвима към злонамерени атаки<ph name="END_BOLD" />.</translation> @@ -4978,6 +4998,7 @@ <translation id="672609503628871915">Вижте новите неща</translation> <translation id="67269783048918309">Изпращане на данни за употребата и диагностиката. Понастоящем това устройство автоматично изпраща до Google диагностична информация и данни за употребата на устройството и приложенията. Тази информация няма да се използва за идентифициране на детето ви, а ще послужи за подобряване на стабилността на системата и приложенията и др. Някои обобщени данни също така ще подпомогнат приложенията и партньорите на Google, напр. програмистите за Android. Тази <ph name="BEGIN_LINK1" />настройка<ph name="END_LINK1" /> е наложена от собственика. Ако настройката „Допълнителна активност в мрежата и приложенията“ е включена за детето ви, тези данни може да се запазват в профила му в Google. <ph name="BEGIN_LINK2" />Научете повече<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Свързано, <ph name="BATTERY_PERCENTAGE" />% батерия</translation> +<translation id="6732087373923685049">камера</translation> <translation id="6732801395666424405">Сертификатите не са заредени</translation> <translation id="6732900235521116609">Прекият път не може да се премахне</translation> <translation id="6734468588183300211">Докато сте в режим „инкогнито“, сайтовете не могат да използват „бисквитките“ ви, за да следят активността ви при сърфиране в различни сайтове, например за да персонализират реклами. Функциите в някои от тях може да не работят правилно.</translation> @@ -5052,6 +5073,7 @@ <translation id="6817174620439930047">Получаване на запитване, когато сайт иска да използва специални системни съобщения за достъп до MIDI устройствата (препоръчително)</translation> <translation id="6818198425579322765">Изходен език на страницата</translation> <translation id="6818802132960437751">Вградена защита от вируси</translation> +<translation id="6820143000046097424">серийни портове</translation> <translation id="682123305478866682">Предаване на работния плот</translation> <translation id="6823174134746916417">Кликване с докосване на сензорния панел</translation> <translation id="6824564591481349393">Копиране на име&йл адреса</translation> @@ -5485,6 +5507,7 @@ <translation id="730515362922783851">Обмен на данни с всяко устройство в локалната мрежа или интернет</translation> <translation id="7306521477691455105">Отворете настройките, за да свържете <ph name="USB_DEVICE_NAME" /> с(ъс) <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">На пауза</translation> +<translation id="7308436126008021607">синхронизиране на заден план</translation> <translation id="7309257895202129721">Показване на &контролите</translation> <translation id="7310598146671372464">Влизането в профила не бе успешно. Сървърът не поддържа посочените типове шифроване в Kerberos. Моля, обърнете се към администратора си.</translation> <translation id="7320213904474460808">Мрежа по подразбиране</translation> @@ -5626,6 +5649,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Изисква се незабавно връщане}other{Върнете <ph name="DEVICE_TYPE" /> в рамките на {NUM_DAYS} дни}}</translation> <translation id="7475671414023905704">URL адрес за изгубена парола на Netscape</translation> <translation id="7476454130948140105">Батерията е твърде изтощена (<ph name="BATTERY_PERCENT" />%) за стартиране на актуализацията</translation> +<translation id="7476989672001283112">Автоматично са блокирани „<ph name="PERMISSION" />“ и още <ph name="COUNT" /></translation> <translation id="7477793887173910789">Управление на музиката, видеоклиповете и др.</translation> <translation id="7478485216301680444">Павилионното приложение не можа да бъде инсталирано.</translation> <translation id="7478623944308207463">Приложенията и настройките ви ще се синхронизират с всички устройства с Chrome OS, в които сте влезли в профила си в Google. За да намерите опциите за синхронизиране на браузъра, отворете <ph name="LINK_BEGIN" />настройките на Chrome<ph name="LINK_END" />.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Деинсталиране на <ph name="APP" />...</translation> <translation id="8289128870594824098">Размер на диска</translation> <translation id="8293206222192510085">Добавяне на отметка</translation> +<translation id="829335040383910391">звук</translation> <translation id="8294431847097064396">Източник</translation> <translation id="8298429963694909221">Вече можете да получавате на устройството си <ph name="DEVICE_TYPE" /> известия от телефона си. Когато ги отхвърлите на своя <ph name="DEVICE_TYPE" />, ще бъдат отхвърлени и на телефона ви. Проверете дали той е наблизо и дали Bluetooth и функцията му за Wi-Fi са включени.</translation> <translation id="8299319456683969623">Понастоящем сте офлайн.</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Добавяне на мрежова връзка</translation> <translation id="8319414634934645341">Удължена употреба на ключа</translation> <translation id="8320459152843401447">Целият ви екран</translation> +<translation id="8321476692217554900">известия</translation> <translation id="8321837372750396788">Това устройство <ph name="DEVICE_TYPE" /> ще се управлява от <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Достъпът на тази страница до микрофона ви е блокиран.</translation> <translation id="8323167517179506834">Въведете URL адрес</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Наскоро от Google Диск</translation> <translation id="8407199357649073301">Ниво на запис в регистрационния файл:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> мрежа – установява се връзка</translation> +<translation id="8409413588194360210">приложения за обработване на плащания</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Разрешени са „<ph name="PERMISSION" />“ и още <ph name="COUNT" /></translation> <translation id="8413385045638830869">Първо ще се извежда запитване (препоръчително)</translation> <translation id="8417548266957501132">Парола на родител</translation> <translation id="8418445294933751433">&Показване като раздел</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> или <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Цветна температура за функцията „Нощно осветление“</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> иска да <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> и др.</translation> +<translation id="865032292777205197">сензори за движение</translation> <translation id="8650543407998814195">Можете да премахнете стария си потребителски профил, въпреки че вече нямате достъп до него.</translation> <translation id="8651585100578802546">Принудително презареждане на тази страница</translation> <translation id="8652400352452647993">Грешка при пакетиране на разширението</translation> @@ -6785,6 +6814,7 @@ <translation id="8785622406424941542">Писалка</translation> <translation id="8787254343425541995">Разрешаване на прокси сървъри за споделените мрежи</translation> <translation id="8791534160414513928">Изпращане на заявка „Do Not Track“ с трафика ви на сърфиране</translation> +<translation id="8792626944327216835">микрофон</translation> <translation id="879413103056696865">Докато точката за достъп е включена, устройството ви <ph name="PHONE_NAME" /> ще:</translation> <translation id="8795916974678578410">Нов прозорец</translation> <translation id="8797459392481275117">Този сайт да не се превежда никога</translation> @@ -6824,6 +6854,7 @@ <translation id="8823559166155093873">Блокиране на „бисквитките“</translation> <translation id="8823704566850948458">Предложение за парола...</translation> <translation id="8824701697284169214">Добавяне на &страница...</translation> +<translation id="8827125715368568315">Блокирани са „<ph name="PERMISSION" />“ и още <ph name="COUNT" /></translation> <translation id="8827289157496676362">Фиксиране на разширението</translation> <translation id="8827752199525959199">Още действия, парола за <ph name="USERNAME" /> в домейна <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Забраняване на сайтовете да откриват устройства с Bluetooth в близост</translation> @@ -6924,6 +6955,7 @@ <translation id="8932894639908691771">Опции за функцията за достъп с превключване</translation> <translation id="8933960630081805351">&Показване във Finder</translation> <translation id="8934732568177537184">Напред</translation> +<translation id="8938306522009698937">манипулатори</translation> <translation id="8938800817013097409">Устройство с USB-C (десният порт на гърба)</translation> <translation id="8940081510938872932">Компютърът ви извършва твърде много неща в момента. Опитайте отново по-късно.</translation> <translation id="8941173171815156065">Отмяна на разрешението „<ph name="PERMISSION" />“</translation> @@ -7228,6 +7260,7 @@ <translation id="987264212798334818">Общи</translation> <translation id="987897973846887088">Няма налични изображения</translation> <translation id="988978206646512040">Трябва да се въведе пропуск</translation> +<translation id="991413375315957741">сензори за движение или светлина</translation> <translation id="992032470292211616">Разширенията, приложенията и темите могат да навредят на устройството ви. Наистина ли искате да продължите?</translation> <translation id="992256792861109788">розово</translation> <translation id="992592832486024913">Деактивиране на ChromeVox (обратна връзка с говор)</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 5405d772..17efe97 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Zadano</translation> <translation id="1252987234827889034">Došlo je do greške na profilu</translation> <translation id="1254593899333212300">Direktna internetska veza</translation> +<translation id="1257553931232494454">nivoi zumiranja</translation> <translation id="1259152067760398571">Sigurnosna provjera je izvršena jučer</translation> <translation id="1260451001046713751">Uvijek dozvoli skočne prozore i preusmjeravanja s hosta <ph name="HOST" /></translation> <translation id="1261380933454402672">Srednje</translation> @@ -673,6 +674,7 @@ <translation id="1729533290416704613">Također kontrolira koja stranica se prikazuje prilikom pretraživanja iz višenamjenskog okvira.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Da uklonite aplikacije, idite u Postavke > Google Play trgovina > Upravljanje postavkama za Android > Aplikacije ili Upravitelj aplikacija. Zatim dodirnite aplikaciju koju želite deinstalirati (možda ćete morati prevući desno ili lijevo kako biste pronašli aplikaciju). Zatim dodirnite Deinstaliraj ili Onemogući.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Slanje zahtjeva...</translation> +<translation id="1733064249834771892">fontovi</translation> <translation id="1733383495376208985">Šifriraj sinhronizirane podatke svojim <ph name="BEGIN_LINK" />pristupnim izrazom za sinhronizaciju<ph name="END_LINK" />. Ovo ne obuhvata načine plaćanja i adrese iz Google Paya.</translation> <translation id="1734212868489994726">Svijetloplava</translation> <translation id="1734230530703461088">Učitavanje ekstenzija unutar vremenskog ograničenja nije uspjelo. Kontaktirajte administratora.</translation> @@ -760,6 +762,7 @@ <translation id="1818913467757368489">Otpremanje zapisnika je u toku.</translation> <translation id="1819721979226826163">Dodirnite Obavještenja iz aplikacija > Google Play usluge.</translation> <translation id="1820028137326691631">Unesite lozinku koju vam je dao administrator</translation> +<translation id="182139138257690338">automatska preuzimanja</translation> <translation id="1822140782238030981">Postojeći ste korisnik Chromea? Prijava</translation> <translation id="18245044880483936">Podaci sigurnosne kopije se neće računati u kvotu pohrane na Disku vašeg djeteta.</translation> <translation id="1825565032302550710">Priključak mora biti između 1024 i 65535</translation> @@ -1200,6 +1203,7 @@ <translation id="2326931316514688470">&Ponovo učitaj aplikaciju</translation> <translation id="2327492829706409234">Omogući aplikaciju</translation> <translation id="2328561734797404498">Ponovo pokrenite uređaj da koristite aplikaciju <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">postavljanje prozora</translation> <translation id="2329597144923131178">Prijavite se da biste imali svoje oznake, povijest, zaporke i druge postavke na svim svojim uređajima.</translation> <translation id="2332131598580221120">Prikaži u trgovini</translation> <translation id="2332192922827071008">Otvori preference</translation> @@ -1712,6 +1716,7 @@ <translation id="2894757982205307093">Nova kartica u grupi</translation> <translation id="289644616180464099">SIM kartica je zaključana</translation> <translation id="289695669188700754">ID ključa: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ova prilagođena postavka će se ukloniti kada zatvorite sve anonimne prozore.</translation> <translation id="2897878306272793870">Jeste li sigurni da želite otvoriti sljedeći broj kartica: <ph name="TAB_COUNT" />?</translation> <translation id="290105521672621980">Fajl koristi nepodržane funkcije</translation> <translation id="2902127500170292085">Ekstenzija <ph name="EXTENSION_NAME" /> nije uspostavila komunikaciju s ovim štampačem. Provjerite je li štampač priključen i pokušajte ponovo.</translation> @@ -1801,6 +1806,7 @@ <translation id="2996286169319737844">Podaci su šifrirani vašom lozinkom za prolaz za sinhroniziranje. Ovo ne obuhvata načine plaćanja i adrese iz Google Paya.</translation> <translation id="2996722619877761919">Obrni po dužoj strani</translation> <translation id="3000236644796679448">Web lokacije mogu tražiti da koriste mikrofon (preporučeno)</translation> +<translation id="3000378525979847272">Dozvoljeno: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Mono zvuk</translation> <translation id="3001144475369593262">Računi djece</translation> <translation id="3003144360685731741">Preferirane mreže</translation> @@ -2060,6 +2066,7 @@ <translation id="3305661444342691068">Otvori PDF u pregledu</translation> <translation id="3308116878371095290">Spriječeno je postavljanje kolačića ove strance.</translation> <translation id="3308134619352333507">Dugme za sakrivanje</translation> +<translation id="3308738399950580893">oglasi</translation> <translation id="3308852433423051161">Učitavanje Google Asistenta...</translation> <translation id="3309330461362844500">ID profila certifikata</translation> <translation id="3311445899360743395">Podaci koji su povezani s ovom aplikacijom se mogu ukloniti s ovog uređaja.</translation> @@ -2120,6 +2127,7 @@ <translation id="3388788256054548012">Ovaj fajl je šifriran. Zatražite od vlasnika da ga dešifrira.</translation> <translation id="3390013585654699824">Detalji o aplikaciji</translation> <translation id="3390741581549395454">Sigurnosna kopija za Linux aplikacije i fajlove je uspješno kreirana. Nadogradnja će uskoro početi.</translation> +<translation id="3391482648489541560">uređivanje fajla</translation> <translation id="339178315942519818">Pogledajte obavještenja iz aplikacija za chatanje na uređaju <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Klikom na gumb "Prihvati i nastavi" prihvaćate prethodno opisanu obradu za ove Googleove usluge.</translation> <translation id="3399432415385675819">Obavještenja će biti onemogućena</translation> @@ -2896,6 +2904,7 @@ <translation id="425573743389990240">Stopa pražnjenja baterije u vatima (negativna vrijednost znači da se baterija puni)</translation> <translation id="4256316378292851214">Sač&uvaj videozapis kao…</translation> <translation id="4258348331913189841">Sistemi fajlova</translation> +<translation id="4259381619085088639">vaša prisutnost</translation> <translation id="4259388776256904261">Ovo može potrajati</translation> <translation id="4260182282978351200">Fajl <ph name="FILE_NAME" /> može biti opasan. Poslati Googleovoj Naprednoj zaštiti radi skeniranja? Pritisnite Shift + F6 da odete u područje trake preuzetih fajlova.</translation> <translation id="4263223596040212967">Provjerite raspored tastature i pokušajte ponovo.</translation> @@ -2932,6 +2941,7 @@ <translation id="4303079906735388947">Postavite novi PIN za sigurnosni ključ</translation> <translation id="4305402730127028764">Kopiraj na uređaj <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikacije moraju dobiti vrstu sadržaja "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">međumemorija</translation> <translation id="4307992518367153382">Osnove</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K uživo)</translation> <translation id="4310139701823742692">Fajl je u pogrešnom formatu. Provjerite PPD fajl i pokušajte ponovo.</translation> @@ -3019,6 +3029,7 @@ <translation id="4412698727486357573">Centar za pomoć</translation> <translation id="44141919652824029">Dozvoliti aplikaciji "<ph name="APP_NAME" />" da preuzme listu vaših priključenih USB uređaja?</translation> <translation id="4414232939543644979">Novi &anonimni prozor</translation> +<translation id="4414515549596849729">kolačići i podaci web lokacije</translation> <translation id="4415213869328311284">Spremni ste da počnete koristiti svoj uređaj <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Nije pronađen nijedan uređaj Otvorite članak centra za pomoć u novoj kartici.</translation> <translation id="4415276339145661267">Upravljajte Google računom</translation> @@ -3090,6 +3101,7 @@ <translation id="4493468155686877504">Preporučeno (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ne prikazuj na ovoj stranici</translation> <translation id="4500114933761911433">Došlo je do pada dodatka <ph name="PLUGIN_NAME" /></translation> +<translation id="4500587658229086076">nesiguran sadržaj</translation> <translation id="450099669180426158">Ikona uzvičnika</translation> <translation id="4501530680793980440">Potvrdite uklanjanje</translation> <translation id="4502423230170890588">Ukloni s ovog uređaja</translation> @@ -3130,6 +3142,7 @@ <translation id="4538684596480161368">Uvijek blokiraj dodatke koji nisu u izoliranom okruženju na <ph name="HOST" /></translation> <translation id="4538792345715658285">Instalirano prema pravilima preduzeća.</translation> <translation id="4541662893742891060">Nije moguće povezivanje s ovim profilom. Za tehničku podršku kontaktirajte mobilnog operatera.</translation> +<translation id="4541810033354695636">proširena realnost</translation> <translation id="4542520061254486227">Očitavati vaše podatke na web lokaciji <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Upravitelj potvrdama</translation> <translation id="4544174279960331769">Zadani plavi avatar</translation> @@ -3602,6 +3615,7 @@ <translation id="5112577000029535889">&Alati za programere</translation> <translation id="5113739826273394829">Ako kliknete ovu ikonicu, ručno ćete zaključati uređaj <ph name="DEVICE_TYPE" />. Sljedeći put ćete morati upisati lozinku kako biste ušli.</translation> <translation id="51143538739122961">Umetnite sigurnosni ključ i dodirnite ga</translation> +<translation id="5114987907971894280">virtuelna realnost</translation> <translation id="5115309401544567011">Priključite <ph name="DEVICE_TYPE" /> u izvor napajanja.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Sač&uvaj zvuk kao…</translation> @@ -3901,6 +3915,7 @@ <translation id="5464632865477611176">Pokreni ovaj put</translation> <translation id="5464660706533281090">Dijete ne može promijeniti ovu postavku.</translation> <translation id="5466374726908360271">Za&lijepi i pretraži pojam “<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">Blokirano: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Web lokacije mogu tražiti da reproduciraju zaštićeni sadržaj (preporučeno)</translation> <translation id="5468173180030470402">Traženje dijeljenja fajlova</translation> <translation id="5469852975082458401">Možete navigirati stranicama pomoću kursora za tekst. Pritisnite F7 da isključite.</translation> @@ -4192,6 +4207,7 @@ <translation id="5794786537412027208">Napusti sve Chromeove aplikacije</translation> <translation id="5797070761912323120">Google može koristiti vašu historiju za personalizaciju Pretraživanja, oglasa i drugih Googleovih usluga</translation> <translation id="5798301976526354562">Veličina teksta (primjenjuje se i na Automatske titlove)</translation> +<translation id="579907812742603813">zaštićeni sadržaj</translation> <translation id="579915268381781820">Vaš sigurnosni ključ je uklonjen.</translation> <translation id="5799508265798272974">Linux virtuelni uređaj: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Odredišna datoteka skraćena je ili uklonjena nakon posljednjeg preuzimanja.</translation> @@ -4265,6 +4281,7 @@ <translation id="5877064549588274448">Kanal je promijenjen. Ponovo pokrenite uređaj za primjenu izmjena.</translation> <translation id="5877584842898320529">Odabrani štampač nije dostupan ili nije ispravno instaliran. <ph name="BR" /> Provjerite štampač ili odaberite drugi.</translation> <translation id="5882919346125742463">Poznate mreže</translation> +<translation id="5883356647197510494">Automatski je blokirano: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Ova kartica je povezana na USB uređaj.</translation> <translation id="5886009770935151472">1. prst</translation> <translation id="5889282057229379085">Maksimalni broj posredničkih CA-ova: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4764,6 +4781,7 @@ <translation id="6460601847208524483">Pronađi sljedeće</translation> <translation id="6461170143930046705">Pretraživanje mreža...</translation> <translation id="6463795194797719782">&Uredi</translation> +<translation id="6464094930452079790">slike</translation> <translation id="6464825623202322042">Ovaj uređaj</translation> <translation id="6465841119675156448">Bez interneta</translation> <translation id="6466988389784393586">&Otvori sve oznake</translation> @@ -4787,6 +4805,7 @@ <translation id="6491376743066338510">Autorizacija nije uspjela</translation> <translation id="6494327278868541139">Prikaži detalje o poboljšanoj zaštiti</translation> <translation id="6494445798847293442">Nije tijelo za izdavanje potvrda</translation> +<translation id="6494750904506170417">skočni prozori i preusmjeravanja</translation> <translation id="6494974875566443634">Prilagođavanje</translation> <translation id="6495925982925244349">Mreža <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja vaš administrator, detalji</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{U ovim podacima postoji osjetljiv ili opasan sadržaj}=1{U ovom fajlu postoji osjetljiv ili opasan sadržaj}one{U ovim fajlovima postoji osjetljiv ili opasan sadržaj}few{U ovim fajlovima postoji osjetljiv ili opasan sadržaj}other{U ovim fajlovima postoji osjetljiv ili opasan sadržaj}}</translation> @@ -4927,6 +4946,7 @@ <translation id="6657585470893396449">Lozinka</translation> <translation id="6659213950629089752">Stranicu je zumiralo proširenje "<ph name="NAME" />"</translation> <translation id="6659594942844771486">Kartica</translation> +<translation id="6660413144148052430">lokacija</translation> <translation id="666099631117081440">Serveri za štampanje</translation> <translation id="6663190258859265334">Pokrenite Powerwash na uređaju <ph name="DEVICE_TYPE" /> i vratite ga na prethodnu verziju.</translation> <translation id="6664237456442406323">Nažalost, vaš računar je konfiguriran s neispravnim ID-om hardvera. Ovim se sprečava da se Chrome OS ažurira najnovijim sigurnosnim ispravkama i vaš računar <ph name="BEGIN_BOLD" />može biti izložen zlonamjernim napadima<ph name="END_BOLD" />.</translation> @@ -4981,6 +5001,7 @@ <translation id="672609503628871915">Pogledajte što je novo</translation> <translation id="67269783048918309">Šaljite podatke o korištenju i dijagnostici. Ovaj uređaj trenutno automatski šalje Googleu podatke o dijagnostici, uređaju i korištenju aplikacija. Ovo se neće koristiti za identifikaciju vašeg djeteta i pomoći će stabilnosti sistema i aplikacije, kao i drugim unapređenjima. Neki zbirni podaci će također pomoći Googleovim aplikacijama i partnerima, kao što su Android programeri. Ovu <ph name="BEGIN_LINK1" />postavku<ph name="END_LINK1" /> je nametnuo vlasnik. Ako je za vaše dijete uključena postavka za dodatnu Aktivnost na webu i u aplikacijama, ovi podaci mogu biti sačuvani na njegovom Google računu. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Povezano, <ph name="BATTERY_PERCENTAGE" />% baterije</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Potvrde nisu učitane</translation> <translation id="6732900235521116609">Nije moguće ukloniti prečicu</translation> <translation id="6734468588183300211">U anonimnom načinu rada web lokacije ne mogu koristiti kolačiće da vide vašu aktivnost pregledanja na različitim web lokacijama, naprimjer, radi prersonaliziranja oglasa. Moguće je da će funkcije na nekim web lokacijama prestati s radom.</translation> @@ -5055,6 +5076,7 @@ <translation id="6817174620439930047">Pitaj kada web lokacija želi koristiti sistemske poruke za pristupanje MIDI uređajima (preporučeno)</translation> <translation id="6818198425579322765">Jezik stranice za prijevod</translation> <translation id="6818802132960437751">Ugrađena zaštita od virusa</translation> +<translation id="6820143000046097424">serijski priključci</translation> <translation id="682123305478866682">Emitirajte radnu površinu</translation> <translation id="6823174134746916417">Dodir za klik dodirne podloge</translation> <translation id="6824564591481349393">Kopiraj adresu &e-pošte</translation> @@ -5488,6 +5510,7 @@ <translation id="730515362922783851">Razmijeniti podatke s bilo kojim uređajem na lokalnoj mreži ili internetu</translation> <translation id="7306521477691455105">Otvorite Postavke da povežete uređaj <ph name="USB_DEVICE_NAME" /> s uređajem <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Pauzirano</translation> +<translation id="7308436126008021607">sinhronizacija u pozadini</translation> <translation id="7309257895202129721">Prikaži &kontrole</translation> <translation id="7310598146671372464">Prijava nije uspjela. Server ne podržava određene vrste Kerberos enkripcije. Kontaktirajte svog administratora.</translation> <translation id="7320213904474460808">Zadana mreža</translation> @@ -5629,6 +5652,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Morate odmah vratiti}one{Vratite <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}few{Vratite <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}other{Vratite <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}}</translation> <translation id="7475671414023905704">URL izgubljene lozinke za Netscape</translation> <translation id="7476454130948140105">Baterija nije dovoljno napunjena za ažuriranje (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Automatski blokirano: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="7477793887173910789">Kontrolirajte muziku, videozapise i drugi sadržaj</translation> <translation id="7478485216301680444">Instaliranje aplikacije za kiosk nije uspjelo.</translation> <translation id="7478623944308207463">Vaše aplikacije i postavke će se sinhronizirati na svim Chrome OS uređajima na kojima ste prijavljeni putem Google računa. Za opcije sinhronizacije preglednika idite na <ph name="LINK_BEGIN" />postavke Chromea<ph name="LINK_END" />.</translation> @@ -6373,6 +6397,7 @@ <translation id="8288032458496410887">Deinstaliranje aplikacije <ph name="APP" />...</translation> <translation id="8289128870594824098">Veličina diska</translation> <translation id="8293206222192510085">Dodavanje oznake</translation> +<translation id="829335040383910391">zvuk</translation> <translation id="8294431847097064396">Izvor</translation> <translation id="8298429963694909221">Sada možete primati obavještenja s telefona na uređaju <ph name="DEVICE_TYPE" />. Odbacivanjem obavještenja na uređaju <ph name="DEVICE_TYPE" /> ćete ih također odbaciti na telefonu. Provjerite nalazi li se telefon u blizini i jesu li Bluetooth i WiFi uključeni.</translation> <translation id="8299319456683969623">Trenutno ste van mreže.</translation> @@ -6391,6 +6416,7 @@ <translation id="8317671367883557781">Dodaj mrežnu vezu</translation> <translation id="8319414634934645341">Produžena upotreba ključa</translation> <translation id="8320459152843401447">Vaš cijeli ekran</translation> +<translation id="8321476692217554900">obavještenja</translation> <translation id="8321837372750396788">Uređajem <ph name="DEVICE_TYPE" /> će upravljati <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Stranici je zabranjen pristup vašem mikrofonu.</translation> <translation id="8323167517179506834">Upišite URL</translation> @@ -6456,7 +6482,9 @@ <translation id="8403562727702715619">Nedavno s Google diska</translation> <translation id="8407199357649073301">Nivo zapisa:</translation> <translation id="8408068190360279472">Mreža <ph name="NETWORK_TYPE" />, povezivanje</translation> +<translation id="8409413588194360210">obrađivači plaćanja</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Dozvoljeno: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation> <translation id="8417548266957501132">Lozinka roditelja</translation> <translation id="8418445294933751433">&Prikaži kao karticu</translation> @@ -6652,6 +6680,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ili <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura boja noćnog svjetla</translation> <translation id="8648544143274677280">Web lokacija <ph name="SITE_NAME" /> želi: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> i drugo</translation> +<translation id="865032292777205197">senzori kretanja</translation> <translation id="8650543407998814195">Iako više ne možete pristupiti svom starom profilu, i dalje ga možete ukloniti.</translation> <translation id="8651585100578802546">Prisilno ponovo učitaj ovu stranicu</translation> <translation id="8652400352452647993">Greška s paketom ekstenzije</translation> @@ -6790,6 +6819,7 @@ <translation id="8785622406424941542">Digitalna olovka</translation> <translation id="8787254343425541995">Dozvoli proksi servere za dijeljene mreže</translation> <translation id="8791534160414513928">Pošalji zahtjev "Bez praćenja" uz saobraćaj pregledanja</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Dok je pristupna tačka uključena, telefon <ph name="PHONE_NAME" /> će:</translation> <translation id="8795916974678578410">Novi prozor</translation> <translation id="8797459392481275117">Nikada ne prevodi ovu web lokaciju</translation> @@ -6829,6 +6859,7 @@ <translation id="8823559166155093873">Blokiraj kolačiće</translation> <translation id="8823704566850948458">Predloži lozinku...</translation> <translation id="8824701697284169214">Dodavanje stra&nice...</translation> +<translation id="8827125715368568315">Blokirano: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="8827289157496676362">Zakačite ekstenziju</translation> <translation id="8827752199525959199">Više radnji, lozinka za <ph name="USERNAME" /> na domeni <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Nemoj dozvoliti nijednoj web lokaciji otkrivanje Bluetooth uređaja u blizini</translation> @@ -6929,6 +6960,7 @@ <translation id="8932894639908691771">Opcije prekidača za pristup</translation> <translation id="8933960630081805351">&Prikaži u Finderu</translation> <translation id="8934732568177537184">Nastavi</translation> +<translation id="8938306522009698937">obrađivači</translation> <translation id="8938800817013097409">USB-C uređaj (desni priključak na stražnjoj strani)</translation> <translation id="8940081510938872932">Vaš računar trenutno obavlja previše poslova. Pokušajte ponovo kasnije.</translation> <translation id="8941173171815156065">Opozovi odobrenje "<ph name="PERMISSION" />"</translation> @@ -7233,6 +7265,7 @@ <translation id="987264212798334818">Opće</translation> <translation id="987897973846887088">Nema dostupnih slika</translation> <translation id="988978206646512040">Polje za pristupni izraz ne može biti prazno</translation> +<translation id="991413375315957741">Senzori kretanja ili svjetla</translation> <translation id="992032470292211616">Ekstenzije, aplikacije i teme mogu oštetiti vaš uređaj. Jeste li sigurni da želite nastaviti?</translation> <translation id="992256792861109788">Ružičasta</translation> <translation id="992592832486024913">Onemogući ChromeVox (izgovorene povratne informacije)</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index b2cf01d..8d0e942 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Predeterminats</translation> <translation id="1252987234827889034">S'ha produït un error amb el perfil</translation> <translation id="1254593899333212300">Connexió directa a Internet</translation> +<translation id="1257553931232494454">nivells de zoom</translation> <translation id="1259152067760398571">Es va executar una comprovació de seguretat ahir</translation> <translation id="1260451001046713751">Permet sempre les finestres emergents i les redireccions iniciades per <ph name="HOST" /></translation> <translation id="1261380933454402672">Moderada</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">També controla la pàgina que es mostra quan feu una cerca des de l'omnibox.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Per suprimir una aplicació, ves a Configuració > Google Play Store > Gestiona les preferències d'Android > Aplicacions o Gestor d'aplicacions. A continuació, toca l'aplicació que vulguis desinstal·lar (és possible que hagis de lliscar cap a la dreta o cap a l'esquerra per trobar-la). Tot seguit, toca Desinstal·la o Desactiva.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Enviant sol·licitud....</translation> +<translation id="1733064249834771892">tipus de lletra</translation> <translation id="1733383495376208985">Encripta les dades sincronitzades amb la teva <ph name="BEGIN_LINK" />frase de contrasenya de sincronització<ph name="END_LINK" />. No inclou les formes de pagament ni les adreces de Google Pay.</translation> <translation id="1734212868489994726">Blau clar</translation> <translation id="1734230530703461088">No s'han pogut carregar les extensions dins del límit de temps. Contacta amb l'administrador.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">S'està penjant el registre.</translation> <translation id="1819721979226826163">Toca Notificacions d'aplicacions > Serveis de Google Play.</translation> <translation id="1820028137326691631">Introdueix la contrasenya proporcionada per l'administrador</translation> +<translation id="182139138257690338">baixades automàtiques</translation> <translation id="1822140782238030981">Ja tens un compte a Chrome? Inicia la sessió</translation> <translation id="18245044880483936">Les dades de la còpia de seguretat no ocupen espai de la quota d'emmagatzematge de Drive del teu fill.</translation> <translation id="1825565032302550710">El port ha d'estar entre 1024 i 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Tornar a carregar l'aplicació</translation> <translation id="2327492829706409234">Activa l'aplicació</translation> <translation id="2328561734797404498">Reinicia el dispositiu per utilitzar <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">col·locació de finestres</translation> <translation id="2329597144923131178">Inicieu la sessió per tenir adreces d'interès, historial, contrasenyes i altres opcions de configuració en tots els dispositius.</translation> <translation id="2332131598580221120">Mostra a la botiga</translation> <translation id="2332192922827071008">Obre les preferències</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">Pestanya nova al grup</translation> <translation id="289644616180464099">La targeta SIM està bloquejada</translation> <translation id="289695669188700754">Identificador de clau: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Aquesta configuració personalitzada se suprimirà quan tanquis totes les finestres d'incògnit</translation> <translation id="2897878306272793870">Confirmes que vols obrir <ph name="TAB_COUNT" /> pestanyes?</translation> <translation id="290105521672621980">El fitxer utilitza funcions no compatibles</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> no ha pogut comunicar-se amb aquesta impressora. Comproveu que la impressora estigui connectada i torneu-ho a provar.</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">Les dades estan encriptades amb la teva frase de contrasenya de sincronització. No inclouen les formes de pagament ni les adreces de Google Pay.</translation> <translation id="2996722619877761919">Capgira per la vora llarga</translation> <translation id="3000236644796679448">Els llocs web poden demanar permís per utilitzar el micròfon (opció recomanada)</translation> +<translation id="3000378525979847272">Permisos concedits: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Àudio mono</translation> <translation id="3001144475369593262">Comptes infantils</translation> <translation id="3003144360685731741">Xarxes preferides</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">Obre la previsualització en PDF</translation> <translation id="3308116878371095290">S'ha impedit que aquesta pàgina estableixi galetes.</translation> <translation id="3308134619352333507">Amaga el botó</translation> +<translation id="3308738399950580893">anuncis</translation> <translation id="3308852433423051161">S'està carregant l'Assistent de Google...</translation> <translation id="3309330461362844500">Identificador del perfil del certificat</translation> <translation id="3311445899360743395">Pot ser que les dades associades a aquesta aplicació se suprimeixin del dispositiu.</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">Aquest fitxer està encriptat. Demana al propietari que el desencripti.</translation> <translation id="3390013585654699824">Detalls de l'aplicació</translation> <translation id="3390741581549395454">La còpia de seguretat dels fitxers i de les aplicacions de Linux s'ha creat correctament. L'actualització començarà aviat.</translation> +<translation id="3391482648489541560">edició de fitxers</translation> <translation id="339178315942519818">Consulta les notificacions de les aplicacions de xat al teu dispositiu <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">En fer clic al botó Accepta i continua, acceptes el processament descrit anteriorment per a aquests serveis de Google.</translation> <translation id="3399432415385675819">Les notificacions es desactivaran</translation> @@ -2892,6 +2900,7 @@ <translation id="425573743389990240">Velocitat de descàrrega de la bateria en watts (un valor negatiu significa que la bateria s'està carregant)</translation> <translation id="4256316378292851214">De&sa el vídeo com a...</translation> <translation id="4258348331913189841">Sistemes de fitxers</translation> +<translation id="4259381619085088639">la teva presència</translation> <translation id="4259388776256904261">La configuració pot tardar una estona</translation> <translation id="4260182282978351200">El fitxer <ph name="FILE_NAME" /> pot ser perillós. Vols enviar-lo a la Protecció avançada de Google perquè l'analitzi? Prem Maj+F6 per anar a l'àrea de la barra de baixades.</translation> <translation id="4263223596040212967">Comprova la disposició del teclat i torna-ho a provar.</translation> @@ -2928,6 +2937,7 @@ <translation id="4303079906735388947">Configura un PIN nou per a la clau de seguretat</translation> <translation id="4305402730127028764">Copia al dispositiu <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Les aplicacions s'han de distribuir amb el tipus de contingut "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">porta-retalls</translation> <translation id="4307992518367153382">Configuració bàsica</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K actius)</translation> <translation id="4310139701823742692">El format del fitxer PPD és incorrecte. Revisa'l i torna-ho a provar.</translation> @@ -3015,6 +3025,7 @@ <translation id="4412698727486357573">Centre d'ajuda</translation> <translation id="44141919652824029">Vols permetre que <ph name="APP_NAME" /> obtingui la llista de dispositius USB vinculats?</translation> <translation id="4414232939543644979">F&inestra d'incògnit nova</translation> +<translation id="4414515549596849729">dades de llocs web i galetes</translation> <translation id="4415213869328311284">Ja pots començar a utilitzar <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">No s'ha trobat cap dispositiu. Obre un article del centre d'ajuda en una pestanya nova.</translation> <translation id="4415276339145661267">Gestiona el teu Compte de Google</translation> @@ -3086,6 +3097,7 @@ <translation id="4493468155686877504">Valor recomanat (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">No la mostris en aquesta pàgina</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ha fallat</translation> +<translation id="4500587658229086076">contingut no segur</translation> <translation id="450099669180426158">Icona de signe d'exclamació</translation> <translation id="4501530680793980440">Confirmació de la supressió</translation> <translation id="4502423230170890588">Suprimeix d'aquest dispositiu</translation> @@ -3126,6 +3138,7 @@ <translation id="4538684596480161368">Bloqueja sempre els connectors fora de la zona de proves a <ph name="HOST" /></translation> <translation id="4538792345715658285">Instal·lat per una política empresarial</translation> <translation id="4541662893742891060">No es pot connectar a aquest perfil. Per obtenir assistència tècnica, contacta amb el teu operador.</translation> +<translation id="4541810033354695636">realitat augmentada</translation> <translation id="4542520061254486227">Llegir les dades dels llocs <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Gestor de certificats</translation> <translation id="4544174279960331769">Avatar blau predeterminat</translation> @@ -3598,6 +3611,7 @@ <translation id="5112577000029535889">&Eines per a desenvolupadors</translation> <translation id="5113739826273394829">Si feu clic en aquesta icona, bloquejareu aquest dispositiu <ph name="DEVICE_TYPE" />. La propera vegada, haureu d'escriure la contrasenya per accedir-hi.</translation> <translation id="51143538739122961">Insereix la clau de seguretat i toca-la</translation> +<translation id="5114987907971894280">realitat virtual</translation> <translation id="5115309401544567011">Endolla el dispositiu <ph name="DEVICE_TYPE" /> a una font d'alimentació.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">De&sa l'àudio com a...</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">Executa aquesta vegada</translation> <translation id="5464660706533281090">Els usuaris menors d'edat no poden canviar aquesta opció de configuració.</translation> <translation id="5466374726908360271">Engan&xa i cerca "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Permisos bloquejats: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Els llocs web poden demanar permís per reproduir contingut protegit (opció recomanada)</translation> <translation id="5468173180030470402">S'estan cercant usos compartits de fitxers</translation> <translation id="5469852975082458401">Pots navegar per les pàgines amb un cursor de text. Prem F7 per desactivar aquesta funció.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Surt de totes les aplicacions de Chrome</translation> <translation id="5797070761912323120">És possible que Google utilitzi el teu historial per personalitzar la Cerca, els anuncis i altres serveis de Google</translation> <translation id="5798301976526354562">Mida del text (també s'aplica als subtítols instantanis)</translation> +<translation id="579907812742603813">contingut protegit</translation> <translation id="579915268381781820">La clau de seguretat s'ha tret.</translation> <translation id="5799508265798272974">Màquina virtual de Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">El fitxer de destinació s'ha truncat o eliminat des de la darrera baixada.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">El canal ha canviat. Reinicieu el dispositiu perquè s'apliquin els canvis.</translation> <translation id="5877584842898320529">La impressora seleccionada no està disponible o no s'ha instal·lat correctament.<ph name="BR" />Comprova la impressora o prova de seleccionar-ne una altra.</translation> <translation id="5882919346125742463">Xarxes conegudes</translation> +<translation id="5883356647197510494">Permisos bloquejats automàticament: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Aquesta pestanya està connectada a un dispositiu USB</translation> <translation id="5886009770935151472">Dit 1</translation> <translation id="5889282057229379085">Nombre màxim de CA intermèdies: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Cerca el següent</translation> <translation id="6461170143930046705">S'estan cercant xarxes...</translation> <translation id="6463795194797719782">E&dita</translation> +<translation id="6464094930452079790">imatges</translation> <translation id="6464825623202322042">Aquest dispositiu</translation> <translation id="6465841119675156448">Sense Internet</translation> <translation id="6466988389784393586">&Obre totes les adreces d'interès</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">No s'ha pogut completar l'autorització</translation> <translation id="6494327278868541139">Mostra els detalls de la protecció millorada</translation> <translation id="6494445798847293442">No és una entitat emissora de certificats</translation> +<translation id="6494750904506170417">finestres emergents i redireccions</translation> <translation id="6494974875566443634">Personalització</translation> <translation id="6495925982925244349">Xarxa <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, <ph name="SIGNAL_STRENGTH" />% d'intensitat del senyal, gestionada per l'administrador, detalls</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Aquestes dades inclouen contingut sensible o perillós}=1{Aquest fitxer inclou contingut sensible o perillós}other{Aquests fitxers inclouen contingut sensible o perillós}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Contrasenya</translation> <translation id="6659213950629089752">L'extensió <ph name="NAME" /> ha fet zoom en aquesta pàgina</translation> <translation id="6659594942844771486">Pestanya</translation> +<translation id="6660413144148052430">ubicació</translation> <translation id="666099631117081440">Servidors d'impressió</translation> <translation id="6663190258859265334">Fes un Powerwash al dispositiu <ph name="DEVICE_TYPE" /> i torna a la versió anterior.</translation> <translation id="6664237456442406323">L'ordinador està configurat amb un ID de maquinari amb un format incorrecte. Això impedeix a Chrome OS actualitzar-se amb les darreres correccions de seguretat i <ph name="BEGIN_BOLD" />pot ser que l'ordinador sigui vulnerable a atacs maliciosos<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Novetats</translation> <translation id="67269783048918309">Envia dades d'ús i de diagnòstic. En aquests moments aquest dispositiu envia automàticament a Google dades de diagnòstic, del dispositiu i d'ús d'aplicacions. Aquestes dades no es faran servir per identificar el teu fill i ajudaran a millorar l'estabilitat del sistema i de les aplicacions, entre altres característiques. Una part de les dades agregades també serà útil per a les aplicacions i per als partners de Google, com ara els desenvolupadors d'Android. El propietari ha aplicat aquesta <ph name="BEGIN_LINK1" />opció de configuració<ph name="END_LINK1" />. Si l'opció Activitat al web i en aplicacions addicional està activada per al teu fill, és possible que aquestes dades es desin al seu Compte de Google. <ph name="BEGIN_LINK2" />Més informació<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Connectat, <ph name="BATTERY_PERCENTAGE" />% de bateria</translation> +<translation id="6732087373923685049">càmera</translation> <translation id="6732801395666424405">Els certificats no s'han carregat.</translation> <translation id="6732900235521116609">No es pot suprimir la drecera</translation> <translation id="6734468588183300211">En mode d'incògnit, els llocs web no poden fer servir les teves galetes per veure la teva activitat de navegació en diferents llocs web, per exemple, per personalitzar els anuncis. Pot ser que les funcions d'alguns llocs web no funcionin.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Pregunta'm quan un lloc web vulgui utilitzar els missatges exclusius del sistema per accedir a dispositius MIDI (opció recomanada)</translation> <translation id="6818198425579322765">Idioma de la pàgina que cal traduir</translation> <translation id="6818802132960437751">Protecció antivirus integrada</translation> +<translation id="6820143000046097424">ports en sèrie</translation> <translation id="682123305478866682">Emet l'escriptori</translation> <translation id="6823174134746916417">Toca per fer clic amb el ratolí tàctil</translation> <translation id="6824564591481349393">Copi&a l'adreça electrònica</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Intercanviar dades amb un altre dispositiu de la xarxa local o d'Internet</translation> <translation id="7306521477691455105">Obre Configuració per connectar <ph name="USB_DEVICE_NAME" /> a <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">En pausa</translation> +<translation id="7308436126008021607">sincronització en segon pla</translation> <translation id="7309257895202129721">Mostra els &controls</translation> <translation id="7310598146671372464">No s'ha pogut iniciar la sessió. El servidor no admet els tipus d'encriptació de Kerberos especificats. Contacta amb l'administrador.</translation> <translation id="7320213904474460808">Estableix com a xarxa predeterminada</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Cal que tornis el dispositiu immediatament}other{Torna el dispositiu <ph name="DEVICE_TYPE" /> en un termini de {NUM_DAYS} dies}}</translation> <translation id="7475671414023905704">URL de contrasenya perduda de Netscape</translation> <translation id="7476454130948140105">No hi ha prou bateria per fer l'actualització (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Permisos bloquejats automàticament: <ph name="PERMISSION" /> i <ph name="COUNT" /> més</translation> <translation id="7477793887173910789">Controla la música, els vídeos i molt més</translation> <translation id="7478485216301680444">No s'ha pogut instal·lar l'aplicació de quiosc.</translation> <translation id="7478623944308207463">Les teves aplicacions i opcions de configuració se sincronitzaran en tots els dispositius amb Chrome OS en què tinguis la sessió iniciada amb el teu Compte de Google. Per accedir a les opcions de sincronització del navegador, ves a la <ph name="LINK_BEGIN" />configuració de Chrome<ph name="LINK_END" />.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Desinstal·la <ph name="APP" />...</translation> <translation id="8289128870594824098">Mida del disc</translation> <translation id="8293206222192510085">Afegeix una adreça d'interès</translation> +<translation id="829335040383910391">so</translation> <translation id="8294431847097064396">Font</translation> <translation id="8298429963694909221">Ara pots rebre les notificacions del telèfon al teu <ph name="DEVICE_TYPE" />. Si ignores les notificacions al <ph name="DEVICE_TYPE" />, també s'ignoraran al telèfon. Comprova que el telèfon sigui a prop teu i que tingui el Bluetooth i la Wi‑Fi activats.</translation> <translation id="8299319456683969623">En aquests moments no tens connexió. @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Afegeix una connexió a la xarxa</translation> <translation id="8319414634934645341">Ús ampliat de claus</translation> <translation id="8320459152843401447">La pantalla completa</translation> +<translation id="8321476692217554900">notificacions</translation> <translation id="8321837372750396788">Aquest dispositiu <ph name="DEVICE_TYPE" /> estarà gestionat per <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Aquesta pàgina no té permís per accedir al micròfon.</translation> <translation id="8323167517179506834">Escriviu l'URL</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Recentment des de Google Drive</translation> <translation id="8407199357649073301">Nivell de registre:</translation> <translation id="8408068190360279472">Xarxa <ph name="NETWORK_TYPE" /> (connectant)</translation> +<translation id="8409413588194360210">gestors de pagament</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Permisos concedits: <ph name="PERMISSION" /> i <ph name="COUNT" /> més</translation> <translation id="8413385045638830869">Pregunta-m'ho abans (opció recomanada)</translation> <translation id="8417548266957501132">Contrasenya del pare o de la mare</translation> <translation id="8418445294933751433">&Mostra com a pestanya</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> o <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura de color de Llum nocturna</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> vol <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> i obtenir altres permisos</translation> +<translation id="865032292777205197">sensors de moviment</translation> <translation id="8650543407998814195">Tot i que ja no pots accedir al perfil antic, sí que el pots suprimir.</translation> <translation id="8651585100578802546">Força que es torni a carregar aquesta pàgina</translation> <translation id="8652400352452647993">Error de l'empaquetatge d'extensió</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Llapis òptic</translation> <translation id="8787254343425541995">Permet servidors intermediaris per a xarxes compartides</translation> <translation id="8791534160414513928">Envia una sol·licitud de no seguiment amb el trànsit de navegació</translation> +<translation id="8792626944327216835">micròfon</translation> <translation id="879413103056696865">Mentre el punt d'accés Wi-Fi estigui activat, el telèfon <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Finestra nova</translation> <translation id="8797459392481275117">No tradueixis mai aquest lloc</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Bloqueja les galetes</translation> <translation id="8823704566850948458">Suggereix una contrasenya...</translation> <translation id="8824701697284169214">Afegeix la pà&gina...</translation> +<translation id="8827125715368568315">Permisos bloquejats: <ph name="PERMISSION" /> i <ph name="COUNT" /> més</translation> <translation id="8827289157496676362">Fixa l'extensió</translation> <translation id="8827752199525959199">Més accions, contrasenya per a <ph name="USERNAME" /> a <ph name="DOMAIN" /></translation> <translation id="882854468542856424">No permetis que cap lloc web detecti dispositius Bluetooth propers</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Opcions d'accés amb interruptors</translation> <translation id="8933960630081805351">&Mostra a Finder</translation> <translation id="8934732568177537184">Continua</translation> +<translation id="8938306522009698937">gestors</translation> <translation id="8938800817013097409">Dispositiu USB-C (port posterior dret)</translation> <translation id="8940081510938872932">L'equip està fent massa coses en aquests moments. Torneu-ho a provar més tard.</translation> <translation id="8941173171815156065">Revoca el permís <ph name="PERMISSION" /></translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">General</translation> <translation id="987897973846887088">No hi ha cap imatge disponible</translation> <translation id="988978206646512040">No es permeten les frases de contrasenya buides</translation> +<translation id="991413375315957741">sensors de moviment o de llum</translation> <translation id="992032470292211616">Les extensions, les aplicacions i els temes poden malmetre el vostre dispositiu. Confirmeu que voleu continuar?</translation> <translation id="992256792861109788">Rosa</translation> <translation id="992592832486024913">Desactiva ChromeVox (avisos de veu)</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 8401113..6b910cc6 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Výchozí</translation> <translation id="1252987234827889034">Došlo k chybě profilu</translation> <translation id="1254593899333212300">Přímé připojení k internetu</translation> +<translation id="1257553931232494454">úrovně přiblížení</translation> <translation id="1259152067760398571">Bezpečnostní kontrola proběhla včera</translation> <translation id="1260451001046713751">Vždy povolovat vyskakovací okna a přesměrování z webu <ph name="HOST" /></translation> <translation id="1261380933454402672">Mírné</translation> @@ -673,6 +674,7 @@ <translation id="1729533290416704613">Také řídí, která stránka se zobrazí, když budete vyhledávat v omniboxu.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Chcete-li odstranit aplikace, přejděte do Nastavení > Obchod Google Play > Spravovat nastavení aplikací Android > Aplikace nebo Správce aplikací. Poté klepněte na aplikaci, kterou chcete odinstalovat (je možné, že aplikacemi bude třeba listovat doprava či doleva). Následně klepněte na Odinstalovat nebo Deaktivovat.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Zasílání požadavku</translation> +<translation id="1733064249834771892">písma</translation> <translation id="1733383495376208985">Šifrovat synchronizovaná data pomocí vlastní <ph name="BEGIN_LINK" />heslové fráze pro synchronizaci<ph name="END_LINK" />. Toto šifrování se nevztahuje na platební metody a adresy z Google Pay.</translation> <translation id="1734212868489994726">Světle modrá</translation> <translation id="1734230530703461088">Rozšíření se v časovém limitu nepodařilo načíst. Obraťte se na administrátora.</translation> @@ -760,6 +762,7 @@ <translation id="1818913467757368489">Probíhá nahrávání protokolu.</translation> <translation id="1819721979226826163">Klepněte na Oznámení z aplikací > Služby Google Play.</translation> <translation id="1820028137326691631">Zadejte heslo poskytnuté administrátorem</translation> +<translation id="182139138257690338">automatické stahování</translation> <translation id="1822140782238030981">Už uživatelský profil Chromu máte? Přihlaste se</translation> <translation id="18245044880483936">Zálohovaná data se nezapočítávají do kvóty úložiště na Disku dítěte.</translation> <translation id="1825565032302550710">Číslo portu musí být mezi 1024 a 65535</translation> @@ -1200,6 +1203,7 @@ <translation id="2326931316514688470">Znovu načíst &aplikaci</translation> <translation id="2327492829706409234">Aktivovat aplikaci</translation> <translation id="2328561734797404498">Chcete-li používat aplikaci <ph name="APP_NAME" />, restartujte zařízení.</translation> +<translation id="2329182534073751090">umístění oken</translation> <translation id="2329597144923131178">Přihlaste se a synchronizujte záložky, historii, hesla a další nastavení do všech svých zařízení.</translation> <translation id="2332131598580221120">Zobrazit v obchodu</translation> <translation id="2332192922827071008">Otevřít nastavení</translation> @@ -1711,6 +1715,7 @@ <translation id="2894757982205307093">Nová karta ve skupině</translation> <translation id="289644616180464099">SIM karta je uzamčena</translation> <translation id="289695669188700754">ID klíče: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Po zavření všech anonymních oken bude toto vlastní nastavení odstraněno</translation> <translation id="2897878306272793870">Určitě chcete otevřít <ph name="TAB_COUNT" /> karty (karet)?</translation> <translation id="290105521672621980">Soubor používá prvky, které nejsou podporovány</translation> <translation id="2902127500170292085">Rozšíření <ph name="EXTENSION_NAME" /> s touto tiskárnou nedokáže komunikovat. Ujistěte se, zda je tiskárna zapojena, a zkuste to znovu.</translation> @@ -1800,6 +1805,7 @@ <translation id="2996286169319737844">Data jsou šifrována pomocí heslové fráze pro synchronizaci. Toto šifrování se nevztahuje na platební metody a adresy z Google Pay.</translation> <translation id="2996722619877761919">Otáčení na dlouhém okraji</translation> <translation id="3000236644796679448">Weby mohou žádat o použití mikrofonu (doporučeno)</translation> +<translation id="3000378525979847272">Povolena oprávnění <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Zvuk mono</translation> <translation id="3001144475369593262">Dětské účty</translation> <translation id="3003144360685731741">Preferované sítě</translation> @@ -2059,6 +2065,7 @@ <translation id="3305661444342691068">Otevřít soubor PDF v náhledu</translation> <translation id="3308116878371095290">Této stránce bylo zabráněno v nastavení souborů cookie.</translation> <translation id="3308134619352333507">Skrýt tlačítko</translation> +<translation id="3308738399950580893">reklamy</translation> <translation id="3308852433423051161">Načítání Asistenta Google...</translation> <translation id="3309330461362844500">ID profilu certifikátu</translation> <translation id="3311445899360743395">Je možné, že z tohoto zařízení budou odstraněna data přidružená k této aplikaci.</translation> @@ -2119,6 +2126,7 @@ <translation id="3388788256054548012">Tento soubor je zašifrovaný. Požádejte vlastníka, aby ho dešifroval.</translation> <translation id="3390013585654699824">Podrobnosti o aplikaci</translation> <translation id="3390741581549395454">Aplikace a soubory systému Linux byly úspěšně zálohovány. Brzy začne upgradování.</translation> +<translation id="3391482648489541560">úprava souborů</translation> <translation id="339178315942519818">Zobrazovat oznámení z chatovacích aplikací v zařízení <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Kliknutím na tlačítko Přijmout a pokračovat vyjadřujete souhlas se zpracováním popsaným výše pro tyto služby Google.</translation> <translation id="3399432415385675819">Oznámení budou zakázána</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Rychlost vybíjení baterie ve wattech (záporná hodnota znamená nabíjení baterie)</translation> <translation id="4256316378292851214">Uložit &video jako...</translation> <translation id="4258348331913189841">Systémy souborů</translation> +<translation id="4259381619085088639">vaše přítomnost</translation> <translation id="4259388776256904261">Může to chvíli trvat</translation> <translation id="4260182282978351200">Soubor <ph name="FILE_NAME" /> může být nebezpečný. Chcete ho odeslat ke kontrole prostřednictvím pokročilé ochrany Google? Stisknutím kombinace kláves Shift+F6 přejdete na lištu se staženými soubory.</translation> <translation id="4263223596040212967">Zkontrolujte rozložení klávesnice a zkuste to znovu.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Nastavte pro svůj bezpečnostní klíč nový PIN</translation> <translation id="4305402730127028764">Kopírovat do zařízení <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikace musí být poskytovány s typem obsahu <ph name="CONTENT_TYPE" /></translation> +<translation id="4306812610847412719">schránka</translation> <translation id="4307992518367153382">Základy</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB aktivních)</translation> <translation id="4310139701823742692">Soubor má nesprávný formát. Zkontrolujte soubor PPD a zkuste to znovu.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Centrum nápovědy</translation> <translation id="44141919652824029">Povolit aplikaci <ph name="APP_NAME" /> získat seznam připojených zařízení USB?</translation> <translation id="4414232939543644979">Nové &anonymní okno</translation> +<translation id="4414515549596849729">soubory cookie a data webu</translation> <translation id="4415213869328311284">Jste připraveni začít používat zařízení <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Nebyla nalezena žádná zařízení. Otevřete článek centra nápovědy na nové kartě.</translation> <translation id="4415276339145661267">Spravovat účet Google</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Doporučeno (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Nezobrazovat na této stránce</translation> <translation id="4500114933761911433">Plugin <ph name="PLUGIN_NAME" /> selhal</translation> +<translation id="4500587658229086076">nezabezpečený obsah</translation> <translation id="450099669180426158">Ikona vykřičníku</translation> <translation id="4501530680793980440">Potvrdit odstranění</translation> <translation id="4502423230170890588">Odstranit z tohoto zařízení</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Vždy blokovat rozbalené pluginy u hostitele <ph name="HOST" /></translation> <translation id="4538792345715658285">Nainstalováno podnikovými zásadami.</translation> <translation id="4541662893742891060">Propojení s tímto profilem se nezdařilo. Se žádostmi o technickou podporu se obracejte na svého operátora.</translation> +<translation id="4541810033354695636">rozšířená realita</translation> <translation id="4542520061254486227">Čtení vašich dat na webech <ph name="WEBSITE_1" /> a <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Správce certifikátů</translation> <translation id="4544174279960331769">Výchozí modrý avatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">&Nástroje pro vývojáře</translation> <translation id="5113739826273394829">Pokud kliknete na tuto ikonu, ručně toto zařízení <ph name="DEVICE_TYPE" /> zamknete. Při příštím přístupu budete muset zadat heslo.</translation> <translation id="51143538739122961">Vložte bezpečnostní klíč a dotkněte se jej</translation> +<translation id="5114987907971894280">virtuální realita</translation> <translation id="5115309401544567011">Zapojte <ph name="DEVICE_TYPE" /> do zdroje napájení.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Uložit &zvuk jako...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Tentokrát spustit</translation> <translation id="5464660706533281090">Dětský uživatel toto nastavení nemůže změnit.</translation> <translation id="5466374726908360271">Vl&ožit a vyhledat výraz „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Zablokována oprávnění <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Weby mohou žádat o přehrání chráněného obsahu (doporučeno)</translation> <translation id="5468173180030470402">Vyhledávání sdílených úložišť</translation> <translation id="5469852975082458401">Stránky můžete procházet pomocí textového kurzoru. Tuto funkci vypnete stisknutím klávesy F7.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Ukončit všechny aplikace Chrome</translation> <translation id="5797070761912323120">Google vaši historii může používat k personalizaci Vyhledávání, reklam a dalších služeb Google</translation> <translation id="5798301976526354562">Velikost textu (vztahuje se také na živý přepis)</translation> +<translation id="579907812742603813">chráněný obsah</translation> <translation id="579915268381781820">Bezpečnostní klíč byl odpojen.</translation> <translation id="5799508265798272974">Virtuální počítač systému Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Cílový soubor byl od posledního stahování zkrácen nebo odstraněn.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Verze byla změněna. Změny se projeví po restartování zařízení.</translation> <translation id="5877584842898320529">Zvolená tiskárna není k dispozici nebo není správně nainstalovaná. <ph name="BR" /> Zkontrolujte tiskárnu nebo vyberte jinou.</translation> <translation id="5882919346125742463">Známé sítě</translation> +<translation id="5883356647197510494">Automaticky zablokována oprávnění <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Tato karta je připojena k zařízení USB.</translation> <translation id="5886009770935151472">Prst 1</translation> <translation id="5889282057229379085">Maximální počet zprostředkujících certifikačních autorit: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Najít další</translation> <translation id="6461170143930046705">Vyhledávání sítí...</translation> <translation id="6463795194797719782">&Upravit</translation> +<translation id="6464094930452079790">obrázky</translation> <translation id="6464825623202322042">Toto zařízení</translation> <translation id="6465841119675156448">Bez internetu</translation> <translation id="6466988389784393586">&Otevřít všechny záložky</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Autorizace se nezdařila</translation> <translation id="6494327278868541139">Zobrazit podrobnosti vylepšené ochrany</translation> <translation id="6494445798847293442">Není certifikační autorita</translation> +<translation id="6494750904506170417">vyskakovací okna a přesměrování</translation> <translation id="6494974875566443634">Přizpůsobení</translation> <translation id="6495925982925244349">Síť <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" /> síla signálu: <ph name="SIGNAL_STRENGTH" /> %, spravováno administrátorem, podrobnosti</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Obsah těchto dat je citlivý nebo nebezpečný}=1{Obsah tohoto souboru je citlivý nebo nebezpečný}few{Obsah těchto souborů je citlivý nebo nebezpečný}many{Obsah těchto souborů je citlivý nebo nebezpečný}other{Obsah těchto souborů je citlivý nebo nebezpečný}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Heslo</translation> <translation id="6659213950629089752">Obsah této stránky byl přiblížen pomocí rozšíření <ph name="NAME" /></translation> <translation id="6659594942844771486">Karta</translation> +<translation id="6660413144148052430">poloha</translation> <translation id="666099631117081440">Tiskové servery</translation> <translation id="6663190258859265334">Tato akce resetuje zařízení <ph name="DEVICE_TYPE" /> pomocí funkce Powerwash a obnoví předchozí verzi aplikace.</translation> <translation id="6664237456442406323">Váš počítač je bohužel nakonfigurován pomocí chybného čísla hardwaru. Systému Chrome OS to zabraňuje získat aktualizace s nejnovějšími bezpečnostními opravami, a počítač tak <ph name="BEGIN_BOLD" />může být zranitelnější vůči škodlivým úrokům<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Co je nového</translation> <translation id="67269783048918309">Odesílat údaje o využití a diagnostice. Toto zařízení aktuálně automaticky odesílá do Googlu diagnostické údaje a údaje o zařízení a využití. Tyto údaje nebudou používány ke zjištění totožnosti dítěte a pomohou nám se zvyšováním stability systému a aplikací a dalšími vylepšeními. Některá souhrnná data budou moci využít také naši partneři, např. vývojáři aplikací pro Android. Toto nastavení je <ph name="BEGIN_LINK1" />vyžadováno<ph name="END_LINK1" /> vlastníkem. Pokud má dítě zapnuté dodatečné nastavení Aktivita na webu a v aplikacích, mohou se tato data ukládat do jeho účtu Google. <ph name="BEGIN_LINK2" />Další informace<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Připojeno, <ph name="BATTERY_PERCENTAGE" /> % baterie</translation> +<translation id="6732087373923685049">fotoaparát</translation> <translation id="6732801395666424405">Certifikáty nebyly načteny</translation> <translation id="6732900235521116609">Zkratku nelze odstranit</translation> <translation id="6734468588183300211">V anonymním režimu weby nemohou používat soubory cookie ke sledování vaší aktivity prohlížení na různých webech, například k personalizaci reklam. Některé weby mohou přestat fungovat.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Zeptat se, když chce web využít exkluzivní zprávy systému pro přístup k zařízením MIDI (doporučeno)</translation> <translation id="6818198425579322765">Jazyk stránky k překladu</translation> <translation id="6818802132960437751">Integrovaná antivirová ochrana</translation> +<translation id="6820143000046097424">sériové porty</translation> <translation id="682123305478866682">Odeslat plochu</translation> <translation id="6823174134746916417">Kliknutí klepnutím na touchpadu</translation> <translation id="6824564591481349393">Kopírovat &e-mailovou adresu</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Výměna dat s libovolným zařízením v lokální síti nebo internetu</translation> <translation id="7306521477691455105">Otevřete Nastavení a připojte zařízení <ph name="USB_DEVICE_NAME" /> k zařízení <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Pozastaveno</translation> +<translation id="7308436126008021607">synchronizace na pozadí</translation> <translation id="7309257895202129721">Zobrazit &ovládací prvky</translation> <translation id="7310598146671372464">Přihlášení se nezdařilo. Server nepodporuje zadané typy šifrování Kerberos. Obraťte se na svého administrátora.</translation> <translation id="7320213904474460808">Nastavit výchozí síť</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Zařízení je třeba okamžitě vrátit}few{Zařízení <ph name="DEVICE_TYPE" /> je třeba do {NUM_DAYS} dní vrátit}many{Zařízení <ph name="DEVICE_TYPE" /> je třeba do {NUM_DAYS} dne vrátit}other{Zařízení <ph name="DEVICE_TYPE" /> je třeba do {NUM_DAYS} dní vrátit}}</translation> <translation id="7475671414023905704">Adresa URL pro získání ztraceného hesla Netscape</translation> <translation id="7476454130948140105">Aktualizaci nelze zahájit z důvodu slabé baterie (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Automaticky zablokováno oprávnění <ph name="PERMISSION" /> a další (<ph name="COUNT" />)</translation> <translation id="7477793887173910789">Ovládejte hudbu, videa a další obsah</translation> <translation id="7478485216301680444">Aplikaci pro režim veřejného terminálu se nepodařilo nainstalovat.</translation> <translation id="7478623944308207463">Vaše aplikace a nastavení se budou synchronizovat do všech zařízení Chrome OS, na kterých jste přihlášeni pomocí svého účtu Google. Možnosti synchronizace prohlížeče naleznete v <ph name="LINK_BEGIN" />nastavení Chromu<ph name="LINK_END" />.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Odinstalovat aplikaci <ph name="APP" />…</translation> <translation id="8289128870594824098">Velikost disku</translation> <translation id="8293206222192510085">Přidat záložku</translation> +<translation id="829335040383910391">zvuk</translation> <translation id="8294431847097064396">Zdroj</translation> <translation id="8298429963694909221">Na zařízení <ph name="DEVICE_TYPE" /> teď můžete dostávat oznámení z telefonu. Když oznámení zavřete na zařízení <ph name="DEVICE_TYPE" />, zavře se i na telefonu. Zajistěte, aby byl telefon poblíž a bylo na něm zapnuté Bluetooth a Wi-Fi.</translation> <translation id="8299319456683969623">Momentálně jste v režimu offline.</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Přidat připojení k síti</translation> <translation id="8319414634934645341">Rozšířené použití klíče</translation> <translation id="8320459152843401447">Celá vaše obrazovka</translation> +<translation id="8321476692217554900">oznámení</translation> <translation id="8321837372750396788">Toto zařízení <ph name="DEVICE_TYPE" /> bude spravováno doménou <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Přístup této stránky k vašemu mikrofonu je zablokován.</translation> <translation id="8323167517179506834">Zadejte adresu URL.</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Nedávný obsah z Disku Google</translation> <translation id="8407199357649073301">Úroveň protokolu:</translation> <translation id="8408068190360279472">Síť: <ph name="NETWORK_TYPE" />, připojování</translation> +<translation id="8409413588194360210">obslužné nástroje pro platby</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Povoleno oprávnění <ph name="PERMISSION" /> a další (<ph name="COUNT" />)</translation> <translation id="8413385045638830869">Nejprve se dotázat (doporučeno)</translation> <translation id="8417548266957501132">Heslo rodiče</translation> <translation id="8418445294933751433">Zobrazit jako kartu</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> nebo <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Teplota barev nočního režimu</translation> <translation id="8648544143274677280">Web <ph name="SITE_NAME" /> žádá o tato oprávnění: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> a další</translation> +<translation id="865032292777205197">senzory pohybu</translation> <translation id="8650543407998814195">Ačkoliv svůj starý profil již nemůžete používat, můžete jej odstranit.</translation> <translation id="8651585100578802546">Vynutit opětovné načtení této stránky</translation> <translation id="8652400352452647993">Chyba zabalení rozšíření</translation> @@ -6787,6 +6816,7 @@ <translation id="8785622406424941542">Dotykové pero</translation> <translation id="8787254343425541995">Povolit proxy servery u sdílených sítí</translation> <translation id="8791534160414513928">Posílat při procházení webů požadavek Do Not Track</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Při zapnutém hotspotu váš telefon <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nové okno</translation> <translation id="8797459392481275117">Tento web nikdy nepřekládat</translation> @@ -6826,6 +6856,7 @@ <translation id="8823559166155093873">Blokování souborů cookie</translation> <translation id="8823704566850948458">Navrhnout heslo...</translation> <translation id="8824701697284169214">Přidat strá&nku...</translation> +<translation id="8827125715368568315">Zablokováno oprávnění <ph name="PERMISSION" /> a další (<ph name="COUNT" />)</translation> <translation id="8827289157496676362">Připnout rozšíření</translation> <translation id="8827752199525959199">Další akce, heslo účtu <ph name="USERNAME" /> v doméně <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Nepovolovat žádným webům objevovat zařízení Bluetooth v okolí</translation> @@ -6926,6 +6957,7 @@ <translation id="8932894639908691771">Možnosti přístupu pomocí přepínačů</translation> <translation id="8933960630081805351">Zobrazit ve &službě Finder</translation> <translation id="8934732568177537184">Pokračovat</translation> +<translation id="8938306522009698937">obslužné nástroje</translation> <translation id="8938800817013097409">Zařízení USB Type-C (pravý zadní port)</translation> <translation id="8940081510938872932">Počítač teď vykonává příliš mnoho úloh. Zkuste to znovu později.</translation> <translation id="8941173171815156065">Odebrat oprávnění <ph name="PERMISSION" /></translation> @@ -7230,6 +7262,7 @@ <translation id="987264212798334818">Všeobecné</translation> <translation id="987897973846887088">Nejsou k dispozici žádné obrázky</translation> <translation id="988978206646512040">Prázdné přístupové heslo není povoleno</translation> +<translation id="991413375315957741">senzory pohybu nebo světla</translation> <translation id="992032470292211616">Rozšíření, aplikace a motivy mohou poškodit vaše zařízení. Opravdu chcete pokračovat?</translation> <translation id="992256792861109788">Růžová</translation> <translation id="992592832486024913">Deaktivovat funkci ChromeVox (hlasovou odezvu)</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index e88cc02..a69cf92 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">Standard</translation> <translation id="1252987234827889034">Der opstod en fejl i forbindelse med profilen</translation> <translation id="1254593899333212300">Direkte internetforbindelse</translation> +<translation id="1257553931232494454">zoomniveauer</translation> <translation id="1259152067760398571">Sikkerhedstjekket blev udført i går</translation> <translation id="1260451001046713751">Tillad altid pop op-vinduer og omdirigeringer fra <ph name="HOST" /></translation> <translation id="1261380933454402672">Moderat</translation> @@ -672,6 +673,7 @@ <translation id="1729533290416704613">Den styrer også, hvilken side der vises, når du søger via omnifeltet.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Hvis du vil fjerne apps, skal du gå til Indstillinger > Google Play Butik > Administrer Android-præferencer > Apps eller Administration af apps. Tryk derefter på den app, du vil afinstallere (du skal muligvis stryge til højre eller venstre for at finde appen). Tryk derefter på Afinstaller eller Deaktiver.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Sender anmodning...</translation> +<translation id="1733064249834771892">skrifttyper</translation> <translation id="1733383495376208985">Kryptér synkroniserede data med din egen <ph name="BEGIN_LINK" />adgangssætning til synkronisering<ph name="END_LINK" />. Dette omfatter ikke betalingsmetoder og adresser fra Google Pay.</translation> <translation id="1734212868489994726">Lyseblå</translation> <translation id="1734230530703461088">Udvidelserne blev ikke indlæst inden for tidsgrænsen. Kontakt din administrator.</translation> @@ -759,6 +761,7 @@ <translation id="1818913467757368489">Upload af logfil er i gang.</translation> <translation id="1819721979226826163">Tryk på Appnotifikationer > Google Play-tjenester.</translation> <translation id="1820028137326691631">Angiv adgangskode fra administrator</translation> +<translation id="182139138257690338">automatiske downloads</translation> <translation id="1822140782238030981">Er du allerede Chrome-bruger? Log ind</translation> <translation id="18245044880483936">Backupdata tæller ikke med i dit barns kvote for Drev-lagerplads.</translation> <translation id="1825565032302550710">Porten skal være mellem 1024 og 65535</translation> @@ -1199,6 +1202,7 @@ <translation id="2326931316514688470">&Genindlæs app</translation> <translation id="2327492829706409234">Aktivér app</translation> <translation id="2328561734797404498">Genstart enheden for at bruge <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">placering af vinduer</translation> <translation id="2329597144923131178">Log ind for at hente bogmærker, historik, adgangskoder og andre indstillinger på alle dine enheder.</translation> <translation id="2332131598580221120">Vis i Webshop</translation> <translation id="2332192922827071008">Åbn præferencer</translation> @@ -1711,6 +1715,7 @@ <translation id="2894757982205307093">Ny fane i gruppe</translation> <translation id="289644616180464099">SIM-kortet er låst.</translation> <translation id="289695669188700754">Nøgle-id: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Denne tilpassede indstilling fjernes, når du lukker alle inkognitovinduer</translation> <translation id="2897878306272793870">Er du sikker på, at du vil åbne <ph name="TAB_COUNT" /> faner?</translation> <translation id="290105521672621980">Filen anvender funktioner, der ikke understøttes</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> kunne ikke kommunikere med denne printer. Sørg for, at printeren er tilsluttet, og prøv igen.</translation> @@ -1800,6 +1805,7 @@ <translation id="2996286169319737844">Dataene er krypteret med din adgangssætning til synkronisering. Dette omfatter ikke betalingsmetoder og adresser fra Google Pay.</translation> <translation id="2996722619877761919">Vend ved lang kant</translation> <translation id="3000236644796679448">Websites kan anmode om tilladelse til at bruge din mikrofon (anbefales)</translation> +<translation id="3000378525979847272">Adgangen til <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> blev tilladt</translation> <translation id="3000461861112256445">Monolyd</translation> <translation id="3001144475369593262">Børnekonti</translation> <translation id="3003144360685731741">Favoritter netværk</translation> @@ -2059,6 +2065,7 @@ <translation id="3305661444342691068">Åbn PDF i fremviseren</translation> <translation id="3308116878371095290">Denne side blev forhindret i at konfigurere cookies.</translation> <translation id="3308134619352333507">Skjul knap</translation> +<translation id="3308738399950580893">annoncer</translation> <translation id="3308852433423051161">Indlæser Google Assistent...</translation> <translation id="3309330461362844500">Certifikatprofilens id</translation> <translation id="3311445899360743395">Data, der er knyttet til denne app, bliver fjernet fra enheden.</translation> @@ -2119,6 +2126,7 @@ <translation id="3388788256054548012">Denne fil er krypteret. Bed ejeren af filen om at dekryptere den.</translation> <translation id="3390013585654699824">Info om appen</translation> <translation id="3390741581549395454">Linux-applikationerne og -filerne blev sikkerhedskopieret. Opgraderingen begynder om lidt.</translation> +<translation id="3391482648489541560">filredigering</translation> <translation id="339178315942519818">Se notifikationer fra dine chatapps på din <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Når du klikker på knappen "Acceptér og fortsæt", accepterer du den behandling, der er beskrevet ovenfor, for disse Google-tjenester.</translation> <translation id="3399432415385675819">Notifikationer deaktiveres</translation> @@ -2895,6 +2903,7 @@ <translation id="425573743389990240">Batteriets afladningshastighed i watt (en negativ værdi betyder, at batteriet oplader)</translation> <translation id="4256316378292851214">Ge&m video som...</translation> <translation id="4258348331913189841">Filsystemer</translation> +<translation id="4259381619085088639">din tilstedeværelse</translation> <translation id="4259388776256904261">Dette kan tage lidt tid</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> kan være skadelig. Skal Google-programmet Avanceret beskyttelse scanne den? Tryk på Shift+F6 for at skifte til downloadlinjen.</translation> <translation id="4263223596040212967">Tjek dit tastaturlayout, og prøv igen.</translation> @@ -2931,6 +2940,7 @@ <translation id="4303079906735388947">Opret en ny pinkode til din sikkerhedsnøgle</translation> <translation id="4305402730127028764">Kopiér til <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Apps skal downloades med indholdstypen "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">udklipsholder</translation> <translation id="4307992518367153382">Grundlæggende valgmuligheder</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation> <translation id="4310139701823742692">Filen har et forkert format. Tjek PPD-filen, og prøv igen.</translation> @@ -3018,6 +3028,7 @@ <translation id="4412698727486357573">Hjælp</translation> <translation id="44141919652824029">Vil du give "<ph name="APP_NAME" />" adgang til listen over dine tilsluttede USB-enheder?</translation> <translation id="4414232939543644979">Nyt &inkognitovindue</translation> +<translation id="4414515549596849729">cookies og websitedata</translation> <translation id="4415213869328311284">Din <ph name="DEVICE_TYPE" /> er klar til brug.</translation> <translation id="4415245286584082850">Der blev ikke fundet nogen enheder. Åbn en artikel i Hjælp på en ny fane.</translation> <translation id="4415276339145661267">Administrer din Google-konto</translation> @@ -3089,6 +3100,7 @@ <translation id="4493468155686877504">Anbefalet (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Vis ikke på denne side</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> er gået ned</translation> +<translation id="4500587658229086076">usikkert indhold</translation> <translation id="450099669180426158">Ikon for udråbstegn</translation> <translation id="4501530680793980440">Bekræft fjernelse</translation> <translation id="4502423230170890588">Fjern fra denne enhed</translation> @@ -3129,6 +3141,7 @@ <translation id="4538684596480161368">Bloker altid plugins, der ikke er gemt i sandbox, på <ph name="HOST" /></translation> <translation id="4538792345715658285">Installeret af virksomhedspolitik.</translation> <translation id="4541662893742891060">Der kunne ikke oprettes forbindelse til denne profil. Kontakt dit mobilselskab for at få teknisk support.</translation> +<translation id="4541810033354695636">augmented reality</translation> <translation id="4542520061254486227">Læs dine data på <ph name="WEBSITE_1" /> og <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Certifikatadministrator</translation> <translation id="4544174279960331769">Blå standardavatar</translation> @@ -3601,6 +3614,7 @@ <translation id="5112577000029535889">&Udviklerværktøjer</translation> <translation id="5113739826273394829">Hvis du klikker på dette ikon, låses denne <ph name="DEVICE_TYPE" /> manuelt. Næste gang skal du indtaster adgangskoden for at få adgang.</translation> <translation id="51143538739122961">Indsæt din sikkerhedsnøgle, og tryk på den</translation> +<translation id="5114987907971894280">virtual reality</translation> <translation id="5115309401544567011">Slut din <ph name="DEVICE_TYPE" /> til en strømkilde.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Ge&m lyd som...</translation> @@ -3900,6 +3914,7 @@ <translation id="5464632865477611176">Kør nu</translation> <translation id="5464660706533281090">Denne indstilling kan ikke ændres af en bruger, som er et barn.</translation> <translation id="5466374726908360271">Ind&sæt, og søg efter "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Adgangen til <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /> blev blokeret</translation> <translation id="5468119583641912100">Websites kan anmode om tilladelse til at afspille beskyttet indhold (anbefales)</translation> <translation id="5468173180030470402">Søger efter fildelinger</translation> <translation id="5469852975082458401">Du kan navigere på sider med en tekstmarkør. Tryk på F7, eller deaktiver.</translation> @@ -4191,6 +4206,7 @@ <translation id="5794786537412027208">Afslut alle Chrome-apps</translation> <translation id="5797070761912323120">Google kan bruge din historik til at tilpasse Søgning, annoncer og andre Google-tjenester</translation> <translation id="5798301976526354562">Tekststørrelse (gælder også for Livetekstning)</translation> +<translation id="579907812742603813">beskyttet indhold</translation> <translation id="579915268381781820">Din sikkerhedsnøgle blev fjernet.</translation> <translation id="5799508265798272974">Virtuel Linux-maskine: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Destinationsfilen er blevet forkortet eller fjernet siden sidste download.</translation> @@ -4264,6 +4280,7 @@ <translation id="5877064549588274448">Kanalen er ændret. Genstart din enhed for at anvende ændringerne.</translation> <translation id="5877584842898320529">Den valgte printer er enten ikke tilgængelig eller ikke installeret korrekt.<ph name="BR" />Tjek din printer, eller vælg en anden printer.</translation> <translation id="5882919346125742463">Kendte netværk</translation> +<translation id="5883356647197510494">Browseren blokerede automatisk <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Denne fane er sluttet til en USB-enhed.</translation> <translation id="5886009770935151472">Finger 1</translation> <translation id="5889282057229379085">Maksimalt antal mellemliggende CA'er: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4763,6 +4780,7 @@ <translation id="6460601847208524483">Find næste</translation> <translation id="6461170143930046705">Søger efter netværk...</translation> <translation id="6463795194797719782">&Rediger</translation> +<translation id="6464094930452079790">billeder</translation> <translation id="6464825623202322042">Denne enhed</translation> <translation id="6465841119675156448">Uden internet</translation> <translation id="6466988389784393586">Åbn alle bogmærker</translation> @@ -4786,6 +4804,7 @@ <translation id="6491376743066338510">Godkendelse mislykkedes</translation> <translation id="6494327278868541139">Vis oplysninger om forbedret beskyttelse</translation> <translation id="6494445798847293442">Ikke et nøglecenter</translation> +<translation id="6494750904506170417">pop op-vinduer og omdirigeringer</translation> <translation id="6494974875566443634">Tilpasning</translation> <translation id="6495925982925244349">Netværk <ph name="NETWORK_INDEX" /> af <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signalstyrke <ph name="SIGNAL_STRENGTH" /> %, administreret af din administrator, info</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Disse data har følsomt eller farligt indhold}=1{Denne fil har følsomt eller farligt indhold}one{Denne fil har følsomt eller farligt indhold}other{Disse filer har følsomt eller farligt indhold}}</translation> @@ -4926,6 +4945,7 @@ <translation id="6657585470893396449">Adgangskode</translation> <translation id="6659213950629089752">Udvidelsen "<ph name="NAME" />" zoomede ind på denne side.</translation> <translation id="6659594942844771486">Fane</translation> +<translation id="6660413144148052430">placering</translation> <translation id="666099631117081440">Printerservere</translation> <translation id="6663190258859265334">Powerwash din <ph name="DEVICE_TYPE" />, og vend tilbage til den forrige version.</translation> <translation id="6664237456442406323">Din computer er desværre konfigureret med et hardware-id i forkert format. Dette forhindrer Chrome OS i at opdatere med de nyeste sikkerhedsrettelser, og din computer <ph name="BEGIN_BOLD" />kan være sårbar over for ondartede angreb<ph name="END_BOLD" />.</translation> @@ -4980,6 +5000,7 @@ <translation id="672609503628871915">Se de nye funktioner</translation> <translation id="67269783048918309">Send brugs- og diagnosticeringsdata. Denne enhed sender i øjeblikket automatisk diagnosticerings- og enhedsdata samt data om brug af apps til Google. Disse data bruges ikke til at identificere dit barn. De bruges kun til forbedring af bl.a. systemets og appens stabilitet. Visse samlede data hjælper også Google-apps og -partnere, f.eks. Android-udviklere. Denne <ph name="BEGIN_LINK1" />indstilling<ph name="END_LINK1" /> håndhæves af ejeren. Hvis indstillingen til yderligere web- og appaktivitet er aktiveret for dit barn, gemmes disse data muligvis på barnets Google-konto. <ph name="BEGIN_LINK2" />Få flere oplysninger<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Tilsluttet, <ph name="BATTERY_PERCENTAGE" /> % batteri</translation> +<translation id="6732087373923685049">kamera</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> @@ -5054,6 +5075,7 @@ <translation id="6817174620439930047">Spørg mig, når et website vil anvende interne systemmeddelelser til at få adgang til MIDI-enheder (anbefales)</translation> <translation id="6818198425579322765">Sidens sprog, som skal oversættes</translation> <translation id="6818802132960437751">Indbygget virusbeskyttelse</translation> +<translation id="6820143000046097424">serieporte</translation> <translation id="682123305478866682">Cast skrivebordet</translation> <translation id="6823174134746916417">Tryk-hurtigt-for-at-klikke på touchplade</translation> <translation id="6824564591481349393">Kopier mailadress&e</translation> @@ -5487,6 +5509,7 @@ <translation id="730515362922783851">Udveksle data med en enhed på det lokale netværk eller internettet</translation> <translation id="7306521477691455105">Åbn Indstillinger for at slutte <ph name="USB_DEVICE_NAME" /> til <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Sat på pause</translation> +<translation id="7308436126008021607">synkronisering i baggrunden.</translation> <translation id="7309257895202129721">Vis &knapper</translation> <translation id="7310598146671372464">Der kunne ikke logges ind. Serveren understøtter ikke de angivne Kerberos-krypteringstyper. Kontakt din administrator.</translation> <translation id="7320213904474460808">Vælg som standardnetværk</translation> @@ -5628,6 +5651,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Kræver omgående returnering}one{Returner <ph name="DEVICE_TYPE" /> inden for {NUM_DAYS} dag}other{Returner <ph name="DEVICE_TYPE" /> inden for {NUM_DAYS} dage}}</translation> <translation id="7475671414023905704">Netscape-webadresse til mistet adgangskode</translation> <translation id="7476454130948140105">Batteriniveauet er for lavt til at opdatere (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Browseren blokerede automatisk <ph name="PERMISSION" /> og <ph name="COUNT" /> yderligere</translation> <translation id="7477793887173910789">Styr din musik, dine videoer og meget mere</translation> <translation id="7478485216301680444">Kioskapplikationen kunne ikke installeres.</translation> <translation id="7478623944308207463">Dine apps og indstillinger synkroniseres på tværs af alle de Chrome OS-enheder, hvor du er logget ind med din Google-konto. Du kan se muligheder for synkronisering af browseren i <ph name="LINK_BEGIN" />indstillingerne for Chrome<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Afinstaller <ph name="APP" />...</translation> <translation id="8289128870594824098">Diskstørrelse</translation> <translation id="8293206222192510085">Tilføj bogmærke</translation> +<translation id="829335040383910391">lyd</translation> <translation id="8294431847097064396">Kilde</translation> <translation id="8298429963694909221">Nu kan du få notifikationer fra din telefon på din <ph name="DEVICE_TYPE" />. Hvis du afviser notifikationer på din <ph name="DEVICE_TYPE" />, afvises de også på din telefon. Sørg for, at din telefon er i nærheden, og at Bluetooth og Wi-Fi er aktiveret.</translation> <translation id="8299319456683969623">Du er i øjeblikket offline.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Tilføj netværksforbindelse</translation> <translation id="8319414634934645341">Udvidet brug af nøgle</translation> <translation id="8320459152843401447">Hele din skærm</translation> +<translation id="8321476692217554900">notifikationer</translation> <translation id="8321837372750396788">Denne <ph name="DEVICE_TYPE" /> vil blive administreret af <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Denne side er blokeret fra at få adgang til din mikrofon.</translation> <translation id="8323167517179506834">Angiv webadresse</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">For nyligt fra Google Drive</translation> <translation id="8407199357649073301">Logfilsniveau:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-netværk, opretter forbindelse</translation> +<translation id="8409413588194360210">betalingshandlers</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Adgangen til <ph name="PERMISSION" /> og <ph name="COUNT" /> yderligere blev tilladt</translation> <translation id="8413385045638830869">Spørg først (anbefales)</translation> <translation id="8417548266957501132">Forælders adgangskode</translation> <translation id="8418445294933751433">&Vis som fane</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> eller <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Farvetemperatur for Nattelys</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> vil gerne have tilladelse til at: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> og andre ting</translation> +<translation id="865032292777205197">bevægelsessensorer</translation> <translation id="8650543407998814195">Du kan godt fjerne din gamle profil, selvom du ikke længere har adgang til den.</translation> <translation id="8651585100578802546">Gennemtving genindlæsning af denne side</translation> <translation id="8652400352452647993">Fejl i pakkeudvidelse</translation> @@ -6788,6 +6817,7 @@ <translation id="8785622406424941542">Styluspen</translation> <translation id="8787254343425541995">Tillad proxyer til delte netværk</translation> <translation id="8791534160414513928">Send en anmodning om "Do Not Track" sammen med din browsertrafik</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Mens hotspottet er aktivt, vil din <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nyt vindue</translation> <translation id="8797459392481275117">Oversæt aldrig dette website</translation> @@ -6827,6 +6857,7 @@ <translation id="8823559166155093873">Bloker cookies</translation> <translation id="8823704566850948458">Foreslå adgangskode...</translation> <translation id="8824701697284169214">Tilføj si&de...</translation> +<translation id="8827125715368568315">Adgangen til <ph name="PERMISSION" /> og <ph name="COUNT" /> yderligere blev blokeret</translation> <translation id="8827289157496676362">Fastgør udvidelse</translation> <translation id="8827752199525959199">Flere handlinger – adgangskode til <ph name="USERNAME" /> på <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Tillad ikke, at websites søger efter Bluetooth-enheder i nærheden</translation> @@ -6927,6 +6958,7 @@ <translation id="8932894639908691771">Indstillinger for kontaktadgang</translation> <translation id="8933960630081805351">&Vis i Finder</translation> <translation id="8934732568177537184">Fortsæt</translation> +<translation id="8938306522009698937">handlers</translation> <translation id="8938800817013097409">USB-C-enhed (porten bagpå i højre side)</translation> <translation id="8940081510938872932">Computeren foretager sig for mange ting i øjeblikket. Prøv igen senere.</translation> <translation id="8941173171815156065">Tilbagekald tilladelsen "<ph name="PERMISSION" />"</translation> @@ -7231,6 +7263,7 @@ <translation id="987264212798334818">Generelt</translation> <translation id="987897973846887088">Der er ingen tilgængelige billeder</translation> <translation id="988978206646512040">Tomme adgangssætninger er ikke tilladt</translation> +<translation id="991413375315957741">bevægelses- eller lyssensorer</translation> <translation id="992032470292211616">Udvidelser, apps og temaer kan skade din enhed. Er du sikker på, at du vil fortsætte?</translation> <translation id="992256792861109788">Lyserød</translation> <translation id="992592832486024913">Deaktiver ChromeVox (talefeedback)</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 91d4e49..6750994 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -424,6 +424,7 @@ <translation id="1465827627707997754">Pizzascheibe</translation> <translation id="1468571364034902819">Dieses Profil kann nicht verwendet werden</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{Tab zu neuer Gruppe hinzufügen}other{Tabs zu neuer Gruppe hinzufügen}}</translation> +<translation id="1470350905258700113">Dieses Gerät verwenden</translation> <translation id="1470946456740188591">Mit der Tastenkombination Strg + Suchtaste + 7 kann die Tastaturnavigation aktiviert oder deaktiviert werden</translation> <translation id="1472675084647422956">Mehr anzeigen</translation> <translation id="1474785664565228650">Nach dem Ändern der Mikrofoneinstellung muss Parallels Desktop neu gestartet werden. Starten Sie Parallels Desktop neu, um fortzufahren.</translation> @@ -1394,6 +1395,7 @@ <translation id="2541002089857695151">Vollbildstreaming optimieren?</translation> <translation id="2541706104884128042">Neue Schlafenszeit festgelegt</translation> <translation id="2542050502251273923">Hiermit wird das Fehlerbehebungslevel des Netzwerkverbindungsmanagers und anderer Services mithilfe von ff_debug festgelegt.</translation> +<translation id="2544292303401268586">Der Administrator möchte Ihr Gerät neu starten, um Apps zu aktualisieren. Dies kann einige Minuten dauern.</translation> <translation id="2544853746127077729">Ablehnung des Authentifizierungszertifikats durch das Netzwerk</translation> <translation id="2546283357679194313">Cookies und Websitedaten</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> zugelassen</translation> @@ -2776,6 +2778,7 @@ <translation id="409579654357498729">Zu Cloud Print hinzufügen</translation> <translation id="4096508467498758490">Erweiterungen im Entwicklermodus deaktivieren</translation> <translation id="4097406557126260163">Apps und Erweiterungen</translation> +<translation id="409742781329613461">Tipps für Chrome</translation> <translation id="4097560579602855702">Mit Google suchen</translation> <translation id="4098667039111970300">Eingabestift-Tools in Symbolleiste</translation> <translation id="4099060993766194518">Standardsuchmaschine wiederherstellen?</translation> @@ -4086,6 +4089,7 @@ <translation id="5678550637669481956">Lese- und Schreibzugriff auf <ph name="VOLUME_NAME" /> wurde zugelassen.</translation> <translation id="5678955352098267522">Ihre Daten auf <ph name="WEBSITE_1" /> lesen</translation> <translation id="5680050361008726776">„<ph name="ESIM_PROFILE_NAME" />“ entfernen?</translation> +<translation id="5683806393796685434">Geben Ihren Aktivierungscode ein</translation> <translation id="5684181005476681636">WLAN-Details</translation> <translation id="5684661240348539843">Asset-ID</translation> <translation id="5687326903064479980">Zeitzone</translation> @@ -4337,6 +4341,7 @@ <translation id="5978277834170881274">&Einfache Rechtschreibprüfung verwenden</translation> <translation id="5979084224081478209">Passwörter prüfen</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Sie haben 1 potenziell schädliche Erweiterung wieder aktiviert}other{Sie haben {NUM_EXTENSIONS} potenziell schädliche Erweiterungen wieder aktiviert}}</translation> +<translation id="5979353814339191480">Diese Option ist für Chromebooks relevant, die mit einem Datentarif oder einem Dongle für ein Mobilfunknetz verwendet werden oder per Tethering mit einem mobilen Hotspot verbunden sind</translation> <translation id="5979421442488174909">&Auf <ph name="LANGUAGE" /> übersetzen</translation> <translation id="5979469435153841984">Klicken Sie auf den Stern in der Adressleiste, um Seiten als Lesezeichen zu speichern</translation> <translation id="5984222099446776634">Kürzlich besucht</translation> @@ -4816,6 +4821,7 @@ <translation id="653659894138286600">Dokumente und Bilder scannen</translation> <translation id="6537613839935722475">Der Name darf aus Buchstaben, Ziffern und Bindestrichen (-) bestehen</translation> <translation id="6537880577641744343">Commander</translation> +<translation id="6538098297809675636">Fehler bei Codeerkennung</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Hinweis:<ph name="END_BOLD" /> Aktivieren Sie diese Option nur dann, wenn Sie dazu aufgefordert wurden und sich sicher sind, dass es unbedenklich ist. Die Datenerfassung kann die Leistung verringern.</translation> <translation id="6541638731489116978">Diese Website darf nicht auf Ihre Bewegungssensoren zugreifen.</translation> <translation id="6545665334409411530">Wiederholungsrate</translation> @@ -6012,6 +6018,7 @@ <translation id="7904526211178107182">Hier können Sie Linux-Ports für andere Geräte in Ihrem Netzwerk verfügbar machen.</translation> <translation id="7907837847548254634">Fokussiertes Element kurz hervorheben</translation> <translation id="7908378463497120834">Mindestens eine Partition auf Ihrem externen Speichergerät konnte nicht bereitgestellt werden.</translation> +<translation id="7909324225945368569">Profil umbenennen</translation> <translation id="7909969815743704077">Im Inkognitomodus heruntergeladen</translation> <translation id="7910768399700579500">&Neuer Ordner</translation> <translation id="7911118814695487383">Linux</translation> @@ -6628,6 +6635,7 @@ <translation id="8642900771896232685">2 Sekunden</translation> <translation id="8642947597466641025">Schriftgrad vergrößern</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> könnte schädlich sein. Soll sie zum Scannen an das erweiterte Sicherheitsprogramm von Google gesendet werden?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{Keine Cookies}=1{1 Cookie ist blockiert}other{# Cookies sind blockiert}}</translation> <translation id="8644655801811752511">Dieser Sicherheitsschlüssel kann nicht zurückgesetzt werden. Versuchen Sie, den Schlüssel direkt nach dem Einstecken zurückzusetzen.</translation> <translation id="8645354835496065562">Zugriff auf Sensor weiterhin zulassen</translation> <translation id="8645920082661222035">Erkennt schädliche Ereignisse im Voraus und warnt Sie, bevor sie eintreten</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 0e9e264..a4b6da8 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Προεπιλογή</translation> <translation id="1252987234827889034">Προέκυψε σφάλμα προφίλ</translation> <translation id="1254593899333212300">Άμεση σύνδεση στο διαδίκτυο</translation> +<translation id="1257553931232494454">επίπεδα εστίασης</translation> <translation id="1259152067760398571">Ο έλεγχος ασφαλείας εκτελέστηκε χθες.</translation> <translation id="1260451001046713751">Να εμφανίζονται πάντα αναδυόμενα παράθυρα από <ph name="HOST" /></translation> <translation id="1261380933454402672">Μέτρια</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Επίσης, ελέγχει τη σελίδα που εμφανίζεται όταν κάνετε αναζήτηση από το κύριο πλαίσιο.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Για να καταργήσετε εφαρμογές, μεταβείτε στις Ρυθμίσεις > Google Play Store > Διαχείριση προτιμήσεων Android > Εφαρμογές ή Διαχείριση εφαρμογών. Έπειτα, πατήστε την εφαρμογή που θέλετε να απεγκαταστήσετε (μπορεί να χρειαστεί να σύρετε προς τα δεξιά ή προς τα αριστερά για να βρείτε την εφαρμογή). Στη συνέχεια, πατήστε Απεγκατάσταση ή Απενεργοποίηση.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Αποστολή αίτησης...</translation> +<translation id="1733064249834771892">γραμματοσειρές</translation> <translation id="1733383495376208985">Κρυπτογραφήστε δεδομένα συγχρονισμού με τη δική σας <ph name="BEGIN_LINK" />φράση πρόσβασης συγχρονισμού<ph name="END_LINK" />. Αυτά τα δεδομένα δεν περιλαμβάνουν τρόπους πληρωμής και διευθύνσεις από το Google Pay.</translation> <translation id="1734212868489994726">Ανοιχτό μπλε</translation> <translation id="1734230530703461088">Αποτυχία φόρτωσης των επεκτάσεων εντός του χρονικού ορίου. Επικοινωνήστε με τον διαχειριστή.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Η μεταφόρτωση του αρχείου καταγραφής βρίσκεται σε εξέλιξη.</translation> <translation id="1819721979226826163">Πατήστε Ειδοποιήσεις εφαρμογών > Υπηρεσίες Google Play.</translation> <translation id="1820028137326691631">Καταχωρίστε τον κωδικό πρόσβασης που παρασχέθηκε από τον διαχειριστή</translation> +<translation id="182139138257690338">αυτόματες λήψεις</translation> <translation id="1822140782238030981">Είστε ήδη χρήστης του Chrome; Συνδεθείτε</translation> <translation id="18245044880483936">Τα δεδομένα αντιγράφων ασφαλείας δεν υπολογίζονται στο όριο του αποθηκευτικού χώρου του παιδιού σας στο Drive.</translation> <translation id="1825565032302550710">Η θύρα πρέπει να οριστεί μεταξύ 1024 και 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">Ε&πανάληψη φόρτωσης εφαρμογής</translation> <translation id="2327492829706409234">Ενεργοποίηση εφαρμογής</translation> <translation id="2328561734797404498">Για να χρησιμοποιήσετε την εφαρμογή <ph name="APP_NAME" />, επανεκκινήστε τη συσκευή σας.</translation> +<translation id="2329182534073751090">τοποθέτηση παραθύρου</translation> <translation id="2329597144923131178">Συνδεθείτε για χρήση σελιδοδεικτών, ιστορικού, κωδ.πρόσβ. κ.λπ. σε όλες τις συσκευές.</translation> <translation id="2332131598580221120">Προβολή στο Web Store</translation> <translation id="2332192922827071008">Άνοιγμα προτιμήσεων</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Νέα καρτέλα στην ομάδα</translation> <translation id="289644616180464099">Η κάρτα SIM είναι κλειδωμένη</translation> <translation id="289695669188700754">Αναγνωριστικό κλειδιού: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Αυτή η προσαρμοσμένη ρύθμιση θα καταργηθεί όταν κλείσετε όλα τα παράθυρα ανώνυμης περιήγησης</translation> <translation id="2897878306272793870">Είστε βέβαιοι ότι θέλετε να ανοίξετε <ph name="TAB_COUNT" /> καρτέλες;</translation> <translation id="290105521672621980">Το αρχείο χρησιμοποιεί μη υποστηριζόμενες λειτουργίες</translation> <translation id="2902127500170292085">Δεν ήταν δυνατή η επικοινωνία της επέκτασης <ph name="EXTENSION_NAME" /> με αυτόν τον εκτυπωτή. Βεβαιωθείτε ότι ο εκτυπωτής είναι συνδεδεμένος και δοκιμάστε ξανά.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Τα δεδομένα κρυπτογραφούνται με τη φράση πρόσβασης συγχρονισμού σας. Αυτά τα δεδομένα δεν περιλαμβάνουν τρόπους πληρωμής και διευθύνσεις από το Google Pay.</translation> <translation id="2996722619877761919">Αναστροφή στη μεγάλη πλευρά</translation> <translation id="3000236644796679448">Οι ιστότοποι μπορούν να ζητούν να χρησιμοποιήσουν το μικρόφωνό σας (συνιστάται)</translation> +<translation id="3000378525979847272">Επιτράπηκαν οι άδειες <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Μονοφωνικός ήχος</translation> <translation id="3001144475369593262">Παιδικοί λογαριασμοί</translation> <translation id="3003144360685731741">Προτιμώμενα δίκτυα</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Άνοιγμα PDF σε προεπισκόπηση</translation> <translation id="3308116878371095290">Σε αυτήν τη σελίδα δεν έχει επιτραπεί ο ορισμός των cookie.</translation> <translation id="3308134619352333507">Απόκρυψη κουμπιού</translation> +<translation id="3308738399950580893">διαφημίσεις</translation> <translation id="3308852433423051161">Φόρτωση Βοηθού Google…</translation> <translation id="3309330461362844500">Αναγνωριστικό προφίλ πιστοποιητικού</translation> <translation id="3311445899360743395">Τα δεδομένα που σχετίζονται με αυτήν την εφαρμογή μπορεί να καταργηθούν από αυτήν τη συσκευή.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Αυτό το αρχείο είναι κρυπτογραφημένο. Ζητήστε από τον κάτοχό του να το αποκρυπτογραφήσει.</translation> <translation id="3390013585654699824">Λεπτομέρειες εφαρμογής</translation> <translation id="3390741581549395454">Δημιουργήθηκαν επιτυχώς αντίγραφα ασφαλείας για τις εφαρμογές και τα αρχεία Linux. Η αναβάθμιση θα ξεκινήσει σύντομα.</translation> +<translation id="3391482648489541560">επεξεργασία αρχείου</translation> <translation id="339178315942519818">Προβολή ειδοποιήσεων από τις εφαρμογές συζήτησης στη συσκευή σας <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Εάν κάνετε κλικ στο κουμπί "Αποδοχή και συνέχεια", αποδέχεστε την επεξεργασία που περιγράφεται παραπάνω για αυτές τις υπηρεσίες Google.</translation> <translation id="3399432415385675819">Οι ειδοποιήσεις θα απενεργοποιηθούν</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Ρυθμός αποφόρτισης μπαταρίας σε Watt (Τυχόν αρνητική τιμή σημαίνει ότι η μπαταρία φορτίζεται)</translation> <translation id="4256316378292851214">Απο&θήκευση Βίντεο Ως...</translation> <translation id="4258348331913189841">Συστήματα αρχείων</translation> +<translation id="4259381619085088639">η παρουσία σας</translation> <translation id="4259388776256904261">Μπορεί να χρειαστεί λίγη ώρα</translation> <translation id="4260182282978351200">Το αρχείο <ph name="FILE_NAME" /> ενδέχεται να είναι επικίνδυνο. Αποστολή στη Σύνθετη προστασία Google για σάρωση; Πατήστε Shift+F6 για να μεταβείτε στη γραμμή λήψεων.</translation> <translation id="4263223596040212967">Ελέγξτε τη διάταξη του πληκτρολογίου και δοκιμάστε ξανά.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Ρυθμίστε νέο PIN για το κλειδί ασφαλείας σας</translation> <translation id="4305402730127028764">Αντιγραφή στη συσκευή <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Οι εφαρμογές θα πρέπει να προβάλλονται με τον τύπο περιεχομένου "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">πρόχειρο</translation> <translation id="4307992518367153382">Βασικά στοιχεία</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (πραγματικά <ph name="NUM_KILOBYTES_LIVE" />K)</translation> <translation id="4310139701823742692">Λανθασμένη μορφή αρχείου. Ελέγξτε το αρχείο PPD και δοκιμάστε ξανά.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Κέντρο βοήθειας</translation> <translation id="44141919652824029">Να επιτρέπεται στην εφαρμογή "<ph name="APP_NAME" />" να λάβει τη λίστα των προσαρτημένων συσκευών USB;</translation> <translation id="4414232939543644979">Νέο &παράθυρο ανώνυμης περιήγηση</translation> +<translation id="4414515549596849729">cookie και δεδομένα ιστοτόπου</translation> <translation id="4415213869328311284">Είστε έτοιμοι να ξεκινήσετε να χρησιμοποιείτε τη συσκευή σας <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Δεν βρέθηκαν συσκευές. Ανοίξτε ένα άρθρο του κέντρο βοήθειας σε νέα καρτέλα.</translation> <translation id="4415276339145661267">Διαχείριση Λογαριασμού Google</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Προτεινόμενο (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Να μην γίνεται εμφάνιση σε αυτήν τη σελίδα</translation> <translation id="4500114933761911433">Η προσθήκη <ph name="PLUGIN_NAME" /> παρουσίασε σφάλμα</translation> +<translation id="4500587658229086076">μη ασφαλές περιεχόμενο</translation> <translation id="450099669180426158">Εικονίδιο θαυμαστικού</translation> <translation id="4501530680793980440">Επιβεβαίωση κατάργησης</translation> <translation id="4502423230170890588">Κατάργηση από αυτήν τη συσκευή</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Να γίνεται πάντα αποκλεισμός των προσθηκών εκτός περιβάλλοντος δοκιμών σε <ph name="HOST" /></translation> <translation id="4538792345715658285">Εγκαταστάθηκε από την εταιρική πολιτική.</translation> <translation id="4541662893742891060">Δεν είναι δυνατή η σύνδεση σε αυτό το προφίλ. Για τεχνική υποστήριξη, επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας.</translation> +<translation id="4541810033354695636">επαυξημένη πραγματικότητα</translation> <translation id="4542520061254486227">Ανάγνωση των δεδομένων σας στο <ph name="WEBSITE_1" /> και στο <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Πρόγραμμα διαχείρισης πιστοποιητικών</translation> <translation id="4544174279960331769">Προεπιλεγμένο μπλε avatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">&Εργαλεία για Προγραμματιστές</translation> <translation id="5113739826273394829">Κάνοντας κλικ σε αυτό το εικονίδιο, θα κλειδώσετε με μη αυτόματο τρόπο αυτήν τη συσκευή <ph name="DEVICE_TYPE" />. Την επόμενη φορά, θα χρειαστεί να πληκτρολογήσετε τον κωδικό πρόσβασής σας για να εισέλθετε.</translation> <translation id="51143538739122961">Εισαγάγετε το κλειδί ασφαλείας σας και αγγίξτε το</translation> +<translation id="5114987907971894280">εικονική πραγματικότητα</translation> <translation id="5115309401544567011">Συνδέστε τη συσκευή <ph name="DEVICE_TYPE" /> σε τροφοδοσία ρεύματος.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Απο&θήκευση ήχου ως...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Εκτέλεση αυτή τη φορά</translation> <translation id="5464660706533281090">Δεν είναι δυνατή η αλλαγή αυτής της ρύθμισης από ένα παιδί.</translation> <translation id="5466374726908360271">Επικόλληση και αναζήτηση για "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Αποκλείστηκαν οι άδειες <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Οι ιστότοποι μπορούν να ζητούν την αναπαραγωγή προστατευμένου περιεχομένου (συνιστάται)</translation> <translation id="5468173180030470402">Αναζήτηση για κοινές χρήσεις αρχείου</translation> <translation id="5469852975082458401">Μπορείτε να πλοηγηθείτε σε σελίδες με δείκτη κειμένου. Πατήστε F7 για απενεργοποίηση.</translation> @@ -4191,6 +4206,7 @@ <translation id="5794786537412027208">Τερματισμός όλων των εφαρμογών του Chrome</translation> <translation id="5797070761912323120">Η Google μπορεί να χρησιμοποιήσει το ιστορικό σας για την εξατομίκευση της Αναζήτησης, των διαφημίσεων και άλλων υπηρεσιών Google</translation> <translation id="5798301976526354562">Μέγεθος κειμένου (Ισχύει επίσης για Ζωντανούς υπότιτλους)</translation> +<translation id="579907812742603813">προστατευμένο περιεχόμενο</translation> <translation id="579915268381781820">Το κλειδί ασφαλείας καταργήθηκε.</translation> <translation id="5799508265798272974">Εικονικό μηχάνημα Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Το αρχείο προορισμού περικόπηκε ή καταργήθηκε από την τελευταία λήψη.</translation> @@ -4264,6 +4280,7 @@ <translation id="5877064549588274448">Το κανάλι έχει αλλάξει. Επανεκκινήστε τη συσκευή σας για να εφαρμόσετε τις αλλαγές.</translation> <translation id="5877584842898320529">Ο επιλεγμένος εκτυπωτής δεν είναι διαθέσιμος ή δεν έχει εγκατασταθεί σωστά. <ph name="BR" /> Ελέγξτε τον εκτυπωτή σας ή δοκιμάστε να επιλέξετε άλλον εκτυπωτή.</translation> <translation id="5882919346125742463">Γνωστά δίκτυα</translation> +<translation id="5883356647197510494">Αποκλείστηκαν αυτόματα οι άδειες <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Αυτή η καρτέλα είναι συνδεδεμένη σε μια συσκευή USB.</translation> <translation id="5886009770935151472">Δάκτυλο 1</translation> <translation id="5889282057229379085">Μέγιστος αριθμός ενδιάμεσων CA: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4763,6 +4780,7 @@ <translation id="6460601847208524483">Εύρεση επόμενου</translation> <translation id="6461170143930046705">Αναζήτηση δικτύων…</translation> <translation id="6463795194797719782">Επε&ξεργασία</translation> +<translation id="6464094930452079790">εικόνες</translation> <translation id="6464825623202322042">Αυτή η συσκευή</translation> <translation id="6465841119675156448">Χωρίς διαδίκτυο</translation> <translation id="6466988389784393586">Άνοιγμα Όλων των Σελιδοδεικτών</translation> @@ -4786,6 +4804,7 @@ <translation id="6491376743066338510">Αποτυχία εξουσιοδότησης</translation> <translation id="6494327278868541139">Εμφάνιση λεπτομερειών βελτιωμένης ασφάλειας</translation> <translation id="6494445798847293442">Δεν είναι Αρχή πιστοποίησης</translation> +<translation id="6494750904506170417">αναδυόμενα και ανακατευθύνσεις</translation> <translation id="6494974875566443634">Προσαρμογή</translation> <translation id="6495925982925244349">Δίκτυο <ph name="NETWORK_INDEX" /> από <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Ισχύς σήματος <ph name="SIGNAL_STRENGTH" />%, Διαχειριζόμενο από τον διαχειριστή σας, Λεπτομέρειες</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Αυτά τα δεδομένα έχουν ευαίσθητο ή επικίνδυνο περιεχόμενο.}=1{Αυτό το αρχείο έχει ευαίσθητο ή επικίνδυνο περιεχόμενο.}other{Αυτά τα αρχεία έχουν ευαίσθητο ή επικίνδυνο περιεχόμενο.}}</translation> @@ -4926,6 +4945,7 @@ <translation id="6657585470893396449">Κωδικός πρόσβασης</translation> <translation id="6659213950629089752">Έγινε εστίαση σε αυτήν τη σελίδα από την επέκταση "<ph name="NAME" />"</translation> <translation id="6659594942844771486">Καρτέλα</translation> +<translation id="6660413144148052430">τοποθεσία</translation> <translation id="666099631117081440">Διακομιστές εκτύπωσης</translation> <translation id="6663190258859265334">Εκτελέστε Powerwash στη συσκευή σας <ph name="DEVICE_TYPE" /> και επιστρέψτε στην προηγούμενη έκδοση.</translation> <translation id="6664237456442406323">Δυστυχώς, ο υπολογιστής σας έχει διαμορφωθεί με ένα εσφαλμένο αναγνωριστικό υλικού. Αυτό παρεμποδίζει την ενημέρωση του Chrome OS με τις πιο πρόσφατες επιδιορθώσεις ασφαλείας και ο υπολογιστής σας <ph name="BEGIN_BOLD" />ενδέχεται να είναι ευάλωτος σε κακόβουλες επιθέσεις<ph name="END_BOLD" />.</translation> @@ -4980,6 +5000,7 @@ <translation id="672609503628871915">Δείτε τι νέο υπάρχει</translation> <translation id="67269783048918309">Αποστολή δεδομένων χρήσης και διαγνωστικών. Επί του παρόντος, αυτή η συσκευή στέλνει αυτόματα διαγνωστικά δεδομένα, δεδομένα συσκευής και χρήσης εφαρμογών στην Google. Αυτά τα δεδομένα δεν θα χρησιμοποιηθούν για την ταυτοποίηση του παιδιού σας και θα βοηθήσουν με τη σταθερότητα του συστήματος και των εφαρμογών και την παροχή άλλων βελτιώσεων. Ορισμένα συγκεντρωτικά δεδομένα θα βοηθήσουν επίσης τις εφαρμογές και τους συνεργάτες της Google, όπως τους προγραμματιστές Android. Αυτή η <ph name="BEGIN_LINK1" />ρύθμιση<ph name="END_LINK1" /> επιβάλλεται από τον κάτοχο. Εάν είναι ενεργή η ρύθμιση της πρόσθετης Δραστηριότητας ιστού και εφαρμογών για το παιδί σας, αυτά τα δεδομένα μπορεί να αποθηκευτούν στον Λογαριασμό του Google. <ph name="BEGIN_LINK2" />Μάθετε περισσότερα<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Συνδεδεμένη, μπαταρία <ph name="BATTERY_PERCENTAGE" /> %</translation> +<translation id="6732087373923685049">κάμερα</translation> <translation id="6732801395666424405">Δεν έχουν φορτωθεί τα πιστοποιητικά</translation> <translation id="6732900235521116609">Δεν είναι δυνατή η κατάργηση της συντόμευσης</translation> <translation id="6734468588183300211">Ενώ βρίσκεστε σε κατάσταση ανώνυμης περιήγησης, οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν τα cookie σας για να βλέπουν τη δραστηριότητα περιήγησής σας μεταξύ διαφορετικών ιστοτόπων όπως, για παράδειγμα, για την εξατομίκευση των διαφημίσεων. Μπορεί να παρουσιαστούν προβλήματα με τη λειτουργία ορισμένων ιστοτόπων.</translation> @@ -5054,6 +5075,7 @@ <translation id="6817174620439930047">Να γίνεται ερώτηση όταν ένας ιστότοπος θέλει να χρησιμοποιήσει αποκλειστικά μηνύματα συστήματος για την πρόσβαση σε συσκευές MIDI (συνιστάται)</translation> <translation id="6818198425579322765">Γλώσσα σελίδας προς μετάφραση</translation> <translation id="6818802132960437751">Ενσωματωμένη προστασία από ιούς</translation> +<translation id="6820143000046097424">σειριακές θύρες</translation> <translation id="682123305478866682">Μετάδοση επιφάνειας εργασίας</translation> <translation id="6823174134746916417">Άγγιγμα για κλικ οθόνης αφής</translation> <translation id="6824564591481349393">Αντιγραφή Διεύθυνσης &Ηλεκτρονικού Ταχυδρομείου</translation> @@ -5487,6 +5509,7 @@ <translation id="730515362922783851">Ανταλλαγή δεδομένων με οποιαδήποτε συσκευή στο τοπικό δίκτυο ή το διαδίκτυο</translation> <translation id="7306521477691455105">Ανοίξτε τις ρυθμίσεις για να συνδέσετε το <ph name="USB_DEVICE_NAME" /> στο <ph name="USB_VM_NAME" />.</translation> <translation id="7307129035224081534">Σε παύση</translation> +<translation id="7308436126008021607">συγχρονισμός παρασκηνίου</translation> <translation id="7309257895202129721">Εμφάνιση &στοιχείων ελέγχου</translation> <translation id="7310598146671372464">Η σύνδεση απέτυχε. Ο διακομιστής δεν υποστηρίζει τους καθορισμένους τύπους κρυπτογράφησης Kerberos. Επικοινωνήστε με τον διαχειριστή σας.</translation> <translation id="7320213904474460808">Προεπιλογή δικτύου</translation> @@ -5628,6 +5651,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Απαιτείται άμεση επιστροφή}other{Επιστροφή συσκευής (<ph name="DEVICE_TYPE" />) εντός {NUM_DAYS} ημερών}}</translation> <translation id="7475671414023905704">URL χαμένου κωδικού πρόσβασης Netscape</translation> <translation id="7476454130948140105">Η ισχύς της μπαταρίας είναι πολύ χαμηλή για ενημέρωση (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Αποκλείστηκε αυτόματα η άδεια <ph name="PERMISSION" /> και <ph name="COUNT" /> ακόμη άδειες</translation> <translation id="7477793887173910789">Ελέγξτε τη μουσική σας, τα βίντεο και περισσότερα</translation> <translation id="7478485216301680444">Δεν ήταν δυνατή η εγκατάσταση της εφαρμογής Kiosk.</translation> <translation id="7478623944308207463">Οι εφαρμογές και οι ρυθμίσεις σας θα συγχρονιστούν σε όλες τις συσκευές Chrome OS, στις οποίες έχετε συνδεθεί με τον Λογαριασμό σας Google. Για επιλογές συγχρονισμού προγράμματος περιήγησης, μεταβείτε στις <ph name="LINK_BEGIN" />Ρυθμίσεις Chrome<ph name="LINK_END" />.</translation> @@ -6372,6 +6396,7 @@ <translation id="8288032458496410887">Απεγκατάσταση εφαρμογής <ph name="APP" />…</translation> <translation id="8289128870594824098">Μέγεθος δίσκου</translation> <translation id="8293206222192510085">Προσθήκη σελιδοδείκτη</translation> +<translation id="829335040383910391">ήχος</translation> <translation id="8294431847097064396">Πηγή</translation> <translation id="8298429963694909221">Μπορείτε πλέον να λαμβάνετε ειδοποιήσεις από το τηλέφωνό σας στη συσκευή <ph name="DEVICE_TYPE" />. Η παράβλεψη των ειδοποιήσεων στη συσκευή <ph name="DEVICE_TYPE" /> θα έχει ως αποτέλεσμα την παράβλεψή τους και στο τηλέφωνό σας. Βεβαιωθείτε ότι το τηλέφωνο βρίσκεται κοντά σας και έχει ενεργοποιημένο το Bluetooth και το Wi-Fi.</translation> <translation id="8299319456683969623">Είστε εκτός σύνδεσης αυτήν τη στιγμή</translation> @@ -6390,6 +6415,7 @@ <translation id="8317671367883557781">Προσθήκη σύνδεσης δικτύου</translation> <translation id="8319414634934645341">Εκτεταμένη χρήση κλειδιού</translation> <translation id="8320459152843401447">Ολόκληρη η οθόνη σας</translation> +<translation id="8321476692217554900">ειδοποιήσεις</translation> <translation id="8321837372750396788">Η διαχείριση της συσκευής <ph name="DEVICE_TYPE" /> θα γίνεται από τον τομέα <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Αυτή η σελίδα δεν έχει πρόσβαση στο μικρόφωνό σας.</translation> <translation id="8323167517179506834">Πληκτρολογήστε μια διεύθυνση URL</translation> @@ -6455,7 +6481,9 @@ <translation id="8403562727702715619">Πρόσφατα από το Google Drive</translation> <translation id="8407199357649073301">Επίπεδο καταγραφής:</translation> <translation id="8408068190360279472">Δίκτυο <ph name="NETWORK_TYPE" />, σύνδεση σε εξέλιξη</translation> +<translation id="8409413588194360210">δείκτες χειρισμού για πληρωμές</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Επιτράπηκε η άδεια <ph name="PERMISSION" /> και <ph name="COUNT" /> ακόμη άδειες</translation> <translation id="8413385045638830869">Να γίνεται ερώτηση πρώτα (συνιστάται)</translation> <translation id="8417548266957501132">Κωδικός πρόσβασης γονέα</translation> <translation id="8418445294933751433">&Εμφάνιση ως καρτέλα</translation> @@ -6651,6 +6679,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ή <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Θερμοκρασία χρώματος Νυχτερινού φωτισμού</translation> <translation id="8648544143274677280">Ο ιστότοπος <ph name="SITE_NAME" /> επιθυμεί τις άδειες: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> και ακόμη</translation> +<translation id="865032292777205197">αισθητήρες κίνησης</translation> <translation id="8650543407998814195">Παρόλο που δεν μπορείτε πλέον να αποκτήσετε πρόσβαση στο παλιό σας προφίλ, μπορείτε ακόμη να το καταργήσετε.</translation> <translation id="8651585100578802546">Υποχρεωτική επαναφόρτωση αυτής της σελίδας</translation> <translation id="8652400352452647993">Σφάλμα στοίβαξης επέκτασης</translation> @@ -6785,6 +6814,7 @@ <translation id="8785622406424941542">Γραφίδα</translation> <translation id="8787254343425541995">Να επιτρέπονται οι διακομιστές μεσολάβησης για κοινόχρηστα δίκτυα</translation> <translation id="8791534160414513928">Να αποστέλλεται ένα αίτημα "Να μην γίνεται εντοπισμός" με την επισκεψιμότητα της περιήγησής σας</translation> +<translation id="8792626944327216835">μικρόφωνο</translation> <translation id="879413103056696865">Ενώ το σημείο πρόσβασης Wi-Fi είναι ενεργό, το τηλέφωνο <ph name="PHONE_NAME" /> θα:</translation> <translation id="8795916974678578410">Νέο Παράθυρο</translation> <translation id="8797459392481275117">Να μη γίνεται ποτέ μετάφραση αυτού του ιστοτόπου</translation> @@ -6824,6 +6854,7 @@ <translation id="8823559166155093873">Αποκλεισμός cookie</translation> <translation id="8823704566850948458">Πρόταση για κωδικό πρόσβασης…</translation> <translation id="8824701697284169214">Προσθήκη σελί&δας...</translation> +<translation id="8827125715368568315">Αποκλείστηκε η άδεια <ph name="PERMISSION" /> και <ph name="COUNT" /> ακόμη άδειες</translation> <translation id="8827289157496676362">Καρφίτσωμα επέκτασης</translation> <translation id="8827752199525959199">Περισσότερες ενέργειες, κωδικός πρόσβασης για τον χρήστη <ph name="USERNAME" /> στον τομέα <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Να μην επιτρέπεται σε κανέναν ιστότοπο ο εντοπισμός κοντινών συσκευών Bluetooth</translation> @@ -6924,6 +6955,7 @@ <translation id="8932894639908691771">Επιλογές πρόσβασης με διακόπτη</translation> <translation id="8933960630081805351">&Εμφάνιση στο Finder</translation> <translation id="8934732568177537184">Συνέχεια</translation> +<translation id="8938306522009698937">δείκτες χειρισμού</translation> <translation id="8938800817013097409">Συσκευή USB-C (πίσω δεξιά θύρα)</translation> <translation id="8940081510938872932">Αυτήν τη στιγμή, ο υπολογιστής σας εκτελεί πολλές εργασίες. Δοκιμάστε ξανά αργότερα.</translation> <translation id="8941173171815156065">Ανάκληση της άδειας "<ph name="PERMISSION" />"</translation> @@ -7228,6 +7260,7 @@ <translation id="987264212798334818">Γενικά</translation> <translation id="987897973846887088">Δεν υπάρχουν διαθέσιμες εικόνες</translation> <translation id="988978206646512040">Δεν επιτρέπεται να είναι κενή η φράση πρόσβασης</translation> +<translation id="991413375315957741">αισθητήρες κίνησης ή φωτός</translation> <translation id="992032470292211616">Οι επεκτάσεις, οι εφαρμογές και τα θέματα ενδέχεται να βλάψουν τη συσκευή σας. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;</translation> <translation id="992256792861109788">Ροζ</translation> <translation id="992592832486024913">Απενεργοποίηση ChromeVox (προφορικά σχόλια)</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 9912d634..29bb18e 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Default</translation> <translation id="1252987234827889034">Profile error occurred</translation> <translation id="1254593899333212300">Direct Internet connection</translation> +<translation id="1257553931232494454">zoom levels</translation> <translation id="1259152067760398571">Safety check ran yesterday</translation> <translation id="1260451001046713751">Always allow pop-ups and redirects from <ph name="HOST" /></translation> <translation id="1261380933454402672">Modest</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">It also controls what page is shown when you search from the Omnibox.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />To remove apps, go to Settings > Google Play Store > Manage Android preferences > Apps or Application manager. Then tap the app that you want to uninstall (you may need to swipe right or left to find the app). Then tap Uninstall or Disable.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Sending request...</translation> +<translation id="1733064249834771892">fonts</translation> <translation id="1733383495376208985">Encrypt synced data with your own <ph name="BEGIN_LINK" />sync passphrase<ph name="END_LINK" />. This doesn't include payment methods and addresses from Google Pay.</translation> <translation id="1734212868489994726">Light blue</translation> <translation id="1734230530703461088">Failed to load extensions within the time limit. Please contact your administrator.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Log upload underway.</translation> <translation id="1819721979226826163">Tap App notifications > Google Play services.</translation> <translation id="1820028137326691631">Enter admin-provided password</translation> +<translation id="182139138257690338">automatic downloads</translation> <translation id="1822140782238030981">Already a Chrome user? Sign in</translation> <translation id="18245044880483936">Backup data will not count toward your child's Drive storage quota.</translation> <translation id="1825565032302550710">Port must be between 1024 and 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Reload app</translation> <translation id="2327492829706409234">Enable app</translation> <translation id="2328561734797404498">Please restart your device to use <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">window placement</translation> <translation id="2329597144923131178">Sign in to get your bookmarks, history, passwords and other settings on all your devices</translation> <translation id="2332131598580221120">View in store</translation> <translation id="2332192922827071008">Open preferences</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">New tab in group</translation> <translation id="289644616180464099">SIM card is locked</translation> <translation id="289695669188700754">Key ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">This custom setting will be removed when you close all your incognito windows</translation> <translation id="2897878306272793870">Are you sure that you want to open <ph name="TAB_COUNT" /> tabs?</translation> <translation id="290105521672621980">File uses unsupported features</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> could not communicate with this printer. Make sure that the printer is plugged in and try again.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Data is encrypted with your sync passphrase. This doesn't include payment methods and addresses from Google Pay.</translation> <translation id="2996722619877761919">Flip on long edge</translation> <translation id="3000236644796679448">Sites can ask to use your microphone (recommended)</translation> +<translation id="3000378525979847272">Allowed <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Mono audio</translation> <translation id="3001144475369593262">Child accounts</translation> <translation id="3003144360685731741">Preferred networks</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Open PDF in Preview</translation> <translation id="3308116878371095290">This page was prevented from setting cookies.</translation> <translation id="3308134619352333507">Hide Button</translation> +<translation id="3308738399950580893">ads</translation> <translation id="3308852433423051161">Loading Google Assistant...</translation> <translation id="3309330461362844500">Certificate profile ID</translation> <translation id="3311445899360743395">Data associated with this app may be removed from this device.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">This file is encrypted. Ask its owner to decrypt it.</translation> <translation id="3390013585654699824">App details</translation> <translation id="3390741581549395454">Linux apps and files have been successfully backed up. Upgrade will begin shortly.</translation> +<translation id="3391482648489541560">file editing</translation> <translation id="339178315942519818">View notifications from your chat apps on your <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">By clicking the 'Accept and continue' button, you agree to the processing described above for these Google services.</translation> <translation id="3399432415385675819">Notifications will be disabled</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Battery Discharge Rate in Watts (Negative value means battery is charging)</translation> <translation id="4256316378292851214">Sa&ve Video As...</translation> <translation id="4258348331913189841">File System</translation> +<translation id="4259381619085088639">your presence</translation> <translation id="4259388776256904261">This may take a while</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> may be dangerous. Send to Google Advanced Protection for scanning? Press Shift + F6 to cycle to the downloads bar area.</translation> <translation id="4263223596040212967">Check your keyboard layout and try again.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Set up a new PIN for your security key</translation> <translation id="4305402730127028764">Copy to <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Apps must be served with content-type '<ph name="CONTENT_TYPE" />'</translation> +<translation id="4306812610847412719">clipboard</translation> <translation id="4307992518367153382">Basics</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation> <translation id="4310139701823742692">File is in the wrong format. Check the PPD file and try again.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Help Centre</translation> <translation id="44141919652824029">Allow '<ph name="APP_NAME" />' to get the list of your attached USB devices?</translation> <translation id="4414232939543644979">New &Incognito Window</translation> +<translation id="4414515549596849729">cookies and site data</translation> <translation id="4415213869328311284">You are ready to start using your <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">No devices found. Open a help centre article in a new tab.</translation> <translation id="4415276339145661267">Manage your Google Account</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Recommended (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Don't show on this page</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> has crashed</translation> +<translation id="4500587658229086076">insecure content</translation> <translation id="450099669180426158">Exclamation mark icon</translation> <translation id="4501530680793980440">Confirm Removal</translation> <translation id="4502423230170890588">Remove from this device</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Always block unsandboxed plug-ins on <ph name="HOST" /></translation> <translation id="4538792345715658285">Installed by enterprise policy.</translation> <translation id="4541662893742891060">Unable to connect to this profile. For technical support, please contact your operator.</translation> +<translation id="4541810033354695636">augmented reality</translation> <translation id="4542520061254486227">Read your data on <ph name="WEBSITE_1" /> and <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Certificate manager</translation> <translation id="4544174279960331769">Default blue avatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">&Developer Tools</translation> <translation id="5113739826273394829">If you click this icon, you will manually lock this <ph name="DEVICE_TYPE" />. Next time, you’ll need to type your password to enter.</translation> <translation id="51143538739122961">Insert your security key and touch it</translation> +<translation id="5114987907971894280">virtual reality</translation> <translation id="5115309401544567011">Please plug your <ph name="DEVICE_TYPE" /> into a power source.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Sa&ve Audio As...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Run this time</translation> <translation id="5464660706533281090">This setting can't be changed by a child user.</translation> <translation id="5466374726908360271">Paste and search for '<ph name="SEARCH_TERMS" />'</translation> +<translation id="5467207440419968613">Blocked <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Sites can ask to play protected content (recommended)</translation> <translation id="5468173180030470402">Looking for file shares</translation> <translation id="5469852975082458401">You can navigate pages with a text cursor. Press F7 to turn off.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Quit all Chrome Apps</translation> <translation id="5797070761912323120">Google may use your history to personalise Search, ads and other Google services</translation> <translation id="5798301976526354562">Text size (also applies to Live Caption)</translation> +<translation id="579907812742603813">protected content</translation> <translation id="579915268381781820">Your security key was removed.</translation> <translation id="5799508265798272974">Linux Virtual Machine: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Destination file was truncated or removed since last download.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Channel changed. Restart your device to apply changes.</translation> <translation id="5877584842898320529">The selected printer is not available or not installed correctly. <ph name="BR" /> Check your printer or try selecting another printer.</translation> <translation id="5882919346125742463">Known Networks</translation> +<translation id="5883356647197510494">Automatically blocked <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">This tab is connected to a USB device.</translation> <translation id="5886009770935151472">Finger 1</translation> <translation id="5889282057229379085">Maximum number of intermediate CAs: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Find Next</translation> <translation id="6461170143930046705">Searching for networks...</translation> <translation id="6463795194797719782">&Edit</translation> +<translation id="6464094930452079790">images</translation> <translation id="6464825623202322042">This device</translation> <translation id="6465841119675156448">Without Internet</translation> <translation id="6466988389784393586">&Open All Bookmarks</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Authorisation failed</translation> <translation id="6494327278868541139">Show enhanced protection details</translation> <translation id="6494445798847293442">Not a Certification Authority</translation> +<translation id="6494750904506170417">pop-ups and redirects</translation> <translation id="6494974875566443634">Customisation</translation> <translation id="6495925982925244349">Network <ph name="NETWORK_INDEX" /> of <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signal strength <ph name="SIGNAL_STRENGTH" />%, managed by your administrator, details</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{This data has sensitive or dangerous content}=1{This file has sensitive or dangerous content}other{These files have sensitive or dangerous content}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Password</translation> <translation id="6659213950629089752">This page was zoomed by the "<ph name="NAME" />" extension</translation> <translation id="6659594942844771486">Tab</translation> +<translation id="6660413144148052430">location</translation> <translation id="666099631117081440">Print servers</translation> <translation id="6663190258859265334">Powerwash your <ph name="DEVICE_TYPE" /> and return to the previous version.</translation> <translation id="6664237456442406323">Unfortunately, your computer is configured with a malformed hardware ID. This prevents Chrome OS from updating with the latest security fixes and your computer <ph name="BEGIN_BOLD" />may be vulnerable to malicious attacks<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">See what's new</translation> <translation id="67269783048918309">Send usage and diagnostic data. This device is currently automatically sending diagnostic, device and app usage data to Google. This won't be used to identify your child, and will help system and app stability and other improvements. Some aggregate data will also help Google apps and partners, such as Android developers. This <ph name="BEGIN_LINK1" />setting<ph name="END_LINK1" /> is enforced by the owner. If additional Web & App Activity setting is turned on for your child, this data may be saved to their Google Account. <ph name="BEGIN_LINK2" />Find out more<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Connected, <ph name="BATTERY_PERCENTAGE" />% battery</translation> +<translation id="6732087373923685049">camera</translation> <translation id="6732801395666424405">Certificates not loaded</translation> <translation id="6732900235521116609">Can’t remove shortcut</translation> <translation id="6734468588183300211">While in Incognito, sites can't use your cookies to see your browsing activity across different sites; for example, to personalise ads. Features on some sites may break.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Ask when a site wants to use system exclusive messages to access MIDI devices (recommended)</translation> <translation id="6818198425579322765">Page language to translate</translation> <translation id="6818802132960437751">Built-in virus protection</translation> +<translation id="6820143000046097424">serial ports</translation> <translation id="682123305478866682">Cast desktop</translation> <translation id="6823174134746916417">Touchpad tap-to-click</translation> <translation id="6824564591481349393">Copy &Email Address</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Exchange data with any device on the local network or Internet</translation> <translation id="7306521477691455105">Open Settings to connect <ph name="USB_DEVICE_NAME" /> to <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Paused</translation> +<translation id="7308436126008021607">background sync</translation> <translation id="7309257895202129721">Show &controls</translation> <translation id="7310598146671372464">Failed to log in. The server does not support specified Kerberos encryption types. Please contact your administrator.</translation> <translation id="7320213904474460808">Default to network</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Immediate return required}other{Return <ph name="DEVICE_TYPE" /> within {NUM_DAYS} days}}</translation> <translation id="7475671414023905704">Netscape Lost Password URL</translation> <translation id="7476454130948140105">Battery too low for update (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Automatically blocked <ph name="PERMISSION" /> and <ph name="COUNT" /> more</translation> <translation id="7477793887173910789">Control your music, videos and more</translation> <translation id="7478485216301680444">Kiosk application could not be installed.</translation> <translation id="7478623944308207463">Your apps and settings will sync across all Chrome OS devices where you are signed in with your Google Account. For browser sync options, go to <ph name="LINK_BEGIN" />Chrome settings<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Uninstall <ph name="APP" />...</translation> <translation id="8289128870594824098">Disk size</translation> <translation id="8293206222192510085">Add Bookmark</translation> +<translation id="829335040383910391">sound</translation> <translation id="8294431847097064396">Source</translation> <translation id="8298429963694909221">You can now receive notifications from your phone on your <ph name="DEVICE_TYPE" />. Dismissing notifications on your <ph name="DEVICE_TYPE" /> will also dismiss them on your phone. Make sure that your phone is nearby and has Bluetooth and Wi-Fi turned on.</translation> <translation id="8299319456683969623">You are currently offline.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Add network connection</translation> <translation id="8319414634934645341">Extended Key Usage</translation> <translation id="8320459152843401447">Your Entire Screen</translation> +<translation id="8321476692217554900">notifications</translation> <translation id="8321837372750396788">This <ph name="DEVICE_TYPE" /> will be managed by <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">This page has been blocked from accessing your microphone.</translation> <translation id="8323167517179506834">Type URL</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Recently from Google Drive</translation> <translation id="8407199357649073301">Log level:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> network, connecting</translation> +<translation id="8409413588194360210">payment handlers</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Allowed <ph name="PERMISSION" /> and <ph name="COUNT" /> more</translation> <translation id="8413385045638830869">Ask first (recommended)</translation> <translation id="8417548266957501132">Parent password</translation> <translation id="8418445294933751433">&Show as tab</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> or <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Night Light colour temperature</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> wants to: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> and more</translation> +<translation id="865032292777205197">motion sensors</translation> <translation id="8650543407998814195">Although you can no longer access your old profile, you can still remove it.</translation> <translation id="8651585100578802546">Force Reload This Page</translation> <translation id="8652400352452647993">Pack extension error</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Stylus</translation> <translation id="8787254343425541995">Allow proxies for shared networks</translation> <translation id="8791534160414513928">Send a ‘Do Not Track’ request with your browsing traffic</translation> +<translation id="8792626944327216835">microphone</translation> <translation id="879413103056696865">While the hotspot is on, your <ph name="PHONE_NAME" /> will:</translation> <translation id="8795916974678578410">New Window</translation> <translation id="8797459392481275117">Never Translate This Site</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Block cookies</translation> <translation id="8823704566850948458">Suggest password...</translation> <translation id="8824701697284169214">Add Pa&ge...</translation> +<translation id="8827125715368568315">Blocked <ph name="PERMISSION" /> and <ph name="COUNT" /> more</translation> <translation id="8827289157496676362">Pin extension</translation> <translation id="8827752199525959199">More actions, password for <ph name="USERNAME" /> on <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Do not allow any site to discover nearby Bluetooth devices</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Switch Access options</translation> <translation id="8933960630081805351">&Show in Finder</translation> <translation id="8934732568177537184">Continue</translation> +<translation id="8938306522009698937">handlers</translation> <translation id="8938800817013097409">USB-C device (right port in the back)</translation> <translation id="8940081510938872932">Your computer is doing too many things right now. Try again later.</translation> <translation id="8941173171815156065">Revoke the permission '<ph name="PERMISSION" />'</translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">General</translation> <translation id="987897973846887088">No images available</translation> <translation id="988978206646512040">Empty passphrase is not allowed</translation> +<translation id="991413375315957741">motion or light sensors</translation> <translation id="992032470292211616">Extensions, apps and themes can harm your mobile device. Are you sure that you want to continue?</translation> <translation id="992256792861109788">Pink</translation> <translation id="992592832486024913">Disable ChromeVox (spoken feedback)</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 0b6a22c..7cfb7d0 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -479,7 +479,7 @@ <translation id="1526335046150927198">Habilitar la aceleración de desplazamiento en el panel táctil</translation> <translation id="1526560967942511387">Documento sin título</translation> <translation id="1527336312600375509">Frecuencia de actualización del monitor</translation> -<translation id="152913213824448541">Contactos de Compartir con Nearby</translation> +<translation id="152913213824448541">Contactos de Google que usa Compartir con Nearby</translation> <translation id="1529891865407786369">Fuente de alimentación</translation> <translation id="1530838837447122178">Abrir configuración del mouse y el panel táctil</translation> <translation id="1531004739673299060">Ventana de la app</translation> @@ -683,7 +683,7 @@ <translation id="1744108098763830590">página en segundo plano</translation> <translation id="1745732479023874451">Administrar contactos</translation> <translation id="1748563609363301860">Puedes guardar esta contraseña en tu Cuenta de Google o solo en este dispositivo</translation> -<translation id="1750172676754093297">Tu llave de seguridad no puede almacenar huellas digitales</translation> +<translation id="1750172676754093297">Tu llave de seguridad no puede almacenar huellas dactilares</translation> <translation id="1751249301761991853">Personal</translation> <translation id="1751262127955453661"><ph name="ORIGIN" /> podrá editar los archivos de <ph name="FOLDERNAME" /> hasta que cierres todas las pestañas de este sitio</translation> <translation id="175196451752279553">Volver a abrir una pestaña cerrada</translation> @@ -1155,7 +1155,7 @@ <translation id="2280486287150724112">Margen derecho</translation> <translation id="2282146716419988068">Proceso de GPU</translation> <translation id="2282155092769082568">URL de autoconfiguración:</translation> -<translation id="2285942871162473373">No se reconoció tu huella digital. Vuelve a intentarlo.</translation> +<translation id="2285942871162473373">No se reconoció tu huella dactilar. Vuelve a intentarlo.</translation> <translation id="2287944065963043964">Pantalla de acceso</translation> <translation id="2288181517385084064">Cambiar a la grabadora de video</translation> <translation id="2288735659267887385">Configuración de accesibilidad</translation> @@ -3353,7 +3353,7 @@ <translation id="4811503964269049987">Crear un grupo con la pestaña seleccionada</translation> <translation id="4813136279048157860">Mis imágenes</translation> <translation id="4813512666221746211">Error de red</translation> -<translation id="4814378367953456825">Escribe un nombre para esta huella digital</translation> +<translation id="4814378367953456825">Escribe un nombre para esta huella dactilar</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 favorito borrado}other{{COUNT} favoritos borrados}}</translation> <translation id="4819607494758673676">Notificaciones del Asistente de Google</translation> <translation id="4820236583224459650">Establecer como ticket activo</translation> @@ -3368,7 +3368,7 @@ <translation id="4830502475412647084">Instalando la actualización del SO</translation> <translation id="4830573902900904548">Tu <ph name="DEVICE_TYPE" /> no puede conectarse a Internet a través de <ph name="NETWORK_NAME" />. Debes elegir otra red. <ph name="LEARN_MORE_LINK_START" />Más información<ph name="LEARN_MORE_LINK_END" /></translation> <translation id="4833683849865011483">Se encontró 1 impresora en el servidor de impresión</translation> -<translation id="4836504898754963407">Administrar huellas digitales</translation> +<translation id="4836504898754963407">Administrar huellas dactilares</translation> <translation id="4837128290434901661">¿Deseas volver a usar la Búsqueda de Google?</translation> <translation id="4837926214103741331">No tienes autorización para utilizar este dispositivo. Para obtener permiso de acceso, comunícate con el propietario del dispositivo.</translation> <translation id="4837952862063191349">Para desbloquear y restaurar los datos locales, ingresa la contraseña anterior de <ph name="DEVICE_TYPE" />.</translation> @@ -3411,7 +3411,7 @@ <translation id="4876895919560854374">Bloquear y desbloquear la pantalla</translation> <translation id="4877276003880815204">Analizar elementos</translation> <translation id="4878653975845355462">El administrador desactivó los fondos personalizados</translation> -<translation id="4878718769565915065">No se pudo agregar una huella digital en esta llave de seguridad</translation> +<translation id="4878718769565915065">No se pudo agregar una huella dactilar en esta llave de seguridad</translation> <translation id="4879491255372875719">Automático (predeterminado)</translation> <translation id="4880827082731008257">Buscar historial</translation> <translation id="4881685975363383806">No recordármelo la próxima vez</translation> @@ -3648,7 +3648,7 @@ <translation id="5170568018924773124">Mostrar en carpeta</translation> <translation id="5171045022955879922">Buscar o escribir URL</translation> <translation id="5171343362375269016">Memoria en el espacio de intercambio</translation> -<translation id="5173668317844998239">Agrega huellas digitales y borra las que están guardadas en tu llave de seguridad</translation> +<translation id="5173668317844998239">Agrega huellas dactilares y borra las que están guardadas en tu llave de seguridad</translation> <translation id="5175379009094579629">El nombre del dispositivo no es válido. Ingresa uno que sí lo sea y vuelve a intentarlo.</translation> <translation id="5177479852722101802">Continuar el bloqueo del acceso a la cámara y al micrófono</translation> <translation id="5177549709747445269">Estás usando el plan de datos móviles.</translation> @@ -4476,7 +4476,7 @@ <translation id="6129953537138746214">Espacio</translation> <translation id="6130692320435119637">Agregar Wi-Fi</translation> <translation id="6136114942382973861">Cerrar la barra de descargas</translation> -<translation id="6136287496450963112">Tu llave de seguridad no está protegida con un PIN. Para administrar las huellas digitales, crea uno.</translation> +<translation id="6136287496450963112">Tu llave de seguridad no está protegida con un PIN. Para administrar las huellas dactilares, crea uno.</translation> <translation id="6138680304137685902">Firma X9.62 ECDSA con SHA-384</translation> <translation id="6138894911715675297"><ph name="NETWORK_TYPE" />, sin red</translation> <translation id="6141988275892716286">Confirmar la descarga</translation> @@ -4862,7 +4862,7 @@ <translation id="659005207229852190">Se completó la verificación de seguridad.</translation> <translation id="6590458744723262880">Cambiar nombre de carpeta</translation> <translation id="6592267180249644460">Fecha y hora de captura de registro de WebRTC: <ph name="WEBRTC_LOG_CAPTURE_TIME" /></translation> -<translation id="6592808042417736307">Se capturó tu huella digital</translation> +<translation id="6592808042417736307">Se capturó tu huella dactilar</translation> <translation id="6594011207075825276">Buscando dispositivos en serie…</translation> <translation id="6595187330192059106">Siempre impedir que <ph name="HOST" /> controle por completo los dispositivos MIDI</translation> <translation id="6596325263575161958">Opciones de encriptación</translation> @@ -6564,7 +6564,7 @@ <translation id="8551588720239073785">Configuración de fecha y hora</translation> <translation id="8553342806078037065">Administrar otras personas</translation> <translation id="8554899698005018844">Ningún idioma</translation> -<translation id="8557022314818157177">Continúa tocando la llave de seguridad hasta que se capture tu huella digital</translation> +<translation id="8557022314818157177">Continúa tocando la llave de seguridad hasta que se capture tu huella dactilar</translation> <translation id="855773602626431402">Se impidió que un complemento no incluido en la zona de pruebas se ejecutara en la página.</translation> <translation id="8557930019681227453">Manifiesto</translation> <translation id="8560327176991673955">{COUNT,plural, =0{Abrir todo en una ventana &nueva}=1{Abrir en una ventana &nueva}other{Abrir todo ({COUNT}) en una ventana &nueva}}</translation> @@ -6838,7 +6838,7 @@ <translation id="8838770651474809439">Hamburguesa</translation> <translation id="883911313571074303">Escribir en la imagen</translation> <translation id="8841843049738266382">Leer y cambiar la lista de usuarios permitidos</translation> -<translation id="8842594465773264717">Borrar esta huella digital</translation> +<translation id="8842594465773264717">Borrar esta huella dactilar</translation> <translation id="8845001906332463065">Obtener ayuda</translation> <translation id="8846132060409673887">Leer el fabricante y el modelo de esta computadora</translation> <translation id="8846141544112579928">Buscando teclado…</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 0f52a2e..96aa376 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Vaikeseade</translation> <translation id="1252987234827889034">Ilmnes profiili viga</translation> <translation id="1254593899333212300">Otsene Interneti-ühendus</translation> +<translation id="1257553931232494454">suumitasemed</translation> <translation id="1259152067760398571">Ohutuskontroll tehti eile</translation> <translation id="1260451001046713751">Luba alati hüpikaknad ja ümbersuunamised saidilt <ph name="HOST" /></translation> <translation id="1261380933454402672">Mõõdukas</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Lisaks juhib omnikastikeses otsingu tegemise lehte.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Rakenduste eemaldamiseks avage menüü Seaded> Google Play pood > Androidi eelistuste haldamine > Rakendused või Rakenduste haldur. Seejärel puudutage rakendust, mille soovite desinstallida (rakenduse leidmiseks peate võib-olla paremale või vasakule pühkima). Seejärel puudutage käsku Desinstalli või Keela.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Päringu saatmine...</translation> +<translation id="1733064249834771892">fondid</translation> <translation id="1733383495376208985">Krüpteerige sünkroonitud andmed <ph name="BEGIN_LINK" />sünkroonimisparooliga<ph name="END_LINK" />. See ei hõlma Google Pay makseviise ja aadresse.</translation> <translation id="1734212868489994726">Helesinine</translation> <translation id="1734230530703461088">Laienduste laadimine määratud aja piires ebaõnnestus. Võtke ühendust administraatoriga.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Logi üleslaadimine on pooleli.</translation> <translation id="1819721979226826163">Puudutage valikuid Rakenduse märguanded > Google Play teenused.</translation> <translation id="1820028137326691631">Sisestage administraatorilt saadud parool</translation> +<translation id="182139138257690338">automaatsed allalaadimised</translation> <translation id="1822140782238030981">Kas olete juba Chrome'i kasutaja? Logige sisse</translation> <translation id="18245044880483936">Varundatud andmeid ei arvestata teie lapse Drive'i salvestuskvoodi hulka.</translation> <translation id="1825565032302550710">Port peab olema vahemikus 1024 ja 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Laadi rakendus uuesti</translation> <translation id="2327492829706409234">Luba rakendus</translation> <translation id="2328561734797404498">Rakenduse <ph name="APP_NAME" /> kasutamiseks taaskäivitage seade.</translation> +<translation id="2329182534073751090">akna paigutus</translation> <translation id="2329597144923131178">Logige sisse, et tuua kõikidesse seadmetesse järjehoidjad, ajalugu, paroolid ja muud seaded.</translation> <translation id="2332131598580221120">Poes kuvamine</translation> <translation id="2332192922827071008">Ava eelistused</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Uus vaheleht grupis</translation> <translation id="289644616180464099">SIM-kaart on lukustatud</translation> <translation id="289695669188700754">Võtme ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">See kohandatud seade eemaldatakse, kui sulgete kõik oma inkognito aknad</translation> <translation id="2897878306272793870">Kas te soovite kindlasti avada <ph name="TAB_COUNT" /> vahekaarti?</translation> <translation id="290105521672621980">Fail kasutab toetamata funktsioone</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> ei saanud printeriga sidet pidada. Veenduge, et printeri toide oleks sees, ja proovige uuesti.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Andmed on krüpteeritud teie sünkroonimisparooliga. See ei hõlma Google Pay makseviise ja aadresse.</translation> <translation id="2996722619877761919">Pööre pikal serval</translation> <translation id="3000236644796679448">Saidid saavad küsida luba teie mikrofoni kasutamiseks (soovitatav)</translation> +<translation id="3000378525979847272">Lubatud on <ph name="PERMISSION_1" /> ja <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Monoheli</translation> <translation id="3001144475369593262">Tütarkontod</translation> <translation id="3003144360685731741">Eelistatud võrgud</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Ava PDF-i eelvaade</translation> <translation id="3308116878371095290">Sellel lehel takistati küpsiste seadistamine.</translation> <translation id="3308134619352333507">Nupp Peida</translation> +<translation id="3308738399950580893">reklaamid</translation> <translation id="3308852433423051161">Google'i assistendi laadimine …</translation> <translation id="3309330461362844500">Sertifikaadi profiili ID</translation> <translation id="3311445899360743395">Selle rakendusega seostatud andmed võidakse seadmest eemaldada.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">See fail on krüpteeritud. Paluge omanikul see dekrüpteerida.</translation> <translation id="3390013585654699824">Rakenduse üksikasjad</translation> <translation id="3390741581549395454">Linuxi rakenduste ja failide varundamine õnnestus. Versiooni uuendamine algab peagi.</translation> +<translation id="3391482648489541560">failide muutmine</translation> <translation id="339178315942519818">Vaadake märguandeid oma seadme <ph name="DEVICE_TYPE" /> vestlusrakendustes</translation> <translation id="3396800784455899911">Kui klõpsate nupul „Nõustu ja jätka”, nõustute nende Google'i teenuste puhul andmete ülalkirjeldatud töötlemisega.</translation> <translation id="3399432415385675819">Märguanded keelatakse</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Aku tühjenemise määr vattides (negatiivne väärtus tähendab, et akut laetakse)</translation> <translation id="4256316378292851214">Salvesta video &nimega...</translation> <translation id="4258348331913189841">Failisüsteemid</translation> +<translation id="4259381619085088639">teie kohalolek</translation> <translation id="4259388776256904261">See võib pisut aega võtta</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> võib olla ohtlik. Kas saata skannimiseks Google'i täiustatud kaitse programmile? Allalaadimiste riba valikute vahel vahetamiseks vajutage klahvikombinatsiooni Tõstuklahv + F6.</translation> <translation id="4263223596040212967">Kontrollige klaviatuuripaigutust ja proovige uuesti.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Looge turvavõtme jaoks uus PIN-kood</translation> <translation id="4305402730127028764">Kopeeri seadmesse <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Rakendusi tuleb esitada sisu tüübiga „<ph name="CONTENT_TYPE" />”</translation> +<translation id="4306812610847412719">lõikelaud</translation> <translation id="4307992518367153382">Põhiteave</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />kB (<ph name="NUM_KILOBYTES_LIVE" />kB reaalajas)</translation> <translation id="4310139701823742692">Failivorming on vale. Kontrollige PPD-faili ja proovige uuesti.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Abikeskus</translation> <translation id="44141919652824029">Kas lubate rakendusel „<ph name="APP_NAME" />” hankida ühendatud USB-seadmete loendi?</translation> <translation id="4414232939543644979">Uus &inkognito aken</translation> +<translation id="4414515549596849729">küpsisefailid ja saidi andmed</translation> <translation id="4415213869328311284">OIete valmis seadet <ph name="DEVICE_TYPE" /> kasutama hakkama.</translation> <translation id="4415245286584082850">Seadmeid ei leitud. Avage abikeskuse artikkel uuel vahelehel.</translation> <translation id="4415276339145661267">Google'i konto haldamine</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Soovitatav (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ära sellel lehel kuva</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> jooksis kokku</translation> +<translation id="4500587658229086076">ebaturvaline sisu</translation> <translation id="450099669180426158">Hüüumärgi ikoon</translation> <translation id="4501530680793980440">Eemaldamise kinnitamine</translation> <translation id="4502423230170890588">Eemalda sellest seadmest</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Blokeeri alati saidil <ph name="HOST" /> pistikprogrammid, mis ei ole liivakastirežiimis</translation> <translation id="4538792345715658285">Installitud ettevõtte reegli alusel.</translation> <translation id="4541662893742891060">Selle profiiliga ei saa ühendada. Tehnilise toe saamiseks võtke ühendust operaatoriga.</translation> +<translation id="4541810033354695636">liitreaalsus</translation> <translation id="4542520061254486227">Lugege oma andmeid veebisaitidel <ph name="WEBSITE_1" /> ja <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Sertifikaadihaldur</translation> <translation id="4544174279960331769">Sinine vaikeavatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">Arenda&ja tööriistad</translation> <translation id="5113739826273394829">Kui klõpsate ikoonil, siis lukustate seadme <ph name="DEVICE_TYPE" /> käsitsi. Jätmine kord peate sellisel juhul sisestama avamiseks parooli.</translation> <translation id="51143538739122961">Sisestage oma turvavõti ja puudutage seda</translation> +<translation id="5114987907971894280">virtuaalreaalsus</translation> <translation id="5115309401544567011">Ühendage seade <ph name="DEVICE_TYPE" /> toiteallikaga.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Sa&lvesta heli nimega...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Käita see kord</translation> <translation id="5464660706533281090">Seda seadet ei saa lapskasutaja muuta.</translation> <translation id="5466374726908360271">Kleebi ja otsi üksust „<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">Blokeeritud on <ph name="PERMISSION_1" /> ja <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Saidid saavad paluda esitada kaitstud sisu (soovitatav)</translation> <translation id="5468173180030470402">Jagatud failide otsimine</translation> <translation id="5469852975082458401">Lehtedel saab navigeerida tekstikursoriga. Funktsiooni väljalülitamiseks vajutage klahvi F7.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Sule kõik Chrome'i rakendused</translation> <translation id="5797070761912323120">Google võib kasutada teie ajalugu otsingu, reklaamide ja muude Google'i teenuste isikupärastamiseks</translation> <translation id="5798301976526354562">Teksti suurus (kehtib ka reaalajas subtiitrite puhul)</translation> +<translation id="579907812742603813">kaitstud sisu</translation> <translation id="579915268381781820">Teie turvavõti eemaldati.</translation> <translation id="5799508265798272974">Linuxi vrituaalmasin: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Sihtfaili on pärast viimast allalaadimist kärbitud või see on eemaldatud.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Kanal on muutunud. Muudatuste rakendamiseks taaskäivitage oma seade.</translation> <translation id="5877584842898320529">Valitud printer pole saadaval või pole õigesti installitud. <ph name="BR" /> Kontrollige printerit või valige teine printer.</translation> <translation id="5882919346125742463">Teadaolevad võrgud</translation> +<translation id="5883356647197510494">Automaatselt on blokeeritud <ph name="PERMISSION_1" /> ja <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">See vaheleht on ühendatud USB-seadmega.</translation> <translation id="5886009770935151472">1. sõrm</translation> <translation id="5889282057229379085">Vahe CA-de maksimaalne arv: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Otsi järgmine</translation> <translation id="6461170143930046705">Võrkude otsimine …</translation> <translation id="6463795194797719782">&Muuda</translation> +<translation id="6464094930452079790">pildid</translation> <translation id="6464825623202322042">See seade</translation> <translation id="6465841119675156448">Interneti-ühenduseta</translation> <translation id="6466988389784393586">&Ava kõik järjehoidjad</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Volitamine ebaõnnestus</translation> <translation id="6494327278868541139">Kuva täiustatud kaitse üksikasjad</translation> <translation id="6494445798847293442">Pole sertifitseerimisorgan</translation> +<translation id="6494750904506170417">hüpikaknad ja ümbersuunamised</translation> <translation id="6494974875566443634">Kohandamine</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. võrk <ph name="NETWORK_COUNT" />-st, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signaalitugevus: <ph name="SIGNAL_STRENGTH" />%, võrku haldab teie administraator, üksikasjad</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Need andmed sisaldavad tundlikku või ohtlikku sisu}=1{See fail sisaldab tundlikku või ohtlikku sisu}other{Need failid sisaldavad tundlikku või ohtlikku sisu}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Parool</translation> <translation id="6659213950629089752">Seda lehte suumis laiendus „<ph name="NAME" />”</translation> <translation id="6659594942844771486">Vaheleht</translation> +<translation id="6660413144148052430">asukoht</translation> <translation id="666099631117081440">Prindiserverid</translation> <translation id="6663190258859265334">Rakendage seadmes <ph name="DEVICE_TYPE" /> funktsioon Powerwash ja naaske eelmisele versioonile.</translation> <translation id="6664237456442406323">Kahjuks on teie arvuti seadistatud vigase riistvara ID-ga. See ei lase Chrome OS-i värskendada uusimate turvaparandustega ja teie arvuti <ph name="BEGIN_BOLD" />võib pahatahtlike rünnakute osas haavatav olla<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Vaadake, mis on uut</translation> <translation id="67269783048918309">Saada kasutus- ja diagnostikaandmeid. See seade saadab Google'ile praegu automaatselt seadme teavet ning rakenduse kasutus- ja diagnostikaandmeid. Neid andmeid ei kasutata teie lapse isiku tuvastamiseks ning need aitavad parandada süsteemi ja rakenduse stabiilsust ning muud. Teatud koondandmed on abiks ka Google'i rakendustele ja partneritele, näiteks Androidi arendajatele. Selle <ph name="BEGIN_LINK1" />seade<ph name="END_LINK1" /> on jõustanud omanik. Kui täiendavad veebi- ja rakendustegevused on teie lapse jaoks sisse lülitatud, võidakse need andmed salvestada tema Google'i kontole. <ph name="BEGIN_LINK2" />Lisateave<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Ühendatud, <ph name="BATTERY_PERCENTAGE" />% akut</translation> +<translation id="6732087373923685049">kaamera</translation> <translation id="6732801395666424405">Sertifikaate ei laaditud</translation> <translation id="6732900235521116609">Otseteed ei saa eemaldada</translation> <translation id="6734468588183300211">Inkognito režiimis ei saa saidid eri saitidel küpsisefailide kaudu teie sirvimistegevusi jälgida, näiteks selleks, et reklaame isikupärastada. Mõne saidi funktsioonid ei pruugi töötada.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Küsi, kui sait tahab kasutada MIDI-seadmetele juurdepääsu saamiseks süsteemi eksklusiivseid sõnumeid (soovitatav)</translation> <translation id="6818198425579322765">Lehel tõlgitav keel</translation> <translation id="6818802132960437751">Sisseehitatud viirusetõrje</translation> +<translation id="6820143000046097424">jadapordid</translation> <translation id="682123305478866682">Töölaua ülekandmine</translation> <translation id="6823174134746916417">Puuteplaadil klõpsamiseks puudutamine</translation> <translation id="6824564591481349393">Kopeeri &e-posti aadress</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Vaheta andmeid mis tahes seadmega kohalikus võrgus või Internetis</translation> <translation id="7306521477691455105">Avage menüü Seaded, et ühendada <ph name="USB_DEVICE_NAME" /> seadmega <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Peatatud</translation> +<translation id="7308436126008021607">taustal sünkroonimine</translation> <translation id="7309257895202129721">Kuva &juhtelemendid</translation> <translation id="7310598146671372464">Sisselogimine ebaõnnestus. Server ei toeta määratud Kerberose krüpteerimistüüpe. Võtke ühendust administraatoriga.</translation> <translation id="7320213904474460808">Vaikevõrk</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Nõutav on kohene tagastamine}other{Tagastage seade (<ph name="DEVICE_TYPE" />) {NUM_DAYS} päeva jooksul}}</translation> <translation id="7475671414023905704">Netscape'i kaotatud parooli URL</translation> <translation id="7476454130948140105">Aku on värskendamiseks liiga tühi (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Automaatselt on blokeeritud <ph name="PERMISSION" /> ja veel <ph name="COUNT" /></translation> <translation id="7477793887173910789">Hallake oma muusikat, videoid ja muud</translation> <translation id="7478485216301680444">Kioski rakendust ei saanud installida.</translation> <translation id="7478623944308207463">Teie rakendused ja seaded sünkroonitakse kõigis Chrome OS-i seadmetes, kuhu olete oma Google'i kontoga sisse logitud. Brauseri sünkroonimisvalikute nägemiseks avage <ph name="LINK_BEGIN" />Chrome'i seaded<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Rakenduse <ph name="APP" /> desinstallimine …</translation> <translation id="8289128870594824098">Ketta maht</translation> <translation id="8293206222192510085">Lisa järjehoidja</translation> +<translation id="829335040383910391">heli</translation> <translation id="8294431847097064396">Allikas</translation> <translation id="8298429963694909221">Võite nüüd oma telefoni märguandeid saada seadmes <ph name="DEVICE_TYPE" />. Kui loobute märguannetest seadmes <ph name="DEVICE_TYPE" />, loobutakse nendest märguannetest ka teie telefonis. Veenduge, et teie telefon oleks läheduses ning Bluetooth ja WiFi oleksid sisse lülitatud.</translation> <translation id="8299319456683969623">Võrguühendus puudub.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Lisa võrguühendus</translation> <translation id="8319414634934645341">Laiendatud võtmekasutus</translation> <translation id="8320459152843401447">Kogu teie ekraan</translation> +<translation id="8321476692217554900">märguanded</translation> <translation id="8321837372750396788">Seda seadet <ph name="DEVICE_TYPE" /> haldab <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Sellel lehel on juurdepääs teie mikrofonile blokeeritud.</translation> <translation id="8323167517179506834">Sisestage URL</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Hiljuti Google Drive'ist</translation> <translation id="8407199357649073301">Logimistase:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-võrk, ühendamine</translation> +<translation id="8409413588194360210">maksetöötlejad</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Lubatud on <ph name="PERMISSION" /> ja veel <ph name="COUNT" /></translation> <translation id="8413385045638830869">Esmalt küsi (soovitatav)</translation> <translation id="8417548266957501132">Vanema parool</translation> <translation id="8418445294933751433">&Kuva vahelehena</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> või <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Öövalguse värvitemperatuur</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> soovib teha järgmist: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> ja muud</translation> +<translation id="865032292777205197">liikumisandurid</translation> <translation id="8650543407998814195">Kuigi te ei pääse enam oma vanale profiilile juurde, on teil siiski võimalik see eemaldada.</translation> <translation id="8651585100578802546">Sundlaadi see leht uuesti</translation> <translation id="8652400352452647993">Viga laienduse ettevalmistamisel</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Elektronpliiats</translation> <translation id="8787254343425541995">Lubage puhverserverid jagatud võrkudes</translation> <translation id="8791534160414513928">Saada sirvimisliiklusega taotlus „Ära jälgi”</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Kui leviala on sisse lülitatud, teeb teie telefon <ph name="PHONE_NAME" /> järgmist.</translation> <translation id="8795916974678578410">Uus aken</translation> <translation id="8797459392481275117">Ära kunagi seda saiti tõlgi</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Blokeeri küpsisefailid</translation> <translation id="8823704566850948458">Soovita parooli …</translation> <translation id="8824701697284169214">Lisa &leht ...</translation> +<translation id="8827125715368568315">Blokeeritud on <ph name="PERMISSION" /> ja veel <ph name="COUNT" /></translation> <translation id="8827289157496676362">Kinnita laiendus</translation> <translation id="8827752199525959199">Rohkem toiminguid, kasutaja <ph name="USERNAME" /> parool domeenis <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Ära luba ühelgi saidil läheduses asuvaid Bluetoothi seadmeid tuvastada</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Lülitiga juurdepääsu valikud</translation> <translation id="8933960630081805351">&Näita otsijas</translation> <translation id="8934732568177537184">Jätka</translation> +<translation id="8938306522009698937">töötlejad</translation> <translation id="8938800817013097409">C-tüüpi USB-seade (parempoolne port taga)</translation> <translation id="8940081510938872932">Arvuti tegeleb praegu liiga paljude asjadega. Proovige hiljem uuesti.</translation> <translation id="8941173171815156065">Tühista luba „<ph name="PERMISSION" />”</translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">Üldine</translation> <translation id="987897973846887088">Kujutisi pole saadaval</translation> <translation id="988978206646512040">Tühi parool ei ole lubatud</translation> +<translation id="991413375315957741">liikumis- või valgusandurid</translation> <translation id="992032470292211616">Laiendused, rakendused ja teemad võivad teie seadet kahjustada. Kas soovite kindlasti jätkata?</translation> <translation id="992256792861109788">Roosa</translation> <translation id="992592832486024913">Keela ChromeVox (kõnena esitatud tagasiside)</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 634167b..2df8fe3 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Lehenetsiak</translation> <translation id="1252987234827889034">Errore bat gertatu da profilean</translation> <translation id="1254593899333212300">Interneteko konexio zuzena</translation> +<translation id="1257553931232494454">zoom-mailak</translation> <translation id="1259152067760398571">Atzo egin zen segurtasun-egiaztapena</translation> <translation id="1260451001046713751">Eman beti <ph name="HOST" /> webguneko leiho gainerakorrak eta birbideratzeak erakusteko baimena</translation> <translation id="1261380933454402672">Zuhurra</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Omnibox-etik bilaketak egin dituzunean erakusten den orria ere kontrolatzen du.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Aplikazioak kentzeko, joan Ezarpenak > Google Play Store > Kudeatu Android hobespenak > Aplikazioak edo Aplikazioen kudeatzailea atalera. Sakatu desinstalatu nahi duzun aplikazioa (baliteke hatza eskuinera edo ezkerrera pasatu behar izatea hura aurkitzeko). Ondoren, sakatu Desinstalatu edo Desgaitu.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Eskaera bidaltzen…</translation> +<translation id="1733064249834771892">letrak</translation> <translation id="1733383495376208985">Enkriptatu sinkronizatutako datuak <ph name="BEGIN_LINK" />sinkronizazio-pasaesaldiarekin<ph name="END_LINK" />. Ez dira hartzen barne Google Pay-ko ordainketa-metodoak eta helbideak.</translation> <translation id="1734212868489994726">Urdin argia</translation> <translation id="1734230530703461088">Ezin izan dira kargatu luzapenak denbora-mugaren barruan. Jarri administratzailearekin harremanetan.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Kargatzen ari da erregistroa.</translation> <translation id="1819721979226826163">Sakatu Aplikazioen jakinarazpenak > Google Play-ren zerbitzuak.</translation> <translation id="1820028137326691631">Idatzi administratzaileak emandako pasahitza</translation> +<translation id="182139138257690338">deskarga automatikoak</translation> <translation id="1822140782238030981">Chrome erabiltzen duzu dagoeneko? Hasi saioa</translation> <translation id="18245044880483936">Babeskopiek ez dute hartzen tokirik haurraren Drive-ko biltegian.</translation> <translation id="1825565032302550710">Atakako zenbakia 1024 eta 65535 artekoa izan behar da</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Kargatu berriro aplikazioa</translation> <translation id="2327492829706409234">Gaitu aplikazioa</translation> <translation id="2328561734797404498">Berrabiarazi gailua <ph name="APP_NAME" /> erabiltzeko.</translation> +<translation id="2329182534073751090">leihoaren kokalekua</translation> <translation id="2329597144923131178">Hasi saioa laster-markak, historia, pasahitzak eta bestelakoak gailu guztietan izateko.</translation> <translation id="2332131598580221120">Ikusi dendan</translation> <translation id="2332192922827071008">Ireki hobespenak</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Gehitu fitxa bat taldean</translation> <translation id="289644616180464099">Blokeatuta dago SIM txartela</translation> <translation id="289695669188700754">Gakoaren IDa: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ezarpen pertsonalizatu hau kendu egingo da ezkutuko moduko leiho guztiak ixten dituzunean</translation> <translation id="2897878306272793870">Ziur <ph name="TAB_COUNT" /> fitxa ireki nahi dituzula?</translation> <translation id="290105521672621980">Fitxategiak eginbide bateraezinak darabiltza</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> luzapenak ezin izan du komunikatu inprimagailu honekin. Egiaztatu inprimagailua konektatuta dagoela eta saiatu berriro.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Sinkronizazio-pasaesaldiarekin enkriptatu dira datuak. Ez dira hartzen barne Google Pay-ko ordainketa-metodoak eta helbideak.</translation> <translation id="2996722619877761919">Irauli ertz luzearen noranzkoan</translation> <translation id="3000236644796679448">Webguneek mikrofonoa erabiltzea eska dezakete (gomendatua)</translation> +<translation id="3000378525979847272">Baimendutako <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Audio monofonikoa</translation> <translation id="3001144475369593262">Bigarren mailako kontuak</translation> <translation id="3003144360685731741">Sare hobetsiak</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Ireki PDF aurrebistan</translation> <translation id="3308116878371095290">Orriari cookieak ezartzeko aukera ukatu zaio.</translation> <translation id="3308134619352333507">Ezkutatu botoia</translation> +<translation id="3308738399950580893">iragarkiak</translation> <translation id="3308852433423051161">Google-ren Laguntzailea kargatzen…</translation> <translation id="3309330461362844500">Ziurtagiriaren profilaren IDa</translation> <translation id="3311445899360743395">Aplikazio honekin erlazionatutako datu guztiak kenduko dira gailu honetatik.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Fitxategia enkriptatuta dago. Eskatu jabeari hura desenkriptatzeko.</translation> <translation id="3390013585654699824">Aplikazioaren xehetasunak</translation> <translation id="3390741581549395454">Egin dira Linux aplikazio eta fitxategien babeskopiak. Laster hasiko da bertsio-berritzen.</translation> +<translation id="3391482648489541560">fitxategiak editatzeko aukera</translation> <translation id="339178315942519818">Ikusi txat-aplikazioen jakinarazpenak <ph name="DEVICE_TYPE" /> gailuan</translation> <translation id="3396800784455899911">"Onartu eta egin aurrera" botoia sakatuta, onartuko duzu Google-ren zerbitzuok prozesatzeko modua, arestian aipatu bezala.</translation> <translation id="3399432415385675819">Desgaitu egingo dira jakinarazpenak</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Bateriaren deskarga-abiadura wattetan (balioa negatiboa bada, bateria kargatzen ari dela esan nahi du)</translation> <translation id="4256316378292851214">&Gorde bideoa honela…</translation> <translation id="4258348331913189841">Fitxategi-sistemak</translation> +<translation id="4259381619085088639">zure presentzia</translation> <translation id="4259388776256904261">Unetxo bat beharko da</translation> <translation id="4260182282978351200">Baliteke <ph name="FILE_NAME" /> arriskutsua izatea. Google-ren Babes aurreratua programara bidali nahi duzu aztertzeko? Sakatu Maius eta F6 deskargen barraren eremura iritsi arte.</translation> <translation id="4263223596040212967">Egiaztatu teklatuaren diseinua egokia dela eta saiatu berriro.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Konfiguratu beste PIN bat segurtasun-giltzarako</translation> <translation id="4305402730127028764">Kopiatu <ph name="DEVICE_NAME" /> gailuan</translation> <translation id="4306119971288449206">"<ph name="CONTENT_TYPE" />" eduki motarekin hornitu behar dira aplikazioak</translation> +<translation id="4306812610847412719">arbela</translation> <translation id="4307992518367153382">Oinarrizko informazioa</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (zuzeneko <ph name="NUM_KILOBYTES_LIVE" /> K)</translation> <translation id="4310139701823742692">Fitxategiaren formatua ez da zuzena. Egiaztatu PPD fitxategia eta saiatu berriro.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Laguntza-zentroa</translation> <translation id="44141919652824029">Konektatutako USB gailuen zerrenda lortzeko baimena eman nahi diozu "<ph name="APP_NAME" />" aplikazioari?</translation> <translation id="4414232939543644979">&Ezkutuko moduko leiho berria</translation> +<translation id="4414515549596849729">cookieak eta webgune-datuak</translation> <translation id="4415213869328311284">Prest zaude <ph name="DEVICE_TYPE" /> gailua erabiltzeko.</translation> <translation id="4415245286584082850">Ez da aurkitu gailurik. Ireki laguntza-zentroko artikulu bat beste fitxa batean.</translation> <translation id="4415276339145661267">Kudeatu Google-ko kontua</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Gomendatua (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ez erakutsi orri honetan</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> pluginak huts egin du</translation> +<translation id="4500587658229086076">segurua ez den edukia</translation> <translation id="450099669180426158">Harridura-ikurraren ikonoa</translation> <translation id="4501530680793980440">Berretsi kendu nahi duzula</translation> <translation id="4502423230170890588">Kendu gailu honetatik</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Blokeatu beti proben eremuan probatu gabeko pluginak <ph name="HOST" /> webgunean</translation> <translation id="4538792345715658285">Enpresaren gidalerroen arabera instalatuta.</translation> <translation id="4541662893742891060">Ezin da konektatu profil honetara. Laguntza teknikoa eskuratzeko, jarri harremanetan operadorearekin.</translation> +<translation id="4541810033354695636">errealitate areagotua</translation> <translation id="4542520061254486227">Irakurri <ph name="WEBSITE_1" /> eta <ph name="WEBSITE_2" /> webguneetan dituzun datuak</translation> <translation id="4543778593405494224">Ziurtagiri-kudeatzailea</translation> <translation id="4544174279960331769">Abatar urdin lehenetsia</translation> @@ -3355,7 +3368,7 @@ <translation id="4811212958317149293">Erabilerraztasun-osagarriaren teklatu bidezko bilaketa automatikoa</translation> <translation id="4811503964269049987">Taldekatu hautatutako fitxa</translation> <translation id="4813136279048157860">Nire irudiak</translation> -<translation id="4813512666221746211">Sarearen errorea</translation> +<translation id="4813512666221746211">Sareko errorea</translation> <translation id="4814378367953456825">Idatzi hatz-markaren izena</translation> <translation id="4816336393325437908">{COUNT,plural, =1{1 laster-marka ezabatu da}other{{COUNT} laster-marka ezabatu dira}}</translation> <translation id="4819607494758673676">Google-ren Laguntzailea eginbidearen jakinarazpenak</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">&Garatzaileen tresnak</translation> <translation id="5113739826273394829">Ikono hau sakatzen baduzu, eskuz blokeatuko duzu <ph name="DEVICE_TYPE" />. Hurrengoan, pasahitza idatzi beharko duzu sartzeko.</translation> <translation id="51143538739122961">Sartu segurtasun-giltza eta saka ezazu</translation> +<translation id="5114987907971894280">errealitate birtuala</translation> <translation id="5115309401544567011">Konektatu <ph name="DEVICE_TYPE" /> gailua energia-hartune batera.</translation> <translation id="5115338116365931134">Saio-hasiera bakarra</translation> <translation id="5116628073786783676">Go&rde audioa honela…</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Abiarazi oraingoan soilik</translation> <translation id="5464660706533281090">Haurrek ezin dute aldatu ezarpen hau.</translation> <translation id="5466374726908360271">It&satsi eta bilatu "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Blokeatutako <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Webguneek eduki babestua erreproduzitzea eska dezakete (gomendatua)</translation> <translation id="5468173180030470402">Fitxategiak parekatzeko sareko gailuak bilatzen</translation> <translation id="5469852975082458401">Nabigatu orrietatik testu-kurtsorea erabilita. Eginbidea desaktibatzeko, sakatu F7.</translation> @@ -4189,6 +4204,7 @@ <translation id="5794786537412027208">Irten Chrome-ren aplikazio guztietatik</translation> <translation id="5797070761912323120">Baliteke Google-k historia erabiltzea Bilaketa, iragarkiak eta beste Google-ren zerbitzu batzuk pertsonalizatzeko</translation> <translation id="5798301976526354562">Testuaren tamaina (Istanteko azpitituluak eginbideari ere aplikatzen zaio)</translation> +<translation id="579907812742603813">eduki babestua</translation> <translation id="579915268381781820">Kendu egin da segurtasun-giltza.</translation> <translation id="5799508265798272974">Linux makina birtuala: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Helburuko fitxategia moztuta dago edo kendu egin da azken aldiz deskargatu zenetik.</translation> @@ -4262,6 +4278,7 @@ <translation id="5877064549588274448">Kanala aldatu da. Aldaketak aplikatzeko berrabiarazi gailua.</translation> <translation id="5877584842898320529">Hautatutako inprimagailua ez dago erabilgarri edo ez da behar bezala instalatu. <ph name="BR" /> Egiaztatu inprimagailua edo hautatu beste bat.</translation> <translation id="5882919346125742463">Sare ezagunak</translation> +<translation id="5883356647197510494">Automatikoki blokeatutako <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Fitxa USB bidezko gailu batera konektatuta dago.</translation> <translation id="5886009770935151472">1. hatz-marka</translation> <translation id="5889282057229379085">Tarteko autoritate ziurtagiri-emaileen gehieneko kopurua: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4761,6 +4778,7 @@ <translation id="6460601847208524483">Bilatu hurrengoa</translation> <translation id="6461170143930046705">Sareak bilatzen…</translation> <translation id="6463795194797719782">&Editatu</translation> +<translation id="6464094930452079790">irudiak</translation> <translation id="6464825623202322042">Gailu hau</translation> <translation id="6465841119675156448">Internetera konektatu gabe</translation> <translation id="6466988389784393586">I&reki laster-marka guztiak</translation> @@ -4784,6 +4802,7 @@ <translation id="6491376743066338510">Ezin izan da baimendu</translation> <translation id="6494327278868541139">Erakutsi babes hobetuaren xehetasunak</translation> <translation id="6494445798847293442">Ez da autoritate ziurtagiri-emailea</translation> +<translation id="6494750904506170417">leiho gainerakorrak eta birbideratzeak</translation> <translation id="6494974875566443634">Pertsonalizazioa</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> sarea. <ph name="NETWORK_NAME" /> (<ph name="SECURITY_STATUS" />; <ph name="CONNECTION_STATUS" />). Seinalearen indarra % <ph name="SIGNAL_STRENGTH" />. Administratzaileak kudeatua. Xehetasunak.</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Datuek kontuzko edukia edo eduki arriskutsua daukate}=1{Fitxategiak kontuzko edukia edo eduki arriskutsua dauka}other{Fitxategiek kontuzko edukia edo eduki arriskutsua daukate}}</translation> @@ -4924,6 +4943,7 @@ <translation id="6657585470893396449">Pasahitza</translation> <translation id="6659213950629089752">"<ph name="NAME" />" luzapenak aplikatu dio zooma orriari</translation> <translation id="6659594942844771486">Fitxa</translation> +<translation id="6660413144148052430">kokapena</translation> <translation id="666099631117081440">Inprimatze-zerbitzariak</translation> <translation id="6663190258859265334">Erabili Powerwash <ph name="DEVICE_TYPE" /> gailuaren fabrikako ezarpenak berrezartzeko eta itzuli aurreko bertsiora.</translation> <translation id="6664237456442406323">Ordenagailua formatu okerreko hardware IDarekin dago konfiguratuta. Ondorioz, Chrome OS ezin da eguneratu azken segurtasun-konponketekin, eta ordenagailuak <ph name="BEGIN_BOLD" />asmo txarreko erasoak jaso ahal izango ditu<ph name="END_BOLD" />.</translation> @@ -4978,6 +4998,7 @@ <translation id="672609503628871915">Ikusi azken berrikuntzak</translation> <translation id="67269783048918309">Bidali erabilera- eta diagnostiko-datuak. Gailu honek automatikoki bidaltzen dizkio Google-ri diagnostikoak eta gailu zein aplikazioen erabilerari buruzko datuak. Informazio hori ez da erabiliko haurra identifikatzeko eta, hari esker, sistemaren eta aplikazioen egonkortasuna hobetuko da, besteak beste. Gainera, multzokatutako datu batzuk oso baliagarriak izango dira Google-ren aplikazioak hobetzeko eta bazkideei laguntzeko (adibidez, Android-en garatzaileei). Jabeak konfiguratu du <ph name="BEGIN_LINK1" />ezarpen<ph name="END_LINK1" /> hori. Haurraren kontuko Sareko eta aplikazioetako jarduera gehigarriak ezarpena aktibatuta badago, baliteke datu horiek haren Google-ko kontuan gordetzea. <ph name="BEGIN_LINK2" />Lortu informazio gehiago<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Konektatuta; bateria: % <ph name="BATTERY_PERCENTAGE" /></translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Ez dira ziurtagiriak kargatu</translation> <translation id="6732900235521116609">Ezin da kendu lasterbidea</translation> <translation id="6734468588183300211">Ezkutuko moduan zaudenean, webguneek ezin dituzte erabili cookieak beste webguneetan egiten dituzun arakatze-jarduerak ikusteko, hala nola iragarkiak pertsonalizatzeko. Baliteke webgune batzuetako eginbideek ez funtzionatzea.</translation> @@ -5052,6 +5073,7 @@ <translation id="6817174620439930047">Eskatu nire baimena webgune batek sistemaren mezu esklusiboak erabili nahi dituenean MIDI gailuak atzitzeko (gomendatua)</translation> <translation id="6818198425579322765">Orriaren jatorrizko hizkuntza</translation> <translation id="6818802132960437751">Birusen aurkako babes integratua</translation> +<translation id="6820143000046097424">serie-atakak</translation> <translation id="682123305478866682">Igorri mahaigaina</translation> <translation id="6823174134746916417">Ukipen-panela sakatuta klik egiteko aukera</translation> <translation id="6824564591481349393">Kopiatu &helbide elektronikoa</translation> @@ -5457,7 +5479,7 @@ <translation id="7270858098575133036">Eskatu nire baimena webgune batek sistemaren mezu esklusiboak erabili nahi dituenean MIDI gailuak atzitzeko</translation> <translation id="7272674038937250585">Ez da eman azalpenik</translation> <translation id="7273110280511444812"><ph name="DATE" /> datan erantsi zen azkenezkoz</translation> -<translation id="727441411541283857">% <ph name="PERCENTAGE" /> - <ph name="TIME" /> geratzen dira guztiz kargatu arte</translation> +<translation id="727441411541283857">% <ph name="PERCENTAGE" /> - <ph name="TIME" /> guztiz kargatu arte</translation> <translation id="727952162645687754">Deskarga-errorea</translation> <translation id="7280041992884344566">Errore bat gertatu da Chrome-k software kaltegarria bilatu bitartean</translation> <translation id="7280649757394340890">Testua ahots bihurtzeko eginbidearen ahots-ezarpenak</translation> @@ -5485,6 +5507,7 @@ <translation id="730515362922783851">Trukatu datuak tokiko sarera edo Internetera konektatutako edozein gailurekin</translation> <translation id="7306521477691455105">Ireki ezarpenak <ph name="USB_DEVICE_NAME" /> <ph name="USB_VM_NAME" />-era konektatzeko</translation> <translation id="7307129035224081534">Pausatuta</translation> +<translation id="7308436126008021607">atzeko planoko sinkronizazioa</translation> <translation id="7309257895202129721">Erakutsi &kontrolak</translation> <translation id="7310598146671372464">Ezin izan da hasi saioa. Zerbitzariak ez ditu onartzen zehaztutako Kerberos enkriptatze motak. Jarri administratzailearekin harremanetan.</translation> <translation id="7320213904474460808">Lehenetsi sarea</translation> @@ -5626,6 +5649,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Berehala itzuli behar da}other{Itzuli <ph name="DEVICE_TYPE" /> gailua {NUM_DAYS} eguneko epean}}</translation> <translation id="7475671414023905704">Netscape galdutako pasahitzaren URLa</translation> <translation id="7476454130948140105">Ez daukazu eguneratzeko behar adina bateria (% <ph name="BATTERY_PERCENT" />)</translation> +<translation id="7476989672001283112">Automatikoki blokeatutako <ph name="PERMISSION" /> eta beste <ph name="COUNT" /></translation> <translation id="7477793887173910789">Kontrolatu musika, bideoak eta beste</translation> <translation id="7478485216301680444">Ezin izan da instalatu aplikazio espezializatua.</translation> <translation id="7478623944308207463">Aplikazioak eta ezarpenak Chrome OS darabilten gailu guztietan sinkronizatuko dira, Google-ko kontuarekin saioa hasita badaukazu haietan. Arakatzailea sinkronizatzeko aukerak ikusteko, joan <ph name="LINK_BEGIN" />Chrome-ren ezarpenetara<ph name="LINK_END" />.</translation> @@ -6369,6 +6393,7 @@ <translation id="8288032458496410887">Desinstalatu <ph name="APP" />…</translation> <translation id="8289128870594824098">Diskoaren tamaina</translation> <translation id="8293206222192510085">Gehitu laster-marka</translation> +<translation id="829335040383910391">soinua</translation> <translation id="8294431847097064396">Iturburua</translation> <translation id="8298429963694909221">Telefonoko jakinarazpenak jaso ditzakezu <ph name="DEVICE_TYPE" /> gailuan. <ph name="DEVICE_TYPE" /> gailuan jakinarazpenak baztertzen badituzu, telefonoan ere baztertu egingo dituzu. Ziurtatu telefonoa hurbil dagoela, eta Bluetooth-a eta wifia aktibatuta dauzkala.</translation> <translation id="8299319456683969623">Ez duzu konexiorik.</translation> @@ -6387,6 +6412,7 @@ <translation id="8317671367883557781">Gehitu sareko konexioa</translation> <translation id="8319414634934645341">Teklen erabilera hedatua</translation> <translation id="8320459152843401447">Pantaila osoa</translation> +<translation id="8321476692217554900">jakinarazpenak</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> domeinuak kudeatuko du <ph name="DEVICE_TYPE" /> gailua.</translation> <translation id="8322814362483282060">Orriari zure kamera atzitzeko aukera blokeatu zaio.</translation> <translation id="8323167517179506834">Idatzi URLa</translation> @@ -6452,7 +6478,9 @@ <translation id="8403562727702715619">Google Drive-ko azkenak</translation> <translation id="8407199357649073301">Erregistro-maila:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> sarea. Konektatzen.</translation> +<translation id="8409413588194360210">ordainketa-kudeatzaileak</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Baimendutako <ph name="PERMISSION" /> eta beste <ph name="COUNT" /></translation> <translation id="8413385045638830869">Galdetu lehenbizi (gomendatua)</translation> <translation id="8417548266957501132">Gurasoaren pasahitza</translation> <translation id="8418445294933751433">&Erakutsi fitxa gisa</translation> @@ -6648,6 +6676,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> edo <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Gaueko argiaren koloreen tenperatura</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> webguneak hauetarako baimena nahi du: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" />, etab.</translation> +<translation id="865032292777205197">mugimendu-sentsoreak</translation> <translation id="8650543407998814195">Ezin duzu atzitu jada profil zaharra, baina baduzu hura kentzeko aukera.</translation> <translation id="8651585100578802546">Behartu orria berriro kargatzera.</translation> <translation id="8652400352452647993">Paketearen luzapenaren errorea</translation> @@ -6784,6 +6813,7 @@ <translation id="8785622406424941542">Arkatza</translation> <translation id="8787254343425541995">Baimendu proxyak sare partekatuetan</translation> <translation id="8791534160414513928">Arakatze-trafikoari buruzko informazioarekin batera, bidali "Ez egin jarraipena" eskaera</translation> +<translation id="8792626944327216835">mikrofonoa</translation> <translation id="879413103056696865">Wifi-gunea aktibatuta dagoen bitartean, <ph name="PHONE_NAME" /> telefonoak hau egingo du:</translation> <translation id="8795916974678578410">Leiho berria</translation> <translation id="8797459392481275117">Ez itzuli inoiz webgune hau</translation> @@ -6823,6 +6853,7 @@ <translation id="8823559166155093873">Blokeatu cookieak</translation> <translation id="8823704566850948458">Iradoki pasahitza…</translation> <translation id="8824701697284169214">Gehitu &orria…</translation> +<translation id="8827125715368568315">Blokeatutako <ph name="PERMISSION" /> eta beste <ph name="COUNT" /></translation> <translation id="8827289157496676362">Ainguratu luzapena</translation> <translation id="8827752199525959199">Ekintza gehiago. <ph name="USERNAME" /> kontuaren pasahitza <ph name="DOMAIN" /> domeinuan.</translation> <translation id="882854468542856424">Ez baimendu inongo webguneri inguruko Bluetooth bidezko gailuak bilatzea</translation> @@ -6923,6 +6954,7 @@ <translation id="8932894639908691771">Erabilerraztasun-osagarriaren aukerak</translation> <translation id="8933960630081805351">&Erakutsi Finder-en</translation> <translation id="8934732568177537184">Jarraitu</translation> +<translation id="8938306522009698937">kudeatzaileak</translation> <translation id="8938800817013097409">USB-C gailua (eskuinaldeko atzeko ataka)</translation> <translation id="8940081510938872932">Ordenagailua gauza gehiegi egiten ari da. Saiatu berriro geroago.</translation> <translation id="8941173171815156065">Baliogabetu "<ph name="PERMISSION" />" baimena</translation> @@ -7227,6 +7259,7 @@ <translation id="987264212798334818">Orokorra</translation> <translation id="987897973846887088">Ez dago irudirik</translation> <translation id="988978206646512040">Pasaesaldia ezin da hutsik utzi</translation> +<translation id="991413375315957741">mugimenduaren eta argiaren sentsoreak</translation> <translation id="992032470292211616">Luzapenek, aplikazioek eta gaiek gailua kalte diezazukete. Ziur aurrera jarraitu nahi duzula?</translation> <translation id="992256792861109788">Arrosa</translation> <translation id="992592832486024913">Desgaitu ChromeVox (ahozko argibideak)</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index d1958ce1..3d02256 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">پیشفرض</translation> <translation id="1252987234827889034">خطای نمایه رخ داد</translation> <translation id="1254593899333212300">اتصال اینترنتی مستقیم</translation> +<translation id="1257553931232494454">سطوح بزرگنمایی</translation> <translation id="1259152067760398571">«بررسی ایمنی» دیروز اجرا شد</translation> <translation id="1260451001046713751">همیشه پنجرههای بازشو و هدایتها از <ph name="HOST" /> مجاز باشد</translation> <translation id="1261380933454402672">متوسط</translation> @@ -669,6 +670,7 @@ <translation id="1729533290416704613">این برنامه صفحهای را که هنگام جستجو از Omnibox نشان داده میشود، کنترل میکند.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />برای حذف برنامهها به «تنظیمات > فروشگاه Google Play > مدیریت اولویتهای Android > برنامهها یا مدیر برنامه» بروید. سپس روی برنامهای که میخواهید حذف نصب شود ضربه بزنید (ممکن است برای پیدا کردن برنامه نیاز باشد صفحه را تند بهراست یا چپ بکشید). سپس روی «حذف نصب» یا «غیرفعال کردن» ضربه بزنید.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">در حال ارسال درخواست...</translation> +<translation id="1733064249834771892">قلمها</translation> <translation id="1733383495376208985">رمزگذاری دادههای همگامسازیشده با <ph name="BEGIN_LINK" />عبارت عبور همگامسازی<ph name="END_LINK" /> خودتان. این کار شامل روشهای پرداخت و نشانیهای موجود در Google Pay نمیشود.</translation> <translation id="1734212868489994726">آبی روشن</translation> <translation id="1734230530703461088">افزونهها در محدوده زمانی تعیینشده بار نشدند. لطفاً با سرپرست تماس بگیرید.</translation> @@ -756,6 +758,7 @@ <translation id="1818913467757368489">بارگذاری گزارش درحال انجام است.</translation> <translation id="1819721979226826163">روی «اعلانهای برنامه > خدمات Google Play» ضربه بزنید.</translation> <translation id="1820028137326691631">گذرواژه ارائهشده توسط سرپرست را وارد کنید</translation> +<translation id="182139138257690338">بارگیریهای خودکار</translation> <translation id="1822140782238030981">قبلاً کاربر Chrome بودهاید؟ به سیستم وارد شوید</translation> <translation id="18245044880483936">دادههای پشتیبانگیریشده جزو سهمیه فضای ذخیرهسازی Drive فرزندتان حساب نمیشود.</translation> <translation id="1825565032302550710">درگاه باید از ۱۰۲۴ تا ۶۵۵۳۵ نویسه داشته باشد</translation> @@ -1196,6 +1199,7 @@ <translation id="2326931316514688470">&تازهسازی برنامه</translation> <translation id="2327492829706409234">فعال کردن برنامه</translation> <translation id="2328561734797404498">لطفاً برای استفاده از <ph name="APP_NAME" />، دستگاه را بازراهاندازی کنید.</translation> +<translation id="2329182534073751090">جایگذاری پنجره</translation> <translation id="2329597144923131178">برای دریافت نشانکها، سابقه، گذرواژهها و سایر تنظیماتتان در همه دستگاهها، وارد سیستم شوید.</translation> <translation id="2332131598580221120">مشاهده در فروشگاه</translation> <translation id="2332192922827071008">باز کردن اولویتها</translation> @@ -1708,6 +1712,7 @@ <translation id="2894757982205307093">برگه جدید در گروه</translation> <translation id="289644616180464099">سیمکارت قفل است</translation> <translation id="289695669188700754">شناسه کلید: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">وقتی همه پنجرههای ناشناس را ببندید، این تنظیم سفارشی برداشته خواهد شد</translation> <translation id="2897878306272793870">آیا میخواهید برگههای <ph name="TAB_COUNT" /> باز شوند؟</translation> <translation id="290105521672621980">فایل از قابلیتهای پشتیبانینشده استفاده میکند</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> نتوانست با این چاپگر ارتباط برقرار کند. مطمئن شوید چاپگر روشن است و دوباره امتحان کنید.</translation> @@ -1797,6 +1802,7 @@ <translation id="2996286169319737844">دادهها با گذرواژه Google شما رمزگذاری میشود. این کار شامل روشهای پرداخت و نشانیهای موجود در Google Pay نمیشود.</translation> <translation id="2996722619877761919">ورق زدن از طرف لبه بلندتر</translation> <translation id="3000236644796679448">سایتها میتوانند استفاده از میکروفون را درخواست کنند (توصیه میشود)</translation> +<translation id="3000378525979847272"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> مجاز شدهاند</translation> <translation id="3000461861112256445">صدای مونو</translation> <translation id="3001144475369593262">حسابهای کودک</translation> <translation id="3003144360685731741">شبکههای برگزیده</translation> @@ -2056,6 +2062,7 @@ <translation id="3305661444342691068">باز کردن PDF در پیشنمایش</translation> <translation id="3308116878371095290">این صفحه نمیتواند کوکیها را تنظیم کند.</translation> <translation id="3308134619352333507">دکمه پنهان کردن</translation> +<translation id="3308738399950580893">آگهیها</translation> <translation id="3308852433423051161">درحال بارگیری «دستیار Google»…</translation> <translation id="3309330461362844500">شناسه نمایه گواهینامه</translation> <translation id="3311445899360743395">دادههای مرتبط با این برنامه ممکن است از این دستگاه پاک شود.</translation> @@ -2116,6 +2123,7 @@ <translation id="3388788256054548012">این فایل رمزگذاری شده است. از مالک بخواهید آن را رمزگشایی کند.</translation> <translation id="3390013585654699824">جزئیات برنامه</translation> <translation id="3390741581549395454">از برنامهها و فایلهای Linux پشتیبانگیری شد ارتقا بهزودی شروع خواهد شد.</translation> +<translation id="3391482648489541560">ویرایش فایل</translation> <translation id="339178315942519818">مشاهده اعلان برنامههای گپ در <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">با کلیک کردن روی دکمه «پذیرفتن و ادامه»، با پردازش مربوط به این سرویسهای Google که در بالا توضیح داده شد موافقت میکنید.</translation> <translation id="3399432415385675819">اعلانها غیرفعال خواهند شد</translation> @@ -2892,6 +2900,7 @@ <translation id="425573743389990240">نسبت تخلیه باتری به وات (مقدار منفی به معنی این است که باتری در حال شارژ شدن است)</translation> <translation id="4256316378292851214">ذ&خیره فایل ویدئویی بهعنوان...</translation> <translation id="4258348331913189841">سیستمهای فایل</translation> +<translation id="4259381619085088639">حضور شما</translation> <translation id="4259388776256904261">این کار ممکن است مدتی طول بکشد</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> ممکن است خطرناک باشد. برای اسکن کردن به «محافظت پیشرفته Google» ارسال شود؟ برای رفتن به «نوار بارگیری»، Shift+F6 را فشار دهید.</translation> <translation id="4263223596040212967">جانمایی صفحهکلید را بررسی کنید و دوباره امتحان کنید.</translation> @@ -2928,6 +2937,7 @@ <translation id="4303079906735388947">پین جدیدی برای کلید امنیتیتان تنظیم کنید</translation> <translation id="4305402730127028764">کپی در <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">نوع محتوای برنامه باید «<ph name="CONTENT_TYPE" />» باشد</translation> +<translation id="4306812610847412719">بریدهدان</translation> <translation id="4307992518367153382">موارد اصلی</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> کیلوبایت (<ph name="NUM_KILOBYTES_LIVE" />کیلوبایت زنده)</translation> <translation id="4310139701823742692">قالب فایل صحیح نیست. فایل PPD را بررسی کرده و دوباره امتحان کنید.</translation> @@ -3015,6 +3025,7 @@ <translation id="4412698727486357573">مرکز راهنمایی</translation> <translation id="44141919652824029">به <ph name="APP_NAME" /> اجازه داده شود تا فهرست دستگاههای USB متصل را دریافت کند؟</translation> <translation id="4414232939543644979">پنجرهٔ جدید حالت &ناشناس</translation> +<translation id="4414515549596849729">کوکیها و دادههای سایت</translation> <translation id="4415213869328311284">آمادهاید استفاده از <ph name="DEVICE_TYPE" /> را شروع کنید.</translation> <translation id="4415245286584082850">دستگاهی پیدا نشد. در برگه جدیدی، یک مقاله مرکز راهنمایی باز کنید.</translation> <translation id="4415276339145661267">مدیریت «حساب Google»</translation> @@ -3086,6 +3097,7 @@ <translation id="4493468155686877504">(<ph name="INSTALL_SIZE" />) توصیهشده</translation> <translation id="4495419450179050807">در این صفحه نشان داده نشود</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> خراب شده است</translation> +<translation id="4500587658229086076">محتوای ناامن</translation> <translation id="450099669180426158">نماد علامت تعجب</translation> <translation id="4501530680793980440">تأیید حذف</translation> <translation id="4502423230170890588">حذف از این دستگاه</translation> @@ -3126,6 +3138,7 @@ <translation id="4538684596480161368">همیشه افزایههای آزمایشی نشده در <ph name="HOST" /> مسدود شوند</translation> <translation id="4538792345715658285">نصب شده توسط خطمشی سازمانی.</translation> <translation id="4541662893742891060">امکان اتصال به این نمایه وجود ندارد. برای پشتیبانی فنی، لطفاً با شرکت مخابراتیتان تماس بگیرید.</translation> +<translation id="4541810033354695636">واقعیت افزوده</translation> <translation id="4542520061254486227">خواندن دادههای شما در <ph name="WEBSITE_1" /> و <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">مدیر گواهینامه</translation> <translation id="4544174279960331769">چهرهنمای پیشفرض آبی</translation> @@ -3598,6 +3611,7 @@ <translation id="5112577000029535889">ابزارهای &برنامه نویس</translation> <translation id="5113739826273394829">اگر روی این نماد کلیک کنید، به صورت دستی این <ph name="DEVICE_TYPE" /> را قفل خواهید کرد. بار بعد، باید برای وارد شدن، گذرواژه را تایپ کنید.</translation> <translation id="51143538739122961">کلید امنیتی را وارد و لمس کنید</translation> +<translation id="5114987907971894280">واقعیت مجازی</translation> <translation id="5115309401544567011">لطفاً <ph name="DEVICE_TYPE" /> خود را به منبع نیرو وصل کنید.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">ذ&خیره فایل صوتی بهعنوان...</translation> @@ -3897,6 +3911,7 @@ <translation id="5464632865477611176">این بار اجرا شود</translation> <translation id="5464660706533281090">کاربر کودک نمیتواند این تنظیم را تغییر دهد.</translation> <translation id="5466374726908360271">جایگذاری و جستجوی «<ph name="SEARCH_TERMS" />»</translation> +<translation id="5467207440419968613"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> مسدود شدهاند</translation> <translation id="5468119583641912100">سایتها میتوانند پخش محتوای محافظتشده را درخواست کنند (توصیه میشود)</translation> <translation id="5468173180030470402">درحال یافتن دستگاه ذخیرهسازی متصل به شبکه</translation> <translation id="5469852975082458401">با نشانگر نوشتار میتوانید صفحهها را پیمایش کنید. برای خاموش شدن، F7 را فشار دهید.</translation> @@ -4188,6 +4203,7 @@ <translation id="5794786537412027208">خروج از همه برنامههای Chrome</translation> <translation id="5797070761912323120">Google ممکن است از سابقه مرور شما برای شخصی کردن جستجو، آگهیها و سایر سرویسهای Google استفاده کند</translation> <translation id="5798301976526354562">اندازه نوشتار (برای «زیرنویس ناشنوایان زنده» نیز اعمال میشود)</translation> +<translation id="579907812742603813">محتوای محافظتشده</translation> <translation id="579915268381781820">کلید امنیتیتان برداشته شد.</translation> <translation id="5799508265798272974">ماشین مجازی Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">فایل مقصد از زمان آخرین بارگیری برداشته شده است یا ناقص است.</translation> @@ -4261,6 +4277,7 @@ <translation id="5877064549588274448">کانال تغییر کرد. برای اعمال تغییرات دستگاه خود را مجدداً راهاندازی کنید.</translation> <translation id="5877584842898320529">چاپگر انتخابی موجود نیست یا بهدرستی نصب نشده است. <ph name="BR" /> چاپگر خود را بررسی کنید یا چاپگر دیگری را انتخاب کنید.</translation> <translation id="5882919346125742463">شبکههای شناختهشده</translation> +<translation id="5883356647197510494"><ph name="PERMISSION_1" /> و <ph name="PERMISSION_2" /> بهطور خودکار مسدود شدهاند</translation> <translation id="5884474295213649357">این برگه به دستگاه USB متصل است.</translation> <translation id="5886009770935151472">انگشت ۱</translation> <translation id="5889282057229379085">حداکثر تعداد CA های متوسط: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4760,6 +4777,7 @@ <translation id="6460601847208524483">یافتن بعدی</translation> <translation id="6461170143930046705">درحال جستجوی شبکه...</translation> <translation id="6463795194797719782">&ویرایش</translation> +<translation id="6464094930452079790">تصاویر</translation> <translation id="6464825623202322042">این دستگاه</translation> <translation id="6465841119675156448">بدون اینترنت</translation> <translation id="6466988389784393586">&باز کردن همه نشانکها</translation> @@ -4783,6 +4801,7 @@ <translation id="6491376743066338510">مجوز صادر نشد</translation> <translation id="6494327278868541139">نمایش جزئیات محافظت بهبودیافته</translation> <translation id="6494445798847293442">یک ارائهدهنده مجوز نیست</translation> +<translation id="6494750904506170417">بالاپرها و هدایتها</translation> <translation id="6494974875566443634">سفارشی کردن</translation> <translation id="6495925982925244349">شبکه <ph name="NETWORK_INDEX" /> از <ph name="NETWORK_COUNT" />، <ph name="NETWORK_NAME" />، <ph name="SECURITY_STATUS" />، <ph name="CONNECTION_STATUS" />، قدرت سیگنال <ph name="SIGNAL_STRENGTH" />٪، تحتمدیریت سرپرست، جزئیات</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{این داده محتوای حساس یا خطرناک دارد}=1{این فایل محتوای حساس یا خطرناک دارد}one{این فایلها محتوای حساس یا خطرناک دارند}other{این فایلها محتوای حساس یا خطرناک دارند}}</translation> @@ -4923,6 +4942,7 @@ <translation id="6657585470893396449">گذرواژه</translation> <translation id="6659213950629089752">برنامه افزودنی «<ph name="NAME" />» این صفحه را بزرگنمایی کرده است</translation> <translation id="6659594942844771486">برگه</translation> +<translation id="6660413144148052430">مکان</translation> <translation id="666099631117081440">سرورهای چاپ</translation> <translation id="6663190258859265334"><ph name="DEVICE_TYPE" /> شما Powerwash میشود و به نسخه قبلی برمیگردد.</translation> <translation id="6664237456442406323">متأسفانه، رایانه شما با یک شناسه سختافزار ناقص پیکربندی شده است. این موضوح Chrome OS را از بهروزرسانی با جدیدترین اصلاحات امنیتی باز میدارد که <ph name="BEGIN_BOLD" />میتواند رایانه شما را در برابر حملات مخرب آسیبپذیر نماید<ph name="END_BOLD" />.</translation> @@ -4977,6 +4997,7 @@ <translation id="672609503628871915">مشاهده تازهها</translation> <translation id="67269783048918309">دادههای استفاده و عیبیابی را ارسال کنید. این دستگاه درحالحاضر بهصورت خودکار دادههای عیبیابی و دادههای استفاده از دستگاه و برنامه را برای Google ارسال میکند. این دادهها برای شناسایی فرزندتان استفاده نخواهند شد و به بهبود پایداری سیستم و برنامه و موارد دیگر کمک خواهد کرد. بعضی دادههای انبوه نیز به برنامهها و شرکای Google (مانند برنامهنویسهای Android) کمک میکند. این <ph name="BEGIN_LINK1" />تنظیم<ph name="END_LINK1" /> توسط مالک اعمال میشود. اگر تنظیم «فعالیت وب و برنامه» تکمیلی برای فرزندتان روشن باشد، ممکن است این دادهها در حساب Google او ذخیره شود. <ph name="BEGIN_LINK2" />بیشتر بدانید<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">متصل، <ph name="BATTERY_PERCENTAGE" />٪ باتری</translation> +<translation id="6732087373923685049">دوربین</translation> <translation id="6732801395666424405">گواهیها بارگیری نشدند</translation> <translation id="6732900235521116609">برداشتن میانبر ممکن نیست</translation> <translation id="6734468588183300211">در حالت ناشناس، سایتها نمیتوانند از کوکیهای شما برای دیدن فعالیت مرور شما در سایتهای مختلف و برای مثال شخصیسازی آگهیها استفاده کنند. ویژگیها ممکن است در برخی سایتها کار نکنند.</translation> @@ -5051,6 +5072,7 @@ <translation id="6817174620439930047">اگر سایتی میخواهد از پیامهای انحصاری سیستم برای دسترسی به دستگاههای MIDI استفاده کند سؤال شود (توصیه میشود)</translation> <translation id="6818198425579322765">زبان صفحه موردنظر برای ترجمه</translation> <translation id="6818802132960437751">مجهز به محافظ دربرابر ویروس</translation> +<translation id="6820143000046097424">درگاههای سریال</translation> <translation id="682123305478866682">فرستادن میزکار</translation> <translation id="6823174134746916417">کلیک با یک ضربه روی صفحه لمسی</translation> <translation id="6824564591481349393">کپی آدرس &ایمیل</translation> @@ -5484,6 +5506,7 @@ <translation id="730515362922783851">تبادل داده با هر دستگاهی در شبکه محلی یا اینترنت</translation> <translation id="7306521477691455105">برای اتصال <ph name="USB_DEVICE_NAME" /> به <ph name="USB_VM_NAME" />، «تنظیمات» را باز کنید</translation> <translation id="7307129035224081534">موقتاً متوقف شد</translation> +<translation id="7308436126008021607">همگامسازی پسزمینه</translation> <translation id="7309257895202129721">نمایش &کنترلها</translation> <translation id="7310598146671372464">ورود به سیستم انجام نشد. این سرور از رمزگذاریهای Kerberos مشخصشده پشتیبانی نمیکند. لطفاً با سرپرست سیستم تماس بگیرید.</translation> <translation id="7320213904474460808">شبکه پیشفرض</translation> @@ -5625,6 +5648,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{باید فوراً برگردانده شود}one{<ph name="DEVICE_TYPE" /> را ظرف {NUM_DAYS} روز آینده برگردانید}other{<ph name="DEVICE_TYPE" /> را ظرف {NUM_DAYS} روز آینده برگردانید}}</translation> <translation id="7475671414023905704">نشانی وب گذرواژه گم شده Netscape</translation> <translation id="7476454130948140105">شارژ باتری برای بهروزرسانی خیلی کم است (<ph name="BATTERY_PERCENT" />٪)</translation> +<translation id="7476989672001283112"><ph name="PERMISSION" /> و <ph name="COUNT" /> اجازه دیگر بهطور خودکار مسدود شدهاند</translation> <translation id="7477793887173910789">کنترل موسیقی، ویدیو و سایر موارد</translation> <translation id="7478485216301680444">برنامه کاربردی کیوسک نصب نشد.</translation> <translation id="7478623944308207463">برنامهها و تنظیماتتان در همه دستگاههای «سیستمعامل Chrome» که با حساب Google خود در آنها به سیستم وارد شدهاید همگامسازی خواهد شد. برای گزینههای همگامسازی مرورگر، به <ph name="LINK_BEGIN" />تنظیمات Chrome<ph name="LINK_END" /> بروید.</translation> @@ -6369,6 +6393,7 @@ <translation id="8288032458496410887">حذف نصب <ph name="APP" />...</translation> <translation id="8289128870594824098">حجم دیسک</translation> <translation id="8293206222192510085">افزودن نشانک</translation> +<translation id="829335040383910391">صدا</translation> <translation id="8294431847097064396">منبع</translation> <translation id="8298429963694909221">ازاینپس میتوانید اعلانهای تلفنتان را در <ph name="DEVICE_TYPE" /> دریافت کنید. با رد کردن اعلانها در <ph name="DEVICE_TYPE" />، آنها در تلفنتان نیز رد میشوند. مطمئن شوید تلفنتان نزدیک باشد و بلوتوث و Wi-Fi در آن روشن باشد.</translation> <translation id="8299319456683969623">در حال حاضر آفلاين هستید.</translation> @@ -6387,6 +6412,7 @@ <translation id="8317671367883557781">افزودن اتصال شبکه</translation> <translation id="8319414634934645341">کاربرد کلید توسعه یافته</translation> <translation id="8320459152843401447">کل صفحهنمایش</translation> +<translation id="8321476692217554900">اعلانها</translation> <translation id="8321837372750396788">این <ph name="DEVICE_TYPE" /> توسط <ph name="MANAGER" /> مدیریت میشود.</translation> <translation id="8322814362483282060">این صفحه از دسترسی به میکروفون شما بازداشته شده است.</translation> <translation id="8323167517179506834">تایپ کردن نشانی وب</translation> @@ -6452,7 +6478,9 @@ <translation id="8403562727702715619">اخیراً از Google Drive</translation> <translation id="8407199357649073301">سطح گزارش:</translation> <translation id="8408068190360279472">شبکه <ph name="NETWORK_TYPE" />، درحال اتصال</translation> +<translation id="8409413588194360210">کنترلکنندههای پرداخت</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322"><ph name="PERMISSION" /> و <ph name="COUNT" /> اجازه دیگر مجاز شدهاند</translation> <translation id="8413385045638830869">ابتدا سؤال شود (توصیه میشود)</translation> <translation id="8417548266957501132">گذرواژه ولی</translation> <translation id="8418445294933751433">&نمایش بهصورت برگه</translation> @@ -6648,6 +6676,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> یا <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">دمای رنگ «نور شب»</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> میخواهد: <ph name="FIRST_PERMISSION" />، <ph name="SECOND_PERMISSION" />، و غیره</translation> +<translation id="865032292777205197">حسگرهای حرکتی</translation> <translation id="8650543407998814195">هرچند دیگر نمیتوانید به نمایه قدیمیتان دسترسی داشته باشید اما همچنان میتوانید آن را حذف کنید.</translation> <translation id="8651585100578802546">تازه سازی اجباری این صفحه</translation> <translation id="8652400352452647993">خطا در بستهبندی افزونه</translation> @@ -6785,6 +6814,7 @@ <translation id="8785622406424941542">قلم</translation> <translation id="8787254343425541995">پراکسیهای شبکههای مشترک مجاز باشند</translation> <translation id="8791534160414513928">ارسال درخواست «ردیابی نشود» با ترافیک مرور</translation> +<translation id="8792626944327216835">میکروفون</translation> <translation id="879413103056696865">وقتی نقطه اتصال روشن است، <ph name="PHONE_NAME" /> شما:</translation> <translation id="8795916974678578410">پنجرهٔ جدید</translation> <translation id="8797459392481275117">این سایت هرگز ترجمه نشود</translation> @@ -6824,6 +6854,7 @@ <translation id="8823559166155093873">مسدود کردن کوکیها</translation> <translation id="8823704566850948458">پیشنهاد گذرواژه…</translation> <translation id="8824701697284169214">افزودن &صفحه...</translation> +<translation id="8827125715368568315"><ph name="PERMISSION" /> و <ph name="COUNT" /> اجازه دیگر مسدود شدهاند</translation> <translation id="8827289157496676362">پین کردن افزونه</translation> <translation id="8827752199525959199">عملکردهای بیشتر، گذرواژه برای <ph name="USERNAME" /> در <ph name="DOMAIN" /></translation> <translation id="882854468542856424">به هیچ سایتی اجازه نداده نشود دستگاههای بلوتوث اطراف را پیدا کند</translation> @@ -6924,6 +6955,7 @@ <translation id="8932894639908691771">گزینههای دسترسی کلیدی</translation> <translation id="8933960630081805351">&نمایش در Finder</translation> <translation id="8934732568177537184">ادامه</translation> +<translation id="8938306522009698937">کنترلکنندهها</translation> <translation id="8938800817013097409">دستگاه USB-C (درگاه عقب سمت راست)</translation> <translation id="8940081510938872932">رایانهٔ شما اکنون در حال انجام کارهای زیادی است. در فرصت دیگری دوباره سعی کنید.</translation> <translation id="8941173171815156065">لغو مجوز «<ph name="PERMISSION" />»</translation> @@ -7228,6 +7260,7 @@ <translation id="987264212798334818">موارد کلی</translation> <translation id="987897973846887088">تصویری دردسترس نیست</translation> <translation id="988978206646512040">عبارت عبور خالی مجاز نیست</translation> +<translation id="991413375315957741">حسگرهای نوری یا حرکتی</translation> <translation id="992032470292211616">افزودنیها، برنامهها و طرحهای زمینه میتوانند به دستگاه شما آسیب برسانند. آیا مطمئن هستید که میخواهید ادامه دهید؟</translation> <translation id="992256792861109788">صورتی</translation> <translation id="992592832486024913">غیرفعال کردن ChromeVox (بازخورد گفتاری)</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 1732cc4..38f3ad5f 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -4346,7 +4346,7 @@ <translation id="5978277834170881274">&Utiliser le correcteur orthographique de base</translation> <translation id="5979084224081478209">Vérifier les mots de passe</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Vous avez réactivé 1 extension potentiellement nuisible}one{Vous avez réactivé {NUM_EXTENSIONS} extension potentiellement nuisible}other{Vous avez réactivé {NUM_EXTENSIONS} extensions potentiellement nuisibles}}</translation> -<translation id="5979353814339191480">Cette option s'applique aux appareils Chromebook dotés d'un forfait cellulaire ou d'une clé électronique offrant une connexion réseau cellulaire, ou qui partage la connexion d'un appareil portatif</translation> +<translation id="5979353814339191480">Cette option s'applique aux appareils Chromebook dotés d'un forfait de données ou d'une clé électronique offrant une connexion réseau cellulaire, ou qui partage la connexion d'un appareil portatif</translation> <translation id="5979421442488174909">&Traduire en <ph name="LANGUAGE" /></translation> <translation id="5979469435153841984">Pour ajouter des pages aux favoris, cliquez sur l'étoile située dans la barre d'adresse</translation> <translation id="5984222099446776634">Dossiers récents</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 5c7e93d..5d8dd322 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -425,6 +425,7 @@ <translation id="1465827627707997754">Part de pizza</translation> <translation id="1468571364034902819">Impossible d'utiliser ce profil</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{Ajouter l'onglet à un nouveau groupe}one{Ajouter l'onglet à un nouveau groupe}other{Ajouter les onglets à un nouveau groupe}}</translation> +<translation id="1470350905258700113">Utiliser cet appareil</translation> <translation id="1470946456740188591">Pour activer ou désactiver la navigation au clavier, appuyez sur Ctrl+Recherche+7</translation> <translation id="1472675084647422956">Plus</translation> <translation id="1474785664565228650">La modification des paramètres du micro nécessite le redémarrage de Parallels Desktop. Relancez Parallels Desktop pour continuer.</translation> @@ -1399,6 +1400,7 @@ <translation id="2541002089857695151">Optimiser la diffusion en plein écran ?</translation> <translation id="2541706104884128042">Nouvelle heure de coucher définie</translation> <translation id="2542050502251273923">Définit le niveau de débogage du gestionnaire de connexion réseau et d'autres services à l'aide de ff_debug.</translation> +<translation id="2544292303401268586">Votre administrateur a demandé à redémarrer votre appareil pour mettre à jour les applications. Cette opération peut prendre plusieurs minutes.</translation> <translation id="2544853746127077729">Certificat d'authentification rejeté par le réseau.</translation> <translation id="2546283357679194313">Cookies et données de sites</translation> <translation id="2548347166720081527">Autorisation "<ph name="PERMISSION" />" accordée</translation> @@ -2781,6 +2783,7 @@ <translation id="409579654357498729">Ajouter à Google Cloud Print</translation> <translation id="4096508467498758490">Désactiver les extensions exécutées en mode développeur ?</translation> <translation id="4097406557126260163">Applications et extensions</translation> +<translation id="409742781329613461">Conseils pour Chrome</translation> <translation id="4097560579602855702">Recherche Google</translation> <translation id="4098667039111970300">Outils de stylet dans la barre d'outils</translation> <translation id="4099060993766194518">Restaurer le moteur de recherche par défaut ?</translation> @@ -4092,6 +4095,7 @@ <translation id="5678550637669481956">L'accès en lecture et en écriture à "<ph name="VOLUME_NAME" />" a été accordé.</translation> <translation id="5678955352098267522">Lire vos données sur <ph name="WEBSITE_1" /></translation> <translation id="5680050361008726776">Supprimer "<ph name="ESIM_PROFILE_NAME" />" ?</translation> +<translation id="5683806393796685434">Veuillez saisir votre code d'activation</translation> <translation id="5684181005476681636">Informations sur le réseau Wi-Fi</translation> <translation id="5684661240348539843">Identifiant d'élément</translation> <translation id="5687326903064479980">Fuseau horaire</translation> @@ -4343,6 +4347,7 @@ <translation id="5978277834170881274">&Utiliser le correcteur orthographique de base</translation> <translation id="5979084224081478209">Vérifier les mots de passe</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Vous avez réactivé 1 extension potentiellement dangereuse}one{Vous avez réactivé {NUM_EXTENSIONS} extension potentiellement dangereuse}other{Vous avez réactivé {NUM_EXTENSIONS} extensions potentiellement dangereuses}}</translation> +<translation id="5979353814339191480">Cette option s'applique aux Chromebooks avec un forfait Internet ou un dongle de réseau mobile, ou aux Chromebooks partageant leur connexion avec un point d'accès mobile.</translation> <translation id="5979421442488174909">&Traduire en <ph name="LANGUAGE" /></translation> <translation id="5979469435153841984">Pour ajouter des pages à vos favoris, cliquez sur l'étoile dans la barre d'adresse</translation> <translation id="5984222099446776634">Consultations récentes</translation> @@ -4822,6 +4827,7 @@ <translation id="653659894138286600">Scanner les documents et les images</translation> <translation id="6537613839935722475">Le nom peut contenir des lettres, des chiffres et des traits d'union (-)</translation> <translation id="6537880577641744343">Commander</translation> +<translation id="6538098297809675636">Erreur lors de la détection du code</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Remarque<ph name="END_BOLD" /> : N'activez cette option que si vous êtes sûr de ce que vous faites ou si vous avez été invité à le faire. En effet, la collecte d'informations est susceptible de diminuer les performances.</translation> <translation id="6541638731489116978">L'accès à vos capteurs de mouvement est bloqué pour ce site.</translation> <translation id="6545665334409411530">Fréquence de répétition</translation> @@ -6018,6 +6024,7 @@ <translation id="7904526211178107182">Rendre les ports Linux disponibles pour les autres appareils de votre réseau.</translation> <translation id="7907837847548254634">Mettre en surbrillance rapidement l'objet ciblé</translation> <translation id="7908378463497120834">Désolé, impossible d'installer au moins une partition de votre périphérique de stockage externe.</translation> +<translation id="7909324225945368569">Renommer votre profil</translation> <translation id="7909969815743704077">Téléchargé en mode navigation privée</translation> <translation id="7910768399700579500">&Nouveau dossier</translation> <translation id="7911118814695487383">Linux</translation> @@ -6635,6 +6642,7 @@ <translation id="8642900771896232685">2 secondes</translation> <translation id="8642947597466641025">Augmente la taille du texte</translation> <translation id="8643443571868262066">Le fichier <ph name="FILE_NAME" /> est peut-être dangereux. Souhaitez-vous l'envoyer au service Protection Avancée de Google pour analyse ?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{Aucun cookie}=1{1 cookie a été bloqué}one{# cookie a été bloqué}other{# cookies ont été bloqués}}</translation> <translation id="8644655801811752511">Impossible de réinitialiser cette clé de sécurité. Essayez de la réinitialiser immédiatement après l’avoir insérée.</translation> <translation id="8645354835496065562">Continuer d'autoriser l'accès aux capteurs</translation> <translation id="8645920082661222035">Prédit les événements dangereux et vous en informe avant qu'ils ne surviennent</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index 4c33e75..3a55251 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Predeterminadas</translation> <translation id="1252987234827889034">Produciuse un erro no perfil</translation> <translation id="1254593899333212300">Conexión directa a Internet</translation> +<translation id="1257553931232494454">niveis de zoom</translation> <translation id="1259152067760398571">A comprobación de seguranza executouse onte</translation> <translation id="1260451001046713751">Permitir sempre ventás emerxentes e redireccións desde <ph name="HOST" /></translation> <translation id="1261380933454402672">Moderada</translation> @@ -670,6 +671,7 @@ <translation id="1729533290416704613">Tamén controla que páxina se mostra ao buscar desde a omnibox.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Para eliminar aplicacións, accede a Configuración > Google Play Store > Xestionar preferencias de Android > Aplicacións —ou Xestionar aplicacións— e toca a aplicación que queiras desinstalar (é posible que debas pasar o dedo cara á dereita ou á esquerda para atopala). Despois, toca Desinstalar ou Desactivar.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Enviando solicitude...</translation> +<translation id="1733064249834771892">letras</translation> <translation id="1733383495376208985">Encriptar os datos sincronizados coa túa propia <ph name="BEGIN_LINK" />frase de acceso de sincronización<ph name="END_LINK" />. Non se inclúen os métodos de pago nin os enderezos de Google Pay.</translation> <translation id="1734212868489994726">Azul claro</translation> <translation id="1734230530703461088">Produciuse un erro ao cargar as extensións dentro do tempo previsto. Ponte en contacto co teu administrador.</translation> @@ -757,6 +759,7 @@ <translation id="1818913467757368489">Cargando rexistro.</translation> <translation id="1819721979226826163">Toca Notificacións da aplicación > Servizos de Google Play.</translation> <translation id="1820028137326691631">Introducir o contrasinal indicado polo administrador</translation> +<translation id="182139138257690338">descargas automáticas</translation> <translation id="1822140782238030981">Xa es usuario de Chrome? Inicia sesión</translation> <translation id="18245044880483936">Os datos da copia de seguranza non contarán na cota de almacenamento de Drive do teu fillo.</translation> <translation id="1825565032302550710">O porto debe estar comprendido entre o 1024 e o 65535</translation> @@ -1197,6 +1200,7 @@ <translation id="2326931316514688470">Vo&lver cargar aplicación</translation> <translation id="2327492829706409234">Activar aplicación</translation> <translation id="2328561734797404498">Reinicia o teu dispositivo para utilizar <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">colocación das ventás</translation> <translation id="2329597144923131178">Inicia sesión para ter os marcadores, o historial, os contrasinais e o resto da túa configuración en todos os teus dispositivos.</translation> <translation id="2332131598580221120">Ver na tenda</translation> <translation id="2332192922827071008">Abrir preferencias</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">Nova pestana no grupo</translation> <translation id="289644616180464099">A tarxeta SIM está bloqueada</translation> <translation id="289695669188700754">ID da clave: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Esta opción de configuración personalizada quitarase cando peches todas as ventás do modo de incógnito</translation> <translation id="2897878306272793870">Seguro que queres abrir <ph name="TAB_COUNT" /> pestanas?</translation> <translation id="290105521672621980">O ficheiro utiliza funcións que non son compatibles</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> non se puido comunicar con esta impresora. Asegúrate de que a impresora estea conectada e téntao de novo.</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">Os datos encríptanse coa túa frase de acceso de sincronización. Non se inclúen os métodos de pago nin os enderezos de Google Pay.</translation> <translation id="2996722619877761919">Voltear no bordo longo</translation> <translation id="3000236644796679448">Os sitios poden pedirche permiso para usar o micrófono (recomendado)</translation> +<translation id="3000378525979847272">Permitíronse os seguintes permisos: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Audio mono</translation> <translation id="3001144475369593262">Contas infantís</translation> <translation id="3003144360685731741">Redes preferidas</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">Abrir PDF en vista previa</translation> <translation id="3308116878371095290">Impediuse que esta páxina establecese cookies.</translation> <translation id="3308134619352333507">Ocultar botón</translation> +<translation id="3308738399950580893">anuncios</translation> <translation id="3308852433423051161">Estase cargando o Asistente de Google...</translation> <translation id="3309330461362844500">Identificador do perfil do certificado</translation> <translation id="3311445899360743395">Os datos asociados a esta aplicación pódense quitar deste dispositivo.</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">Este ficheiro está encriptado. Pídelle ao seu propietario que o desencripte.</translation> <translation id="3390013585654699824">Detalles da aplicación</translation> <translation id="3390741581549395454">Creouse correctamente unha copia de seguranza das aplicacións e dos ficheiros de Linux. A actualización empezará en breve.</translation> +<translation id="3391482648489541560">modificación de ficheiros</translation> <translation id="339178315942519818">Accede ás notificacións das aplicacións de chat no teu dispositivo (<ph name="DEVICE_TYPE" />)</translation> <translation id="3396800784455899911">Ao facer clic no botón Aceptar e continuar, aceptarás o procesamento descrito anteriormente para estes servizos de Google.</translation> <translation id="3399432415385675819">Desactivaranse as notificacións</translation> @@ -2893,6 +2901,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="4259381619085088639">a túa presenza</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> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">Configura un novo PIN para a chave de seguranza</translation> <translation id="4305402730127028764">Copiar en <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">As aplicacións deben incluír o tipo de contido "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">portapapeis</translation> <translation id="4307992518367153382">Opcións básicas</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K activos)</translation> <translation id="4310139701823742692">O ficheiro ten un formato que non é válido. Comproba o ficheiro PPD e téntao de novo.</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">Centro de Axuda</translation> <translation id="44141919652824029">Queres permitir que a aplicación <ph name="APP_NAME" /> acceda á lista de dispositivos USB conectados?</translation> <translation id="4414232939543644979">Nova ventá de &incógnito</translation> +<translation id="4414515549596849729">cookies e datos dos sitios</translation> <translation id="4415213869328311284">Xa podes comezar a utilizar o <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Non se atoparon dispositivos. Abre un artigo do centro de axuda nunha nova pestana.</translation> <translation id="4415276339145661267">Xestionar a túa Conta de Google</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">Recomendado (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Non mostrar nesta páxina</translation> <translation id="4500114933761911433">Produciuse un fallo co complemento <ph name="PLUGIN_NAME" /></translation> +<translation id="4500587658229086076">contido inseguro</translation> <translation id="450099669180426158">Icona de signo de exclamación</translation> <translation id="4501530680793980440">Confirmar eliminación</translation> <translation id="4502423230170890588">Quitar deste dispositivo</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368">Bloquear sempre os plugins de <ph name="HOST" /> que non estean no illamento de procesos</translation> <translation id="4538792345715658285">Instalada pola política de empresa.</translation> <translation id="4541662893742891060">Non se puido establecer conexión con este perfil. Para obter asistencia técnica, ponte en contacto co teu operador.</translation> +<translation id="4541810033354695636">realidade aumentada</translation> <translation id="4542520061254486227">Ler os teus datos de <ph name="WEBSITE_1" /> e <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Xestor de certificados</translation> <translation id="4544174279960331769">Avatar azul predeterminado</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">&Ferramentas para programadores</translation> <translation id="5113739826273394829">Se fas clic nesta icona, bloquearás manualmente <ph name="DEVICE_TYPE" />. A próxima vez, terás que escribir o teu contrasinal para acceder.</translation> <translation id="51143538739122961">Introduce a túa chave de seguranza e tócaa</translation> +<translation id="5114987907971894280">realidade virtual</translation> <translation id="5115309401544567011">Enchufa o dispositivo <ph name="DEVICE_TYPE" /> a unha fonte de alimentación.</translation> <translation id="5115338116365931134">Inicio de sesión único</translation> <translation id="5116628073786783676">G&ardar audio como...</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">Executar esta vez</translation> <translation id="5464660706533281090">Os nenos non poden cambiar esta opción de configuración.</translation> <translation id="5466374726908360271">Pegar e bu&scar "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Bloqueáronse os seguintes permisos: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Os sitios poden pedirche permiso para reproducir contido protexido (recomendado)</translation> <translation id="5468173180030470402">Buscando ficheiros compartidos</translation> <translation id="5469852975082458401">Podes navegar polas páxinas cun cursor de texto. Preme F7 para desactivar esta función.</translation> @@ -4188,6 +4203,7 @@ <translation id="5794786537412027208">Saír de todas as aplicacións de Chrome</translation> <translation id="5797070761912323120">Google pode utilizar o teu historial para personalizar a Busca, os anuncios e outros servizos seus.</translation> <translation id="5798301976526354562">Tamaño do texto (tamén se aplica á función Subtítulos instantáneos)</translation> +<translation id="579907812742603813">contido protexido</translation> <translation id="579915268381781820">Quitouse a túa chave de seguranza.</translation> <translation id="5799508265798272974">Máquina virtual de Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">O ficheiro de destino truncouse ou eliminouse desde a última descarga.</translation> @@ -4261,6 +4277,7 @@ <translation id="5877064549588274448">Canle cambiada. Reinicia o dispositivo para aplicar os cambios.</translation> <translation id="5877584842898320529">A impresora seleccionada non está dispoñible ou non está instalada correctamente. <ph name="BR" /> Comproba a impresora ou tenta seleccionar outra.</translation> <translation id="5882919346125742463">Redes coñecidas</translation> +<translation id="5883356647197510494">Bloqueáronse automaticamente os seguintes permisos: <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Esta pestana está conectada a un dispositivo USB.</translation> <translation id="5886009770935151472">Dedo 1</translation> <translation id="5889282057229379085">Número máximo de CA intermedias: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4760,6 +4777,7 @@ <translation id="6460601847208524483">Buscar seguinte</translation> <translation id="6461170143930046705">Buscando redes…</translation> <translation id="6463795194797719782">&Editar</translation> +<translation id="6464094930452079790">imaxes</translation> <translation id="6464825623202322042">Este dispositivo</translation> <translation id="6465841119675156448">Sen Internet</translation> <translation id="6466988389784393586">&Abrir todos os marcadores</translation> @@ -4783,6 +4801,7 @@ <translation id="6491376743066338510">Produciuse un erro na autorización</translation> <translation id="6494327278868541139">Mostrar detalles de protección mellorada</translation> <translation id="6494445798847293442">Non é unha autoridade de certificación</translation> +<translation id="6494750904506170417">ventás emerxentes e redireccións</translation> <translation id="6494974875566443634">Personalización</translation> <translation id="6495925982925244349">Rede <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, intensidade do sinal do <ph name="SIGNAL_STRENGTH" /> %, xestionada polo teu administrador, detalles</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Estes datos inclúen contido confidencial ou perigoso}=1{Este ficheiro inclúe contido confidencial ou perigoso}other{Estes ficheiros inclúen contido confidencial ou perigoso}}</translation> @@ -4923,6 +4942,7 @@ <translation id="6657585470893396449">Contrasinal</translation> <translation id="6659213950629089752">A extensión <ph name="NAME" /> aplicou o zoom nesta páxina</translation> <translation id="6659594942844771486">Pestana</translation> +<translation id="6660413144148052430">localización</translation> <translation id="666099631117081440">Servidores de impresión</translation> <translation id="6663190258859265334">Utiliza a función Powerwash no teu dispositivo (<ph name="DEVICE_TYPE" />) e volve á versión anterior.</translation> <translation id="6664237456442406323">Desafortunadamente, o teu ordenador está configurado cun ID de hardware incorrecto. Isto impide que Chrome OS se actualice coas correccións de seguranza máis recentes e é posible que o teu ordenador <ph name="BEGIN_BOLD" />sexa vulnerable a ataques malintencionados<ph name="END_BOLD" />.</translation> @@ -4977,6 +4997,7 @@ <translation id="672609503628871915">Ver as novidades</translation> <translation id="67269783048918309">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. Esta <ph name="BEGIN_LINK1" />opción de configuración<ph name="END_LINK1" /> contrólaa o propietario. 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="6727969043791803658">Conectado, <ph name="BATTERY_PERCENTAGE" /> % de batería</translation> +<translation id="6732087373923685049">cámara</translation> <translation id="6732801395666424405">Non se poden cargar os certificados</translation> <translation id="6732900235521116609">Non se pode quitar o atallo</translation> <translation id="6734468588183300211">Co modo de incógnito activado, os sitios web non poden utilizar cookies para ver a túa actividade de navegación en distintos sitios (por exemplo, para personalizar os anuncios). As funcións dalgúns sitios poden quedar bloqueadas.</translation> @@ -5051,6 +5072,7 @@ <translation id="6817174620439930047">Preguntar cando un sitio queira utilizar mensaxes exclusivas do sistema para acceder aos dispositivos MIDI (recomendado)</translation> <translation id="6818198425579322765">Idioma da páxina que se quere traducir</translation> <translation id="6818802132960437751">Protección antivirus integrada</translation> +<translation id="6820143000046097424">portos de serie</translation> <translation id="682123305478866682">Emitir contido do escritorio</translation> <translation id="6823174134746916417">Tocar para facer clic do panel táctil</translation> <translation id="6824564591481349393">Copiar &enderezo de correo electrónico</translation> @@ -5484,6 +5506,7 @@ <translation id="730515362922783851">Intercambiar datos con calquera dispositivo da rede local ou Internet</translation> <translation id="7306521477691455105">Para conectar <ph name="USB_DEVICE_NAME" /> a <ph name="USB_VM_NAME" />, abre Configuración</translation> <translation id="7307129035224081534">En pausa</translation> +<translation id="7308436126008021607">sincronización en segundo plano</translation> <translation id="7309257895202129721">Mostrar &controis</translation> <translation id="7310598146671372464">Non se puido iniciar sesión. O servidor non admite os tipos especificados de encriptación Kerberos. Ponte en contacto co teu administrador.</translation> <translation id="7320213904474460808">Establecer rede como predeterminada</translation> @@ -5625,6 +5648,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Requírese unha devolución de inmediato}other{Devolve o <ph name="DEVICE_TYPE" /> no prazo de {NUM_DAYS} días}}</translation> <translation id="7475671414023905704">URL de contrasinal perdido de Netscape</translation> <translation id="7476454130948140105">O nivel de batería é demasiado baixo para realizar a actualización (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Bloqueáronse automaticamente os seguintes permisos: <ph name="PERMISSION" /> e <ph name="COUNT" /> máis</translation> <translation id="7477793887173910789">Controlar a túa música, os vídeos e moito máis</translation> <translation id="7478485216301680444">Non se puido instalar a aplicación de quiosco.</translation> <translation id="7478623944308207463">As túas aplicacións e opcións de configuración sincronizaranse en todos os dispositivos Chrome OS nos que teñas a sesión iniciada na túa Conta de Google. Para ver as opción de sincronización do navegador, accede á <ph name="LINK_BEGIN" />configuración de Chrome<ph name="LINK_END" />.</translation> @@ -6368,6 +6392,7 @@ <translation id="8288032458496410887">Desinstalar a aplicación <ph name="APP" />…</translation> <translation id="8289128870594824098">Tamaño do disco</translation> <translation id="8293206222192510085">Engadir marcador</translation> +<translation id="829335040383910391">son</translation> <translation id="8294431847097064396">Fonte</translation> <translation id="8298429963694909221">Xa podes recibir as notificacións do teléfono no teu dispositivo (<ph name="DEVICE_TYPE" />). Cando ignores unha notificación no teu dispositivo (<ph name="DEVICE_TYPE" />) tamén se marcará como ignorada no teléfono. Asegúrate de que o teu teléfono estea preto e comproba que teña o Bluetooth e a wifi activados.</translation> <translation id="8299319456683969623">Actualmente estás sen conexión.</translation> @@ -6386,6 +6411,7 @@ <translation id="8317671367883557781">Engadir conexión de rede</translation> <translation id="8319414634934645341">Uso ampliado de claves</translation> <translation id="8320459152843401447">Toda a túa pantalla</translation> +<translation id="8321476692217554900">notificacións</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> xestionará este dispositivo (<ph name="DEVICE_TYPE" />).</translation> <translation id="8322814362483282060">Bloqueouse o acceso desta páxina ao teu micrófono.</translation> <translation id="8323167517179506834">Escribe o URL</translation> @@ -6451,7 +6477,9 @@ <translation id="8403562727702715619">Recentemente desde Google Drive</translation> <translation id="8407199357649073301">Nivel de rexistro:</translation> <translation id="8408068190360279472">Rede de tipo <ph name="NETWORK_TYPE" />, conectando</translation> +<translation id="8409413588194360210">indicadores de pago</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Permitíronse os seguintes permisos: <ph name="PERMISSION" /> e <ph name="COUNT" /> máis</translation> <translation id="8413385045638830869">Preguntar primeiro (recomendado)</translation> <translation id="8417548266957501132">Contrasinal do pai ou nai</translation> <translation id="8418445294933751433">&Mostrar como pestana</translation> @@ -6647,6 +6675,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ou <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura da cor da luz nocturna</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> require permisos para: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> etc.</translation> +<translation id="865032292777205197">sensores de movemento</translation> <translation id="8650543407998814195">Aínda que non podes acceder ao teu perfil antigo, podes eliminalo.</translation> <translation id="8651585100578802546">Forzar recarga desta páxina</translation> <translation id="8652400352452647993">Produciuse un erro na extensión do paquete</translation> @@ -6783,6 +6812,7 @@ <translation id="8785622406424941542">Lapis óptico</translation> <translation id="8787254343425541995">Permitir servidores proxy para redes compartidas</translation> <translation id="8791534160414513928">Enviar unha solicitude de "Non realizar seguimento" co teu tráfico de navegación</translation> +<translation id="8792626944327216835">micrófono</translation> <translation id="879413103056696865">Mentres a zona wifi estea activada, o teu teléfono <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nova ventá</translation> <translation id="8797459392481275117">Non traducir nunca este sitio</translation> @@ -6822,6 +6852,7 @@ <translation id="8823559166155093873">Bloquear cookies</translation> <translation id="8823704566850948458">Suxerir contrasinal…</translation> <translation id="8824701697284169214">Engadir pá&xina...</translation> +<translation id="8827125715368568315">Bloqueáronse os seguintes permisos: <ph name="PERMISSION" /> e <ph name="COUNT" /> máis</translation> <translation id="8827289157496676362">Fixar a extensión</translation> <translation id="8827752199525959199">Máis accións, contrasinal de <ph name="USERNAME" /> en <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Non permitir que ningún sitio web detecte dispositivos Bluetooth próximos</translation> @@ -6922,6 +6953,7 @@ <translation id="8932894639908691771">Opcións da función Acceso con interruptores</translation> <translation id="8933960630081805351">&Mostrar no localizador</translation> <translation id="8934732568177537184">Continuar</translation> +<translation id="8938306522009698937">controladores</translation> <translation id="8938800817013097409">Dispositivo USB-C (porto dereito posterior)</translation> <translation id="8940081510938872932">O teu ordenador está levando a cabo demasiadas accións neste momento. Téntao de novo máis tarde.</translation> <translation id="8941173171815156065">Revogar o permiso "<ph name="PERMISSION" />"</translation> @@ -7226,6 +7258,7 @@ <translation id="987264212798334818">Xeral</translation> <translation id="987897973846887088">Non hai imaxes dispoñibles</translation> <translation id="988978206646512040">A frase de acceso non pode estar baleira</translation> +<translation id="991413375315957741">sensores de movemento ou de luz</translation> <translation id="992032470292211616">As extensións, as aplicacións e os temas poden danar o teu dispositivo. Estás seguro de que queres continuar?</translation> <translation id="992256792861109788">Rosa</translation> <translation id="992592832486024913">Desactivar ChromeVox (comentarios orais)</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 6b43d2c..ee3f592 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -625,7 +625,7 @@ <translation id="1677472565718498478"><ph name="TIME" /> बाकी</translation> <translation id="1679068421605151609">डेवलपर टूल</translation> <translation id="1679810534535368772">क्या आप वाकई बाहर निकलना चाहते हैं?</translation> -<translation id="167983332380191032">प्रबंधक सेवा ने एचटीटीपी गड़बड़ी भेजी है.</translation> +<translation id="167983332380191032">मैनेजर सेवा ने एचटीटीपी गड़बड़ी भेजी है.</translation> <translation id="1680841347983561661">कृपया Google Play को कुछ देर बाद शुरू करें.</translation> <translation id="1680849702532889074">आपका Linux ऐप्लिकेशन इंस्टॉल करते समय कोई गड़बड़ी हुई.</translation> <translation id="16815041330799488">साइटों को क्लिपबोर्ड पर कॉपी किए गए लेख और इमेज न देखने दें</translation> @@ -1677,7 +1677,7 @@ <translation id="2854896010770911740">तीसरे पक्ष की कुकी हटाएं</translation> <translation id="2858138569776157458">मुख्य साइटें</translation> <translation id="2861301611394761800">सिस्टम अपडेट पूरा हुआ. कृपया सिस्टम को रीस्टार्ट करें.</translation> -<translation id="2861941300086904918">नेटिव क्लाइंट सुरक्षा प्रबंधक</translation> +<translation id="2861941300086904918">नेटिव क्लाइंट सुरक्षा मैनेजर</translation> <translation id="2862815659905780618">Linux डेवलपमेंट एनवायरमेंट हटाएं</translation> <translation id="2864601841139725659">अपना प्रोफ़ाइल चित्र सेट करें</translation> <translation id="2865919525181940183">इस समय, स्क्रीन पर मौजूद प्रोग्राम का स्क्रीनशॉट</translation> @@ -1701,7 +1701,7 @@ <translation id="2880660355386638022">विंडो प्लेसमेंट</translation> <translation id="2881076733170862447">जब आप एक्सटेंशन को क्लिक करते हैं</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> फिर से प्रारंभ होगा और जल्दी ही रीेसेट हो जाएगा</translation> -<translation id="2885378588091291677">काम का प्रबंधक</translation> +<translation id="2885378588091291677">काम का मैनेजर</translation> <translation id="2885729872133513017">सर्वर के जवाब को डिकोड करते समय कोई परेशानी हुई.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> <translation id="2889064240420137087">इनके साथ लिंक खोलें...</translation> @@ -2270,7 +2270,7 @@ <translation id="3552780134252864554">बाहर निकलने पर साफ़ की गई</translation> <translation id="3555812735919707620">एक्सटेंशन निकालें</translation> <translation id="3556000484321257665">आपका सर्च इंजन <ph name="URL" /> में बदल दिया गया था.</translation> -<translation id="3556433843310711081">आपका प्रबंधक इसे आपके लिए अनवरोधित कर सकता है</translation> +<translation id="3556433843310711081">आपका मैनेजर इसे आपके लिए अनवरोधित कर सकता है</translation> <translation id="3557101512409028104">Family Link की मदद से वेबसाइट पाबंदियां और किसी डिवाइस के इस्तेमाल की समय सीमा सेट करें</translation> <translation id="3559262020195162408">डिवाइस पर नीति इंस्टॉल नहीं की जा सकी.</translation> <translation id="3559533181353831840">करीब <ph name="TIME_LEFT" /> बचे हैं</translation> @@ -2724,7 +2724,7 @@ <translation id="4033471457476425443">नया फ़ोल्डर जोड़ें</translation> <translation id="4034824040120875894">प्रिंटर</translation> <translation id="4035321506998192527">क्या आप Chrome OS में पहले से मौजूद ChromeVox स्क्रीनरीडर को चालू करना चाहते हैं? अगर हां, तो स्पेस बार दबाएं.</translation> -<translation id="4035758313003622889">&कार्य प्रबंधक</translation> +<translation id="4035758313003622889">&कार्य मैनेजर</translation> <translation id="4036778507053569103">सर्वर से डाउनलोड की गई नीति गलत है.</translation> <translation id="4037084878352560732">घोड़ा</translation> <translation id="4037889604535939429">व्यक्ति की जानकारी बदलें</translation> @@ -3129,7 +3129,7 @@ <translation id="4538792345715658285">एंटरप्राइज़ नीति द्वारा इंस्टॉल किया गया.</translation> <translation id="4541662893742891060">इस प्रोफ़ाइल से कनेक्ट नहीं किया जा सकता. तकनीकी सहायता के लिए, कृपया मोबाइल और इंटरनेट सेवा देने वाली अपनी कंपनी से संपर्क करें.</translation> <translation id="4542520061254486227"><ph name="WEBSITE_1" /> और <ph name="WEBSITE_2" /> पर अपना डेटा पढ़ें</translation> -<translation id="4543778593405494224">प्रमाणपत्र प्रबंधक</translation> +<translation id="4543778593405494224">प्रमाणपत्र मैनेजर</translation> <translation id="4544174279960331769">डिफ़ॉल्ट नीला अवतार</translation> <translation id="4545028762441890696">उसे फिर से चालू करने के लिए, नई अनुमतियां स्वीकार करें:</translation> <translation id="4545759655004063573">कम अनुमतियां होने की वजह से सेव नहीं कर सकते. कृपया किसी दूसरी जगह पर सेव करें.</translation> @@ -3181,7 +3181,7 @@ <translation id="4590324241397107707">डेटाबेस मेमोरी</translation> <translation id="4592891116925567110">स्टाइलस की मदद से ड्रॉ करने के लिए ऐप्लिकेशन</translation> <translation id="4593021220803146968"><ph name="URL" /> पर &जाएं</translation> -<translation id="4595560905247879544">ऐप्स और एक्सटेंशन केवल प्रबंधक (<ph name="CUSTODIAN_NAME" />) के द्वारा बदले जा सकते हैं.</translation> +<translation id="4595560905247879544">ऐप्स और एक्सटेंशन केवल मैनेजर (<ph name="CUSTODIAN_NAME" />) के द्वारा बदले जा सकते हैं.</translation> <translation id="4596295440756783523">इन सर्वर की पहचान करने वाले प्रमाणपत्र आपके रिकॉर्ड में हैं</translation> <translation id="4598556348158889687">डिवाइस की मेमोरी का प्रबंधन</translation> <translation id="4598776695426288251">एक से ज़्यादा डिवाइस के ज़रिए वाई-फ़ाई उपलब्ध है</translation> @@ -3423,7 +3423,7 @@ <translation id="4882831918239250449">यह नियंत्रित करें कि खोज, विज्ञापनों वगैरह को मनमुताबिक बनाने के लिए आपके ब्राउज़िंग इतिहास का इस्तेमाल कैसे किया जाए</translation> <translation id="4882919381756638075">आम तौर पर, साइटें, वीडियो चैटिंग जैसी कम्यूनिकेशन सुविधाओं के लिए, आपके माइक्रोफ़ोन का इस्तेमाल करती हैं</translation> <translation id="4883436287898674711">सभी <ph name="WEBSITE_1" /> साइटें</translation> -<translation id="48838266408104654">&कार्य प्रबंधक</translation> +<translation id="48838266408104654">&कार्य मैनेजर</translation> <translation id="4884987973312178454">6x</translation> <translation id="4887424188275796356">सिस्टम दर्शक के साथ खोलें</translation> <translation id="488785315393301722">विवरण दिखाएं</translation> @@ -3596,7 +3596,7 @@ <translation id="5108967062857032718">सेटिंग - Android ऐप्लिकेशन निकालें</translation> <translation id="5109044022078737958">मिया</translation> <translation id="5111646998522066203">गुप्त मोड से बाहर निकलें</translation> -<translation id="5111692334209731439">&बुकमार्क प्रबंधक</translation> +<translation id="5111692334209731439">&बुकमार्क मैनेजर</translation> <translation id="5112577000029535889">&डेवलपर टूल</translation> <translation id="5113739826273394829">अगर आप इस आइकॉन पर क्लिक करते हैं तो, आप इस <ph name="DEVICE_TYPE" /> को मैन्युअल रूप से लॉक कर लेंगे. अगली बार, अनलॉक करने के लिए आपको अपना पासवर्ड डालना होगा.</translation> <translation id="51143538739122961">अपनी सुरक्षा कुंजी लगाएं और उसे छुएं</translation> @@ -4848,7 +4848,7 @@ <translation id="6561726789132298588">enter</translation> <translation id="6562117348069327379">सिस्टम लॉग, डाउनलोड डायरेक्ट्री में सेव करें.</translation> <translation id="656293578423618167">फ़ाइल पाथ या नाम बहुत बड़ा है. कृपया छोटे नाम के साथ या किसी दूसरी जगह पर सेव करें.</translation> -<translation id="6563469144985748109">आपके प्रबंधक ने अभी तक इसकी अनुमति नहीं दी है</translation> +<translation id="6563469144985748109">आपके मैनेजर ने अभी तक इसकी अनुमति नहीं दी है</translation> <translation id="6569934958368283244">दूसरे लोग</translation> <translation id="657402800789773160">&यह पेज फिर से लोड करें</translation> <translation id="6577284282025554716">डाउनलोड रोका गया: <ph name="FILE_NAME" /></translation> @@ -6214,7 +6214,7 @@ <translation id="8113476325385351118">इस साइट को, MIDI डिवाइस का पूरा कंट्रोल रखने से रोकना जारी रखें</translation> <translation id="8114199541033039755">टैबलेट मोड में बटन की मदद से, होम पेज पर जाएं, वापस जाएं, और एक ऐप्लिकेशन से दूसरे पर जाएं. ये बटन, ChromeVox या अपने-आप क्लिक होने की सुविधा हाेने पर ही चालू हाेते हैं.</translation> <translation id="8114875720387900039">हाॅरिज़ॉन्टल (बाईं से दाईं ओर) रूप से छोटे-छोटे हिस्सों में बांटें यानी स्प्लिट करें</translation> -<translation id="8116972784401310538">&बुकमार्क प्रबंधक</translation> +<translation id="8116972784401310538">&बुकमार्क मैनेजर</translation> <translation id="8117752106453549166">Linux को आपका एडमिन कॉन्फ़िगर कर रहा है. कॉन्फ़िगर करने में कुछ मिनट लगेंगे.</translation> <translation id="8118362518458010043">Chrome ने बंद किया. यह एक्सटेंशन असुरक्षित हो सकता है.</translation> <translation id="8118488170956489476">आपका संगठन आपके <ph name="BEGIN_LINK" />ब्राउज़र को प्रबंधित करता<ph name="END_LINK" /> है</translation> @@ -6493,7 +6493,7 @@ <translation id="8458627787104127436">सभी यूआरएल (<ph name="URL_COUNT" />) नई विंडो में खोलें</translation> <translation id="84613761564611563">नेटवर्क कॉन्फ़िगर यूज़र इंटरफ़ेस (यूआई) का अनुरोध किया गया, कृृपया प्रतीक्षा करें...</translation> <translation id="8461914792118322307">प्रॉक्सी</translation> -<translation id="8463215747450521436">इस निगरानी में रखे गए उपयोगकर्ता को प्रबंधक ने मिटा दिया है या बंद कर दिया है. अगर आप इस उपयोगकर्ता के रूप में साइन इन किए हुए रहना चाहते हैं, तो कृपया प्रबंधक से संपर्क करें.</translation> +<translation id="8463215747450521436">इस निगरानी में रखे गए उपयोगकर्ता को मैनेजर ने मिटा दिया है या बंद कर दिया है. अगर आप इस उपयोगकर्ता के रूप में साइन इन किए हुए रहना चाहते हैं, तो कृपया मैनेजर से संपर्क करें.</translation> <translation id="846374874681391779">डाउनलोड बार</translation> <translation id="8463955938112983119"><ph name="PLUGIN_NAME" /> बंद किया गया.</translation> <translation id="8464132254133862871">इस उपयोगकर्ता खाता को सेवा की मंज़ूरी नहीं दी गई है.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index c65f52c..8710cb10 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Zadano</translation> <translation id="1252987234827889034">Došlo je do pogreške na profilu</translation> <translation id="1254593899333212300">Izravna internetska veza</translation> +<translation id="1257553931232494454">razine zumiranja</translation> <translation id="1259152067760398571">Sigurnosna provjera izvršena je jučer</translation> <translation id="1260451001046713751">Uvijek dopusti skočne prozore i preusmjeravanja s web-lokacije <ph name="HOST" /></translation> <translation id="1261380933454402672">Skromno</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Upravlja i time koja se stranica prikazuje prilikom pretraživanja putem višenamjenskog okvira.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Za uklanjanje aplikacija idite na Postavke > Trgovina Play > Upravljanje postavkama Androida > Aplikacije ili Upravitelj aplikacija. Zatim dodirnite aplikaciju koju želite deinstalirati (možda ćete morati prijeći prstom udesno ili ulijevo kako biste pronašli aplikaciju). Zatim dodirnite Deinstaliraj ili Onemogući.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Slanje zahtjeva u tijeku...</translation> +<translation id="1733064249834771892">fontovi</translation> <translation id="1733383495376208985">Kriptirajte sinkronizirane podatke vlastitom <ph name="BEGIN_LINK" />šifrom za sinkronizaciju<ph name="END_LINK" />. To ne uključuje načine plaćanja i adrese s Google Paya.</translation> <translation id="1734212868489994726">Svijetloplava</translation> <translation id="1734230530703461088">Učitavanje proširenja u vremenski ograničenom roku nije uspjelo. Obratite se administratoru.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Prijenos zapisnika u tijeku.</translation> <translation id="1819721979226826163">Dodirnite Obavijesti aplikacije > Google Play usluge.</translation> <translation id="1820028137326691631">Unesite zaporku koju ste dobili od administratora</translation> +<translation id="182139138257690338">automatska preuzimanja</translation> <translation id="1822140782238030981">Već jeste Chromeov korisnik? Prijavite se</translation> <translation id="18245044880483936">Podaci sigurnosne kopije neće se ubrajati u kvotu pohrane na Disku za vaše dijete.</translation> <translation id="1825565032302550710">Priključak mora biti između 1024 i 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Ponovo učitaj aplikaciju</translation> <translation id="2327492829706409234">Omogući aplikaciju</translation> <translation id="2328561734797404498">Ponovo pokrenite uređaj da biste koristili <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">postavljanje prozora</translation> <translation id="2329597144923131178">Prijavite se da biste imali svoje oznake, povijest, zaporke i druge postavke na svim svojim uređajima.</translation> <translation id="2332131598580221120">Pogledaj u web-trgovini</translation> <translation id="2332192922827071008">Otvori Postavke</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Nova kartica u grupi</translation> <translation id="289644616180464099">SIM kartica je zaključana</translation> <translation id="289695669188700754">ID ključa: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ta će se prilagođena postavka ukloniti kad zatvorite sve anonimne prozore</translation> <translation id="2897878306272793870">Jeste li sigurni da želite otvoriti <ph name="TAB_COUNT" /> kartica?</translation> <translation id="290105521672621980">Datoteka upotrebljava nepodržane značajke</translation> <translation id="2902127500170292085">Proširenje <ph name="EXTENSION_NAME" /> nije uspostavilo komunikaciju s tim pisačem. Provjerite je li pisač priključen i pokušajte ponovo.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Podaci su kriptirani vašom šifrom za sinkronzaciju. To ne uključuje načine plaćanja i adrese s Google Paya.</translation> <translation id="2996722619877761919">Prebaci na dulji rub</translation> <translation id="3000236644796679448">Web-lokacije mogu tražiti dopuštenje za upotrebu mikrofona (preporučeno)</translation> +<translation id="3000378525979847272">Dopustili ste sljedeće: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Monozvuk</translation> <translation id="3001144475369593262">Djetetovi računi</translation> <translation id="3003144360685731741">Preferirane mreže</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Otvori PDF u Pregledu</translation> <translation id="3308116878371095290">Ova stranica je spriječena u postavljanju kolačića.</translation> <translation id="3308134619352333507">Gumb za skrivanje</translation> +<translation id="3308738399950580893">oglasi</translation> <translation id="3308852433423051161">Učitavanje Google asistenta...</translation> <translation id="3309330461362844500">ID profila certifikata</translation> <translation id="3311445899360743395">Podaci povezani s tom aplikacijom možda će se ukloniti s ovog uređaja.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Datoteka je kriptirana. Recite vlasniku da je dekriptira.</translation> <translation id="3390013585654699824">Pojedinosti o aplikaciji</translation> <translation id="3390741581549395454">Uspješno su stvorene sigurnosne kopije Linux aplikacija i datoteka. Nadogradnja će uskoro započeti.</translation> +<translation id="3391482648489541560">uređivanje datoteka</translation> <translation id="339178315942519818">Pregledavajte obavijesti iz svojih aplikacija za chat na uređaju <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Klikom na gumb "Prihvati i nastavi" prihvaćate prethodno opisanu obradu za ove Googleove usluge.</translation> <translation id="3399432415385675819">Obavijesti će se onemogućiti</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Stopa pražnjenja baterije u vatima (negativna vrijednost znači da se baterija puni)</translation> <translation id="4256316378292851214">Sp&remi videozapis kao...</translation> <translation id="4258348331913189841">Datotečni sustavi</translation> +<translation id="4259381619085088639">vaša prisutnost</translation> <translation id="4259388776256904261">To može potrajati neko vrijeme</translation> <translation id="4260182282978351200">Datoteka <ph name="FILE_NAME" /> možda je opasna. Želite li upotrijebiti Googleovu naprednu zaštitu za pregled datoteke? Pritisnite Shift + F6 nekoliko puta da biste se pomaknuli na područje trake preuzimanja.</translation> <translation id="4263223596040212967">Provjerite izgled tipkovnice i pokušajte ponovo.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Postavite novi PIN za sigurnosni ključ</translation> <translation id="4305402730127028764">Kopiraj na uređaj <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikacije moraju biti poslužene s vrstom sadržaja "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">međuspremnik</translation> <translation id="4307992518367153382">Osnove</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K izravno)</translation> <translation id="4310139701823742692">Datoteka ima pogrešan format. Pregledajte PPD datoteku i pokušajte ponovo.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Centar za pomoć</translation> <translation id="44141919652824029">Dopustiti aplikaciji "<ph name="APP_NAME" />" pristup popisu vaših spojenih USB uređaja?</translation> <translation id="4414232939543644979">&Novi anoniman prozor</translation> +<translation id="4414515549596849729">kolačići i podaci o web-lokacijama</translation> <translation id="4415213869328311284">Spremni ste za početak upotrebe uređaja <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Uređaji nisu pronađeni. Otvorite članak centra za pomoć u novoj kartici.</translation> <translation id="4415276339145661267">Upravljajte svojim Google računom</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Preporučeno (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ne prikazuj na ovoj stranici</translation> <translation id="4500114933761911433">Srušio se dodatak <ph name="PLUGIN_NAME" /></translation> +<translation id="4500587658229086076">nesiguran sadržaj</translation> <translation id="450099669180426158">Ikona uskličnika</translation> <translation id="4501530680793980440">Potvrda uklanjanja</translation> <translation id="4502423230170890588">Ukloni s ovog uređaja</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Uvijek blokiraj dodatke izvan testnog okruženja na <ph name="HOST" /></translation> <translation id="4538792345715658285">Instalirano pravilima tvrtke.</translation> <translation id="4541662893742891060">Povezivanje s tim profilom nije uspjelo. Tehničku podršku zatražite od svojeg mobilnog operatera.</translation> +<translation id="4541810033354695636">proširena stvarnost</translation> <translation id="4542520061254486227">čitati vaše podatke s web-lokacija <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Upravitelj certifikata</translation> <translation id="4544174279960331769">Zadani plavi avatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">&Alati za razvojne programere</translation> <translation id="5113739826273394829">Ako kliknete tu ikonu, ručno ćete zaključati ovaj uređaj <ph name="DEVICE_TYPE" />. Sljedeći ćete put morati unijeti zaporku da biste mu pristupili.</translation> <translation id="51143538739122961">Umetnite sigurnosni ključ i dodirnite ga</translation> +<translation id="5114987907971894280">virtualna stvarnost</translation> <translation id="5115309401544567011">Priključite uređaj <ph name="DEVICE_TYPE" /> u izvor napajanja.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Sp&remi zvučni zapis kao...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Ovaj put pokreni</translation> <translation id="5464660706533281090">Tu postavku ne može promijeniti korisnik koji je dijete.</translation> <translation id="5466374726908360271">Za&lijepi i traži pojam "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Blokirano je sljedeće: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Web-lokacije mogu tražiti dopuštenje za reprodukciju zaštićenog sadržaja (preporučeno)</translation> <translation id="5468173180030470402">Traže se dijeljenja datoteka</translation> <translation id="5469852975082458401">Stranicama se možete kretati pomoću pokazivača za tekst. Pritisnite F7 da biste isključili tu značajku.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Zatvori sve Chromeove aplikacije</translation> <translation id="5797070761912323120">Google može upotrebljavati vašu povijest za prilagodbu Pretraživanja, oglasa i drugih Googleovih usluga</translation> <translation id="5798301976526354562">Veličina teksta (primjenjuje se i na automatske titlove)</translation> +<translation id="579907812742603813">zaštićeni sadržaj</translation> <translation id="579915268381781820">Vaš je sigurnosni ključ uklonjen.</translation> <translation id="5799508265798272974">Linux virtualno računalo: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Odredišna datoteka skraćena je ili uklonjena nakon posljednjeg preuzimanja.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Kanal je promijenjen. Ponovo pokrenite uređaj za primjenu promjena.</translation> <translation id="5877584842898320529">Odabrani pisač nije dostupan ili nije ispravno instaliran. <ph name="BR" /> Provjerite pisač ili pokušajte odabrati neki drugi.</translation> <translation id="5882919346125742463">Poznate mreže</translation> +<translation id="5883356647197510494">Automatski je blokirano sljedeće: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Kartica je povezana s USB uređajem.</translation> <translation id="5886009770935151472">1. prst</translation> <translation id="5889282057229379085">Maksimalni broj srednjih CA-ova: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Traži sljedeće</translation> <translation id="6461170143930046705">Traženje mreža...</translation> <translation id="6463795194797719782">&Uredi</translation> +<translation id="6464094930452079790">slike</translation> <translation id="6464825623202322042">Ovaj uređaj</translation> <translation id="6465841119675156448">Bez interneta</translation> <translation id="6466988389784393586">&Otvaranje svih oznaka</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Autorizacija nije uspjela</translation> <translation id="6494327278868541139">Prikaži pojedinosti o poboljšanoj zaštiti</translation> <translation id="6494445798847293442">Nije tijelo za izdavanje certifikata</translation> +<translation id="6494750904506170417">skočni prozori i preusmjeravanja</translation> <translation id="6494974875566443634">Prilagođavanje</translation> <translation id="6495925982925244349">Mreža <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja administrator, pojedinosti</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Ovi podaci imaju osjetljiv ili opasan sadržaj}=1{Ova datoteka ima osjetljiv ili opasan sadržaj}one{Ove datoteke imaju osjetljiv ili opasan sadržaj}few{Ove datoteke imaju osjetljiv ili opasan sadržaj}other{Ove datoteke imaju osjetljiv ili opasan sadržaj}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Zaporka</translation> <translation id="6659213950629089752">Stranicu je zumiralo proširenje "<ph name="NAME" />"</translation> <translation id="6659594942844771486">Kartica</translation> +<translation id="6660413144148052430">lokacija</translation> <translation id="666099631117081440">Poslužitelji za ispis</translation> <translation id="6663190258859265334">Izvršite Powerwash na uređaju <ph name="DEVICE_TYPE" /> i vratite se na prethodnu verziju.</translation> <translation id="6664237456442406323">Nažalost, vaše je računalo konfigurirano pogrešno oblikovanim ID-om hardvera. To sprječava ažuriranje OS-a Chrome najnovijim sigurnosnim popravcima pa bi vaše računalo <ph name="BEGIN_BOLD" />moglo biti ranjivo na zlonamjerne napade<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Pogledajte što je novo</translation> <translation id="67269783048918309">Slanje podataka o upotrebi i dijagnostici. Ovaj uređaj trenutačno Googleu automatski šalje dijagnostičke podatke te podatke o upotrebi uređaja i aplikacija. Ti se podaci neće upotrebljavati za identifikaciju vašeg djeteta, a pomoći će poboljšati sustav, stabilnost aplikacija i drugo. Neki skupni podaci pomoći će i Googleovim aplikacijama i partnerima, na primjer razvojnim programerima za Android. Ovu <ph name="BEGIN_LINK1" />postavku<ph name="END_LINK1" /> zadao je vlasnik. Ako je za vaše dijete uključena dodatna postavka Aktivnost na webu i u aplikacijama, ti se podaci mogu spremati na djetetov Google račun. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Povezano, baterija <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Certifikati se nisu učitali</translation> <translation id="6732900235521116609">Nije moguće ukloniti prečac</translation> <translation id="6734468588183300211">Dok ste u anonimnom načinu, web-lokacije ne mogu upotrebljavati vaše kolačiće za uvid u vašu aktivnost pregledavanja na različitim web-lokacijama, primjerice radi prilagođavanja oglasa. Značajke na nekim web-lokacijama mogu prestati funkcionirati.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Pitaj kada web-lokacija želi upotrijebiti posebne sistemske poruke za pristup MIDI uređajima (preporučeno)</translation> <translation id="6818198425579322765">Jezik stranice za prijevod</translation> <translation id="6818802132960437751">Ugrađena zaštita od virusa</translation> +<translation id="6820143000046097424">serijski priključci</translation> <translation id="682123305478866682">Emitiraj radnu površinu</translation> <translation id="6823174134746916417">Dodir za klik na dodirnoj podlozi</translation> <translation id="6824564591481349393">Kopiraj &adresu e-pošte</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">razmjenjivati podatke s bilo kojim uređajem na lokalnoj mreži ili internetu</translation> <translation id="7306521477691455105">Otvorite Postavke da biste povezali uređaje <ph name="USB_DEVICE_NAME" /> i <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Pauzirano</translation> +<translation id="7308436126008021607">sinkronizacija u pozadini</translation> <translation id="7309257895202129721">Prikaži &upravljačke gumbe</translation> <translation id="7310598146671372464">Prijava nije uspjela. Poslužitelj ne podržava navedene vrste enkripcije Kerberos. Obratite se administratoru.</translation> <translation id="7320213904474460808">Postavljanje mreže kao zadane</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Odmah vratite uređaj}one{Vratite uređaj <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}few{Vratite uređaj <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}other{Vratite uređaj <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}}</translation> <translation id="7475671414023905704">URL Netscape izgubljene zaporke</translation> <translation id="7476454130948140105">Baterija nije dovoljno napunjena za ažuriranje (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Automatski je blokirano sljedeće: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="7477793887173910789">Upravljate glazbom, videozapisima i drugim medijima</translation> <translation id="7478485216301680444">Nije bilo moguće instalirati aplikaciju kioska.</translation> <translation id="7478623944308207463">Vaše aplikacije i postavke sinkronizirat će se na svim uređajima s OS-om Chrome na kojima ste prijavljeni svojim Google računom. Za opcije sinkronizacije preglednika otvorite <ph name="LINK_BEGIN" />postavke Chromea<ph name="LINK_END" />.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Deinstaliranje aplikacije <ph name="APP" />...</translation> <translation id="8289128870594824098">Veličina diska</translation> <translation id="8293206222192510085">Dodaj oznaku</translation> +<translation id="829335040383910391">zvuk</translation> <translation id="8294431847097064396">Izvor</translation> <translation id="8298429963694909221">Sada možete primati obavijesti s telefona na uređaju <ph name="DEVICE_TYPE" />. Ako odbacite obavijesti na uređaju <ph name="DEVICE_TYPE" />, one će se odbaciti i na telefonu. Provjerite je li telefon u blizini i jesu li na njemu uključeni Bluetooth i Wi-Fi.</translation> <translation id="8299319456683969623">Trenutačno ste izvan mreže.</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Dodaj mrežnu vezu</translation> <translation id="8319414634934645341">Produžena upotreba ključa</translation> <translation id="8320459152843401447">Cijeli zaslon</translation> +<translation id="8321476692217554900">obavijesti</translation> <translation id="8321837372750396788">Uređajem <ph name="DEVICE_TYPE" /> upravljat će <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Stranici je zabranjen pristup vašem mikrofonu.</translation> <translation id="8323167517179506834">Upišite URL</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Nedavno s Google diska</translation> <translation id="8407199357649073301">Razina zapisnika:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> mreža, povezivanje</translation> +<translation id="8409413588194360210">rukovatelji plaćanjem</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Dopustili ste sljedeće: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation> <translation id="8417548266957501132">Roditeljska zaporka</translation> <translation id="8418445294933751433">&Prikaži kao karticu</translation> @@ -6648,6 +6676,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ili <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura boje za Noćno svjetlo</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> želi: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> i još mnogo toga</translation> +<translation id="865032292777205197">senzori kretanja</translation> <translation id="8650543407998814195">Iako više ne možete pristupiti svojem starom profilu, možete ga ukloniti.</translation> <translation id="8651585100578802546">Ponovo prisilno učitaj ovu stranicu</translation> <translation id="8652400352452647993">Pogreška proširenja paketa</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Pisaljka</translation> <translation id="8787254343425541995">Dopusti proxyje za dijeljene mreže</translation> <translation id="8791534160414513928">Pošalji zahtjev "Nemoj pratiti" uz promet pregledavanja</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Dok je žarišna točka uključena, vaš će <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Novi prozor</translation> <translation id="8797459392481275117">Nikad nemoj prevoditi ovu web-lokaciju</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Blokiraj kolačiće</translation> <translation id="8823704566850948458">Predloži zaporku...</translation> <translation id="8824701697284169214">Dodavanje stra&nice...</translation> +<translation id="8827125715368568315">Blokirano je sljedeće: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="8827289157496676362">Prikvači proširenje</translation> <translation id="8827752199525959199">Više radnji, zaporka za korisnika <ph name="USERNAME" /> na domeni <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Nemoj dopustiti nijednoj web-lokaciji da traži Bluetooth uređaje u blizini</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Opcije prekidača za pristup</translation> <translation id="8933960630081805351">&Prikaži u programu Finder</translation> <translation id="8934732568177537184">Nastavi</translation> +<translation id="8938306522009698937">rukovatelji</translation> <translation id="8938800817013097409">USB-C uređaj (desni priključak sa stražnje strane)</translation> <translation id="8940081510938872932">Vaše računalo trenutačno radi previše stvari. Pokušajte ponovo kasnije.</translation> <translation id="8941173171815156065">Opoziv dopuštenja "<ph name="PERMISSION" />"</translation> @@ -7228,6 +7260,7 @@ <translation id="987264212798334818">Općenito</translation> <translation id="987897973846887088">Nema dostupnih slika</translation> <translation id="988978206646512040">Prazne šifre nisu dopuštene</translation> +<translation id="991413375315957741">senzori kretanja ili osvjetljenja</translation> <translation id="992032470292211616">Proširenja, aplikacije i teme mogu nauditi vašem uređaju. Jeste li sigurni da želite nastaviti?</translation> <translation id="992256792861109788">Ružičasta</translation> <translation id="992592832486024913">Onemogući ChromeVox (govorne povratne informacije)</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 7ccd2e5a..1288b38 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Alapértelmezett</translation> <translation id="1252987234827889034">Profilhiba történt</translation> <translation id="1254593899333212300">Közvetlen internetkapcsolat</translation> +<translation id="1257553931232494454">nagyítási/kicsinyítési szintek</translation> <translation id="1259152067760398571">A biztonsági ellenőrzés tegnap lefutott</translation> <translation id="1260451001046713751">Itt mindig engedélyezve vannak az előugró ablakok és az átirányítások: <ph name="HOST" /></translation> <translation id="1261380933454402672">Mérsékelt</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Továbbá azt is szabályozza, hogy melyik oldal jelenik meg a cím- és keresősávban indított kereséskor.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Az alkalmazásokat a Beállítások > Google Play Áruház > Android-beállítások kezelése > Alkalmazások vagy Alkalmazáskezelő menüben távolíthatja el. Koppintson a törölni kívánt alkalmazásra (lehet, hogy jobbra vagy balra kell csúsztatnia az alkalmazásokat, hogy megtalálja), majd koppintson az Eltávolítás vagy Letiltás lehetőségre.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Lekérés küldése folyamatban...</translation> +<translation id="1733064249834771892">betűtípusok</translation> <translation id="1733383495376208985">A szinkronizált adatok titkosítása saját <ph name="BEGIN_LINK" />összetett szinkronizálási jelszóval<ph name="END_LINK" />. Ez nem tartalmazza a Google Payben megadott fizetési módokat és címeket.</translation> <translation id="1734212868489994726">Világoskék</translation> <translation id="1734230530703461088">Nem sikerült betölteni a bővítményeket az időkorláton belül. Forduljon a rendszergazdához.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">A napló feltöltése folyamatban van.</translation> <translation id="1819721979226826163">Koppintson az Alkalmazásértesítések > Google Play-szolgáltatások menüpontra.</translation> <translation id="1820028137326691631">Adja meg a rendszergazdától kapott jelszót</translation> +<translation id="182139138257690338">automatikus letöltések</translation> <translation id="1822140782238030981">Már Chrome-felhasználó? Jelentkezzen be</translation> <translation id="18245044880483936">A biztonsági másolat adatmennyisége nem számít bele gyermeke Drive-tárhelykvótájába.</translation> <translation id="1825565032302550710">A port számának 1024 és 65535 között kell lennie</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">Alkalmazás új&ratöltése</translation> <translation id="2327492829706409234">Alkalmazás engedélyezése</translation> <translation id="2328561734797404498">A(z) <ph name="APP_NAME" /> használatához indítsa újra eszközét.</translation> +<translation id="2329182534073751090">ablakelhelyezés</translation> <translation id="2329597144923131178">Jelentkezzen be, hogy könyvjelzőit, előzményeit, jelszavait és más beállításait az összes eszközén elérje.</translation> <translation id="2332131598580221120">Megtekintés az áruházban</translation> <translation id="2332192922827071008">A beállítások megnyitása</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Új lap a csoportban</translation> <translation id="289644616180464099">A SIM-kártya zárolva van</translation> <translation id="289695669188700754">Kulcsazonosító: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ez az egyéni beállítás el lesz távolítva, amikor bezárja az összes inkognitó ablakot.</translation> <translation id="2897878306272793870">Biztosan meg szeretne nyitni <ph name="TAB_COUNT" /> lapot?</translation> <translation id="290105521672621980">A fájl nem támogatott funkciókat használ</translation> <translation id="2902127500170292085">A(z) <ph name="EXTENSION_NAME" /> nem tud kommunikálni ezzel a nyomtatóval. Győződjön meg róla, hogy a nyomtató be van kapcsolva, majd próbálja újra.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Az adatok titkosítva lesznek az Ön összetett szinkronizálási jelszavával. Ez nem tartalmazza a Google Payben megadott fizetési módokat és címeket.</translation> <translation id="2996722619877761919">Átfordítás a hosszú oldal mentén</translation> <translation id="3000236644796679448">A webhelyek hozzáférést kérhetnek a mikrofonhoz (ajánlott)</translation> +<translation id="3000378525979847272">Engedélyezve: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Monó hang</translation> <translation id="3001144475369593262">Gyermekfiókok</translation> <translation id="3003144360685731741">Előnyben részesített hálózatok</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">PDF megnyitása előnézetben</translation> <translation id="3308116878371095290">Ezen az oldalon le van tiltva a cookie-k mentése.</translation> <translation id="3308134619352333507">Elrejtés gomb</translation> +<translation id="3308738399950580893">hirdetések</translation> <translation id="3308852433423051161">A Google Segéd betöltése…</translation> <translation id="3309330461362844500">Tanúsítványprofil azonosítója</translation> <translation id="3311445899360743395">Az alkalmazáshoz kapcsolódó adatok törlődhetnek erről az eszközről.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">A fájl titkosítva van. Kérje meg a tulajdonost, hogy oldja fel a titkosítását.</translation> <translation id="3390013585654699824">Az alkalmazás adatai</translation> <translation id="3390741581549395454">A rendszer biztonsági másolatot készített a Linux-alkalmazásokról és -fájlokról. Hamarosan indul a frissítés.</translation> +<translation id="3391482648489541560">fájlszerkesztés</translation> <translation id="339178315942519818">Csevegőalkalmazások értesítéseinek megtekintése <ph name="DEVICE_TYPE" /> eszközén</translation> <translation id="3396800784455899911">Az „Elfogadás és folytatás” gombra kattintva elfogadja az ezen Google-szolgáltatásokkal kapcsolatos, fent részletezett feldolgozási folyamatot.</translation> <translation id="3399432415385675819">Az értesítések le lesznek tiltva</translation> @@ -2893,6 +2901,7 @@ <translation id="425573743389990240">Akkumulátor kisütési teljesítménye wattban (a negatív érték azt jelenti, hogy az akkumulátor töltődik)</translation> <translation id="4256316378292851214">&Videó mentése másként...</translation> <translation id="4258348331913189841">Fájlrendszerek</translation> +<translation id="4259381619085088639">felhasználói jelenlét</translation> <translation id="4259388776256904261">Ez eltarthat egy ideig</translation> <translation id="4260182282978351200">A(z) <ph name="FILE_NAME" /> veszélyes lehet. Elküldi a Google Speciális védelem szolgáltatásának vizsgálatra? A Shift + F6 billentyűkombináció lenyomásával a letöltési sávhoz léphet.</translation> <translation id="4263223596040212967">Ellenőrizze a billentyűzetkiosztást, és próbálja újra.</translation> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">Új PIN-kód beállítása a biztonsági hardverkulcshoz</translation> <translation id="4305402730127028764">Másolás ide: <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Az alkalmazásokat „<ph name="CONTENT_TYPE" />” tartalomtípussal kell ellátni</translation> +<translation id="4306812610847412719">vágólap</translation> <translation id="4307992518367153382">Alapok</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K élő)</translation> <translation id="4310139701823742692">Hibás fájlformátum. Ellenőrizze a PPD-fájlt, és próbálja újra.</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">Súgó</translation> <translation id="44141919652824029">Engedélyezi a(z) „<ph name="APP_NAME" />” számára, hogy hozzáférjen a csatlakoztatott USB-eszközeinek listájához?</translation> <translation id="4414232939543644979">Új &inkognitóablak</translation> +<translation id="4414515549596849729">cookie-k és webhelyadatok</translation> <translation id="4415213869328311284">Készen áll <ph name="DEVICE_TYPE" /> eszköze használatára.</translation> <translation id="4415245286584082850">Nem található eszköz. Súgócikk megnyitása új ablakban.</translation> <translation id="4415276339145661267">Google-fiók kezelése</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">Ajánlott (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ne jelenjen meg ezen az oldalon</translation> <translation id="4500114933761911433">A(z) <ph name="PLUGIN_NAME" /> összeomlott</translation> +<translation id="4500587658229086076">nem biztonságos tartalmak</translation> <translation id="450099669180426158">Felkiáltójel ikon</translation> <translation id="4501530680793980440">Eltávolítás megerősítése</translation> <translation id="4502423230170890588">Eltávolítás az eszközről</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368">Mindig tiltsa le a nem sandboxban lévő beépülő modulokat a következő webhelyen: <ph name="HOST" /></translation> <translation id="4538792345715658285">Vállalati házirend által telepítve.</translation> <translation id="4541662893742891060">Nem lehet csatlakozni ehhez a profilhoz. Műszaki segítségért forduljon a szolgáltatóhoz.</translation> +<translation id="4541810033354695636">kiterjesztett valóság</translation> <translation id="4542520061254486227">Adatok beolvasása a következő webhelyeken: <ph name="WEBSITE_1" /> és <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Tanúsítványkezelő</translation> <translation id="4544174279960331769">Alapértelmezett kék avatar</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">Fejlesz&tői eszközök</translation> <translation id="5113739826273394829">Ha rákattint erre az ikonra, akkor manuálisan zárolja ezt a(z) <ph name="DEVICE_TYPE" /> eszközt. Legközelebb be kell írnia a jelszót a belépéshez.</translation> <translation id="51143538739122961">Helyezze be a biztonsági hardverkulcsot, majd érintse meg</translation> +<translation id="5114987907971894280">virtuális valóság</translation> <translation id="5115309401544567011">Csatlakoztassa <ph name="DEVICE_TYPE" /> eszközét áramforráshoz.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">H&ang mentése másként...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Futtatás most</translation> <translation id="5464660706533281090">Ezt a beállítást nem módosíthatja gyermek felhasználó.</translation> <translation id="5466374726908360271">„<ph name="SEARCH_TERMS" />” be&illesztése és keresése</translation> +<translation id="5467207440419968613">Letiltva: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">A webhelyek rákérdezhetnek arra, hogy lejátszhatnak-e védett tartalmakat (javasolt)</translation> <translation id="5468173180030470402">Fájlmegosztások keresése</translation> <translation id="5469852975082458401">Az oldalakon szövegkurzorral navigálhat. A funkciót az F7 gombbal kapcsolhatja ki.</translation> @@ -4191,6 +4206,7 @@ <translation id="5794786537412027208">Összes Chrome-alkalmazás bezárása</translation> <translation id="5797070761912323120">A Google felhasználhatja az Ön előzményeit a Kereső, a hirdetések és más Google-szolgáltatások személyre szabására</translation> <translation id="5798301976526354562">Szöveg mérete (az Élő feliratozás funkcióra is érvényes)</translation> +<translation id="579907812742603813">védett tartalmak</translation> <translation id="579915268381781820">Eltávolította a biztonsági hardverkulcsot.</translation> <translation id="5799508265798272974">Linuxos virtuális gép: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">A célfájlt levágták vagy eltávolították a legutóbbi letöltés óta.</translation> @@ -4264,6 +4280,7 @@ <translation id="5877064549588274448">Módosult a csatorna. Indítsa újra az eszközt a módosítások alkalmazásához.</translation> <translation id="5877584842898320529">A kiválasztott nyomtató nem áll rendelkezésre, vagy nincs megfelelően telepítve. <ph name="BR" /> Ellenőrizze a nyomtatót, vagy válasszon másikat.</translation> <translation id="5882919346125742463">Ismert hálózatok</translation> +<translation id="5883356647197510494">Automatikusan letiltva: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Ez a lap USB-eszközhöz csatlakozik.</translation> <translation id="5886009770935151472">1. ujj</translation> <translation id="5889282057229379085">A köztes tanúsítványkibocsátók maximális száma: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4763,6 +4780,7 @@ <translation id="6460601847208524483">Következő keresése</translation> <translation id="6461170143930046705">Hálózatok keresése…</translation> <translation id="6463795194797719782">&Szerkesztés</translation> +<translation id="6464094930452079790">képek</translation> <translation id="6464825623202322042">Ezen az eszközön</translation> <translation id="6465841119675156448">Internet nélkül</translation> <translation id="6466988389784393586">&Az összes könyvjelző megnyitása</translation> @@ -4786,6 +4804,7 @@ <translation id="6491376743066338510">Sikertelen engedélyezés</translation> <translation id="6494327278868541139">Speciális védelem részleteinek megjelenítése</translation> <translation id="6494445798847293442">Nem tanúsítványkibocsátó</translation> +<translation id="6494750904506170417">előugró ablakok és átirányítások</translation> <translation id="6494974875566443634">Személyre szabás</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. hálózat (összesen <ph name="NETWORK_COUNT" />), <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, jelerősség: <ph name="SIGNAL_STRENGTH" />%, a rendszergazdája kezeli, részletek</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Ezekben az adatokban bizalmas vagy veszélyes tartalom található.}=1{Ebben a fájlban bizalmas vagy veszélyes tartalom található.}other{Ezekben a fájlokban bizalmas vagy veszélyes tartalom található.}}</translation> @@ -4926,6 +4945,7 @@ <translation id="6657585470893396449">Jelszó</translation> <translation id="6659213950629089752">Az oldal nagyítását a(z) „<ph name="NAME" />” bővítmény hajtotta végre</translation> <translation id="6659594942844771486">Lap</translation> +<translation id="6660413144148052430">helyadatok</translation> <translation id="666099631117081440">Nyomtatószerverek</translation> <translation id="6663190258859265334">Arra készül, hogy Powerwash műveletet hajt végre <ph name="DEVICE_TYPE" /> eszközén, és visszatér a korábbi verzióhoz.</translation> <translation id="6664237456442406323">Sajnos számítógépe nem megfelelő formátumú hardverazonosítóval van konfigurálva. Emiatt a Chrome OS nem tud frissülni a legújabb biztonsági javításokkal, és számítógépét <ph name="BEGIN_BOLD" />rosszindulatú támadások érhetik<ph name="END_BOLD" />.</translation> @@ -4980,6 +5000,7 @@ <translation id="672609503628871915">Újdonságok</translation> <translation id="67269783048918309">Használati és diagnosztikai adatok küldése. Ez az eszköz jelenleg automatikusan küld diagnosztikai, eszköz- és alkalmazáshasználati adatokat a Google-nak. Az adatok a rendszer- és alkalmazásstabilitás javításában, valamint más fejlesztésekben segítenek, nem használjuk fel őket az Ön gyermekének azonosítására. Bizonyos összesített adatok a Google-alkalmazásoknak és -partnereknek, például az Android-fejlesztőknek is segítenek. Ezt a <ph name="BEGIN_LINK1" />beállítást<ph name="END_LINK1" /> kötelezővé tette az eszköz tulajdonosa. Ha az Internetes és alkalmazástevékenységek beállítás is be van kapcsolva a gyermekénél, akkor a rendszer ezeket az adatokat mentheti a gyermek Google-fiókjába. <ph name="BEGIN_LINK2" />További információ.<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Csatlakoztatva, <ph name="BATTERY_PERCENTAGE" />%-os töltöttség</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">A tanúsítványok betöltése nem történt meg</translation> <translation id="6732900235521116609">A parancsikon nem távolítható el</translation> <translation id="6734468588183300211">Inkognitó módban a webhelyek nem használhatják fel az Ön cookie-jait arra, hogy lássák a különböző webhelyeken végzett böngészési tevékenységeit például annak érdekében, hogy a hirdetéseket személyre szabják. Előfordulhat, hogy bizonyos webhelyek funkciói nem működnek majd megfelelően.</translation> @@ -5054,6 +5075,7 @@ <translation id="6817174620439930047">Kérdezzen meg, amikor egy webhely exkluzív rendszerüzenetekkel szeretné elérni a MIDI-eszközöket (ajánlott)</translation> <translation id="6818198425579322765">Az oldal fordítani kívánt nyelve</translation> <translation id="6818802132960437751">Beépített vírusvédelem</translation> +<translation id="6820143000046097424">soros portok</translation> <translation id="682123305478866682">Asztal átküldése</translation> <translation id="6823174134746916417">Koppintással kattintás az érintőpadon</translation> <translation id="6824564591481349393">&E-mail cím másolása</translation> @@ -5487,6 +5509,7 @@ <translation id="730515362922783851">Adatok cseréje bármilyen eszközzel a helyi hálózaton vagy az interneten</translation> <translation id="7306521477691455105">Nyissa meg a Beállításokat, hogy a(z) <ph name="USB_DEVICE_NAME" /> eszközt csatlakoztatni tudja a következőhöz: <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Szüneteltetve</translation> +<translation id="7308436126008021607">szinkronizálás a háttérben</translation> <translation id="7309257895202129721">&Vezérlők megjelenítése</translation> <translation id="7310598146671372464">Nem sikerült a bejelentkezés. A szerver nem támogatja a megadott Kerberos-titkosítástípusokat. Forduljon a rendszergazdához.</translation> <translation id="7320213904474460808">Hálózat alapértelmezetté tétele</translation> @@ -5628,6 +5651,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Azonnal vissza kell küldeni}other{Az eszközt (<ph name="DEVICE_TYPE" />) {NUM_DAYS} napon belül vissza kell küldeni}}</translation> <translation id="7475671414023905704">Netscape - elveszett jelszó URL</translation> <translation id="7476454130948140105">Az akkumulátor töltöttségi szintje túl alacsony a frissítéshez (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Automatikusan letiltva: <ph name="PERMISSION" /> és további <ph name="COUNT" /></translation> <translation id="7477793887173910789">Zeneszámok, videók és további tartalmak vezérlése</translation> <translation id="7478485216301680444">A kiosk-alkalmazást nem sikerült telepíteni.</translation> <translation id="7478623944308207463">Az Ön alkalmazásai és beállításai szinkronizálódnak minden olyan Chrome OS-eszközön, amelyen Google-fiókjával van bejelentkezve. A böngésző szinkronizálási beállításait a <ph name="LINK_BEGIN" />Chrome-beállításokban<ph name="LINK_END" /> találja.</translation> @@ -6372,6 +6396,7 @@ <translation id="8288032458496410887"><ph name="APP" /> eltávolítása…</translation> <translation id="8289128870594824098">Lemezméret</translation> <translation id="8293206222192510085">Könyvjelző hozzáadása</translation> +<translation id="829335040383910391">hang</translation> <translation id="8294431847097064396">Forrás</translation> <translation id="8298429963694909221">Mostantól megkaphatja a telefonja értesítéseit a(z) <ph name="DEVICE_TYPE" /> eszközén. Az értesítések <ph name="DEVICE_TYPE" /> eszközön való elvetésével a telefonon is elveti őket. Gondoskodjon arról, hogy telefonja a közelben legyen, bekapcsolt Bluetooth és Wi-Fi funkcióval.</translation> <translation id="8299319456683969623">Ön jelenleg offline állapotban van.</translation> @@ -6390,6 +6415,7 @@ <translation id="8317671367883557781">Hálózati kapcsolat hozzáadása</translation> <translation id="8319414634934645341">Bővített kulcshasználat</translation> <translation id="8320459152843401447">A teljes képernyő</translation> +<translation id="8321476692217554900">értesítések</translation> <translation id="8321837372750396788">Ezt a(z) <ph name="DEVICE_TYPE" /> eszközt a következő kezeli majd: <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Az oldal nem férhet hozzá az Ön mikrofonjához.</translation> <translation id="8323167517179506834">Írjon be egy URL-t</translation> @@ -6455,7 +6481,9 @@ <translation id="8403562727702715619">Nemrégiben innen: Google Drive</translation> <translation id="8407199357649073301">Naplózási szint:</translation> <translation id="8408068190360279472">Hálózat: <ph name="NETWORK_TYPE" />. Csatlakozás…</translation> +<translation id="8409413588194360210">fizetéskezelők</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Engedélyezve: <ph name="PERMISSION" /> és további <ph name="COUNT" /></translation> <translation id="8413385045638830869">Kérdezzen rá (ajánlott)</translation> <translation id="8417548266957501132">Szülői jelszó</translation> <translation id="8418445294933751433">&Megjelenítés lapként</translation> @@ -6651,6 +6679,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> vagy <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Éjszakai fény színhőmérséklete</translation> <translation id="8648544143274677280">A(z) <ph name="SITE_NAME" /> a következőkre kér engedélyt: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> stb.</translation> +<translation id="865032292777205197">mozgásérzékelők</translation> <translation id="8650543407998814195">Ugyan már nem tud hozzáférni régi profiljához, de az eltávolítása lehetséges.</translation> <translation id="8651585100578802546">Az oldal kényszerített újratöltése</translation> <translation id="8652400352452647993">Csomagbővítmény-hiba</translation> @@ -6787,6 +6816,7 @@ <translation id="8785622406424941542">Érintőceruza</translation> <translation id="8787254343425541995">Proxyk engedélyezése a megosztott hálózatoknál</translation> <translation id="8791534160414513928">„Nincs nyomon követés” kérés küldése a böngészési forgalommal</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Amíg a hotspot be van kapcsolva, az Ön <ph name="PHONE_NAME" /> telefonja:</translation> <translation id="8795916974678578410">Új ablak</translation> <translation id="8797459392481275117">Ezt a webhelyet soha ne fordítsa le</translation> @@ -6826,6 +6856,7 @@ <translation id="8823559166155093873">Cookie-k tiltása</translation> <translation id="8823704566850948458">Jelszó ajánlása…</translation> <translation id="8824701697284169214">Ol&dal hozzáadása...</translation> +<translation id="8827125715368568315">Letiltva: <ph name="PERMISSION" /> és további <ph name="COUNT" /></translation> <translation id="8827289157496676362">Bővítmény rögzítése</translation> <translation id="8827752199525959199">További műveletek, <ph name="USERNAME" /> jelszava a következő domainen: <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Egy webhely sem fedezheti fel a közeli Bluetooth-eszközöket</translation> @@ -6926,6 +6957,7 @@ <translation id="8932894639908691771">Kapcsolóalapú hozzáférés beállításai</translation> <translation id="8933960630081805351">&Megjelenítés a Finderben</translation> <translation id="8934732568177537184">Tovább</translation> +<translation id="8938306522009698937">kezelők</translation> <translation id="8938800817013097409">C típusú USB-vel kompatibilis eszköz (jobb hátsó port)</translation> <translation id="8940081510938872932">A számítógép jelenleg túl sok műveletet végez. Próbálja meg később.</translation> <translation id="8941173171815156065">A(z) „<ph name="PERMISSION" />” engedély visszavonása</translation> @@ -7230,6 +7262,7 @@ <translation id="987264212798334818">Általános</translation> <translation id="987897973846887088">Nincs rendelkezésre álló kép</translation> <translation id="988978206646512040">Üres összetett jelszó nem engedélyezett</translation> +<translation id="991413375315957741">mozgás- és fényérzékelők</translation> <translation id="992032470292211616">A bővítmények, alkalmazások és témák károsíthatják eszközét. Biztosan folytatja?</translation> <translation id="992256792861109788">Rózsaszín</translation> <translation id="992592832486024913">A ChromeVox (beszélt visszajelzés) letiltása</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 2959097d..967d1a92 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Կանխադրված</translation> <translation id="1252987234827889034">Պրոֆիլում սխալ առաջացավ</translation> <translation id="1254593899333212300">Համացանցի անմիջական կապակցում</translation> +<translation id="1257553931232494454">մասշտաբավորման մակարդակներ</translation> <translation id="1259152067760398571">Անվտանգության ստուգումը երեկ է արվել</translation> <translation id="1260451001046713751">Միշտ թույլ տալ ելնող պատուհաններն ու վերահասցեավորումը <ph name="HOST" /> կայքում</translation> <translation id="1261380933454402672">Չափավոր</translation> @@ -673,6 +674,7 @@ <translation id="1729533290416704613">Այն նաև վերահսկում է ցուցադրվող էջերը, երբ դուք որոնում եք կատարում Omnibox-ից:</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Հավելվածներ հեռացնելու համար անցեք Կարգավորումներ > Google Play Խանութ > Կառավարել Android-ի կարգավորումները > Հավելվածներ կամ Հավելվածների կառավարիչ: Այնուհետև հպեք այն հավելվածին, որը ցանկանում եք հեռացնել (անհրաժեշտ հավելվածը գտնելու կարող եք թերթել աջ կամ ձախ): Ապա սեղմեք «Ապատեղադրել» կամ «Անջատել» կոճակը:<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Հարցումն ուղարկվում է…</translation> +<translation id="1733064249834771892">տառատեսակներ</translation> <translation id="1733383495376208985">Գաղտնագրել համաժամացված տվյալները սեփական <ph name="BEGIN_LINK" />համաժամացման անցաբառով<ph name="END_LINK" />։ Գաղտնագրումը չի կիրառվում վճարման եղանակների և Google Pay-ի հասցեների համար։</translation> <translation id="1734212868489994726">Բաց կապույտ</translation> <translation id="1734230530703461088">Չհաջողվեց բեռնել ընդլայնումները նշված ժամանակահատվածում։ Դիմեք ձեր ադմինիստրատորին։</translation> @@ -760,6 +762,7 @@ <translation id="1818913467757368489">Մատյանը վերբեռնվում է:</translation> <translation id="1819721979226826163">Հպեք Հավելվածների ծանուցումներ > Google Play ծառայություններ։</translation> <translation id="1820028137326691631">Մուտքագրեք ադմինիստրատորի տրամադրած գաղտնաբառը</translation> +<translation id="182139138257690338">ավտոմատ ներբեռնումներ</translation> <translation id="1822140782238030981">Արդեն օգտվո՞ւմ եք Chrome-ից։ Մուտք գործեք հաշիվ։</translation> <translation id="18245044880483936">Պահուստավորված տվյալները տեղ չեն զբաղեցնում ձեր երեխայի Google Drive-ի տարածքում։</translation> <translation id="1825565032302550710">Միացքը պետք է լինի 1024 – 65535 միջակայքում</translation> @@ -1200,6 +1203,7 @@ <translation id="2326931316514688470">&Վերաբեռնել հավելվածը</translation> <translation id="2327492829706409234">Միացնել հավելվածը</translation> <translation id="2328561734797404498"><ph name="APP_NAME" /> հավելվածն օգտագործելու համար վերագործարկեք ձեր սարքը։</translation> +<translation id="2329182534073751090">պատուհանների տեղակայում</translation> <translation id="2329597144923131178">Մուտք գործեք՝ ձեր էջանիշները, պատմությունը, գաղտնաբառերն ու այլ կարգավորումները ձեր բոլոր սարքերում համաժամացնելու համար:</translation> <translation id="2332131598580221120">Դիտել խանութում</translation> <translation id="2332192922827071008">Բացել կարգավորումները</translation> @@ -1712,6 +1716,7 @@ <translation id="2894757982205307093">Նոր ներդիր խմբում</translation> <translation id="289644616180464099">SIM քարտը կողպված է</translation> <translation id="289695669188700754">Բանալու ID` <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Այս հատուկ կարգավորումը կհեռացվի, երբ դուք փակեք ձեր բոլոր ինկոգնիտո պատուհանները</translation> <translation id="2897878306272793870">Իսկապե՞ս ուզում եք բացել <ph name="TAB_COUNT" /> ներդիր:</translation> <translation id="290105521672621980">Ֆայլն օգտագործում է չաջակցվող գործառույթներ</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" />-ին չհաջողվեց կապվել այս տպիչի հետ: Համոզվեք, որ տպիչը միացված է և նորից փորձեք:</translation> @@ -1801,6 +1806,7 @@ <translation id="2996286169319737844">Տվյալները գաղտնագրվել են ձեր համաժամացման անցաբառով: Գաղտնագրումը չի կիրառվում վճարման եղանակների և Google Pay-ի հասցեների համար։</translation> <translation id="2996722619877761919">Շրջել երկար եզրի կողմով</translation> <translation id="3000236644796679448">Կայքերը կարող են խոսափողն օգտագործելու թույլտվություն հայցել (խորհուրդ է տրվում)</translation> +<translation id="3000378525979847272">Տրված թույլտվություններ՝ <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Մոնո</translation> <translation id="3001144475369593262">Երեխաների հաշիվներ</translation> <translation id="3003144360685731741">Նախընտրելի ցանցեր</translation> @@ -2060,6 +2066,7 @@ <translation id="3305661444342691068">Բացել PDF-ը նախադիտման ռեժիմում</translation> <translation id="3308116878371095290">Կանխվել է այս էջի կողմից քուքիները պահելու փորձը:</translation> <translation id="3308134619352333507">Թաքցնել կոճակը</translation> +<translation id="3308738399950580893">գովազդ</translation> <translation id="3308852433423051161">Google Օգնականի բեռնում...</translation> <translation id="3309330461362844500">Հավաստագրման պրոֆիլի ID-ն</translation> <translation id="3311445899360743395">Այս հավելվածին առնչվող տվյալները կարող են հեռացվել այս սարքից:</translation> @@ -2120,6 +2127,7 @@ <translation id="3388788256054548012">Այս ֆայլը գաղտնագրված է։ Խնդրեք սեփականատիրոջը վերծանել այն։</translation> <translation id="3390013585654699824">Հավելվածի մասին</translation> <translation id="3390741581549395454">Լինուքսի հավելվածներն ու ֆայլերը պահուստավորվեցին։ Նորացումը շուտով կսկսվի։</translation> +<translation id="3391482648489541560">ֆայլի փոփոխում</translation> <translation id="339178315942519818">Դիտեք զրույցի հավելվածների ծանուցումները <ph name="DEVICE_TYPE" /> սարքում</translation> <translation id="3396800784455899911">Սեղմելով «Ընդունել և շարունակել» կոճակը՝ դուք ընդունում եք Google-ի վերոնշյալ ծառայությունների մշակման պայմանները։</translation> <translation id="3399432415385675819">Ծանուցումները կանջատվեն</translation> @@ -2896,6 +2904,7 @@ <translation id="425573743389990240">Մարտկոցի լիցքաթափման արագությունը վատտերով (բացասական արժեքը նշանակում է, որ մարտկոցը լիցքավորվում է)</translation> <translation id="4256316378292851214">Պա&հել տեսանյութը որպես…</translation> <translation id="4258348331913189841">Ֆայլային համակարգեր</translation> +<translation id="4259381619085088639">տվյալներ ձեր ներկայության մասին</translation> <translation id="4259388776256904261">Կարող է որոշ ժամանակ պահանջվել</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> ֆայլը կարող է վտանգավոր լինել։ Ստուգե՞լ այն Google-ի լրացուցիչ պաշտպանության միջոցով։ Սեղմեք Shift+F6՝ ներբեռնումների գոտու տարածք անցնելու համար։</translation> <translation id="4263223596040212967">Ստուգեք ստեղնաշարի դասավորությունը և նորից փորձեք։</translation> @@ -2932,6 +2941,7 @@ <translation id="4303079906735388947">Սահմանեք նոր PIN կոդ ձեր անվտանգության բանալու համար</translation> <translation id="4305402730127028764">Պատճենել <ph name="DEVICE_NAME" /> սարքում</translation> <translation id="4306119971288449206">Հավելվածները պետք է ունենան «<ph name="CONTENT_TYPE" />» բովանդակության տեսակը</translation> +<translation id="4306812610847412719">սեղմատախտակ</translation> <translation id="4307992518367153382">Հիմնական</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> ԿԲ (ակտիվ է <ph name="NUM_KILOBYTES_LIVE" /> ԿԲ)</translation> <translation id="4310139701823742692">Ֆայլի ձևաչափը սխալ է: Ստուգեք PPD ֆայլը և նորից փորձեք:</translation> @@ -3019,6 +3029,7 @@ <translation id="4412698727486357573">Օգնության կենտրոն</translation> <translation id="44141919652824029">Տրամադրե՞լ կցված USB սարքերի ցանկը «<ph name="APP_NAME" />» հավելվածին</translation> <translation id="4414232939543644979">Նոր &ինկոգնիտո պատուհան</translation> +<translation id="4414515549596849729">քուքիներ և կայքի տվյալներ</translation> <translation id="4415213869328311284"><ph name="DEVICE_TYPE" /> սարքը պատրաստ է օգտագործման։</translation> <translation id="4415245286584082850">Սարքեր չեն գտնվել։ Բացեք օգնության կենտրոնը նոր ներդիրում։</translation> <translation id="4415276339145661267">Կառավարել Google հաշիվը</translation> @@ -3090,6 +3101,7 @@ <translation id="4493468155686877504">Առաջարկվող չափը (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ցույց չտալ այս էջում</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> փլագինը խափանվել է</translation> +<translation id="4500587658229086076">վտանգավոր բովանդակություն</translation> <translation id="450099669180426158">Բացականչական նշանի պատկերակ</translation> <translation id="4501530680793980440">Հեռացման հաստատում</translation> <translation id="4502423230170890588">Հեռացնել սարքից</translation> @@ -3130,6 +3142,7 @@ <translation id="4538684596480161368">Միշտ արգելափակել չմեկուսացված փլագինները <ph name="HOST" />-ում</translation> <translation id="4538792345715658285">Տեղադրված է ձեռնարկության կանոնի համաձայն:</translation> <translation id="4541662893742891060">Չհաջողվեց միանալ այս պրոֆիլին։ Տեխնիկական աջակցության համար կապվեք օպերատորի հետ։</translation> +<translation id="4541810033354695636">լրացված իրականություն</translation> <translation id="4542520061254486227">Կարդալ ձեր տվյալները <ph name="WEBSITE_1" /> և <ph name="WEBSITE_2" /> կայքերում</translation> <translation id="4543778593405494224">Վկայագրերի կառավարիչ</translation> <translation id="4544174279960331769">Կանխադրված կապույտ ավատար</translation> @@ -3603,6 +3616,7 @@ <translation id="5112577000029535889">&Մշակողի գործիքներ</translation> <translation id="5113739826273394829">Այս պատկերակը սեղմելով՝ դուք ձեռքով կկողպեք այս <ph name="DEVICE_TYPE" />-ը: Հաջորդ անգամ մտնելու համար պետք է մուտքագրեք ձեր գաղտնաբառը:</translation> <translation id="51143538739122961">Տեղադրեք անվտանգության բանալին և հպեք դրան</translation> +<translation id="5114987907971894280">վիրտուալ իրականություն</translation> <translation id="5115309401544567011">Միացրեք <ph name="DEVICE_TYPE" /> սարքը հոսանքին:</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Պա&հել ձայնանյութը որպես…</translation> @@ -3904,6 +3918,7 @@ <translation id="5464632865477611176">Աշխատեցնել այս անգամ</translation> <translation id="5464660706533281090">Այս կարգավորումը չի կարող փոխվել երեխայի կողմից։</translation> <translation id="5466374726908360271">Տեղադրել և որոնել «<ph name="SEARCH_TERMS" />»</translation> +<translation id="5467207440419968613">Արգելափակված թույլտվություններ՝ <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Կայքերը կարող են պաշտպանված բովանդակություն նվագարկելու թույլտվություն հայցել (խորհուրդ է տրվում)</translation> <translation id="5468173180030470402">Ընդհանուր ֆայլերի որոնում</translation> <translation id="5469852975082458401">Դուք կարող եք մեկ էջից անցնել մյուսը տեսքտի նշորդի միջոցով։ Սեղմեք F7՝ անջատելու համար։</translation> @@ -4194,6 +4209,7 @@ <translation id="5794786537412027208">Դուրս գալ Chrome-ի բոլոր հավելվածներից</translation> <translation id="5797070761912323120">Google-ը կարող է ձեր այցելությունների պատմությունն օգտագործել` Որոնումը, գովազդն ու Google-ի մյուս ծառայություններն անհատականացնելու համար</translation> <translation id="5798301976526354562">Տեքստի չափսը (կիրառվում է նաև Կենդանի ենթագրերի համար)</translation> +<translation id="579907812742603813">պաշտպանված բովանդակություն</translation> <translation id="579915268381781820">Անվտանգության բանալին հեռացվել է:</translation> <translation id="5799508265798272974">Linux վիրտուալ մեքենա՝ <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Վերջին ներբեռնումից հետո ընտրված ֆայլը վնասվել կամ հեռացվել է:</translation> @@ -4267,6 +4283,7 @@ <translation id="5877064549588274448">Վարկածը փոխվել է: Փոփոխությունները կիրառելու համար վերագործարկեք սարքը:</translation> <translation id="5877584842898320529">Նշված տպիչը հասանելի չէ կամ ճիշտ չէ տեղադրված: <ph name="BR" /> Ստուգեք ձեր տպիչը կամ փորձեք ընտրել մեկ այլ տպիչ:</translation> <translation id="5882919346125742463">Պահված ցանցեր</translation> +<translation id="5883356647197510494">Ավտոմատ արգելափակված թույլտվություններ՝ <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Այս ներդիրը միացված է USB սարքին:</translation> <translation id="5886009770935151472">Մատ 1</translation> <translation id="5889282057229379085">Միջանկյալ հավաստագրման կենտրոնների առավելագույն քանակը՝ <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4766,6 +4783,7 @@ <translation id="6460601847208524483">Find Next</translation> <translation id="6461170143930046705">Ցանցերի որոնում...</translation> <translation id="6463795194797719782">&Փոփոխել</translation> +<translation id="6464094930452079790">պատկերներ</translation> <translation id="6464825623202322042">Այս սարքը</translation> <translation id="6465841119675156448">Առանց ինտերնետի</translation> <translation id="6466988389784393586">&Բացել բոլոր էջանիշները</translation> @@ -4789,6 +4807,7 @@ <translation id="6491376743066338510">Լիազորումը ձախողվեց</translation> <translation id="6494327278868541139">Ցույց տալ լրացուցիչ պաշտպանության մանրամասն նկարագրությունը</translation> <translation id="6494445798847293442">Հավաստագրման կենտրոն չէ</translation> +<translation id="6494750904506170417">ելնող պատուհաններ և վերաուղղորդում</translation> <translation id="6494974875566443634">Անհատականացում</translation> <translation id="6495925982925244349">Ցանց <ph name="NETWORK_INDEX" />՝ <ph name="NETWORK_COUNT" />-ից, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ազդանշանի ուժգնությունը՝ <ph name="SIGNAL_STRENGTH" />%, կառավարվում է ձեր ադմինիստրատորի կողմից, մանրամասներ</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Այս տվյալները պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն}=1{Այս ֆայլը պարունակում է խիստ անձնական կամ վտանգավոր բովանդակություն}one{Այս ֆայլերը պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն}other{Այս ֆայլերը պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն}}</translation> @@ -4929,6 +4948,7 @@ <translation id="6657585470893396449">Գաղտնաբառ</translation> <translation id="6659213950629089752">Այս էջի չափերը փոփոխել է <ph name="NAME" /> ընդլայնումը</translation> <translation id="6659594942844771486">Ներդիր</translation> +<translation id="6660413144148052430">տեղորոշում</translation> <translation id="666099631117081440">Տպման սերվերներ</translation> <translation id="6663190258859265334">Կիրառեք Powerwash <ph name="DEVICE_TYPE" /> սարքի համար և վերադարձեք նախորդ տարբերակին։</translation> <translation id="6664237456442406323">Ձեր համակարգիչը կազմաձևված է սարքակազմի սխալ ID-ով: Սա թույլ չի տալիս, որպեսզի Chrome OS-ը թարմացվի անվտանգության վերջին նորացումներով և ձեր համակարգիչը <ph name="BEGIN_BOLD" />կարող է խոցելի դառնալ վնասարար հարձակումների համար<ph name="END_BOLD" />:</translation> @@ -4983,6 +5003,7 @@ <translation id="672609503628871915">Իմանալ՝ ինչ նոր բան կա</translation> <translation id="67269783048918309">Օգտագործման և ախտորոշման տվյալների ուղարկում Ներկայումս այս սարքը ախտորոշման, սարքի և հավելվածի օգտագործման տվյալներն ավտոմատ ուղարկում է Google-ին: Այս տեղեկությունները չեն օգտագործվի ձեր երեխային նույնականացնելու համար և կօգնեն բարելավել համակարգի ու հավելվածի աշխատանքի կայունությունը: Հավաքված տեղեկությունների մի մասը օգտակար կլինի մեր գործընկերների, օրինակ, Android ծրագրավորողների համար։ Այս <ph name="BEGIN_LINK1" />կարգավորումը<ph name="END_LINK1" /> պարտադրված է սեփականատիրոջ կողմից: Եթե Վեբ որոնման և հավելվածների պատմությունը միացված է, այս տվյալները կպահվեն երեխայի Google հաշվում։ <ph name="BEGIN_LINK2" />Մանրամասն<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Միացված է, մարտկոցի լիցքը՝ <ph name="BATTERY_PERCENTAGE" /></translation> +<translation id="6732087373923685049">տեսախցիկ</translation> <translation id="6732801395666424405">Վկայագրերը չեն բեռնվել</translation> <translation id="6732900235521116609">Անհնար է հեռացնել դյուրանցումը</translation> <translation id="6734468588183300211">Ինկոգնիտո ռեժիմում կայքերը չեն կարող օգտագործել քուքիներ՝ դիտարկիչում ձեր գործողությունները տեսնելու համար, օրինակ, գովազդի անհատականացման նպատակով։ Որոշ կայքերում գործառույթները կարող են չաշխատել։</translation> @@ -5057,6 +5078,7 @@ <translation id="6817174620439930047">Հարցնել, երբ որևէ կայք ուզում է օգտագործել համակարգի բացառիկ հաղորդագրությունները՝ MIDI սարքեր մուտք գործելու համար (խորհուրդ է տրվում)</translation> <translation id="6818198425579322765">Թարգմանվող էջի լեզուն</translation> <translation id="6818802132960437751">Վիրուսներից պաշտպանության ներկառուցված համակարգ</translation> +<translation id="6820143000046097424">հաջորդական միացքներ</translation> <translation id="682123305478866682">Աշխատասեղանի հեռարձակում</translation> <translation id="6823174134746916417">Հպահարթակի tap-to-click գործառույթը</translation> <translation id="6824564591481349393">Պատճենել &էլփոստի հասցեն</translation> @@ -5490,6 +5512,7 @@ <translation id="730515362922783851">Տվյալներ փոխանակել տեղային ցանցի կամ համացանցի ցանկացած սարքի հետ</translation> <translation id="7306521477691455105">Բացեք կարգավորումները՝ <ph name="USB_DEVICE_NAME" /> սարքը վիրտուալ մեքենային (<ph name="USB_VM_NAME" />) միացնելու համար</translation> <translation id="7307129035224081534">Դադարեցված է</translation> +<translation id="7308436126008021607">ֆոնային համաժամացում</translation> <translation id="7309257895202129721">Ցույց տալ &կառավարները</translation> <translation id="7310598146671372464">Չհաջողվեց մտնել հաշիվ: Սերվերը չի աջակցում Kerberos գաղտնագրման նշված տեսակները: Կապվեք ձեր ադմինիստրատորի հետ:</translation> <translation id="7320213904474460808">Կանխադրված ցանց</translation> @@ -5631,6 +5654,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Անհապաղ վերադարձրեք սարքը}one{Վերադարձրեք <ph name="DEVICE_TYPE" /> սարքը {NUM_DAYS} օրվա ընթացքում}other{Վերադարձրեք <ph name="DEVICE_TYPE" /> սարքը {NUM_DAYS} օրվա ընթացքում}}</translation> <translation id="7475671414023905704">Netscape-ի կորցված գաղտնաբառերի URL</translation> <translation id="7476454130948140105">Մարտկոցի լիցքը բավարար չէ (<ph name="BATTERY_PERCENT" />%) թարմացումը տեղադրելու համար</translation> +<translation id="7476989672001283112">Ավտոմատ արգելափակված թույլտվություններ՝ <ph name="PERMISSION" /> ու ևս <ph name="COUNT" /></translation> <translation id="7477793887173910789">Վերահսկեք երաժշտությունը, տեսանյութերը և այլն</translation> <translation id="7478485216301680444">Հնարավոր չէ տեղադրել kiosk հավելվածը:</translation> <translation id="7478623944308207463">Ձեր հավելվածներն ու կարգավորումները կհամաժամացվեն բոլոր Chrome OS սարքերում, որոնցում մտել եք ձեր Google հաշիվ։ Դիտարկիչներում համաժամացման տարբերակներին ծանոթանալու համար անցեք <ph name="LINK_BEGIN" />Chrome-ի կարգավորումներ<ph name="LINK_END" />։</translation> @@ -6373,6 +6397,7 @@ <translation id="8288032458496410887">Ապատեղադրել <ph name="APP" /> հավելվածը…</translation> <translation id="8289128870594824098">Սկավառակի չափը</translation> <translation id="8293206222192510085">Էջանիշի հավելում</translation> +<translation id="829335040383910391">ձայն</translation> <translation id="8294431847097064396">Աղբյուր</translation> <translation id="8298429963694909221">Այժմ դուք կարող եք ծանուցումներ ստանալ ձեր հեռախոսից <ph name="DEVICE_TYPE" /> սարքում։ Եթե անջատեք ծանուցումները <ph name="DEVICE_TYPE" /> սարքում, դրանք կանջատվեն նաև ձեր հեռախոսում։ Համոզվեք, որ ձեր հեռախոսը մոտակայքում է և որ Bluetooth-ն ու Wi-Fi-ը միացված են։</translation> <translation id="8299319456683969623">Այս պահին դուք անցանց եք:</translation> @@ -6391,6 +6416,7 @@ <translation id="8317671367883557781">Ավելացնել ցանցային կապ</translation> <translation id="8319414634934645341">Բանալու ընդարձակված օգտագործում</translation> <translation id="8320459152843401447">Ամբողջ էկրանը</translation> +<translation id="8321476692217554900">ծանուցումներ</translation> <translation id="8321837372750396788"><ph name="DEVICE_TYPE" /> սարքը կկառավարվի <ph name="MANAGER" />-ի կողմից։</translation> <translation id="8322814362483282060">Այս էջին արգելված է օգտագործել ձեր խոսափողը:</translation> <translation id="8323167517179506834">Մուտքագրեք URL-ը</translation> @@ -6456,7 +6482,9 @@ <translation id="8403562727702715619">Վերջերս Google Drive-ից</translation> <translation id="8407199357649073301">Գրառման մակարդակը՝</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ցանց, միացում…</translation> +<translation id="8409413588194360210">վճարումների մշակիչներ</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Տրված թույլտվություններ՝ <ph name="PERMISSION" /> ու ևս <ph name="COUNT" /></translation> <translation id="8413385045638830869">Նախ հարցնել (հանձնարարելի)</translation> <translation id="8417548266957501132">Ծնողի գաղտնաբառը</translation> <translation id="8418445294933751433">&Ցույց տալ որպես ներդիր</translation> @@ -6652,6 +6680,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> կամ <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Գիշերային լույսի ռեժիմում գույնի ջերմաստիճանը</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> կայքն ուզում է <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> և այլն</translation> +<translation id="865032292777205197">շարժման տվիչներ</translation> <translation id="8650543407998814195">Չնայած այլևս չեք կարող մուտք գործել ձեր հին պրոֆիլ, դուք կարող եք այն ջնջել:</translation> <translation id="8651585100578802546">Force Reload This Page</translation> <translation id="8652400352452647993">Ընդլայնման փաթեթավորման սխալ կա</translation> @@ -6789,6 +6818,7 @@ <translation id="8785622406424941542">Ստիլուս</translation> <translation id="8787254343425541995">Օգտագործել պրոքսի-սերվերներ՝ համօգտագործվող ցանցերի համար</translation> <translation id="8791534160414513928">Ուղարկել «Չհետևել» հարցումը ելքային հոսքի հետ</translation> +<translation id="8792626944327216835">խոսափող</translation> <translation id="879413103056696865">Երբ միացնեք թեժ կետը, «<ph name="PHONE_NAME" />» սարքը՝</translation> <translation id="8795916974678578410">New Window</translation> <translation id="8797459392481275117">Երբեք չթարգմանել այս կայքը</translation> @@ -6828,6 +6858,7 @@ <translation id="8823559166155093873">Արգելափակել քուքիները</translation> <translation id="8823704566850948458">Ստեղծել գաղտնաբառ...</translation> <translation id="8824701697284169214">Հավելել է&ջ...</translation> +<translation id="8827125715368568315">Արգելափակված թույլտվություններ՝ <ph name="PERMISSION" /> ու ևս <ph name="COUNT" /></translation> <translation id="8827289157496676362">Ամրացնել ընդլայնումը</translation> <translation id="8827752199525959199">Այլ գործողություններ, գաղտնաբառ <ph name="USERNAME" />-ի համար <ph name="DOMAIN" /> տիրույթում</translation> <translation id="882854468542856424">Թույլ չտալ ոչ մի կայքի հայտնաբերել մոտակա Bluetooth սարքերը</translation> @@ -6928,6 +6959,7 @@ <translation id="8932894639908691771">Switch Access-ի ընտրանքներ</translation> <translation id="8933960630081805351">&Ցույց տալ Finder-ում</translation> <translation id="8934732568177537184">Շարունակել</translation> +<translation id="8938306522009698937">մշակիչներ</translation> <translation id="8938800817013097409">USB-C սարք (հետևի աջ միացք)</translation> <translation id="8940081510938872932">Ձեր համակարգիչը ծանրաբեռնված է: Փորձեք ավելի ուշ:</translation> <translation id="8941173171815156065">Հետ կանչել «<ph name="PERMISSION" />» թույլտվությունը</translation> @@ -7232,6 +7264,7 @@ <translation id="987264212798334818">Ընդհանուր</translation> <translation id="987897973846887088">Պատկերներ չկան</translation> <translation id="988978206646512040">Անցաբառի դաշտը չի կարող դատարկ լինել</translation> +<translation id="991413375315957741">շարժման և լուսավորության տվիչներ</translation> <translation id="992032470292211616">Ընդլայնումները, հավելվածները և թեմաները կարող են վնասել ձեր սարքը: Համոզվա՞ծ եք, որ ուզում եք շարունակել:</translation> <translation id="992256792861109788">Վարդագույն</translation> <translation id="992592832486024913">Անջատել ChromeVox-ը (ձայնային ուղեկցում)</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 4d30dcd..f8c0d094 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">Sjálfgefið</translation> <translation id="1252987234827889034">Villa í prófíl kom upp</translation> <translation id="1254593899333212300">Beintenging við internetið</translation> +<translation id="1257553931232494454">aðdráttarstig</translation> <translation id="1259152067760398571">Öryggisathugun var keyrð í gær</translation> <translation id="1260451001046713751">Leyfa alltaf sprettiglugga og framsendingar frá <ph name="HOST" /></translation> <translation id="1261380933454402672">Hófleg</translation> @@ -672,6 +673,7 @@ <translation id="1729533290416704613">Hún stýrir því einnig hvaða síða birtist þegar þú leitar með veffangastikunni.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Til að fjarlægja forrit skaltu fara í Stillingar > Google Play Store > Hafa umsjón með stillingum Android > Forrit eða Forritastjórnun. Ýttu síðan á forritið sem þú vilt fjarlægja (þú gætir þurft að fletta til hægri eða vinstri til að finna forritið). Ýttu svo á „Fjarlægja“ eða „Gera óvirkt“.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Sendir beiðni...</translation> +<translation id="1733064249834771892">leturgerðir</translation> <translation id="1733383495376208985">Dulkóða samstillt gögn með eigin <ph name="BEGIN_LINK" />aðgangsorði samstillingar<ph name="END_LINK" />. Þetta gildir ekki um greiðslumáta og heimilisföng af Google Pay.</translation> <translation id="1734212868489994726">Ljósblár</translation> <translation id="1734230530703461088">Ekki tókst að hlaða inn viðbótum innan tilgreindra tímamarka. Hafðu samband við kerfisstjórann.</translation> @@ -759,6 +761,7 @@ <translation id="1818913467757368489">Annálsflutningur í gangi.</translation> <translation id="1819721979226826163">Ýttu á Forritatilkynningar > Þjónusta Google Play.</translation> <translation id="1820028137326691631">Sláðu inn aðgangsorð frá kerfisstjóra</translation> +<translation id="182139138257690338">sjálfvirkt niðurhal</translation> <translation id="1822140782238030981">Ertu nú þegar að nota Chrome? Skráðu þig inn</translation> <translation id="18245044880483936">Afrituð gögn eru ekki talin með í geymsluplássi barnsins á Drive.</translation> <translation id="1825565032302550710">Gátt verður að vera á milli 1024 og 65535</translation> @@ -1199,6 +1202,7 @@ <translation id="2326931316514688470">Endu&rhlaða forrit</translation> <translation id="2327492829706409234">Virkja forrit</translation> <translation id="2328561734797404498">Endurræstu tækið til að nota <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">gluggastaðsetningu</translation> <translation id="2329597144923131178">Skráðu þig inn til að fá bókamerkin þín, ferilinn, aðgangsorð og aðrar stillingar í öll tækin þín.</translation> <translation id="2332131598580221120">Skoða í verslun</translation> <translation id="2332192922827071008">Opna kjörstillingar</translation> @@ -1711,6 +1715,7 @@ <translation id="2894757982205307093">Nýr flipi í hópi</translation> <translation id="289644616180464099">SIM-kortið er læst</translation> <translation id="289695669188700754">Lykilsauðkenni: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Þessi sérstilling verður fjarlægð þegar þú lokar öllum huliðsgluggum</translation> <translation id="2897878306272793870">Viltu örugglega opna <ph name="TAB_COUNT" /> flipa?</translation> <translation id="290105521672621980">Skráin notast við óstudda eiginleika</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> gat ekki átt samskipti við þennan prentara. Gættu þess að prentarinn sé í sambandi og reyndu aftur.</translation> @@ -1800,6 +1805,7 @@ <translation id="2996286169319737844">Gögnin eru dulkóðuð með aðgangsorði samstillingar. Þetta gildir ekki um greiðslumáta og heimilisföng af Google Pay.</translation> <translation id="2996722619877761919">Snúa langhlið</translation> <translation id="3000236644796679448">Vefsvæði geta beðið um leyfi til að nota hljóðnemann (ráðlagt)</translation> +<translation id="3000378525979847272">Leyfði <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Einóma hljóð</translation> <translation id="3001144475369593262">Barnareikningar</translation> <translation id="3003144360685731741">Kjörnetkerfi</translation> @@ -2059,6 +2065,7 @@ <translation id="3305661444342691068">Opna PDF-skjal í forskoðun</translation> <translation id="3308116878371095290">Komið var í veg fyrir að þessi síða vistaði fótspor.</translation> <translation id="3308134619352333507">Hnappurinn Fela</translation> +<translation id="3308738399950580893">auglýsingar</translation> <translation id="3308852433423051161">Hleður Google hjálparann...</translation> <translation id="3309330461362844500">Auðkenni vottorðsprófíls</translation> <translation id="3311445899360743395">Gögn sem tengjast þessu forriti verða hugsanlega fjarlægð úr tækinu.</translation> @@ -2119,6 +2126,7 @@ <translation id="3388788256054548012">Þessi skrá er dulkóðuð. Biddu eiganda hennar um að dulráða hana.</translation> <translation id="3390013585654699824">Upplýsingar um forrit</translation> <translation id="3390741581549395454">Tekið var afrit af skrám og forritum í Linux. Uppfærsla hefst eftir skamma stund.</translation> +<translation id="3391482648489541560">skráavinnslu</translation> <translation id="339178315942519818">Skoðaðu tilkynningar úr spjallforritum í <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Með því að smella á hnappinn „Samþykkja og halda áfram“ samþykkir þú þá úrvinnslu sem lýst er hér að ofan fyrir þessa Google þjónustu.</translation> <translation id="3399432415385675819">Tilkynningar verða gerðar óvirkar</translation> @@ -2895,6 +2903,7 @@ <translation id="425573743389990240">Afhleðsluhraði rafhlöðu í vöttum (neikvæði gildi merkja að rafhlaðan er í hleðslu)</translation> <translation id="4256316378292851214">&Vista myndskeið sem...</translation> <translation id="4258348331913189841">Skráakerfi</translation> +<translation id="4259381619085088639">viðveru þína</translation> <translation id="4259388776256904261">Þetta gæti tekið dálitla stund</translation> <translation id="4260182282978351200">Skráin <ph name="FILE_NAME" /> gæti verið hættuleg. Viltu senda hana í skönnun Ítarlegrar verndar hjá Google? Ýttu á Shift+F6 til að fara á niðurhalsstikuna.</translation> <translation id="4263223596040212967">Athugaðu lyklaskipanina og reyndu aftur.</translation> @@ -2931,6 +2940,7 @@ <translation id="4303079906735388947">Settu upp nýtt PIN-númer fyrir öryggislykilinn</translation> <translation id="4305402730127028764">Afrita í <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Forrit verða að vera birt með efnistegundinni „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">klippiborð</translation> <translation id="4307992518367153382">Grunnatriði</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB í notkun)</translation> <translation id="4310139701823742692">Skráin er á röngu sniði. Athugaðu PPD-skrána og reyndu aftur.</translation> @@ -3018,6 +3028,7 @@ <translation id="4412698727486357573">Hjálparmiðstöð</translation> <translation id="44141919652824029">Leyfa „<ph name="APP_NAME" />“ að sækja lista yfir tengd USB-tæki?</translation> <translation id="4414232939543644979">Nýr hul&iðsgluggi</translation> +<translation id="4414515549596849729">fótspor og gögn vefsvæða</translation> <translation id="4415213869328311284">Þú getur byrjað að nota <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Engin tæki fundust. Opnaðu grein hjálparmiðstöðvarinnar í nýjum flipa.</translation> <translation id="4415276339145661267">Stjórna Google reikningnum</translation> @@ -3089,6 +3100,7 @@ <translation id="4493468155686877504">Ráðlagt (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ekki sýna á þessari síðu</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> hrundi</translation> +<translation id="4500587658229086076">óöruggt efni</translation> <translation id="450099669180426158">Upphrópunarmerki</translation> <translation id="4501530680793980440">Staðfesta fjarlægingu</translation> <translation id="4502423230170890588">Fjarlægja úr þessu tæki?</translation> @@ -3129,6 +3141,7 @@ <translation id="4538684596480161368">Loka alltaf á óafmarkaðar viðbætur á <ph name="HOST" /></translation> <translation id="4538792345715658285">Sett upp vegna fyrirtækjastefnu.</translation> <translation id="4541662893742891060">Ekki er hægt að tengjast þessum prófíl. Hafðu samband við símafyrirtækið þitt til að fá tæknilega aðstoð.</translation> +<translation id="4541810033354695636">aukinn veruleika</translation> <translation id="4542520061254486227">Lesa gögnin þín á <ph name="WEBSITE_1" /> og <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Vottorðastjórnun</translation> <translation id="4544174279960331769">Sjálfgefin blá notandamynd</translation> @@ -3601,6 +3614,7 @@ <translation id="5112577000029535889">Forritunartól</translation> <translation id="5113739826273394829">Ef þú smellir á þetta tákn læsirðu þessu <ph name="DEVICE_TYPE" /> tæki handvirkt. Næst þarftu að slá inn aðgangsorðið þitt til að komast inn.</translation> <translation id="51143538739122961">Stingdu öryggislykli í samband og snertu hann</translation> +<translation id="5114987907971894280">sýndarveruleika</translation> <translation id="5115309401544567011">Stingdu <ph name="DEVICE_TYPE" /> í samband við rafmagn.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">&Vista hljóð sem...</translation> @@ -3900,6 +3914,7 @@ <translation id="5464632865477611176">Keyra í þetta skipti</translation> <translation id="5464660706533281090">Notandi sem er barn getur ekki breytt þessari stillingu.</translation> <translation id="5466374726908360271">Lí&ma og leita að „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Lokaði á <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Vefsvæði geta beðið um að spila varið efni (ráðlagt)</translation> <translation id="5468173180030470402">Leitar að skráageymslum</translation> <translation id="5469852975082458401">Þú getur skoðað síður með textabendli. Ýttu á F7 til að slökkva.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Loka öllum Chrome forritum</translation> <translation id="5797070761912323120">Google notar hugsanlega ferilinn þinn til að sérsníða leitina, auglýsingar og aðra þjónustu Google</translation> <translation id="5798301976526354562">Textastærð (á einnig við um skjátexta í rauntíma)</translation> +<translation id="579907812742603813">varið efni</translation> <translation id="579915268381781820">Öryggislykillinn var fjarlægður.</translation> <translation id="5799508265798272974">Sýndarvél Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Áfangaskráin hefur verið stýfð eða fjarlægð síðan hún var sótt.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Skipt var um rás. Endurræstu tækið til að breytingarnar taki gildi.</translation> <translation id="5877584842898320529">Valinn prentari er ekki tiltækur eða ekki rétt uppsettur. <ph name="BR" /> Athugaðu prentarann eða prófaðu að velja annan prentara.</translation> <translation id="5882919346125742463">Þekkt netkerfi</translation> +<translation id="5883356647197510494">Lokaði sjálfkrafa á <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Þessi flipi er tengdur við USB-tæki.</translation> <translation id="5886009770935151472">Fingur 1</translation> <translation id="5889282057229379085">Hámarksfjöldi CA-millistigsvottorða: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Finna næsta</translation> <translation id="6461170143930046705">Leitar að netum...</translation> <translation id="6463795194797719782">Br&eyta</translation> +<translation id="6464094930452079790">myndir</translation> <translation id="6464825623202322042">Þetta tæki</translation> <translation id="6465841119675156448">Án nettengingar</translation> <translation id="6466988389784393586">&Opna öll bókamerki</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Auðkenning mistókst</translation> <translation id="6494327278868541139">Sýna upplýsingar um aukna vernd</translation> <translation id="6494445798847293442">Ekki vottunarstöð</translation> +<translation id="6494750904506170417">sprettiglugga og framsendingar</translation> <translation id="6494974875566443634">Sérsnið</translation> <translation id="6495925982925244349">Netkerfi <ph name="NETWORK_INDEX" /> af <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, <ph name="SIGNAL_STRENGTH" />% sendistyrkur, stjórnað af kerfisstjóra, upplýsingar</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Þessi gögn innihalda viðkvæmt eða hættulegt efni}=1{Þessi skrá inniheldur viðkvæmt eða hættulegt efni}one{Þessar skrár innihalda viðkvæmt eða hættulegt efni}other{Þessar skrár innihalda viðkvæmt eða hættulegt efni}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Aðgangsorð</translation> <translation id="6659213950629089752">Þessi síða var stækkuð með viðbótinni „<ph name="NAME" />“</translation> <translation id="6659594942844771486">Flipi</translation> +<translation id="6660413144148052430">staðsetningu</translation> <translation id="666099631117081440">Prentþjónar</translation> <translation id="6663190258859265334">Djúphreinsaðu <ph name="DEVICE_TYPE" /> tækið þitt og settu fyrri útgáfu upp aftur.</translation> <translation id="6664237456442406323">Tölvan er því miður grunnstillt með gölluðu vélbúnaðarauðkenni. Þetta kemur í veg fyrir að Chrome OS geti uppfært í nýjustu öryggisúrræði og tölvan <ph name="BEGIN_BOLD" />kann að vera berskjölduð gagnvart árásum<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Skoða nýjungarnar</translation> <translation id="67269783048918309">Senda notkunar- og greiningargögn. Þetta tæki sendir núna sjálfkrafa greiningargögn, tækisgögn og upplýsingar um forritanotkun til Google. Þetta verður ekki notað til að bera kennsl á barnið þitt og mun stuðla að því að bæta stöðugleika kerfa og forrita auk annarra endurbóta. Sum uppsöfnuð gögn munu einnig gagnast forritum og samstarfsaðilum Google, til dæmis þróunaraðilum Android. Eigandi valdi þessa <ph name="BEGIN_LINK1" />stillingu<ph name="END_LINK1" />. Ef kveikt er á ítarlegri vef- og forritavirkni fyrir barnið geta þessi gögn verið vistuð á Google reikningi barnsins. <ph name="BEGIN_LINK2" />Frekari upplýsingar<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Tengt, <ph name="BATTERY_PERCENTAGE" />% rafhlaða</translation> +<translation id="6732087373923685049">myndavél</translation> <translation id="6732801395666424405">Vottorð ekki hlaðin</translation> <translation id="6732900235521116609">Ekki er hægt að fjarlægja flýtileið</translation> <translation id="6734468588183300211">Þegar huliðsstilling er notuð geta vefsvæði ekki notað fótspor til að sjá vafranotkun þína á vefsvæðum, til dæmis til að sérsníða auglýsingar. Ekki er víst að allir eiginleikar á öllum vefsvæðum virki.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Spyrja þegar vefsvæði vill nota frátekin kerfisskilaboð til að fá aðgang að MIDI-tækjum (ráðlagt)</translation> <translation id="6818198425579322765">Tungumál síðu sem þýða á af</translation> <translation id="6818802132960437751">Innbyggð vírusvörn</translation> +<translation id="6820143000046097424">raðtengi</translation> <translation id="682123305478866682">Senda út skjáborð</translation> <translation id="6823174134746916417">Ýta til að smella á snertifleti</translation> <translation id="6824564591481349393">Afrita n&etfang</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Skiptast á gögnum við hvaða tæki sem er á staðarneti eða internetinu</translation> <translation id="7306521477691455105">Opnaðu stillingarnar til að tengja <ph name="USB_DEVICE_NAME" /> við <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Hlé</translation> +<translation id="7308436126008021607">samstillingu í bakgrunni</translation> <translation id="7309257895202129721">Sýna stýringar</translation> <translation id="7310598146671372464">Ekki tókst að skrá þig inn. Þjónninn styður ekki Kerberos-dulkóðunargerðirnar sem eru tilgreindar. Hafðu samband við kerfisstjóra.</translation> <translation id="7320213904474460808">Sjálfgefið eftir netkerfi</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Tafarlausra skila krafist}one{Skilaðu <ph name="DEVICE_TYPE" /> tækinu innan {NUM_DAYS} dags}other{Skilaðu <ph name="DEVICE_TYPE" /> tækinu innan {NUM_DAYS} daga}}</translation> <translation id="7475671414023905704">Slóð á týnt aðgangsorð Netscape</translation> <translation id="7476454130948140105">Of lítil hleðsla á rafhlöðu til að uppfæra (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Lokaði sjálfkrafa á <ph name="PERMISSION" /> og <ph name="COUNT" /> í viðbót</translation> <translation id="7477793887173910789">Stjórnaðu tónlistinni, myndskeiðunum og fleiru</translation> <translation id="7478485216301680444">Ekki tókst að setja upp sjálfsalaforrit.</translation> <translation id="7478623944308207463">Forritin þín og stillingar verða samstillt í öllum Chrome OS tækjum sem þú ert skráð(ur) inn á með Google reikningnum þínum. Samstillingarvalkosti vafra er að finna í <ph name="LINK_BEGIN" />stillingum Chrome<ph name="LINK_END" />.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Fjarlægja <ph name="APP" />...</translation> <translation id="8289128870594824098">Diskstærð</translation> <translation id="8293206222192510085">Bæta við bókamerki</translation> +<translation id="829335040383910391">hljóð</translation> <translation id="8294431847097064396">Uppruni</translation> <translation id="8298429963694909221">Nú geturðu fengið tilkynningar úr símanum í <ph name="DEVICE_TYPE" />. Ef þú hunsar tilkynningar í <ph name="DEVICE_TYPE" /> verða þær líka hunsaðar í símanum þínum. Gakktu úr skugga um að síminn sé nálægt og með kveikt á Bluetooth og Wi-Fi.</translation> <translation id="8299319456683969623">Þú ert ekki á netinu.</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Bæta við nettengingu</translation> <translation id="8319414634934645341">Útvíkkuð lyklanotkun</translation> <translation id="8320459152843401447">Allur skjárinn hjá þér</translation> +<translation id="8321476692217554900">tilkynningar</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> mun hafa umsjón með þessu <ph name="DEVICE_TYPE" /> tæki.</translation> <translation id="8322814362483282060">Þessari síðu var bannað að fá aðgang að hljóðnemanum þínum.</translation> <translation id="8323167517179506834">Sláðu inn vefslóð</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Nýlegt af Google Drive</translation> <translation id="8407199357649073301">Skráningarstig:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-net, tengist</translation> +<translation id="8409413588194360210">greiðslumiðlara</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Leyfði <ph name="PERMISSION" /> og <ph name="COUNT" /> í viðbót</translation> <translation id="8413385045638830869">Spyrja fyrst (ráðlagt)</translation> <translation id="8417548266957501132">Aðgangsorð foreldris</translation> <translation id="8418445294933751433">&Sýna sem flipa</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> eða <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Lithiti næturljóss</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> vill: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> og fleira</translation> +<translation id="865032292777205197">hreyfiskynjara</translation> <translation id="8650543407998814195">Þótt þú hafir ekki lengur aðgang að gamla prófílnum þínum geturðu samt fjarlægt hann.</translation> <translation id="8651585100578802546">Þvinga fram endurnýjun síðu</translation> <translation id="8652400352452647993">Villa í pakkaviðbót</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Penni</translation> <translation id="8787254343425541995">Leyfa proxy-þjóna fyrir sameiginleg net</translation> <translation id="8791534160414513928">Senda beiðnina „Ekki rekja“ með vefumferð</translation> +<translation id="8792626944327216835">hljóðnema</translation> <translation id="879413103056696865">Þegar kveikt er á heitum reit mun <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nýr gluggi</translation> <translation id="8797459392481275117">Aldrei þýða þetta vefsvæði</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Loka á fótspor</translation> <translation id="8823704566850948458">Tillaga að aðgangsorði...</translation> <translation id="8824701697284169214">Bæta síðu við...</translation> +<translation id="8827125715368568315">Lokaði á <ph name="PERMISSION" /> og <ph name="COUNT" /> í viðbót</translation> <translation id="8827289157496676362">Festa viðbót</translation> <translation id="8827752199525959199">Fleiri aðgerðir, aðgangsorð fyrir <ph name="USERNAME" /> á <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Ekki leyfa neinum vefsvæðum að finna nálæg Bluetooth-tæki</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Skipta um aðgengismöguleika</translation> <translation id="8933960630081805351">&Sýna í Finder</translation> <translation id="8934732568177537184">Halda áfram</translation> +<translation id="8938306522009698937">hjálparforrit</translation> <translation id="8938800817013097409">USB-C tæki (hægra tengi að aftan)</translation> <translation id="8940081510938872932">Tölvan er að gera of margt í einu sem stendur. Reyndu aftur síðar.</translation> <translation id="8941173171815156065">Afturkalla heimildina „<ph name="PERMISSION" />“'</translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">Almennt</translation> <translation id="987897973846887088">Engar myndir til staðar</translation> <translation id="988978206646512040">Ekki er leyft að hafa autt aðgangsorð</translation> +<translation id="991413375315957741">hreyfi- eða birtuskynjara</translation> <translation id="992032470292211616">Viðbætur, forrit og þemu geta skaðað tækið þitt. Ertu viss um að þú viljir halda áfram?</translation> <translation id="992256792861109788">Bleikur</translation> <translation id="992592832486024913">Gera ChromeVox (raddsvörun) óvirkt</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index 7571aa0..2053435 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">ნაგულისხმევი</translation> <translation id="1252987234827889034">წარმოიქმნა პროფილთან დაკავშირებული შეცდომა</translation> <translation id="1254593899333212300">პირდაპირი ინტერნეტ კავშირი</translation> +<translation id="1257553931232494454">მასშტაბირების დონეები</translation> <translation id="1259152067760398571">უსაფრთხოების შემოწმება შესრულდა გუშინ</translation> <translation id="1260451001046713751"><ph name="HOST" />-დან გადამისამართებებისა და ამომხტარი ფანჯრების ყოველთვის დაშვება</translation> <translation id="1261380933454402672">მოკრძალებული</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">იგი ასევე აკონტროლებს, თუ რომელი გვერდი გამოჩნდება Omnibox-ში ძიების დროს.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />აპების ამოსაშლელად გადადით აქ: პარამეტრები > Google Play Store > Android პარამეტრების მართვა > აპები ან აპლიკაციების მენეჯერი. შემდეგ შეეხეთ აპს, რომლის დეინსტალაციაც გსურთ (აპის საპოვნელად შეიძლება დაგჭირდეთ მარჯვნივ ან მარცხნივ გადაფურცვლა). ბოლოს კი შეეხეთ დეინსტალაციას ან გათიშვას.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">მოთხოვნის გაგზავნა…</translation> +<translation id="1733064249834771892">შრიფტები</translation> <translation id="1733383495376208985">სინქრონიზებული მონაცემების დაშიფვრა თქვენი საკუთარი <ph name="BEGIN_LINK" />საიდუმლო ფრაზით<ph name="END_LINK" />. აღნიშნული არ მოიცავს Google Pay-ში შენახულ გადახდის მეთოდებსა და მისამართებს.</translation> <translation id="1734212868489994726">ღია ლურჯი</translation> <translation id="1734230530703461088">გაფართოებები ვერ ჩაიტვირთა განსაზღვრული დროის განმავლობაში. მიმართეთ თქვენს ადმინისტრატორს.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">ამჟამად მიმდინარეობს ჟურნალის ატვირთვა.</translation> <translation id="1819721979226826163">შეხებით აირჩიეთ: აპების შეტყობინებები > Google Play services.</translation> <translation id="1820028137326691631">შეიყვანეთ ადმინისტრატორის მიერ მოწოებული პაროლი</translation> +<translation id="182139138257690338">ავტომატური ჩამოტვირთვები</translation> <translation id="1822140782238030981">უკვე ხართ Chrome-ის მომხმარებელი? შედით სისტემაში</translation> <translation id="18245044880483936">სარეზერვო მონაცემები არ აისახება Google Drive-ზე თქვენი შვილისთვის გამოყოფილ მეხსიერების კვოტაზე.</translation> <translation id="1825565032302550710">პორტის ნომერი უნდა იყოს 1024-დან 65535-მდე</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">პროგრამის ხე&ლახლა ჩატვირთვა</translation> <translation id="2327492829706409234">პროგრამის ჩართვა</translation> <translation id="2328561734797404498"><ph name="APP_NAME" />-ის გამოსაყენებლად გადატვირთეთ მოწყობილობა.</translation> +<translation id="2329182534073751090">ფანჯრის განლაგება</translation> <translation id="2329597144923131178">შედით სისტემაში თქვენი სანიშნეების, ისტორიის, პაროლების და სხვა პარამეტრების ყველა თქვენს მოწყობილობაში მისაღებად.</translation> <translation id="2332131598580221120">მაღაზიაში ნახვა</translation> <translation id="2332192922827071008">პარამეტრების გახსნა</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">ახალი ჩანართი ჯგუფში</translation> <translation id="289644616180464099">SIM ბარათი დაბლოკილია</translation> <translation id="289695669188700754">გასაღების ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">ეს მორგებული პარამეტრი გაუქმდება, როცა ყველა ინკოგნიტო ფანჯარას დახურავთ</translation> <translation id="2897878306272793870">ნამდვილად გსურთ გახსნათ <ph name="TAB_COUNT" /> ჩანართი?</translation> <translation id="290105521672621980">ფაილი იყენებს მხარდაუჭერელ ფუნქციებს</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> ვერ უკავშირდება ამ პრინტერს. დარწმუნდით, რომ პრინტერი შეერთებულია და ისევ ცადეთ.</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">მონაცემები დაშიფრულია თქვენი სინქრონიზაციის საიდუმლო ფრაზით. აღნიშნული არ მოიცავს Google Pay-ში შენახულ გადახდის მეთოდებსა და მისამართებს.</translation> <translation id="2996722619877761919">ამობრუნება გრძელ კიდეზე</translation> <translation id="3000236644796679448">საიტებს შეუძლია თქვენი მიკროფონის გამოყენების თხოვნა (რეკომენდებული)</translation> +<translation id="3000378525979847272">დაშვებულია <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">მონო აუდიო</translation> <translation id="3001144475369593262">ბავშვების ანგარიშები</translation> <translation id="3003144360685731741">სასურველი ქსელები</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">PDF-ის გახსნა წინასწარ ხედში</translation> <translation id="3308116878371095290">ამ გვერდზე აიკრძალა ქუქი-ფაილების დაყენება.</translation> <translation id="3308134619352333507">დამალვის ღილაკი</translation> +<translation id="3308738399950580893">რეკლამა</translation> <translation id="3308852433423051161">იტვირთება Google ასისტენტი...</translation> <translation id="3309330461362844500">სერტიფიკატის პროფილის ID</translation> <translation id="3311445899360743395">ამ მოწყობილობიდან შეიძლება ამოიშალოს ამ აპთან დაკავშირებული მონაცემები.</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">ეს ფაილი დაშიფრულია. სთხოვეთ მის მფლობელს დეშიფრაცია.</translation> <translation id="3390013585654699824">აპის შესახებ</translation> <translation id="3390741581549395454">Linux აპებისა და ფაილების სარეზერვო კოპირება წარმატებით დასრულდა ახალ ვერსიაზე გადასვლა მალე დაიწყება.</translation> +<translation id="3391482648489541560">ფაილების რედაქტირება</translation> <translation id="339178315942519818">იხილეთ თქვენი ჩეთის აპების შეტყობინებები თქვენს <ph name="DEVICE_TYPE" />-ზე</translation> <translation id="3396800784455899911">ღილაკზე „დათანხმება და გაგრძელება“ დაწკაპუნებით თქვენ ეთანხმებით მოცემული Google სერვისებისთვის მონაცემების ზემოაღნიშნული წესით დამუშავებას.</translation> <translation id="3399432415385675819">შეტყობინებები გაითიშება</translation> @@ -2893,6 +2901,7 @@ <translation id="425573743389990240">აკუმულატორის დაცლის მაჩვენებელი ვატებში (უარყოფითი სიდიდე ნიშნავს იმას, რომ აკუმულატორი იტენება)</translation> <translation id="4256316378292851214">&შეინახე ვიდეო როგორც…</translation> <translation id="4258348331913189841">ფაილის სისტემები</translation> +<translation id="4259381619085088639">თქვენი დასწრება</translation> <translation id="4259388776256904261">ამას შეიძლება გარკვეული დრო დასჭირდეს</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> შეიძლება სახიფათო იყოს. გსურთ, სკანირებისთვის Google-ის დამატებით დაცვას გაუგზავნოთ? ჩამოტვირთვების ზოლის არეზე გადასასვლელად დააჭირეთ კლავიშთა შემდეგ კომბინაციას: Shift+F6.</translation> <translation id="4263223596040212967">შეამოწმეთ თქვენი კლავიატურის განლაგება და სცადეთ ხელახლა.</translation> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">დააყენეთ ახალი PIN-კოდი თქვენი უსაფრთხოების გასაღებისთვის</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" />-ში კოპირება</translation> <translation id="4306119971288449206">მოწოდებული აპების კონტენტის ტიპი უნდა იყოს „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">გაცვლის ბუფერი</translation> <translation id="4307992518367153382">ძირითადი</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K live)</translation> <translation id="4310139701823742692">ფაილის ფორმატი არასწორია. შეამოწმეთ PPD ფაილი და ცადეთ ხელახლა.</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">დახმარების ცენტრი</translation> <translation id="44141919652824029">გსურთ, „<ph name="APP_NAME" />“-მა შეძლოს დაკავშირებული USB მოწყობილობების სიაზე წვდომა?</translation> <translation id="4414232939543644979">ახალი &ინკოგნიტო ფანჯარა</translation> +<translation id="4414515549596849729">ქუქი-ჩანაწერები და საიტების მონაცემები</translation> <translation id="4415213869328311284">ყველაფერი მზადაა იმისთვის, რომ <ph name="DEVICE_TYPE" /> გამოიყენოთ.</translation> <translation id="4415245286584082850">მოწყობილობები ვერ მოიძებნა. გახსენით დახმარების ცენტრის სტატია ახალ ჩანართში.</translation> <translation id="4415276339145661267">თქვენი Google ანგარიშის მართვა</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">რეკომენდებულია (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">არ აჩვენო ამ გვერდზე</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ავარიულად გაითიშა</translation> +<translation id="4500587658229086076">დაუცველი კონტენტი</translation> <translation id="450099669180426158">ძახილის ნიშნის ხატულა</translation> <translation id="4501530680793980440">დაადასტურეთ წაშლა</translation> <translation id="4502423230170890588">ამ მოწყობილობიდან ამოშლა</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368"><ph name="HOST" />-ზე დაცულ გარემოში არმყოფი დანამატების ყოველთვის დაბლოკვა</translation> <translation id="4538792345715658285">დაყენებულია ორგანიზაციის პოლიტიკის შესაბამისად.</translation> <translation id="4541662893742891060">ამ პროფილთან დაკავშირება ვერ მოხერხდა. ტექნიკური მხარდაჭერისთვის მიმართეთ თქვენს ოპერატორს.</translation> +<translation id="4541810033354695636">აუგმენტური რეალობა</translation> <translation id="4542520061254486227">წაიკითხეთ თქვენი მონაცემები ვებსაიტებზე <ph name="WEBSITE_1" /> და <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">სერტიფიკატების მმართველი</translation> <translation id="4544174279960331769">ნაგულისხმევი ლურჯი ავატარი</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">შემ&მუშავებლის ხელსაწყოები</translation> <translation id="5113739826273394829">თუ თქვენ დააჭირეთ ამ ხატულას, თქვენ მანუალურად დაბლოკავთ ამ <ph name="DEVICE_TYPE" />. სხვა დროს, თქვენ დაგჭირდებათ პაროლის შეყვანა.</translation> <translation id="51143538739122961">მიაერთეთ თქვენი უსაფრთხოების გასაღები და შეეხეთ მას</translation> +<translation id="5114987907971894280">ვირტუალური რეალობა</translation> <translation id="5115309401544567011">გთხოვთ, დაუკავშიროთ თქვენი <ph name="DEVICE_TYPE" /> დენის წყაროს.</translation> <translation id="5115338116365931134">ერთიანი შესვლა (SSO)</translation> <translation id="5116628073786783676">&აუდიოს შენახვა, როგორც…</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">ამჯერად გაშვება</translation> <translation id="5464660706533281090">ამ პარამეტრს ბავშვი-მომხმარებელი ვერ შეცვლის.</translation> <translation id="5466374726908360271">ჩა&სმა და „<ph name="SEARCH_TERMS" />“-ის ძიება</translation> +<translation id="5467207440419968613">დაბლოკილია <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">საიტებს შეუძლია დაცული კონტენტის დაკვრის თხოვნა (რეკომენდებული)</translation> <translation id="5468173180030470402">მიმდინარეობს ფაილების გაზიარებების ძიება.</translation> <translation id="5469852975082458401">გვერდებზე ნავიგაცია ტექსტური კურსორის მეშვეობით შეგიძლიათ. გამოსართავად დააჭირეთ F7-ს.</translation> @@ -4188,6 +4203,7 @@ <translation id="5794786537412027208">Chrome-ის ყველა პროგრამის დახურვა</translation> <translation id="5797070761912323120">Google-მა შეიძლება გამოიყენოს თქვენი ისტორია Search-ის, რეკლამისა და Google-ის სხვა სერვისების თქვენზე მოსარგებად</translation> <translation id="5798301976526354562">ტექსტის ზომა (ვრცელდება ავტოსუბტიტრების ფუნქციაზეც)</translation> +<translation id="579907812742603813">დაცული კონტენტი</translation> <translation id="579915268381781820">თქვენი უსაფრთხოების გასაღები ამოღებულია.</translation> <translation id="5799508265798272974">ვირტუალური Linux მოწყობილობა: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">დანიშნულების ფაილი არასრულია ან წაიშალა ბოლო ჩამოტვირთვის შემდეგ.</translation> @@ -4261,6 +4277,7 @@ <translation id="5877064549588274448">არხი შეიცვალა. გადატვირთეთ მოწყობილობა ცვლილებების გამოსაყენებლად.</translation> <translation id="5877584842898320529">არჩეული პრინტერი მიუწვდომელია ან სწორად არ არის დაინსტალირებული. <ph name="BR" /> შეამოწმეთ პრინტერი ან ცადეთ სხვა პრინტერის არჩევა.</translation> <translation id="5882919346125742463">ცნობილი ქსელები</translation> +<translation id="5883356647197510494">ავტომატურად დაბლოკილია <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">ეს ჩანართი USB მოწყობილობასთან არის დაკავშირებული.</translation> <translation id="5886009770935151472">თითის ანაბეჭდი 1</translation> <translation id="5889282057229379085">შუალედური CA-ების მაქსიმალური რაოდენობა: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4760,6 +4777,7 @@ <translation id="6460601847208524483">შემდეგის ძებნა</translation> <translation id="6461170143930046705">მიმდინარეობს ქსელების ძიება…</translation> <translation id="6463795194797719782">&რედაქტირება</translation> +<translation id="6464094930452079790">სურათები</translation> <translation id="6464825623202322042">ეს მოწყობილობა</translation> <translation id="6465841119675156448">ინტერნეტის გარეშე</translation> <translation id="6466988389784393586">ყველა სანიშნის &გახსნა</translation> @@ -4783,6 +4801,7 @@ <translation id="6491376743066338510">ავტორიზაცია ვერ განხორციელდა</translation> <translation id="6494327278868541139">გაძლიერებული დაცვის დეტალების ჩვენება</translation> <translation id="6494445798847293442">არ წამოადგენს სერტიფიცირების ცენტრს</translation> +<translation id="6494750904506170417">ამომხტარი ფანჯრები და გადამისამართებები</translation> <translation id="6494974875566443634">მორგება</translation> <translation id="6495925982925244349">ქსელი <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />-დან, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, სიგნალის სიძლიერე: <ph name="SIGNAL_STRENGTH" />%, მართავს თქვენი ადმინისტრატორი, დეტალები</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{ეს მონაცემები შეიცავს სენსიტიურ ან სახიფათო კონტენტს}=1{ეს ფაილი შეიცავს სენსიტიურ ან სახიფათო კონტენტს}other{ეს ფაილები შეიცავს სენსიტიურ ან სახიფათო კონტენტს}}</translation> @@ -4923,6 +4942,7 @@ <translation id="6657585470893396449">პაროლი</translation> <translation id="6659213950629089752">ეს გვერდი მასშტაბირებულია „<ph name="NAME" />“ გაფართოების მიერ</translation> <translation id="6659594942844771486">ჩანართი</translation> +<translation id="6660413144148052430">მდებარეობა</translation> <translation id="666099631117081440">ბეჭდვის სერვერები</translation> <translation id="6663190258859265334">ჩაუტარეთ Powerwash თქვენს <ph name="DEVICE_TYPE" />-ს და დაბრუნდით წინა ვერსიაზე.</translation> <translation id="6664237456442406323">სამწუხაროდ, თქვენი კომპიუტერი კონფიგურირებულია დეფორმირებული აპარატურის ID-თი. ეს ხელს უშლის Chrome OS-ის განახლებას უსაფრთხოების უახლესი გამოსწორებებით და თქვენი კომპიუტერი <ph name="BEGIN_BOLD" />შეიძლება გახდეს მავნე პროგრამების მიერ განხორციელებული შეტევების ობიექტი<ph name="END_BOLD" />.</translation> @@ -4977,6 +4997,7 @@ <translation id="672609503628871915">ნახეთ სიახლეებირა სიახლეა</translation> <translation id="67269783048918309">გამოყენებისა და დიაგნოსტიკის მონაცემების გაგზავნა. ეს მოწყობილობა ამჟამად ავტომატურად უგზავნის Google-ს დიაგნოსტიკისა და მოწყობილობის/აპების გამოყენების მონაცემებს. აღნიშნული მონაცემები არ იქნება გამოყენებული თქვენი შვილის ვინაობის დასადგენად, არამედ დაგვეხმარება სისტემის/აპების სტაბილურობისა და სხვა ფუნქციების გაუმჯობესებაში. გარდა ამისა, გაერთიანებული მონაცემების ნაწილი ხელს შეუწყობს Google აპებსა და პარტნიორებს, მაგალითად, Android-ის დეველოპერებს. ეს <ph name="BEGIN_LINK1" />პარამეტრი<ph name="END_LINK1" /> არის იძულებით გააქტიურებული მფლობელის მიერ. თუ თქვენი შვილისთვის ჩართულია ვებსა და აპებში დამატებითი აქტივობის პარამეტრი, აღნიშნული მონაცემები შესაძლოა შეინახოს მის Google ანგარიშში. <ph name="BEGIN_LINK2" />შეიტყვეთ მეტი<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">დაკავშირებულია, ბატარეის დონეა <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">კამერა</translation> <translation id="6732801395666424405">სერტიფიკატები ვერ ჩაიტვირთა</translation> <translation id="6732900235521116609">მალსახმობის ამოშლა ვერ მოხერხდა</translation> <translation id="6734468588183300211">ინკოგნიტო რეჟიმში საიტები ვერ გამოიყენებს თქვენს ქუქი-ჩანაწერებს სხვადასხვა ვებსაიტის დათვალიერების აქტივობაზე წვდომისთვის, მაგალითად, რეკლამის პერსონალიზების მიზნით. ზოგიერთი საიტის ფუნქციებმა შეიძლება არასათანადოდ იმუშაოს.</translation> @@ -5051,6 +5072,7 @@ <translation id="6817174620439930047">შეკითხვა, როცა საიტს MIDI მოწყობილობებზე წვდომისთვის სისტემის ექსკლუზიური შეტყობინების გამოყენება სურს (რეკომენდებულია)</translation> <translation id="6818198425579322765">სათარგმნი გვერდის ენა</translation> <translation id="6818802132960437751">ვირუსებისგან ჩაშენებული დაცვა</translation> +<translation id="6820143000046097424">თანმიმდევრული პორტები</translation> <translation id="682123305478866682">დესკტოპის ტრანსლირება</translation> <translation id="6823174134746916417">სენსორული პანელზე შეხებით დაწკაპუნება</translation> <translation id="6824564591481349393">&ელფოსტის მისამართის კოპირება</translation> @@ -5484,6 +5506,7 @@ <translation id="730515362922783851">ლოკალურ ქსელში თუ ინტერნეტში არსებულ ნებისმიერ მოწყობილობასთან მონაცემთა მიმოცვლა</translation> <translation id="7306521477691455105">გახსენით პარამეტრები, <ph name="USB_DEVICE_NAME" /> რომ <ph name="USB_VM_NAME" />-თან დააკავშიროთ</translation> <translation id="7307129035224081534">დაპაუზებულია</translation> +<translation id="7308436126008021607">ფონური სინქრონიზაცია</translation> <translation id="7309257895202129721">ჩვენება &კონტროლი</translation> <translation id="7310598146671372464">შესვლა ვერ მოხერხდა. Kerberos დაშიფვრის მითითებული ტიპები მხარდაუჭერელია სერვერის მიერ. დაუკავშირდით თქვენს ადმინისტრატორს.</translation> <translation id="7320213904474460808">ნაგულისხმევი ქსელი</translation> @@ -5625,6 +5648,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{საჭიროა დაუყოვნებლივ დაბრუნება}other{დააბრუნეთ <ph name="DEVICE_TYPE" /> {NUM_DAYS} დღის განმავლობაში}}</translation> <translation id="7475671414023905704">Netscape URL-ის დაკარგული პაროლი</translation> <translation id="7476454130948140105">ბატარეა არასაკმარისად დამუხტულია განახლებისთვის (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">ავტომატურად დაბლოკილია <ph name="PERMISSION" /> და <ph name="COUNT" /> სხვა</translation> <translation id="7477793887173910789">მართეთ თქვენი მუსიკა, ვიდეოები და სხვა</translation> <translation id="7478485216301680444">ვერ ხერხდება კიოსკის პროგრამის დაინსტალირება.</translation> <translation id="7478623944308207463">თქვენი აპები და პარამეტრები სინქრონიზებული იქნება თქვენს ყველა Chrome OS მოწყობილობასთან, რომელზეც შესული ხართ თქვენი Google ანგარიშით. ბრაუზერის სინქრონიზაციის ვარიანტების სანახავად გადადით <ph name="LINK_BEGIN" />Chrome-ის პარამეტრებზე<ph name="LINK_END" />.</translation> @@ -6367,6 +6391,7 @@ <translation id="8288032458496410887"><ph name="APP" />-ის დეინსტალაცია...</translation> <translation id="8289128870594824098">დისკის ზომა</translation> <translation id="8293206222192510085">სანიშნის დამატება</translation> +<translation id="829335040383910391">ხმა</translation> <translation id="8294431847097064396">წყარო</translation> <translation id="8298429963694909221">ამიერიდან შეგიძლიათ მიიღოთ შეტყობინებები თქვენი ტელეფონიდან თქვენს <ph name="DEVICE_TYPE" />-ზე. თქვენს <ph name="DEVICE_TYPE" />-ზე შეტყობინებების დახურვის შემთხვევაში, ისინი ტელეფონზეც დაიხურება. დარწმუნდით, რომ ტელეფონი ახლოს გაქვთ და მასზე ჩართულია Bluetooth/Wi-Fi.</translation> <translation id="8299319456683969623">თქვენ ამჟამად ოფლაინში ხართ.</translation> @@ -6385,6 +6410,7 @@ <translation id="8317671367883557781">ქსელის კავშირის დამატება</translation> <translation id="8319414634934645341">გაფართოებული კოდის გამოყენება</translation> <translation id="8320459152843401447">მთლიანი ეკრანი</translation> +<translation id="8321476692217554900">შეტყობინებები</translation> <translation id="8321837372750396788">ამ <ph name="DEVICE_TYPE" />-ის მმართველი იქნება <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">წვდომა თქვენს მიკროფონზე ამ გვერდიდან დაიბლოკა.</translation> <translation id="8323167517179506834">აკრიფეთ URL</translation> @@ -6450,7 +6476,9 @@ <translation id="8403562727702715619">ბოლო დროს Google Drive-იდან</translation> <translation id="8407199357649073301">ჟურნალირების დონე:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ქსელი, მიმდინარეობს დაკავშირება</translation> +<translation id="8409413588194360210">გადახდის დამმუშავებლები</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">დაშვებულია <ph name="PERMISSION" /> და <ph name="COUNT" /> სხვა</translation> <translation id="8413385045638830869">ჯერ მკითხეთ (რეკომენდებულია)</translation> <translation id="8417548266957501132">მშობლის პაროლი</translation> <translation id="8418445294933751433">ჩ&ვენება ჩანართის სახით</translation> @@ -6646,6 +6674,7 @@ <translation id="8648252583955599667">ცადეთ <ph name="GET_HELP_LINK" /> ან <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">ღამის განათების ფერის ტემპერატურა</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" />-ს სურს: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> და სხვა</translation> +<translation id="865032292777205197">მოძრაობის სენსორები</translation> <translation id="8650543407998814195">ძველ პროფილზე წვდომის არქონის მიუხედავად, შეგიძლიათ მისი ამოშლა.</translation> <translation id="8651585100578802546">ამ გვერდის ხელახლა ჩატვირთვის იძულება</translation> <translation id="8652400352452647993">პაკეტის გაფართოების შეცდომა</translation> @@ -6782,6 +6811,7 @@ <translation id="8785622406424941542">სტილუსი</translation> <translation id="8787254343425541995">პროქსების გამოყენება გაზიარებული ქსელებისთვის</translation> <translation id="8791534160414513928">თქვენი ბრაუზერის საშუალებით „არ მიაკვლიო“ მოთხოვნის გაგზავნა</translation> +<translation id="8792626944327216835">მიკროფონი</translation> <translation id="879413103056696865">უსადენო ქსელის ჩართვისას თქვენს <ph name="PHONE_NAME" />-ში მოხდება:</translation> <translation id="8795916974678578410">ახალი ფანჯარა</translation> <translation id="8797459392481275117">არასოდეს ითარგმნოს ეს საიტი</translation> @@ -6821,6 +6851,7 @@ <translation id="8823559166155093873">ქუქი-ჩანაწერების დაბლოკვა</translation> <translation id="8823704566850948458">პაროლის შემოთავაზება...</translation> <translation id="8824701697284169214">გვ&ერდის დამატება...</translation> +<translation id="8827125715368568315">დაბლოკილია <ph name="PERMISSION" /> და <ph name="COUNT" /> სხვა</translation> <translation id="8827289157496676362">გაფართოების ჩამაგრება</translation> <translation id="8827752199525959199">სხვა ქმედებები, <ph name="USERNAME" />-ის პაროლი <ph name="DOMAIN" />-ზე</translation> <translation id="882854468542856424">საიტებისთვის ახლომდებარე Bluetooth მოწყობილობების აღმოჩენის აკრძალვა</translation> @@ -6921,6 +6952,7 @@ <translation id="8932894639908691771">გადამრთველით წვდომის ვარიანტები</translation> <translation id="8933960630081805351">ჩ&ვენება მაძიებელში</translation> <translation id="8934732568177537184">გაგრძელება</translation> +<translation id="8938306522009698937">დამმუშავებლები</translation> <translation id="8938800817013097409">USB-C მოწყობილობა (უკან მდებარე მარჯვენა პორტი)</translation> <translation id="8940081510938872932">თქვენს კომპიუტერი ძალიან ბევრ რამეს აკეთებს ახლა. სცადეთ მოგვიანებით.</translation> <translation id="8941173171815156065">ნებართვის „<ph name="PERMISSION" />“ გაუქმება</translation> @@ -7225,6 +7257,7 @@ <translation id="987264212798334818">ზოგადი</translation> <translation id="987897973846887088">სურათები მიუწვდომელია</translation> <translation id="988978206646512040">ცარიელი საიდუმლო ფრაზის გამოყენება დაუშვებელია</translation> +<translation id="991413375315957741">მოძრაობის ან განათების სენსორები</translation> <translation id="992032470292211616">გაფართოებებმა, პროგრამებმა და თემებმა შეიძლება დააზიანოს თქვენი მოწყობილობა. ნამდვილად გსურთ გააგრძელოთ?</translation> <translation id="992256792861109788">ვარდისფერი</translation> <translation id="992592832486024913">ChromeVox-ის გამორთვა (ხმოვანი შეფასება)</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 656d35c..3e77c03a 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -424,6 +424,7 @@ <translation id="1465827627707997754">Пицца тілімі</translation> <translation id="1468571364034902819">Бұл профильді пайдалану мүмкін емес</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{Жаңа топқа қойынды қосу}other{Жаңа топқа қойындылар қосу}}</translation> +<translation id="1470350905258700113">Осы құрылғыны пайдалану</translation> <translation id="1470946456740188591">Перне арқылы қозғалу функциясын қосу немесе өшіру үшін Ctrl+Search+7 пернелер тіркесімін пайдаланыңыз.</translation> <translation id="1472675084647422956">Толығырақ көрсету</translation> <translation id="1474785664565228650">Микрофонның параметріне өзгеріс енгізілгендіктен, Parallels Desktop қайта іске қосылуы қажет. Жалғастыру үшін Parallels Desktop қолданбасын қайта іске қосыңыз.</translation> @@ -1395,6 +1396,7 @@ <translation id="2541002089857695151">Толық экран трансляциясын оңтайландыру керек пе?</translation> <translation id="2541706104884128042">Жаңа ұйықтау уақыты орнатылды.</translation> <translation id="2542050502251273923">ff_debug арқылы желі байланысы менеджерін және басқа да қызметтердің түзету деңгейін орнатады.</translation> +<translation id="2544292303401268586">Әкімшіңіз қолданбаларды жаңарту үшін құрылғыны өшіріп қосуды сұрады. Ол бірнеше минутқа созылуы мүмкін.</translation> <translation id="2544853746127077729">Желі аутентификация сертификатын қабылдамады</translation> <translation id="2546283357679194313">Cookie файлдары және торап деректері</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> пайдалануға рұқсат берілді.</translation> @@ -2777,6 +2779,7 @@ <translation id="409579654357498729">Cloud Print қызметіне қосу</translation> <translation id="4096508467498758490">Әзірлеуші режимі кеңейтімдерін өшіру</translation> <translation id="4097406557126260163">Қолданбалар және кеңейтімдер</translation> +<translation id="409742781329613461">Chrome браузеріне қатысты кеңестер</translation> <translation id="4097560579602855702">Google-дан іздеу</translation> <translation id="4098667039111970300">Құралдар тақтасындағы стилус құралдары</translation> <translation id="4099060993766194518">Әдепкі іздеу жүйесі қалпына келтірілсін бе?</translation> @@ -4086,6 +4089,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> оқу және жазу рұқсаты берілген.</translation> <translation id="5678955352098267522">Деректеріңізді <ph name="WEBSITE_1" /> торабынан оқу</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" өшірілсін бе?</translation> +<translation id="5683806393796685434">Белсендіру кодын енгізіңіз</translation> <translation id="5684181005476681636">Wi-Fi мәліметтері</translation> <translation id="5684661240348539843">Актив идентификаторы</translation> <translation id="5687326903064479980">Уақыт белдеуі</translation> @@ -4337,6 +4341,7 @@ <translation id="5978277834170881274">&Негізгі емле тексеру құралын пайдалану</translation> <translation id="5979084224081478209">Құпия сөздерді тексеру</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{Зиянды болуы мүмкін 1 кеңейтімді қайта іске қостыңыз.}other{Зиянды болуы мүмкін {NUM_EXTENSIONS} кеңейтімді қайта іске қостыңыз.}}</translation> +<translation id="5979353814339191480">Бұл опция мобильдік интернет тарифі немесе мобильдік интернеті бар Chromebooks құрылғыларына немесе портативтік хотспотқа қосылған кезде қолданылады.</translation> <translation id="5979421442488174909">&<ph name="LANGUAGE" /> тіліне аудару</translation> <translation id="5979469435153841984">Беттерге бетбелгі қою үшін мекенжай жолағындағы жұлдызшаны түртіңіз</translation> <translation id="5984222099446776634">Соңғы кірілген</translation> @@ -4816,6 +4821,7 @@ <translation id="653659894138286600">Құжаттар мен суреттерді сканерлеу</translation> <translation id="6537613839935722475">Атауда әріптерді, сандарды және сызықшаларды (-) пайдалануға болады.</translation> <translation id="6537880577641744343">Commander</translation> +<translation id="6538098297809675636">Кодты анықтау кезінде қате шықты</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Ескертпе:<ph name="END_BOLD" /> не істеп жатқаныңызды білсеңіз немесе сізден орындауды сұраған болса ғана қосыңыз, себебі деректерді жинақтау өнімділікті нашарлатуы мүмкін.</translation> <translation id="6541638731489116978">Бұл сайттың қозғалыс датчиктеріңізді пайдалануына тыйым салынды.</translation> <translation id="6545665334409411530">Қайталау жиілігі</translation> @@ -6012,6 +6018,7 @@ <translation id="7904526211178107182">Linux порттарын желідегі басқа құрылғыларға қолжетімді етіңіз.</translation> <translation id="7907837847548254634">Ерекшеленген нысанды жақсырақ көрінетіндей бөлектеу</translation> <translation id="7908378463497120834">Кешіріңіз, сыртқы жад құрылғыңыздағы кемінде бір бөлімді орнату мүмкін емес.</translation> +<translation id="7909324225945368569">Профиліңіздің атын өзгертіңіз.</translation> <translation id="7909969815743704077">Инкогнито режимінде жүктелген</translation> <translation id="7910768399700579500">&Жаңа қалта</translation> <translation id="7911118814695487383">Linux</translation> @@ -6628,6 +6635,7 @@ <translation id="8642900771896232685">2 секунд</translation> <translation id="8642947597466641025">Мәтінді үлкейту</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> қауіпті болуы мүмкін. Сканерлеу үшін Google Күшейтілген қорғаныс қызметіне жіберілсін бе?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{Ешқандай cookie файлы жоқ}=1{1 cookie файлы бөгелді}other{# cookie файлы бөгелді}}</translation> <translation id="8644655801811752511">Қауіпсіздік кілтін бастапқы күйіне қайтару мүмкін емес. Кілтті енгізгеннен кейін, дереу бастапқы қалпына қайтарып көріңіз.</translation> <translation id="8645354835496065562">Датчиктерді пайдалану рұқсатын беруді тоқтатпау</translation> <translation id="8645920082661222035">Қауіпті іс-шараларды алдын ала болжайды және олар туралы хабарлайды.</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index 24d552ee..a1f6f370 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">លំនាំដើម</translation> <translation id="1252987234827889034">ប្រវត្តិរូបមានបញ្ហា</translation> <translation id="1254593899333212300">ការភ្ជាប់អ៊ីនធឺណិតផ្ទាល់</translation> +<translation id="1257553931232494454">កម្រិតពង្រីកបង្រួម</translation> <translation id="1259152067760398571">ការពិនិត្យសុវត្ថិភាពបានដំណើរការម្សិលមិញ</translation> <translation id="1260451001046713751">អនុញ្ញាតផ្ទាំងផុស និងការបញ្ជូនបន្តពី <ph name="HOST" /> ជានិច្ច</translation> <translation id="1261380933454402672">ល្មម</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">វាក៏គ្រប់គ្រងអ្វីដែលទំព័របានបង្ហាញផងដែរ នៅពេលអ្នកស្វែងរកពីប្រអប់អូមនី។</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />ដើម្បីលុបកម្មវិធី សូមចូលទៅកាន់ការកំណត់ > Google Play Store > គ្រប់គ្រងចំណូលចិត្ត Android > កម្មវិធី ឬកម្មវិធីគ្រប់គ្រងកម្មវិធី។ បន្ទាប់មកចុចកម្មវិធីដែលអ្នកចង់លុប (អ្នកអាចនឹងត្រូវអូសទៅស្តាំ ឬទៅឆ្វេងដើម្បីស្វែងរកកម្មវិធីនោះ)។ បន្ទាប់មកចុចលុប ឬបិទ។<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">កំពុងផ្ញើសំណើរ...</translation> +<translation id="1733064249834771892">ពុម្ពអក្សរ</translation> <translation id="1733383495376208985">អ៊ីនគ្រីបទិន្នន័យដែលបានធ្វើសមកាលកម្ម ដោយប្រើ<ph name="BEGIN_LINK" />ឃ្លាសម្ងាត់សមកាលកម្ម<ph name="END_LINK" />ផ្ទាល់ខ្លួនរបស់អ្នក។ ការអ៊ីនគ្រីបនេះមិនរួមបញ្ចូលអាសយដ្ឋាន និងវិធីបង់ប្រាក់ពី Google Pay ទេ។</translation> <translation id="1734212868489994726">ខៀវខ្ចី</translation> <translation id="1734230530703461088">មិនអាចផ្ទុកកម្មវិធីបន្ថែមក្នុងរយៈពេលកំណត់បានទេ។ សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">កំពុងបង្ហោះកំណត់ហេតុ។</translation> <translation id="1819721979226826163">ចុចការជូនដំណឹងកម្មវិធី > សេវាកម្ម Google Play ។</translation> <translation id="1820028137326691631">បញ្ចូលពាក្យសម្ងាត់ដែលផ្ដល់ដោយអ្នកគ្រប់គ្រង</translation> +<translation id="182139138257690338">ការទាញយកដោយស្វ័យប្រវត្តិ</translation> <translation id="1822140782238030981">ជាអ្នកប្រើប្រាស់ Chrome ហើយមែនទេ? សូមចូលគណនី</translation> <translation id="18245044880483936">ទិន្នន័យបម្រុងទុកនឹងមិនរាប់បញ្ចូលទៅក្នុងកម្រិតកំណត់នៃទំហំផ្ទុកថាសរបស់កូនអ្នកទេ។</translation> <translation id="1825565032302550710">ច្រកត្រូវតែនៅចន្លោះពី 1024 ទៅ 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">ដំណើរការកម្មវិធីឡើងវិញ</translation> <translation id="2327492829706409234">បើកដំណើរការកម្មវិធី</translation> <translation id="2328561734797404498">សូមចាប់ផ្តើមឧបករណ៍របស់អ្នកឡើងវិញ ដើម្បីប្រើ <ph name="APP_NAME" />។</translation> +<translation id="2329182534073751090">ការដាក់វិនដូ</translation> <translation id="2329597144923131178">ចូលគណនីដើម្បីទទួលយកចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងការកំណត់ផ្សេងទៀតរបស់អ្នកទៅលើឧបករណ៍ទាំងអស់របស់អ្នក។</translation> <translation id="2332131598580221120">មើលនៅក្នុងហាង</translation> <translation id="2332192922827071008">បើកចំណូលចិត្ត</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">ផ្ទាំងថ្មីនៅក្នុងក្រុម</translation> <translation id="289644616180464099">ស៊ីមកាតជាប់សោ</translation> <translation id="289695669188700754">លេខសម្គាល់សោ៖ <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">ការកំណត់ផ្ទាល់ខ្លួននេះនឹងត្រូវបានលុបចេញ នៅពេលដែលអ្នកបិទផ្ទាំងឯកជនទាំងអស់របស់អ្នក</translation> <translation id="2897878306272793870">តើអ្នកប្រាកដថាចង់បើក <ph name="TAB_COUNT" /> ផ្ទាំងទេ?</translation> <translation id="290105521672621980">ឯកសារប្រើប្រាស់មុខងារដែលមិនស្គាល់</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> មិនអាចទាក់ទងជាមួយម៉ាស៊ីនបោះពុម្ពនេះបានទេ។ សូមប្រាកដថាម៉ាស៊ីនបោះពុម្ពនេះបានភ្ជាប់យ៉ាងត្រឹមត្រូវ ហើយព្យាយាមម្តងទៀត។</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">ទិន្នន័យត្រូវបានអ៊ីនគ្រីបដោយប្រើឃ្លាសម្ងាត់សមកាលកម្មរបស់អ្នក។ ការអ៊ីនគ្រីបនេះមិនរួមបញ្ចូលអាសយដ្ឋាន និងវិធីបង់ប្រាក់ពី Google Pay ទេ។</translation> <translation id="2996722619877761919">ត្រឡប់នៅលើគែមខ្លី</translation> <translation id="3000236644796679448">គេហទំព័រអាចស្នើសុំប្រើមីក្រូហ្វូនរបស់អ្នក (បានណែនាំ)</translation> +<translation id="3000378525979847272">បានអនុញ្ញាត <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">សំឡេងម៉ូណូ</translation> <translation id="3001144475369593262">គណនីកូន</translation> <translation id="3003144360685731741">បណ្តាញដែលចូលចិត្ត</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">បើក PDF នៅក្នុងការពិនិត្យមើល</translation> <translation id="3308116878371095290">ទំព័រនេះត្រូវបានបង្ការពីការកំណត់ខុកឃី។</translation> <translation id="3308134619352333507">ប៊ូតុងលាក់</translation> +<translation id="3308738399950580893">ការផ្សាយពាណិជ្ជកម្ម</translation> <translation id="3308852433423051161">កំពុងផ្ទុក Google ជំនួយការ...</translation> <translation id="3309330461362844500">លេខសម្គាល់កម្រងព័ត៌មានវិញ្ញាបនបត្រ</translation> <translation id="3311445899360743395">ទិន្នន័យដែលពាក់ព័ន្ធនឹងកម្មវិធីនេះអាចត្រូវបានលុបចេញពីឧបករណ៍នេះ។</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">ឯកសារនេះត្រូវបានអ៊ីនគ្រីប។ សូមស្នើឱ្យម្ចាស់ឯកសារនេះឱ្យធ្វើការឌិគ្រីប។</translation> <translation id="3390013585654699824">ព័ត៌មានលម្អិតអំពីកម្មវិធី</translation> <translation id="3390741581549395454">បានបម្រុងទុកកម្មវិធី និងឯកសារ Linux ដោយជោគជ័យហើយ។ ការដំឡើងកំណែនឹងចាប់ផ្ដើមក្នុងពេលបន្តិចទៀតនេះ។</translation> +<translation id="3391482648489541560">ការកែឯកសារ</translation> <translation id="339178315942519818">មើលការជូនដំណឹងពីកម្មវិធីជជែករបស់អ្នកនៅលើ <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">ប្រសិនបើចុចប៊ូតុង "យល់ព្រម រួចបន្ត" មានន័យថាអ្នកយល់ព្រមតាមការដំណើរការដែលបានពណ៌នាខាងលើសម្រាប់សេវាកម្ម Google ទាំងនេះ។</translation> <translation id="3399432415385675819">ការជូនដំណឹងនឹងត្រូវបានបិទ</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">កម្រិតទាញយកថាមពលជាវ៉ាត់ (តម្លៃអវិជ្ជមាន មានន័យថ្មកំពុងសាក)</translation> <translation id="4256316378292851214">រក្សាទុកវីដេអូជា...</translation> <translation id="4258348331913189841">ប្រព័ន្ធឯកសារ</translation> +<translation id="4259381619085088639">វត្តមានរបស់អ្នក</translation> <translation id="4259388776256904261">អាចចំណាយពេលបន្តិច</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> អាចបង្កគ្រោះថ្នាក់។ ផ្ញើទៅកម្មវិធីការពារកម្រិតខ្ពស់របស់ Google ដើម្បីស្កេនឬ? សូមចុច Shift+F6 ដើម្បីប្ដូរទៅផ្នែករបារទាញយក។</translation> <translation id="4263223596040212967">ពិនិត្យមើលប្លង់ក្ដារចុចរបស់អ្នក រួចព្យាយាមម្ដងទៀត។</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">រៀបចំកូដ PIN ថ្មីសម្រាប់សោសុវត្ថិភាពរបស់អ្នក</translation> <translation id="4305402730127028764">ចម្លងទៅ <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">កម្មវិធីត្រូវបានផ្ដល់ជាប្រភេទខ្លឹមសារ "<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">ឃ្លីបបត</translation> <translation id="4307992518367153382">មូលដ្ឋាន</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation> <translation id="4310139701823742692">ឯកសារមានទម្រង់ខុស។ សូមពិនិត្យមើលឯកសារ PPD រួចព្យាយាមម្តងទៀត។</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">មជ្ឈមណ្ឌលជំនួយ</translation> <translation id="44141919652824029">អនុញ្ញាតឱ្យ "<ph name="APP_NAME" />" ទទួលបានបញ្ជីឧបករណ៍ USB ដែលបានភ្ជាប់របស់អ្នកមែនទេ?</translation> <translation id="4414232939543644979">ផ្ទាំងអនាមិកថ្មី</translation> +<translation id="4414515549596849729">ទិន្នន័យគេហទំព័រ និងខូគី</translation> <translation id="4415213869328311284">អ្នកអាចចាប់ផ្តើមប្រើ <ph name="DEVICE_TYPE" /> របស់អ្នកបានហើយ។</translation> <translation id="4415245286584082850">រកមិនឃើញឧបករណ៍ទេ។ សូមបើកមើលអត្ថបទមជ្ឈមណ្ឌលជំនួយនៅក្នុងផ្ទាំងថ្មី។</translation> <translation id="4415276339145661267">គ្រប់គ្រងគណនី Google របស់អ្នក</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">បានណែនាំ (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">កុំបង្ហាញនៅលើទំព័រនេះ</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> បានគាំង</translation> +<translation id="4500587658229086076">ខ្លឹមសារដែលគ្មានសុវត្ថិភាព</translation> <translation id="450099669180426158">រូបតំណាងសញ្ញាឧទាន</translation> <translation id="4501530680793980440">អះអាងការដកចេញ</translation> <translation id="4502423230170890588">លុបចេញពីឧបករណ៍នេះ</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">រារាំងកម្មវិធីជំនួយដែលមិនបានសេនបក់នៅលើ <ph name="HOST" /> ជានិច្ច</translation> <translation id="4538792345715658285">បានដំឡើងដោយគោលការណ៍សហគ្រាស</translation> <translation id="4541662893742891060">មិនអាចភ្ជាប់ជាមួយកម្រងព័ត៌មាននេះបានទេ។ ដើម្បីទទួលបានជំនួយបច្ចេកទេស សូមទាក់ទងក្រុមហ៊ុនសេវាទូរសព្ទរបស់អ្នក។</translation> +<translation id="4541810033354695636">AR</translation> <translation id="4542520061254486227">អានទិន្នន័យរបស់អ្នកនៅលើ <ph name="WEBSITE_1" /> និង <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">កម្មវិធីគ្រប់គ្រងវិញ្ញាបនប័ត្រ</translation> <translation id="4544174279960331769">រូបតំណាងពណ៌ខៀវលំនាំដើម</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">ឧបករណ៍អ្នកអភិវឌ្ឍន៍</translation> <translation id="5113739826273394829">ប្រសិនបើអ្នកចុចរូបតំណាងនេះ អ្នកនឹងចាក់សោ <ph name="DEVICE_TYPE" /> នេះដោយដៃ។ នៅពេលបន្ទាប់ អ្នកត្រូវវាយបញ្ចូលពាក្យសម្ងាត់ដើម្បីចូល។</translation> <translation id="51143538739122961">ដោតបញ្ចូលសោសុវត្ថិភាពរបស់អ្នក រួចចុចវា</translation> +<translation id="5114987907971894280">VR</translation> <translation id="5115309401544567011">សូមដោត <ph name="DEVICE_TYPE" /> របស់អ្នកទៅប្រភពថាមពល។</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">រក្សាទុកសម្លេងជា...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">ដំណើរការពេលនេះ</translation> <translation id="5464660706533281090">អ្នកប្រើប្រាស់ដែលជាកុមារមិនអាចផ្លាស់ប្ដូរការកំណត់នេះបានទេ។</translation> <translation id="5466374726908360271">ដាក់ចូល ហើយស្វែងរក “<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">បានទប់ស្កាត់ <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">គេហទំព័រអាចស្នើសុំចាក់ខ្លឹមសារដែលមានការការពារ (បានណែនាំ)</translation> <translation id="5468173180030470402">កំពុងរកមើលឧបករណ៍ចែករំលែកឯកសារ</translation> <translation id="5469852975082458401">អ្នកអាចរុករកទំព័រដោយប្រើទស្សន៍ទ្រនិចអក្សរ។ សូមចុច F7 ដើម្បីបិទ។</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">ចាកចេញពីកម្មវិធី Chrome ទាំងអស់</translation> <translation id="5797070761912323120">Google អាចនឹងប្រើប្រវត្តិរបស់អ្នក ដើម្បីធ្វើឱ្យការស្វែងរក ការផ្សាយពាណិជ្ជកម្ម និងសេវាកម្ម Google ផ្សេងទៀតស្របនឹងអ្នក</translation> <translation id="5798301976526354562">ទំហំអក្សរ (ក៏ប្រើសម្រាប់អក្សររត់ក្នុងពេលជាក់ស្ដែងផងដែរ)</translation> +<translation id="579907812742603813">ខ្លឹមសារដែលមានការការពារ</translation> <translation id="579915268381781820">សោសុវត្ថិភាពរបស់អ្នកត្រូវបានដកចេញ។</translation> <translation id="5799508265798272974">ម៉ាស៊ីននិម្មិត Linux៖ <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">ឯកសារគោលដៅត្រូវបានបង្រួម ឬដកចេញចាប់តាំងពីការទាញយកចុងក្រោយ។</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">បានប្តូរបណ្តាញ។ ចាប់ផ្តើមឧបករណ៍របស់អ្នកឡើងវិញដើម្បីអនុវត្តការប្តូរ។</translation> <translation id="5877584842898320529">មិនមានម៉ាស៊ីនបោះពុម្ពដែលបានជ្រើសរើស ឬវាមិនត្រូវបានដំឡើងដោយត្រឹមត្រូវទេ។ <ph name="BR" />សូមពិនិត្យមើលម៉ាស៊ីនបោះពុម្ពរបស់អ្នក ឬសាកល្បងជ្រើសរើសម៉ាស៊ីនបោះពុម្ពផ្សេងទៀត។</translation> <translation id="5882919346125742463">បណ្តាញដែលស្គាល់</translation> +<translation id="5883356647197510494">បានទប់ស្កាត់ <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ដោយស្វ័យប្រវត្តិ</translation> <translation id="5884474295213649357">ផ្ទាំងនេះត្រូវបានភ្ជាប់ទៅឧបករណ៍ USB</translation> <translation id="5886009770935151472">ម្រាមដៃទី 1</translation> <translation id="5889282057229379085">ចំនួនអតិបរមានៃ CAs អន្តរការី៖ <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">ស្វែងរកបន្ទាប់</translation> <translation id="6461170143930046705">កំពុងស្វែងរកបណ្ដាញ...</translation> <translation id="6463795194797719782">កែប្រែ</translation> +<translation id="6464094930452079790">រូបភាព</translation> <translation id="6464825623202322042">ឧបករណ៍នេះ</translation> <translation id="6465841119675156448">ដោយគ្មានអ៊ីនធឺណិត</translation> <translation id="6466988389784393586">បើកចំណាំទាំងអស់</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">ការផ្ទៀងផ្ទាត់បានបរាជ័យ</translation> <translation id="6494327278868541139">បង្ហាញព័ត៌មានលម្អិតអំពីការការពារដែលប្រសើរជាងមុន</translation> <translation id="6494445798847293442">មិនមែនជាអាជ្ញាធរវិញ្ញាបនបត្រទេ</translation> +<translation id="6494750904506170417">ផ្ទាំងលោតឡើង និងការបញ្ជូនបន្ត</translation> <translation id="6494974875566443634">ការប្ដូរតាមបំណង</translation> <translation id="6495925982925244349">បណ្ដាញ <ph name="NETWORK_INDEX" /> នៃ <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, កម្លាំងរលកសញ្ញា <ph name="SIGNAL_STRENGTH" />%, គ្រប់គ្រងដោយអ្នកគ្រប់គ្រងរបស់អ្នក, ព័ត៌មានលម្អិត</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{ទិន្នន័យនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់}=1{ឯកសារនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់}other{ឯកសារទាំងនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">ពាក្យសម្ងាត់</translation> <translation id="6659213950629089752">ទំព័រនេះត្រូវបានពង្រីកដោយកម្មវិធីបន្ថែម "<ph name="NAME" />"</translation> <translation id="6659594942844771486">ផ្ទាំង</translation> +<translation id="6660413144148052430">ទីតាំង</translation> <translation id="666099631117081440">ម៉ាស៊ីនមេបោះពុម្ព</translation> <translation id="6663190258859265334">Powerwash <ph name="DEVICE_TYPE" /> របស់អ្នក ដើម្បីត្រឡប់ទៅកំណែមុនវិញ។</translation> <translation id="6664237456442406323">សំណាងមិនល្អ កុំព្យូទ័ររបស់អ្នកត្រូវបានតំឡើងជាមួយលេខសម្គាល់ផ្នែករឹងដែលមិនប្រក្រតី។ វាអាចបង្ការ Chrome OS ពីការធ្វើបច្ចុប្បន្នភាពជាមួយការដោះស្រាយសុវត្ថិភាពចុងក្រោយបំផុត ហើយកុំព្យូទ័ររបស់អ្នក <ph name="BEGIN_BOLD" />អាចរងគ្រោះដោយការវាយប្រហារព្យាបាទ<ph name="END_BOLD" />។</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">មើលអ្វីដែលថ្មី</translation> <translation id="67269783048918309">បញ្ជូនទិន្នន័យប្រើប្រាស់ និងវិភាគ។ បច្ចុប្បន្ននេះ ឧបករណ៍នេះកំពុងបញ្ជូនទិន្នន័យនៃការវិភាគ ឧបករណ៍ និងការប្រើប្រាស់កម្មវិធីទៅ Google ដោយស្វ័យប្រវត្តិ។ សកម្មភាពនេះនឹងមិនត្រូវបានធ្វើឡើង ដើម្បីកំណត់អត្តសញ្ញាណកូនរបស់អ្នកនោះទេ តែការធ្វើបែបនេះនឹងជួយដល់ស្ថិរភាពកម្មវិធី និងប្រព័ន្ធ ព្រមទាំងការកែលម្អផ្សេងទៀត។ ទិន្នន័យប្រមូលបានមួយចំនួនក៏នឹងជួយដល់កម្មវិធី និងដៃគូ Google ដូចជាអ្នកអភិវឌ្ឍន៍ Android ផងដែរ។ <ph name="BEGIN_LINK1" />ការកំណត់<ph name="END_LINK1" />នេះត្រូវបានអនុវត្តដោយម្ចាស់។ ប្រសិនបើការកំណត់សកម្មភាពកម្មវិធី និងគេហទំព័របន្ថែមត្រូវបានបើកសម្រាប់កូនរបស់អ្នក នោះទិន្នន័យនេះអាចត្រូវបានរក្សាទុកទៅក្នុងគណនី Google របស់គាត់។ <ph name="BEGIN_LINK2" />ស្វែងយល់បន្ថែម<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">បានភ្ជាប់ ថ្ម <ph name="BATTERY_PERCENTAGE" /> %</translation> +<translation id="6732087373923685049">កាមេរ៉ា</translation> <translation id="6732801395666424405">វិញ្ញាបនប័ត្រមិនត្រូវបានដំណើរការទេ</translation> <translation id="6732900235521116609">មិនអាចលុបផ្លូវកាត់បានទេ</translation> <translation id="6734468588183300211">នៅពេលប្រើមុខងារឯកជន គេហទំព័រមិនអាចប្រើខូគី ដើម្បីមើលសកម្មភាពរុករកតាមអ៊ីនធឺណិតរបស់អ្នកនៅលើគេហទំព័រផ្សេងៗ ឧទាហរណ៍ ដើម្បីកំណត់ការផ្សាយពាណិជ្ជកម្មឱ្យស្របនឹងអ្នកបានទេ។ មុខងារនៅលើគេហទំព័រមួយចំនួនអាចដំណើរការមិនត្រឹមត្រូវ។</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">សួរនៅពេលដែលទំព័រចង់ប្រើសារផ្តាច់មុខសម្រាប់ប្រព័ន្ធ ដើម្បីចូលប្រើឧបករណ៍ MIDI (បានណែនាំ)</translation> <translation id="6818198425579322765">ភាសាទំព័រដែលត្រូវបកប្រែ</translation> <translation id="6818802132960437751">ការការពារមេរោគដែលភ្ជាប់មកជាមួយ</translation> +<translation id="6820143000046097424">រន្ធស៊េរី</translation> <translation id="682123305478866682">ខាសដេស៍ថប</translation> <translation id="6823174134746916417">ការប៉ះដើម្បីចុចនៅលើផ្ទាំងប៉ះ</translation> <translation id="6824564591481349393">ចម្លងអាសយដ្ឋានអ៊ីម៉ែល</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">ផ្តោះប្តូរទិន្នន័យជាមួយឧបករណ៍ណាមួយនៅលើបណ្តាញ ឬអ៊ីនធឺណិតមូលដ្ឋាន</translation> <translation id="7306521477691455105">បើកការកំណត់ ដើម្បីភ្ជាប់ <ph name="USB_DEVICE_NAME" /> ជាមួយ <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">បានផ្អាក</translation> +<translation id="7308436126008021607">សមកាលកម្មផ្ទៃខាងក្រោយ</translation> <translation id="7309257895202129721">បង្ហាញឧបករណ៍បញ្ជា</translation> <translation id="7310598146671372464">មិនអាចចូលគណនីបានទេ។ ម៉ាសីុនមេមិនស្គាល់ប្រភេទអ៊ីនគ្រីប Kerberos ដែលបានបញ្ជាក់ទេ។ សូមទាក់ទងអ្នកគ្រប់គ្រងរបស់អ្នក។</translation> <translation id="7320213904474460808">កំណត់បណ្ដាញជាលំនាំដើម</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{តម្រូវឱ្យបញ្ជូនត្រឡប់ទៅវិញភ្លាម}other{បញ្ជូន <ph name="DEVICE_TYPE" /> ត្រឡប់ទៅវិញក្នុងរយៈពេល {NUM_DAYS} ថ្ងៃ}}</translation> <translation id="7475671414023905704">Netscape បានបាត់ពាក្យសម្ងាត់ URL</translation> <translation id="7476454130948140105">ថ្មសល់តិចពេកមិនអាចធ្វើបច្ចុប្បន្នភាពបានទេ (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">បានទប់ស្កាត់ <ph name="PERMISSION" /> និង <ph name="COUNT" /> ទៀតដោយស្វ័យប្រវត្តិ</translation> <translation id="7477793887173910789">គ្រប់គ្រងតន្ត្រី វីដេអូរបស់អ្នក និងអ្វីៗជាច្រើនទៀត</translation> <translation id="7478485216301680444">កម្មវិធីបញ្ជរមិនអាចត្រូវបានតំឡើងទេ។</translation> <translation id="7478623944308207463">ការកំណត់ និងកម្មវិធីរបស់អ្នកនឹងធ្វើសមកាលកម្មនៅលើឧបករណ៍ Chrome OS ទាំងអស់ ដែលអ្នកចូលដោយប្រើគណនី Google របស់អ្នក។ សូមចូលទៅកាន់<ph name="LINK_BEGIN" />ការកំណត់ Chrome<ph name="LINK_END" /> សម្រាប់ជម្រើសសមកាលកម្មកម្មវិធីរុករកតាមអ៊ីនធឺណិត។</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">លុប <ph name="APP" />...</translation> <translation id="8289128870594824098">ទំហំថាស</translation> <translation id="8293206222192510085">បន្ថែមចំណាំ</translation> +<translation id="829335040383910391">សំឡេង</translation> <translation id="8294431847097064396">ប្រភព</translation> <translation id="8298429963694909221">ឥឡូវនេះ អ្នកអាចទទួលបានការជូនដំណឹងពីទូរសព្ទរបស់អ្នកនៅលើ <ph name="DEVICE_TYPE" /> បានហើយ។ ការច្រានចោលការជូនដំណឹងនៅលើ <ph name="DEVICE_TYPE" /> របស់អ្នកក៏នឹងច្រានចោលការជូនដំណឹងនៅលើទូរសព្ទរបស់អ្នកផងដែរ។ សូមប្រាកដថា ទូរសព្ទរបស់អ្នកនៅជិត និងបានបើកប៊្លូធូស និង Wi-Fi។</translation> <translation id="8299319456683969623">បច្ចុប្បន្ននេះ អ្នកនៅក្រៅបណ្តាញ</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">បន្ថែមការតភ្ជាប់បណ្តាញ</translation> <translation id="8319414634934645341">ការប្រើប្រាស់សោបន្ថែម</translation> <translation id="8320459152843401447">អេក្រង់ទាំងមូលរបស់អ្នក</translation> +<translation id="8321476692217554900">ការជូនដំណឹង</translation> <translation id="8321837372750396788"><ph name="DEVICE_TYPE" /> នេះនឹងស្ថិតក្រោមការគ្រប់គ្រងរបស់ <ph name="MANAGER" />។</translation> <translation id="8322814362483282060">ទំព័រនេះត្រូវបានរារាំងពីការចូលប្រើម៉ៃក្រូហ្វូនរបស់អ្នក។</translation> <translation id="8323167517179506834">វាយបញ្ចូល URL</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">ថ្មីៗពី Google ថាស</translation> <translation id="8407199357649073301">កម្រិតកំណត់ហេតុ៖</translation> <translation id="8408068190360279472">បណ្ដាញ <ph name="NETWORK_TYPE" />, កំពុងភ្ជាប់</translation> +<translation id="8409413588194360210">ឧបករណ៍ដោះស្រាយការបង់ប្រាក់</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">បានអនុញ្ញាត <ph name="PERMISSION" /> និង <ph name="COUNT" /> ទៀត</translation> <translation id="8413385045638830869">សួរជាមុនសិន (បានណែនាំ)</translation> <translation id="8417548266957501132">ពាក្យសម្ងាត់របស់មាតាបិតា</translation> <translation id="8418445294933751433">បង្ហាញជាផ្ទាំង</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ឬ <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">កម្រិតគុណភាពពណ៌ពន្លឺពេលយប់</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> ចង់៖ <ph name="FIRST_PERMISSION" /> <ph name="SECOND_PERMISSION" /> និងធ្វើអ្វីៗច្រើនទៀត</translation> +<translation id="865032292777205197">ឧបករណ៍ចាប់ចលនា</translation> <translation id="8650543407998814195">ទោះបីជាអ្នកមិនអាចចូលប្រើកម្រងព័ត៌មានចាស់របស់អ្នកបានទៀតក៏ដោយ ក៏អ្នកនៅតែអាចលុបវាចេញបានដែរ។</translation> <translation id="8651585100578802546">បង្ខំឲ្យទំព័រដំណើរការឡើងវិញ</translation> <translation id="8652400352452647993">បញ្ហាក្នុងការខ្ចប់កម្មវិធីបន្ថែម</translation> @@ -6785,6 +6814,7 @@ <translation id="8785622406424941542">ប៊ិច</translation> <translation id="8787254343425541995">អនុញ្ញាតប្រូកស៊ីសម្រាប់បណ្តាញដែលបានចែករំលែក</translation> <translation id="8791534160414513928">ផ្ញើសំណើរ "កុំតាមដានខ្ញុំ" ជាមួយចរារចណ៍ការរុករករបស់អ្នក</translation> +<translation id="8792626944327216835">មីក្រូហ្វូន</translation> <translation id="879413103056696865">ខណៈពេលដែលហតស្ប៉តបើក <ph name="PHONE_NAME" /> របស់អ្នកនឹង៖</translation> <translation id="8795916974678578410">ផ្ទាំងថ្មី</translation> <translation id="8797459392481275117">កុំបកប្រែគេហទំទំព័រនេះឲ្យសោះ</translation> @@ -6824,6 +6854,7 @@ <translation id="8823559166155093873">ទប់ស្កាត់ខូគី</translation> <translation id="8823704566850948458">ណែនាំពាក្យសម្ងាត់...</translation> <translation id="8824701697284169214">បន្ថែមទំព័រ...</translation> +<translation id="8827125715368568315">បានទប់ស្កាត់ <ph name="PERMISSION" /> និង <ph name="COUNT" /> ទៀត</translation> <translation id="8827289157496676362">ខ្ទាស់កម្មវិធីបន្ថែម</translation> <translation id="8827752199525959199">សកម្មភាពច្រើនទៀត ពាក្យសម្ងាត់សម្រាប់ <ph name="USERNAME" /> នៅលើ <ph name="DOMAIN" /></translation> <translation id="882854468542856424">កុំអនុញ្ញាតឱ្យគេហទំព័រណាមួយរកឃើញឧបករណ៍ប៊្លូធូសដែលនៅជិត</translation> @@ -6924,6 +6955,7 @@ <translation id="8932894639908691771">ជម្រើសការប្រើប៊ូតុងចុច</translation> <translation id="8933960630081805351">បង្ហាញនៅក្នុងប្រអប់ស្វែងរក</translation> <translation id="8934732568177537184">បន្ត</translation> +<translation id="8938306522009698937">ឧបករណ៍ដោះស្រាយ</translation> <translation id="8938800817013097409">ឧបករណ៍ USB-C (រន្ធស្តាំផ្នែកខាងក្រោយ)</translation> <translation id="8940081510938872932">កុំព្យូទ័ររបស់អ្នកកំពុងដំណើរការកម្មវិធីច្រើនណាស់ឥឡូវនេះ។ ព្យាយាមម្តងទៀតពេលក្រោយ។</translation> <translation id="8941173171815156065">បញ្ឈប់សុពលភាពការអនុញ្ញាត '<ph name="PERMISSION" />'</translation> @@ -7228,6 +7260,7 @@ <translation id="987264212798334818">ទូទៅ</translation> <translation id="987897973846887088">មិនមានរូបភាពទេ</translation> <translation id="988978206646512040">ឃ្លាសម្ងាត់ដែលទទេមិនត្រូវបានអនុញ្ញាតទេ</translation> +<translation id="991413375315957741">ឧបករណ៍ចាប់ពន្លឺ ឬចាប់ចលនា</translation> <translation id="992032470292211616">កម្មវិធីបន្ថែម កម្មវិធី និងធីមអាចប៉ះពាល់ដល់ឧបករណ៍របស់អ្នក។ តើអ្នកប្រាកដថាអ្នកចង់បន្តទេ?</translation> <translation id="992256792861109788">ផ្កាឈូក</translation> <translation id="992592832486024913">បិទដំណើរការ ChromeVox (មតិនិយាយ)</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 3d854e4..70b601d0 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">ಡಿಫಾಲ್ಟ್</translation> <translation id="1252987234827889034">ಪ್ರೊಫೈಲ್ ದೋಷ ಸಂಭವಿಸಿದೆ</translation> <translation id="1254593899333212300">ನೇರ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ</translation> +<translation id="1257553931232494454">ಝೂಮ್ ಹಂತಗಳು</translation> <translation id="1259152067760398571">ಸುರಕ್ಷತಾ ಪರಿಶೀಲನೆಯನ್ನು ನಿನ್ನೆಯ ದಿನ ನಡೆಸಲಾಗಿದೆ</translation> <translation id="1260451001046713751"><ph name="HOST" /> ನಿಂದ ಪಾಪ್-ಅಪ್ಗಳು ಮತ್ತು ಮರುನಿರ್ದೇಶನಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation> <translation id="1261380933454402672">ಸಾಧಾರಣ</translation> @@ -673,6 +674,7 @@ <translation id="1729533290416704613">ಓಮ್ನಿಬಾಕ್ಸ್ನಿಂದ ನೀವು ಹುಡುಕಾಟ ನಡೆಸಿದಾಗ ತೋರಿಸಬೇಕಾದ ಪುಟವನ್ನು ಕೂಡಾ ಇದು ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />ಆ್ಯಪ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು, ಸೆಟ್ಟಿಂಗ್ಗಳು > Google Play ಸ್ಟೋರ್ > Android ಆದ್ಯತೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ > ಆ್ಯಪ್ಗಳು ಅಥವಾ ಆ್ಯಪ್ ನಿರ್ವಾಹಕ ಆಯ್ಕೆಗೆ ಹೋಗಿ. ನಂತರ ನೀವು ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಬಯಸುವ ಆ್ಯಪ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ (ನೀವು ಆ್ಯಪ್ ಅನ್ನು ಹುಡುಕಲು ಎಡಕ್ಕೆ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡುವ ಅಗತ್ಯವಿರಬಹುದು). ನಂತರ ಅನ್ಇನ್ಸ್ಟಾಲ್ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಆಯ್ಕೆಯನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ...</translation> +<translation id="1733064249834771892">ಫಾಂಟ್ಗಳು</translation> <translation id="1733383495376208985">ನಿಮ್ಮ ಸ್ವಂತ <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್<ph name="END_LINK" /> ಬಳಸಿಕೊಂಡು ಸಿಂಕ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿ. ಇದು Google Pay ನಿಂದ ಪಾವತಿ ವಿಧಾನಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ.</translation> <translation id="1734212868489994726">ತಿಳಿ ನೀಲಿ</translation> <translation id="1734230530703461088">ಸಮಯದ ಮಿತಿಯೊಳಗೆ ವಿಸ್ತರಣೆಗಳನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> @@ -760,6 +762,7 @@ <translation id="1818913467757368489">ಲಾಗ್ ಅಪ್ಲೋಡ್ ಪ್ರಗತಿಯಲ್ಲಿದೆ.</translation> <translation id="1819721979226826163">ಅಪ್ಲಿಕೇಶನ್ ಅಧಿಸೂಚನೆಗಳು > Google Play ಸೇವೆಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> <translation id="1820028137326691631">ನಿರ್ವಾಹಕರು ಒದಗಿಸಿದ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ</translation> +<translation id="182139138257690338">ಸ್ವಯಂಚಾಲಿತ ಡೌನ್ಲೋಡ್ಗಳು</translation> <translation id="1822140782238030981">ಈಗಾಗಲೇ Chrome ಬಳಕೆದಾರರಾಗಿದ್ದೀರಾ? ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="18245044880483936">ನಿಮ್ಮ ಮಗುವಿನ ಡ್ರೈವ್ ಸಂಗ್ರಹಣೆ ಕೋಟಾದಲ್ಲಿ ಬ್ಯಾಕಪ್ ಡೇಟಾ ಸೇರಿರುವುದಿಲ್ಲ.</translation> <translation id="1825565032302550710">ಪೋರ್ಟ್ 1024 ಮತ್ತು 65535 ಆಗಿರಬೇಕು</translation> @@ -1200,6 +1203,7 @@ <translation id="2326931316514688470">ಅಪ್ಲಿಕೇಶನ್ &ಮರುಲೋಡ್ ಮಾಡಿ</translation> <translation id="2327492829706409234">ಅಪ್ಲಿಕೇಶನ್ ಸಕ್ರಿಯಗೊಳಿಸು</translation> <translation id="2328561734797404498"><ph name="APP_NAME" /> ಬಳಸಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ.</translation> +<translation id="2329182534073751090">ವಿಂಡೋ ಸ್ಥಾನ ನಿಯೋಜನೆ</translation> <translation id="2329597144923131178">ನಿಮ್ಮ ಎಲ್ಲ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> <translation id="2332131598580221120">ಸ್ಟೋರ್ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ</translation> <translation id="2332192922827071008">ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ತೆರೆಯಿರಿ</translation> @@ -1711,6 +1715,7 @@ <translation id="2894757982205307093">ಗುಂಪಿನಲ್ಲಿ ಹೊಸ ಟ್ಯಾಬ್</translation> <translation id="289644616180464099">ಸಿಮ್ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="289695669188700754">ಕೀಲಿ ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">ನಿಮ್ಮ ಎಲ್ಲಾ ಅಜ್ಞಾತ ವಿಂಡೋಗಳನ್ನು ನೀವು ಮುಚ್ಚಿದಾಗ ಈ ಕಸ್ಟಮ್ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation> <translation id="2897878306272793870"><ph name="TAB_COUNT" /> ಟ್ಯಾಬ್ಗಳನ್ನು ತೆರೆಯಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</translation> <translation id="290105521672621980">ಬೆಂಬಲಿಸದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಫೈಲ್ ಬಳಸುತ್ತದೆ</translation> <translation id="2902127500170292085">ಈ ಪ್ರಿಂಟರ್ ಜೊತೆಗೆ <ph name="EXTENSION_NAME" /> ಸಂವಹನ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಪ್ರಿಂಟರ್ ಪ್ಲಗಿನ್ ಮಾಡಲಾಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಹಾಗೂ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation> @@ -1800,6 +1805,7 @@ <translation id="2996286169319737844">ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್ ಬಳಸಿಕೊಂಡು ಡೇಟಾವನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಇದು Google Pay ನಿಂದ ಪಾವತಿ ವಿಧಾನಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ.</translation> <translation id="2996722619877761919">ಉದ್ದದ ಅಂಚಿನಲ್ಲಿ ಫ್ಲಿಪ್ ಮಾಡಿ</translation> <translation id="3000236644796679448">ನಿಮ್ಮ ಮೈಕ್ರೋಫೋನ್ ಬಳಸಲು ಸೈಟ್ಗಳು ಕೇಳಬಹುದು (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> +<translation id="3000378525979847272"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ಅನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="3000461861112256445">ಮೊನೊ ಆಡಿಯೊ</translation> <translation id="3001144475369593262">ಮಕ್ಕಳ ಖಾತೆಗಳು</translation> <translation id="3003144360685731741">ಆದ್ಯತೆಯ ನೆಟ್ವರ್ಕ್ಗಳು</translation> @@ -2059,6 +2065,7 @@ <translation id="3305661444342691068">PDF ಅನ್ನು ಪೂರ್ವವೀಕ್ಷಣೆಯಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="3308116878371095290">ಕುಕ್ಕಿಗಳನ್ನು ಹೊಂದಿಸದಂತೆ ಈ ಪುಟವನ್ನು ತಡೆಗಟ್ಟಲಾಗಿದೆ.</translation> <translation id="3308134619352333507">ಬಟನ್ ಅನ್ನು ಮರೆಮಾಡು</translation> +<translation id="3308738399950580893">ಜಾಹೀರಾತುಗಳು</translation> <translation id="3308852433423051161">Google ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> <translation id="3309330461362844500">ಪ್ರಮಾಣಪತ್ರ ಪ್ರೊಫೈಲ್ ಐಡಿ</translation> <translation id="3311445899360743395">ಈ ಆ್ಯಪ್ ಜೊತೆಗೆ ಸಂಯೋಜಿತವಾಗಿರುವ ಡೇಟಾವನ್ನು ಈ ಸಾಧನದಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.</translation> @@ -2119,6 +2126,7 @@ <translation id="3388788256054548012">ಈ ಫೈಲ್ ಅನ್ನು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಅದನ್ನು ಡಿಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಅದರ ಮಾಲೀಕರಿಗೆ ಕೇಳಿ.</translation> <translation id="3390013585654699824">ಆ್ಯಪ್ ವಿವರಗಳು</translation> <translation id="3390741581549395454">Linux ಆ್ಯಪ್ಗಳು ಮತ್ತು ಫೈಲ್ಗಳನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗಿದೆ. ಅಪ್ಗ್ರೇಡ್ ಶೀಘ್ರದಲ್ಲೇ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ.</translation> +<translation id="3391482648489541560">ಫೈಲ್ ಎಡಿಟ್ ಮಾಡುವಿಕೆ</translation> <translation id="339178315942519818">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ ನಿಮ್ಮ ಚಾಟ್ ಆ್ಯಪ್ಗಳಲ್ಲಿನ ಅಧಿಸೂಚನೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ</translation> <translation id="3396800784455899911">ಈ Google ಸೇವೆಗಳಿಗಾಗಿ "ಸ್ವೀಕರಿಸಿ ಮತ್ತು ಮುಂದುವರೆಸು" ಬಟನ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡುವುದರ ಮೂಲಕ, ನೀವು ಮೇಲೆ ವಿವರಿಸಿರುವ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಿಕೆಗೆ ಒಪ್ಪುತ್ತೀರಿ.</translation> <translation id="3399432415385675819">ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ</translation> @@ -2895,6 +2903,7 @@ <translation id="425573743389990240">ವ್ಯಾಟ್ಗಳಲ್ಲಿ ಬ್ಯಾಟರಿ ಡಿಸ್ಚಾರ್ಜ್ ದರ (ನಕಾರಾತ್ಮಕ ಮೌಲ್ಯ ಎಂದರೆ ಬ್ಯಾಟರಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ ಎಂದರ್ಥ)</translation> <translation id="4256316378292851214">ಇದರಂತೆ ವೀಡಿಯೊ ಉ&ಳಿಸಿ...</translation> <translation id="4258348331913189841">ಫೈಲ್ ಸಿಸ್ಟಂಗಳು</translation> +<translation id="4259381619085088639">ನಿಮ್ಮ ಉಪಸ್ಥಿತಿ</translation> <translation id="4259388776256904261">ಇದು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" />, ಅಪಾಯಕಾರಿ ಫೈಲ್ ಆಗಿರಬಹುದು. ಸ್ಕ್ಯಾನಿಂಗ್ಗಾಗಿ, Google ಸುಧಾರಿತ ರಕ್ಷಣೆಗೆ ಕಳುಹಿಸಬೇಕೆ? ಡೌನ್ಲೋಡ್ ಪಟ್ಟಿಯ ಪ್ರದೇಶಕ್ಕೆ ಹೋಗಲು Shift+F6 ಒತ್ತಿ.</translation> <translation id="4263223596040212967">ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ವಿನ್ಯಾಸವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.</translation> @@ -2931,6 +2940,7 @@ <translation id="4303079906735388947">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀಗಾಗಿ ಹೊಸ ಪಿನ್ ಹೊಂದಿಸಿ</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" /> ಗೆ ನಕಲಿಸಿ</translation> <translation id="4306119971288449206">"<ph name="CONTENT_TYPE" />" ಪ್ರಕಾರದ ವಿಷಯದೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಒದಗಿಸಬೇಕು</translation> +<translation id="4306812610847412719">ಕ್ಲಿಪ್ಬೋರ್ಡ್</translation> <translation id="4307992518367153382">ಬೇಸಿಕ್ಸ್</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ಲೈವ್)</translation> <translation id="4310139701823742692">ಫೈಲ್ ತಪ್ಪು ಫಾರ್ಮ್ಯಾಟ್ನಲ್ಲಿದೆ. PPD ಫೈಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ, ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> @@ -3018,6 +3028,7 @@ <translation id="4412698727486357573">ಸಹಾಯ ಕೇಂದ್ರ</translation> <translation id="44141919652824029">ನಿಮ್ಮ ಲಗತ್ತಿಸಲಾದ USB ಸಾಧನಗಳ ಪಟ್ಟಿಯನ್ನು ಪಡೆಯಲು "<ph name="APP_NAME" />" ಅನ್ನು ಅನುಮತಿಸಬೇಕೆ?</translation> <translation id="4414232939543644979">ಹೊಸ &ಅಜ್ಞಾತ ವಿಂಡೋ</translation> +<translation id="4414515549596849729">ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾ</translation> <translation id="4415213869328311284">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಬಳಸಲು ಸಿದ್ಧರಾಗಿದ್ದೀರಿ.</translation> <translation id="4415245286584082850">ಯಾವುದೇ ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ಹೊಸ ಟ್ಯಾಬ್ ಒಂದರಲ್ಲಿ ಸಹಾಯ ಕೇಂದ್ರದ ಲೇಖನವೊಂದನ್ನು ತೆರೆಯಿರಿ.</translation> <translation id="4415276339145661267">ನಿಮ್ಮ Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation> @@ -3089,6 +3100,7 @@ <translation id="4493468155686877504">ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">ಈ ಪುಟದಲ್ಲಿ ತೋರಿಸಬೇಡ</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ</translation> +<translation id="4500587658229086076">ಅಸುರಕ್ಷಿತ ವಿಷಯ</translation> <translation id="450099669180426158">ಆಶ್ಚರ್ಯಕರ ಚಿಹ್ನೆಯ ಐಕಾನ್</translation> <translation id="4501530680793980440">ತೆಗೆದುಹಾಕುವಿಕೆಯನ್ನು ದೃಢೀಕರಿಸಿ</translation> <translation id="4502423230170890588">ಈ ಸಾಧನದಿಂದ ತೆಗೆದುಹಾಕಿ</translation> @@ -3129,6 +3141,7 @@ <translation id="4538684596480161368"><ph name="HOST" /> ನಲ್ಲಿ ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ ರದ್ದುಗೊಳಿಸಲಾಗಿರುವ ಪ್ಲಗ್-ಇನ್ಗಳನ್ನು ಯಾವಾಗಲೂ ನಿರ್ಬಂಧಿಸು</translation> <translation id="4538792345715658285">ಎಂಟರ್ಪ್ರೈಸ್ ನೀತಿಯಿಂದ ಸ್ಥಾಪಿಸಲಾಗಿದೆ.</translation> <translation id="4541662893742891060">ಈ ಪ್ರೊಫೈಲ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ತಾಂತ್ರಿಕ ಬೆಂಬಲಕ್ಕಾಗಿ, ನಿಮ್ಮ ಕ್ಯಾರಿಯರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> +<translation id="4541810033354695636">ಆಗ್ಮೆಂಟೆಡ್ ರಿಯಾಲಿಟಿ</translation> <translation id="4542520061254486227">ನಿಮ್ಮ ಡೇಟಾವನ್ನು <ph name="WEBSITE_1" /> ಮತ್ತು <ph name="WEBSITE_2" /> ನಲ್ಲಿ ಓದಿ</translation> <translation id="4543778593405494224">ಪ್ರಮಾಣಪತ್ರ ವ್ಯವಸ್ಥಾಪಕ</translation> <translation id="4544174279960331769">ಡಿಫಾಲ್ಟ್ ನೀಲಿ ಅವತಾರ್</translation> @@ -3602,6 +3615,7 @@ <translation id="5112577000029535889">&ಡೆವಲಪರ್ ಟೂಲ್ಸ್</translation> <translation id="5113739826273394829">ಈ ಐಕಾನ್ ಅನ್ನು ನೀವು ಕ್ಲಿಕ್ ಮಾಡಿದರೆ, ನೀವು ಹಸ್ತಚಾಲಿತವಾಗಿ ಈ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡುತ್ತೀರಿ. ಮುಂದಿನ ಬಾರಿ, ಪ್ರವೇಶಿಸಲು ನೀವು ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation> <translation id="51143538739122961">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀ ಅನ್ನು ಸೇರ್ಪಡಿಸಿ ಮತ್ತು ಅದನ್ನು ಸ್ಪರ್ಶಿಸಿ</translation> +<translation id="5114987907971894280">ವರ್ಚುವಲ್ ರಿಯಾಲಿಟಿ</translation> <translation id="5115309401544567011">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ವಿದ್ಯುತ್ ಸಂಪರ್ಕಕ್ಕೆ ಪ್ಲಗ್ ಮಾಡಿ.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">ಇದರಂತೆ ಆಡಿಯೋ ಉ&ಳಿಸಿ...</translation> @@ -3901,6 +3915,7 @@ <translation id="5464632865477611176">ಈ ಸಮಯದಲ್ಲಿ ಚಾಲನೆ ನೀಡಿ</translation> <translation id="5464660706533281090">ಬಳಕೆದಾರರು ಮಕ್ಕಳಾಗಿದ್ದರೆ, ಅವರು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸುವಂತಿಲ್ಲ.</translation> <translation id="5466374726908360271">ಅಂ&ಟಿಸಿ ಮತ್ತು “<ph name="SEARCH_TERMS" />” ಗಾಗಿ ಹುಡುಕಿ</translation> +<translation id="5467207440419968613"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="5468119583641912100">ಸಂರಕ್ಷಿತ ವಿಷಯವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸೈಟ್ಗಳು ಕೇಳಬಹುದು (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> <translation id="5468173180030470402">ಫೈಲ್ ಹಂಚಿಕೆಗಳನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ</translation> <translation id="5469852975082458401">ಪಠ್ಯದ ಕರ್ಸರ್ ಮೂಲಕ ನೀವು ಪುಟಗಳನ್ನು ನ್ಯಾವಿಗೇಟ್ ಮಾಡಬಹುದು. ಆಫ್ ಮಾಡಲು F7 ಒತ್ತಿರಿ.</translation> @@ -4193,6 +4208,7 @@ <translation id="5794786537412027208">ಎಲ್ಲ Chrome ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ತ್ಯಜಿಸಿ</translation> <translation id="5797070761912323120">ಹುಡುಕಾಟ, ಜಾಹೀರಾತುಗಳು ಮತ್ತು ಇತರ Google ಸೇವೆಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸಲು ನಿಮ್ಮ ಇತಿಹಾಸವನ್ನು Google ಬಳಸಬಹುದು</translation> <translation id="5798301976526354562">ಪಠ್ಯದ ಗಾತ್ರ (ಲೈವ್ ಕ್ಯಾಪ್ಶನ್ಗೂ ಸಹ ಅನ್ವಯಿಸುತ್ತದೆ)</translation> +<translation id="579907812742603813">ಸಂರಕ್ಷಿಸಿದ ವಿಷಯ</translation> <translation id="579915268381781820">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ.</translation> <translation id="5799508265798272974">Linux ವರ್ಚುವಲ್ ಯಂತ್ರ: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">ಕೊನೆಯ ಡೌನ್ಲೋಡ್ನಿಂದ ಗಮ್ಯಸ್ಥಾನದ ಫೈಲ್ ಅನ್ನು ಮೊಟಕುಮಾಡಲಾಗಿದೆ ಅಥವಾ ತೆಗೆದುಹಾಕಲಾಗಿದೆ.</translation> @@ -4266,6 +4282,7 @@ <translation id="5877064549588274448">ಚಾನಲ್ ಬದಲಾಗಿದೆ. ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ.</translation> <translation id="5877584842898320529">ಆಯ್ಕೆಮಾಡಿದ ಪ್ರಿಂಟರ್ ಲಭ್ಯವಿಲ್ಲ ಅಥವಾ ಸರಿಯಾಗಿ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿಲ್ಲ. <ph name="BR" /> ನಿಮ್ಮ ಪ್ರಿಂಟರ್ ಪರೀಕ್ಷಿಸಿ ಅಥವಾ ಬೇರೊಂದು ಪ್ರಿಂಟರ್ ಆಯ್ಕೆಮಾಡಿ.</translation> <translation id="5882919346125742463">ತಿಳಿದಿರುವ ನೆಟ್ವರ್ಕ್ಗಳು</translation> +<translation id="5883356647197510494"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="5884474295213649357">ಈ ಟ್ಯಾಬ್ USB ಸಾಧನಕ್ಕೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ.</translation> <translation id="5886009770935151472">ಬೆರಳು 1</translation> <translation id="5889282057229379085">ಮಧ್ಯಂತರ CA ಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆ: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4765,6 +4782,7 @@ <translation id="6460601847208524483">ಮುಂದಿನದು ಕಂಡುಹಿಡಿಯಿರಿ</translation> <translation id="6461170143930046705">ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="6463795194797719782">&ಎಡಿಟ್</translation> +<translation id="6464094930452079790">ಚಿತ್ರಗಳು</translation> <translation id="6464825623202322042">ಈ ಸಾಧನ</translation> <translation id="6465841119675156448">ಇಂಟರ್ನೆಟ್ ಇಲ್ಲದೆಯೇ</translation> <translation id="6466988389784393586">ಎಲ್ಲ ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು &ತೆರೆಯಿರಿ</translation> @@ -4788,6 +4806,7 @@ <translation id="6491376743066338510">ದೃಢೀಕರಣ ವಿಫಲವಾಗಿದೆ</translation> <translation id="6494327278868541139">ವರ್ಧಿತ ಸುರಕ್ಷತಾ ವಿವರಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="6494445798847293442">ಪ್ರಮಾಣೀಕರಣದ ಪ್ರಾಧಿಕಾರವಲ್ಲ</translation> +<translation id="6494750904506170417">ಪಾಪ್-ಅಪ್ಗಳು ಹಾಗೂ ಮರುನಿರ್ದೇಶನಗಳು</translation> <translation id="6494974875566443634">ಕಸ್ಟಮೈಸ್ ಮಾಡುವಿಕೆ</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" /> ರಲ್ಲಿ <ph name="NETWORK_INDEX" /> ನೆಟ್ವರ್ಕ್, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ <ph name="SIGNAL_STRENGTH" />%, ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸಿದ್ದಾರೆ, ವಿವರಗಳು</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{ಈ ಡೇಟಾ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ}=1{ಈ ಫೈಲ್ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ}one{ಈ ಫೈಲ್ಗಳು ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿವೆ}other{ಈ ಫೈಲ್ಗಳು ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿವೆ}}</translation> @@ -4928,6 +4947,7 @@ <translation id="6657585470893396449">ಪಾಸ್ವರ್ಡ್</translation> <translation id="6659213950629089752">ಈ ಪುಟವನ್ನು "<ph name="NAME" />" ವಿಸ್ತರಣೆಯಿಂದ ಝೂಮ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="6659594942844771486">ಟ್ಯಾಬ್</translation> +<translation id="6660413144148052430">ಸ್ಥಳ</translation> <translation id="666099631117081440">ಪ್ರಿಂಟ್ ಸರ್ವರ್ಗಳು</translation> <translation id="6663190258859265334">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಪವರ್ವಾಶ್ ಮಾಡಿ ಮತ್ತು ಹಿಂದಿನ ಆವೃತ್ತಿಗೆ ಮರಳಿ.</translation> <translation id="6664237456442406323">ದುರದೃಷ್ಟವಶಾತ್, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ತಪ್ಪಾಗಿ ರಚಿಸಲಾದ ಹಾರ್ಡ್ವೇರ್ ID ಯೊಂದಿಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ. ಇದು Chrome OS ಅನ್ನು ಇತ್ತೀಚಿನ ಭದ್ರತೆ ಸರಿಪಡಿಸುವಿಕೆಗಳೊಂದಿಗೆ ನವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ <ph name="BEGIN_BOLD" />ದುರುದ್ದೇಶದ ದಾಳಿಗಳಿಗೆ ಗುರಿಯಾಗುವ ಸಾಧ್ಯತೆಯಿದೆ<ph name="END_BOLD" />.</translation> @@ -4982,6 +5002,7 @@ <translation id="672609503628871915">ಹೊಸದೇನಿದೆ ನೋಡಿ</translation> <translation id="67269783048918309">ಬಳಕೆ ಮತ್ತು ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಿ. ಪ್ರಸ್ತುತ ಈ ಸಾಧನವು ಡಯಾಗ್ನಾಸ್ಟಿಕ್, ಸಾಧನ, ಮತ್ತು ಆ್ಯಪ್ ಬಳಕೆಯ ಡೇಟಾವನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸುತ್ತಿದೆ. ಈ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಮಗುವನ್ನು ಗುರುತಿಸುವುದಕ್ಕೆ ಬಳಸುವುದಿಲ್ಲ, ಹಾಗೂ ಇದು ಸಿಸ್ಟಮ್ ಮತ್ತು ಆ್ಯಪ್ ಸ್ಥಿರತೆಗೆ, ಹಾಗೂ ಇತರ ಸುಧಾರಣೆಗಳಿಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಕೆಲವು ಒಟ್ಟುಗೂಡಿಸಿದ ಡೇಟಾವು, Google ಆ್ಯಪ್ಗಳಿಗೆ ಮತ್ತು ಪಾಲುದಾರರಿಗೂ ಸಹ ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, Android ಡೆವಲಪರ್ಗಳು. ಈ <ph name="BEGIN_LINK1" />ಸೆಟ್ಟಿಂಗ್<ph name="END_LINK1" />ಅನ್ನು ಮಾಲೀಕರೇ ಜಾರಿಗೊಳಿಸುತ್ತಾರೆ. ನಿಮ್ಮ ಮಗುವಿಗಾಗಿ ಹೆಚ್ಚುವರಿ ವೆಬ್ ಮತ್ತು ಆ್ಯಪ್ ಚಟುವಟಿಕೆ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಆನ್ ಮಾಡಿದ್ದಲ್ಲಿ, ಈ ಡೇಟಾವು ಅವರ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲ್ಪಡಬಹುದು. <ph name="BEGIN_LINK2" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">ಸಂಪರ್ಕಗೊಂಡಿದೆ, <ph name="BATTERY_PERCENTAGE" />% ರಷ್ಟು ಬ್ಯಾಟರಿ ಲಭ್ಯವಿದೆ</translation> +<translation id="6732087373923685049">ಕ್ಯಾಮರಾ</translation> <translation id="6732801395666424405">ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ</translation> <translation id="6732900235521116609">ಶಾರ್ಟ್ಕಟ್ ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="6734468588183300211">ಅದೃಶ್ಯ ಮೋಡ್ನಲ್ಲಿ ಇರುವಾಗ, ವಿವಿಧ ಸೈಟ್ಗಳಾದ್ಯಂತ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ಉದಾಹರಣೆಗೆ, ಜಾಹೀರಾತುಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸುವುದಕ್ಕಾಗಿ ನಿಮ್ಮ ಕುಕೀಗಳನ್ನು ಬಳಸಲು ಸೈಟ್ಗಳಿಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಕೆಲವು ವೆಬ್ಸೈಟ್ಗಳಲ್ಲಿನ ವೈಶಿಷ್ಟ್ಯಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಬಹುದು.</translation> @@ -5056,6 +5077,7 @@ <translation id="6817174620439930047">MIDI ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಸೈಟ್ವೊಂದು ಸಿಸ್ಟಮ್ನ ಪ್ರತ್ಯೇಕ ಸಂದೇಶಗಳನ್ನು ಬಳಸಬೇಕೆಂದಾಗ ನನ್ನನ್ನು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> <translation id="6818198425579322765">ಅನುವಾದಿಸಬೇಕಾದ ಪುಟದ ಭಾಷೆ</translation> <translation id="6818802132960437751">ಅಂತರ್ನಿರ್ಮಿತ ವೈರಸ್ನಿಂದ ರಕ್ಷಣೆ</translation> +<translation id="6820143000046097424">ಸೀರಿಯಲ್ ಪೋರ್ಟ್ಗಳು</translation> <translation id="682123305478866682">ಡೆಸ್ಕ್ಟಾಪ್ ಬಿತ್ತರಿಸಿ</translation> <translation id="6823174134746916417">ಟಚ್ಪ್ಯಾಡ್ ಕ್ಲಿಕ್ - ಮಾಡಲು - ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="6824564591481349393">ಇಮೇಲ್ &ವಿಳಾಸವನ್ನು ನಕಲು ಮಾಡಿ</translation> @@ -5490,6 +5512,7 @@ <translation id="730515362922783851">ಸ್ಥಳೀಯ ನೆಟ್ವರ್ಕ್ ಅಥವಾ ಇಂಟರ್ನೆಟ್ನಲ್ಲಿ ಯಾವುದೇ ಸಾಧನದೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation> <translation id="7306521477691455105"><ph name="USB_DEVICE_NAME" /> ನಿಂದ <ph name="USB_VM_NAME" /> ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="7307129035224081534">ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation> +<translation id="7308436126008021607">ಹಿನ್ನೆಲೆ ಸಿಂಕ್</translation> <translation id="7309257895202129721">&ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸು</translation> <translation id="7310598146671372464">ಲಾಗಿನ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾದ Kerberos ಎನ್ಕ್ರಿಪ್ಶನ್ ಪ್ರಕಾರಗಳನ್ನು ಸರ್ವರ್ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="7320213904474460808">ನೆಟ್ವರ್ಕ್ ಡೀಫಾಲ್ಟ್ ಮಾಡಿ</translation> @@ -5631,6 +5654,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{ತಕ್ಷಣ ಹಿಂತಿರುಗಿಸುವ ಅಗತ್ಯವಿದೆ}one{{NUM_DAYS} ದಿನಗಳ ಒಳಗಾಗಿ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ}other{{NUM_DAYS} ದಿನಗಳ ಒಳಗಾಗಿ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಹಿಂತಿರುಗಿಸಿ}}</translation> <translation id="7475671414023905704">Netscape ಕಳೆದು ಹೋದ ಪಾಸ್ವರ್ಡ್ URL</translation> <translation id="7476454130948140105">ಅಪ್ಡೇಟ್ ಮಾಡಲು ಬ್ಯಾಟರಿ <ph name="BATTERY_PERCENT" /> ತುಂಬಾ ಕಡಿಮೆ ಇದೆ</translation> +<translation id="7476989672001283112"><ph name="PERMISSION" /> ಮತ್ತು <ph name="COUNT" /> ಕ್ಕೂ ಹೆಚ್ಚಿನವುಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="7477793887173910789">ನಿಮ್ಮ ಸಂಗೀತ, ವೀಡಿಯೊಗಳು ಹಾಗೂ ಇತ್ಯಾದಿಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ</translation> <translation id="7478485216301680444">ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="7478623944308207463">ನಿಮ್ಮ Google ಖಾತೆಯ ಮೂಲಕ ನೀವು ಸೈನ್ ಇನ್ ಮಾಡಿದ ಎಲ್ಲಾ Chrome OS ಸಾಧನಗಳಾದ್ಯಂತ ನಿಮ್ಮ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ. ಬ್ರೌಸರ್ ಸಿಂಕ್ ಆಯ್ಕೆಗಳಿಗಾಗಿ, <ph name="LINK_BEGIN" />Chrome ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ<ph name="LINK_END" /> ಹೋಗಿ.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887"><ph name="APP" /> ಅನ್ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ...</translation> <translation id="8289128870594824098">ಡಿಸ್ಕ್ ಗಾತ್ರ</translation> <translation id="8293206222192510085">ಬುಕ್ಮಾರ್ಕ್ ಸೇರಿಸು</translation> +<translation id="829335040383910391">ಶಬ್ದ</translation> <translation id="8294431847097064396">ಮೂಲ</translation> <translation id="8298429963694909221">ಇದೀಗ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ, ನಿಮ್ಮ ಫೋನ್ನ ಮೂಲಕ ನೀವು ಅಧಿಸೂಚನೆಗಳನ್ನು ಸ್ವೀಕರಿಸಬಹುದು. ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ ಅಧಿಸೂಚನೆಗಳನ್ನು ವಜಾಗೊಳಿಸಿದರೆ, ನಿಮ್ಮ ಫೋನ್ನಲ್ಲೂ ಅವುಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ ಫೋನ್ ಸಮೀಪದಲ್ಲಿದೆ ಮತ್ತು ಅದರಲ್ಲಿ ಬ್ಲೂಟೂತ್ ಹಾಗೂ ವೈ-ಫೈ ಆನ್ ಆಗಿದೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation> <translation id="8299319456683969623">ನೀವು ಪ್ರಸ್ತುತ ಆಫ್ಲೈನ್ನಲ್ಲಿರುವಿರಿ.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸಿ</translation> <translation id="8319414634934645341">ವಿಸ್ತರಿತ ಕೀಲಿ ಬಳಕೆ</translation> <translation id="8320459152843401447">ನಿಮ್ಮ ಸಂಪೂರ್ಣ ಪರದೆ</translation> +<translation id="8321476692217554900">ಅಧಿಸೂಚನೆಗಳು</translation> <translation id="8321837372750396788">ಈ <ph name="DEVICE_TYPE" /> ಅನ್ನು <ph name="MANAGER" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ.</translation> <translation id="8322814362483282060">ಈ ಪುಟವನ್ನು ನಿಮ್ಮ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶದಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> <translation id="8323167517179506834">URL ಟೈಪ್ ಮಾಡಿ</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Google Drive ನಲ್ಲಿನ ಇತ್ತೀಚಿನದು</translation> <translation id="8407199357649073301">ಲಾಗ್ ಹಂತ:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ನೆಟ್ವರ್ಕ್, ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ</translation> +<translation id="8409413588194360210">ಪಾವತಿ ಹ್ಯಾಂಡ್ಲರ್ಗಳು</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322"><ph name="PERMISSION" /> ಮತ್ತು <ph name="COUNT" /> ಕ್ಕೂ ಹೆಚ್ಚಿನವುಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="8413385045638830869">ಮೊದಲು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> <translation id="8417548266957501132">ಪೋಷಕರ ಪಾಸ್ವರ್ಡ್</translation> <translation id="8418445294933751433">ಟ್ಯಾಬ್ನಂತೆ &ತೋರಿಸಿ</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ಅಥವಾ <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">ನೈಟ್ ಲೈಟ್ ಬಣ್ಣ ತಾಪಮಾನ</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" />, ಇವುಗಳನ್ನು ಮಾಡಲು ಬಯಸುತ್ತಿದೆ: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> ಮತ್ತು ಇತ್ಯಾದಿ</translation> +<translation id="865032292777205197">ಮೋಷನ್ ಸೆನ್ಸರ್ಗಳು</translation> <translation id="8650543407998814195">ನಿಮ್ಮ ಹಳೆಯ ಪ್ರೊಫೈಲ್ಗೆ ಪ್ರವೇಶಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗದಿದ್ದರೂ, ಅದನ್ನು ನೀವು ತೆಗೆದುಹಾಕಬಹುದು.</translation> <translation id="8651585100578802546">ಈ ಪುಟವನ್ನು ಮರುಲೋಡ್ ಮಾಡಲು ಒತ್ತಾಯಿಸಿ</translation> <translation id="8652400352452647993">ಪ್ಯಾಕ್ ವಿಸ್ತರಣೆ ದೋಷ</translation> @@ -6787,6 +6816,7 @@ <translation id="8785622406424941542">ಸ್ಟೈಲಸ್</translation> <translation id="8787254343425541995">ಹಂಚಿತ ನೆಟ್ವರ್ಕ್ಗಳಿಗಾಗಿ ಪ್ರಾಕ್ಸಿಗಳನ್ನು ಅನುಮತಿಸಿ</translation> <translation id="8791534160414513928">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಟ್ರಾಫಿಕ್ನೊಂದಿಗೆ "ಟ್ರ್ಯಾಕ್ ಮಾಡಬೇಡ" ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸು</translation> +<translation id="8792626944327216835">ಮೈಕ್ರೋಫೋನ್</translation> <translation id="879413103056696865">ಹಾಟ್ಸ್ಪಾಟ್ ಆನ್ ಆಗಿರುವಾಗ, ನಿಮ್ಮ <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">ಹೊಸ ವಿಂಡೊ</translation> <translation id="8797459392481275117">ಈ ಸೈಟ್ ಅನ್ನು ಎಂದಿಗೂ ಅನುವಾದಿಸಬೇಡಿ</translation> @@ -6826,6 +6856,7 @@ <translation id="8823559166155093873">ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation> <translation id="8823704566850948458">ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಸೂಚಿಸಿ...</translation> <translation id="8824701697284169214">&ಪುಟ ಸೇರಿಸು...</translation> +<translation id="8827125715368568315"><ph name="PERMISSION" /> ಮತ್ತು <ph name="COUNT" /> ಕ್ಕೂ ಹೆಚ್ಚಿನವುಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation> <translation id="8827289157496676362">ವಿಸ್ತರಣೆಯನ್ನು ಪಿನ್ ಮಾಡಿ</translation> <translation id="8827752199525959199">ಇನ್ನಷ್ಟು ಕ್ರಿಯೆಗಳು, <ph name="USERNAME" /> ಅವರಿಗಾಗಿ ಪಾಸ್ವರ್ಡ್ಗಳು <ph name="DOMAIN" /> ನಲ್ಲಿ</translation> <translation id="882854468542856424">ಸಮೀಪದ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಯಾವುದೇ ಸೈಟ್ಗೆ ಅನುಮತಿಸಬೇಡಿ</translation> @@ -6926,6 +6957,7 @@ <translation id="8932894639908691771">ಪ್ರವೇಶ ಬದಲಾಯಿಸುವಿಕೆ ಆಯ್ಕೆಗಳು</translation> <translation id="8933960630081805351">ಫೈಂಡರ್ನಲ್ಲಿ &ತೋರಿಸಿ</translation> <translation id="8934732568177537184">ಮುಂದುವರಿಸು</translation> +<translation id="8938306522009698937">ಹ್ಯಾಂಡ್ಲರ್ಗಳು</translation> <translation id="8938800817013097409">USB-C ಸಾಧನ (ಹಿಂಭಾಗದಲ್ಲಿನ ಬಲ ಪೋರ್ಟ್)</translation> <translation id="8940081510938872932">ಇದೀಗ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅತಿ ಹೆಚ್ಚು ವಿಷಯಗಳನ್ನು ಸಲ್ಲಿಸುತ್ತಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="8941173171815156065">'<ph name="PERMISSION" />' ಅನುಮತಿಯನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation> @@ -7231,6 +7263,7 @@ <translation id="987264212798334818">ಸಾಮಾನ್ಯ</translation> <translation id="987897973846887088">ಯಾವುದೇ ಚಿತ್ರಗಳು ಲಭ್ಯವಿಲ್ಲ</translation> <translation id="988978206646512040">ಖಾಲಿ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ</translation> +<translation id="991413375315957741">ಮೋಷನ್ ಅಥವಾ ಲೈಟ್ ಸೆನ್ಸರ್ಗಳು</translation> <translation id="992032470292211616">ವಿಸ್ತರಣೆಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಥೀಮ್ಗಳು ನಿಮ್ಮ ಸಾಧನಕ್ಕೆ ಹಾನಿಯುಂಟು ಮಾಡಬಹುದು. ಮುಂದುವರಿಯಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?</translation> <translation id="992256792861109788">ಗುಲಾಬಿ ಬಣ್ಣ</translation> <translation id="992592832486024913">ChromeVox ನಿಷ್ಕ್ರಿಯಗೊಳಿಸು (ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ)</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index c0a1529..7145fda7 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -424,6 +424,7 @@ <translation id="1465827627707997754">Бир кесим пицца</translation> <translation id="1468571364034902819">Бул профилди колдонууга болбойт</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{Өтмөктү Жаңы топко кошуу}other{Өтмөктөрдү Жаңы топко кошуу}}</translation> +<translation id="1470350905258700113">Ушул түзмөктү колдонуу</translation> <translation id="1470946456740188591">Caret серептөөсүн күйгүзүү же өчүрүү үчүн Ctrl+Search+7 ыкчам баскычын колдонуңуз</translation> <translation id="1472675084647422956">Дагы көрсөтүү</translation> <translation id="1474785664565228650">Микрофондун жөндөөлөрүнө өзгөртүүлөр киргизилгендиктен Parallels Desktop'ту кайра иштетүү керек. Улантуу үчүн Parallels Desktop'ту кайра иштетиңиз.</translation> @@ -1398,6 +1399,7 @@ <translation id="2541002089857695151">Толук экран режиминде трансляциялоо оптималдаштырылсынбы?</translation> <translation id="2541706104884128042">Жаңы уктоочу убакыт коюлду</translation> <translation id="2542050502251273923">Тармактын туташуусун башкаруучунун жана ff_debug колдонулган башка кызматтардагы мүчүлүштүктөрдү оңдоо деңгээлин жөндөйт.</translation> +<translation id="2544292303401268586">Администраторуңуз колдонмолорду жаңыртуу үчүн түзмөктү өчүрүп күйгүзүүнү суранды. Бул бир нече мүнөттө аткарылат.</translation> <translation id="2544853746127077729">Аныктыкты текшерүү тастыктамасын тармак четке какты</translation> <translation id="2546283357679194313">Кукилер жана сайттын дайындары</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> – уруксат берилди</translation> @@ -2780,6 +2782,7 @@ <translation id="409579654357498729">Cloud Принтерге кошуу</translation> <translation id="4096508467498758490">Иштеп чыгуучу режиминин кеңейтүүлөрүн өчүрүп коюу</translation> <translation id="4097406557126260163">Колдонмолор жана кеңейтүүлөр</translation> +<translation id="409742781329613461">Chrome үчүн кеңештер</translation> <translation id="4097560579602855702">Google'да издөө</translation> <translation id="4098667039111970300">Стилус куралдарын тилкеде көрсөтүү</translation> <translation id="4099060993766194518">Демейки издөө каражаты калыбына келтирилсинби?</translation> @@ -4089,6 +4092,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> дегенге окуу жана жазуу мүмкүнчүлүгү берилди.</translation> <translation id="5678955352098267522">Дайын-даректериңизди <ph name="WEBSITE_1" /> дарегинен окуңуз</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" өчүрүлсүнбү?</translation> +<translation id="5683806393796685434">Жандандыруу кодун киргизиңиз</translation> <translation id="5684181005476681636">Wi‑Fi'дын чоо-жайы</translation> <translation id="5684661240348539843">Менчик объектисинин далдаштырма коду</translation> <translation id="5687326903064479980">Убакыт алкагы</translation> @@ -4340,6 +4344,7 @@ <translation id="5978277834170881274">Негизги орфографиялык текшерүү функциясын колдонуу</translation> <translation id="5979084224081478209">Сырсөздөрдү текшерүү</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{1 мүмкүн болгон кооптуу кеңейтүүнү кайра күйгүздүңүз}other{{NUM_EXTENSIONS} мүмкүн болгон кооптуу кеңейтүүнү кайра күйгүздүңүз}}</translation> +<translation id="5979353814339191480">Бул параметр тарифтик план же мобилдик тармак ачкычы менен иштеген, же болбосо көчмө байланыш түйүнүнө туташкан Chromebook түзмөктөрүнө колдонулат</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" /> тилине &которуу</translation> <translation id="5979469435153841984">Веб беттердин даректерин сактоо үчүн дарек тилкесиндеги жылдызчаны чыкылдатыңыз</translation> <translation id="5984222099446776634">Жакында каралгандар</translation> @@ -4819,6 +4824,7 @@ <translation id="653659894138286600">Документтерди жана сүрөттөрдү скандоо</translation> <translation id="6537613839935722475">Аталышта тамгаларды, сандарды жана дефистерди (-) колдонууга болот</translation> <translation id="6537880577641744343">Буйрук берүүчү</translation> +<translation id="6538098297809675636">Код аныкталбай койду</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Эскертүү:<ph name="END_BOLD" /> Дайындар топтолгондо иш тутуму бир кыйла жай иштеп калат, эмне кылыш керек экендигин так билсеңиз же сизден ошондой аракет суралганда гана иштетиңиз.</translation> <translation id="6541638731489116978">Бул сайттын кыймыл сенсорлорун колдонуу мүмкүнчүлүгү бөгөттөлгөн.</translation> <translation id="6545665334409411530">Кайталоо ылдамдыгы</translation> @@ -6015,6 +6021,7 @@ <translation id="7904526211178107182">Тармагыңыздагы башка түзмөктөргө Linux оюкчаларын колдонууга уруксат бериңиз</translation> <translation id="7907837847548254634">Фокуска алынган объектти бөлүп көрсөтүү</translation> <translation id="7908378463497120834">Кечиресиз, тышкы сактагыч түзмөгүнүн жада калса бир бөлүгү жалгаштырылган жок.</translation> +<translation id="7909324225945368569">Профилиңиздин аталышын өзгөртүңүз</translation> <translation id="7909969815743704077">Жашыруун режимде жүктөлүп алынды</translation> <translation id="7910768399700579500">&Жаңы куржун</translation> <translation id="7911118814695487383">Linux</translation> @@ -6631,6 +6638,7 @@ <translation id="8642900771896232685">2 секунд</translation> <translation id="8642947597466641025">Текстти чоңураак кылуу</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> кооптуу болушу мүмкүн. Google'дун Өркүндөтүлгөн коргоо программасына текшерүү үчүн жөнөтүлсүнбү?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{Cookie файлдары жок}=1{1 cookie файлы бөгөттөлдү}other{# cookie файлы бөгөттөлдү}}</translation> <translation id="8644655801811752511">Бул коопсуздук ачкычы баштапкы абалга келтирилбей жатат. Ачкычты киргизериңиз менен, баштапкы абалына келтирип көрүңүз.</translation> <translation id="8645354835496065562">Сенсорду колдонуу мүмкүнчүлүгүнө уруксат бериле берсин</translation> <translation id="8645920082661222035">Кооптуу нерселерди божомолдоп, алар орун алганга чейин сизге кабарлап турат</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 67ebefb..811afc2 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -236,6 +236,7 @@ <translation id="125220115284141797">Numatytoji</translation> <translation id="1252987234827889034">Įvyko profilio klaida</translation> <translation id="1254593899333212300">Tiesioginis interneto ryšys</translation> +<translation id="1257553931232494454">mastelio keitimo lygiai</translation> <translation id="1259152067760398571">Saugos patikra atlikta vakar</translation> <translation id="1260451001046713751">Visada leisti rodyti iššokančiuosius langus ir peradresavimus iš <ph name="HOST" /></translation> <translation id="1261380933454402672">Vidutinis</translation> @@ -674,6 +675,7 @@ <translation id="1729533290416704613">Ji taip pat kontroliuoja, koks puslapis rodomas, kai ieškote „Omnibox“.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Jei norite pašalinti programas, eikite į skiltį „Nustatymai“ > „Google Play“ parduotuvė“ > „Tvarkyti „Android“ nuostatas“ > „Programos“ arba „Programų tvarkytuvė“. Tada palieskite programą, kurią norite pašalinti (gali reikėti perbraukti į dešinę arba į kairę, kad rastumėte programą). Tada palieskite „Pašalinti“ arba „Išjungti“.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Siunčiama užklausa...</translation> +<translation id="1733064249834771892">šriftai</translation> <translation id="1733383495376208985">Šifruokite sinchronizuojamus duomenis taikydami savo <ph name="BEGIN_LINK" />sinchronizavimo slaptafrazę<ph name="END_LINK" />. Neįtraukiami mokėjimo metodai ir adresai iš „Google Pay“.</translation> <translation id="1734212868489994726">Šviesiai mėlyna</translation> <translation id="1734230530703461088">Nepavyko įkelti plėtinių per apribotą laiką. Susisiekite su administratoriumi.</translation> @@ -761,6 +763,7 @@ <translation id="1818913467757368489">Žurnalas įkeliamas.</translation> <translation id="1819721979226826163">Palieskite „Programų pranešimai“ > „Google Play“ paslaugos“.</translation> <translation id="1820028137326691631">Įveskite administratoriaus suteiktą slaptažodį</translation> +<translation id="182139138257690338">automatiniai atsisiuntimai</translation> <translation id="1822140782238030981">Jau naudojate „Chrome“? Prisijunkite</translation> <translation id="18245044880483936">Atsarginės kopijos duomenys nebus įtraukti skaičiuojant vaiko Disko saugyklos kvotą.</translation> <translation id="1825565032302550710">Prievadas turi būti nuo 1024 iki 65535</translation> @@ -1201,6 +1204,7 @@ <translation id="2326931316514688470">&Įkelti programą iš naujo</translation> <translation id="2327492829706409234">Įgalinti programą</translation> <translation id="2328561734797404498">Paleiskite įrenginį iš naujo, kad galėtumėte naudoti programą „<ph name="APP_NAME" />“.</translation> +<translation id="2329182534073751090">lango padėties nustatymas</translation> <translation id="2329597144923131178">Pris. ir pas. žymių, ist., slapt. bei kitų nust. duom. visuose įreng.</translation> <translation id="2332131598580221120">Žiūrėti parduotuvėje</translation> <translation id="2332192922827071008">Atidarykite nuostatas</translation> @@ -1713,6 +1717,7 @@ <translation id="2894757982205307093">Naujas skirtukas grupėje</translation> <translation id="289644616180464099">SIM kortelė užrakinta</translation> <translation id="289695669188700754">Rakto ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Šis tinkintas nustatymas bus pašalintas, kai uždarysite visus inkognito langus</translation> <translation id="2897878306272793870">Ar tikrai norite atidaryti <ph name="TAB_COUNT" /> skirtukus(-ų)?</translation> <translation id="290105521672621980">Faile naudojamos nepalaikomos funkcijos</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> nepavyko užmegzti ryšio su šiuo spausdintuvu. Įsitikinkite, kad spausdintuvas įjungtas į maitinimo lizdą, ir bandykite dar kartą.</translation> @@ -1802,6 +1807,7 @@ <translation id="2996286169319737844">Duomenys užšifruoti naudojant sinchronizavimo slaptafrazę. Neįtraukiami mokėjimo metodai ir adresai iš „Google Pay“.</translation> <translation id="2996722619877761919">Versti pagal ilgąjį kraštą</translation> <translation id="3000236644796679448">Svetainėse gali būti prašoma naudoti jūsų mikrofoną (rekomenduojama)</translation> +<translation id="3000378525979847272">Leidžiama: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Monofoninis garsas</translation> <translation id="3001144475369593262">Vaikų paskyros</translation> <translation id="3003144360685731741">Pageidaujami tinklai</translation> @@ -2061,6 +2067,7 @@ <translation id="3305661444342691068">Atidaryti PDF peržiūros režimu</translation> <translation id="3308116878371095290">Šiame puslapyje neleidžiama nustatyti slapukų.</translation> <translation id="3308134619352333507">Paslėpti mygtuką</translation> +<translation id="3308738399950580893">skelbimai</translation> <translation id="3308852433423051161">Įkeliamas „Google“ padėjėjas...</translation> <translation id="3309330461362844500">Sertifikuojamo profilio ID</translation> <translation id="3311445899360743395">Su šia programa susieti duomenys gali būti pašalinti iš šio įrenginio.</translation> @@ -2121,6 +2128,7 @@ <translation id="3388788256054548012">Šis failas šifruotas. Paprašykite jo savininko iššifruoti.</translation> <translation id="3390013585654699824">Išsami programos informacija</translation> <translation id="3390741581549395454">Sėkmingai sukurta „Linux“ programų ir failų atsarginė kopija. Netrukus bus pradėta naujovinti.</translation> +<translation id="3391482648489541560">failo redagavimas</translation> <translation id="339178315942519818">Peržiūrėkite pokalbių programų pranešimus „<ph name="DEVICE_TYPE" />“ įrenginyje</translation> <translation id="3396800784455899911">Spustelėdami mygtuką „Sutikti ir tęsti“ sutinkate, kad šios „Google“ paslaugos būtų apdorojamos, kaip aprašyta anksčiau.</translation> <translation id="3399432415385675819">Pranešimai bus išjungti</translation> @@ -2897,6 +2905,7 @@ <translation id="425573743389990240">Akumuliatoriaus iškrovos koeficientas vatais (neigiama vertė reiškia, kad akumuliatorius įkraunamas)</translation> <translation id="4256316378292851214">Iš&saugoti vaizdo įrašą kaip...</translation> <translation id="4258348331913189841">Failų sistemos</translation> +<translation id="4259381619085088639">jūsų veiklos duomenys</translation> <translation id="4259388776256904261">Tai gali šiek tiek užtrukti</translation> <translation id="4260182282978351200">Failas „<ph name="FILE_NAME" />“ gali būti pavojingas. Siųsti „Google“ papildomos apsaugos programai, kad nuskaitytų? Kad perjungtumėte į atsisiuntimų juostą, paspauskite „Shift“ + F6.</translation> <translation id="4263223596040212967">Patikrinkite klaviatūros išdėstymą ir bandykite dar kartą.</translation> @@ -2933,6 +2942,7 @@ <translation id="4303079906735388947">Nustatykite naują saugos rakto PIN kodą</translation> <translation id="4305402730127028764">Kopijuoti į „<ph name="DEVICE_NAME" />“</translation> <translation id="4306119971288449206">Teikiamų programų turinio tipas turi būti „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">iškarpinė</translation> <translation id="4307992518367153382">Pagrindai</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB tiesiogiai)</translation> <translation id="4310139701823742692">Failas netinkamo formato. Patikrinkite PPD failą ir bandykite dar kartą.</translation> @@ -3020,6 +3030,7 @@ <translation id="4412698727486357573">Pagalbos centras</translation> <translation id="44141919652824029">Leisti „<ph name="APP_NAME" />“ gauti prijungtų USB įrenginių sąrašą?</translation> <translation id="4414232939543644979">Naujas &inkognito langas</translation> +<translation id="4414515549596849729">slapukai ir svetainės duomenys</translation> <translation id="4415213869328311284">Esate pasirengę naudoti „<ph name="DEVICE_TYPE" />“ įrenginį.</translation> <translation id="4415245286584082850">Įrenginių nerasta. Atidarykite pagalbos centro straipsnį naujame skirtuke.</translation> <translation id="4415276339145661267">„Google“ paskyros tvarkymas</translation> @@ -3091,6 +3102,7 @@ <translation id="4493468155686877504">Rekomenduojama (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Nerodyti šiame puslapyje</translation> <translation id="4500114933761911433">Papildinys „<ph name="PLUGIN_NAME" />“ užstrigo</translation> +<translation id="4500587658229086076">nesaugus turinys</translation> <translation id="450099669180426158">Šauktuko piktograma</translation> <translation id="4501530680793980440">Patvirtinti pašalinimą</translation> <translation id="4502423230170890588">Pašalinti iš šio įrenginio</translation> @@ -3131,6 +3143,7 @@ <translation id="4538684596480161368">Visada blokuoti į smėlio dėžę neįtrauktus papildinius, esančius <ph name="HOST" /></translation> <translation id="4538792345715658285">Įdiegta pagal įmonės politiką.</translation> <translation id="4541662893742891060">Nepavyko prisijungti prie šio profilio. Jei reikia techninio palaikymo, susisiekite su operatoriumi.</translation> +<translation id="4541810033354695636">išplėstoji realybė</translation> <translation id="4542520061254486227">Skaityti duomenis svetainėse <ph name="WEBSITE_1" /> ir <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Sertifikatų tvarkytuvė</translation> <translation id="4544174279960331769">Numatytasis mėlynas pseudoportretas</translation> @@ -3603,6 +3616,7 @@ <translation id="5112577000029535889">&Kūrėjo įrankiai</translation> <translation id="5113739826273394829">Spustelėję šią piktogramą, neautomatiškai užrakinsite šį „<ph name="DEVICE_TYPE" />“. Kitą kartą norėdami įeiti turėsite įvesti slaptažodį.</translation> <translation id="51143538739122961">Įdėkite saugos raktą ir jį palieskite</translation> +<translation id="5114987907971894280">virtualioji realybė</translation> <translation id="5115309401544567011">Prijunkite „<ph name="DEVICE_TYPE" />“ prie maitinimo šaltinio.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Iš&saugoti garso įrašą kaip...</translation> @@ -3902,6 +3916,7 @@ <translation id="5464632865477611176">Paleisti šį kartą</translation> <translation id="5464660706533281090">Šio nustatymo negalima pakeisti, jei naudotojas yra vaikas.</translation> <translation id="5466374726908360271">Įk&klijuoti ir ieškoti „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Užblokuota: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Svetainėse gali būti prašoma leisti apsaugotą turinį (rekomenduojama)</translation> <translation id="5468173180030470402">Ieškoma failų bendrinimo įrenginių</translation> <translation id="5469852975082458401">Puslapius galite naršyti naudodami teksto žymeklį. Paspauskite F7, kad išjungtumėte.</translation> @@ -4194,6 +4209,7 @@ <translation id="5794786537412027208">Uždaryti visas „Chrome“ programas</translation> <translation id="5797070761912323120">„Google“ gali naudoti jūsų istoriją, kad suasmenintų Paiešką, skelbimus ir kitas „Google“ paslaugas</translation> <translation id="5798301976526354562">Teksto dydis (taip pat taikoma subtitrams realiuoju laiku)</translation> +<translation id="579907812742603813">saugomas turinys</translation> <translation id="579915268381781820">Saugos raktas buvo pašalintas.</translation> <translation id="5799508265798272974">„Linux“ virtualus įrenginys: „<ph name="LINUX_VM_NAME" />“</translation> <translation id="5800020978570554460">Paskirties failas buvo sutrumpintas arba pašalintas po paskutinio atsisiuntimo.</translation> @@ -4267,6 +4283,7 @@ <translation id="5877064549588274448">Kanalas pakeistas. Kad pritaikytumėte pakeitimus, iš naujo paleiskite įrenginį.</translation> <translation id="5877584842898320529">Pasirinktas spausdintuvas nepasiekiamas arba netinkamai įdiegtas. <ph name="BR" /> Patikrinkite spausdintuvą arba pabandykite pasirinkti kitą spausdintuvą.</translation> <translation id="5882919346125742463">Žinomi tinklai</translation> +<translation id="5883356647197510494">Automatiškai užblokuota: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Šis skirtukas susietas su USB įrenginiu.</translation> <translation id="5886009770935151472">Pirmas pirštas</translation> <translation id="5889282057229379085">Didžiausias tarpinių CA skaičius: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4766,6 +4783,7 @@ <translation id="6460601847208524483">Rasti kitą</translation> <translation id="6461170143930046705">Ieškoma tinklų…</translation> <translation id="6463795194797719782">&Redaguoti</translation> +<translation id="6464094930452079790">vaizdai</translation> <translation id="6464825623202322042">Šis įrenginys</translation> <translation id="6465841119675156448">Be interneto</translation> <translation id="6466988389784393586">&Atidaryti visas žymes</translation> @@ -4789,6 +4807,7 @@ <translation id="6491376743066338510">Nepavyko suteikti prieigos teisės</translation> <translation id="6494327278868541139">Rodyti išsamią informaciją apie sustiprintą apsaugą</translation> <translation id="6494445798847293442">Ne sertifikavimo institucija</translation> +<translation id="6494750904506170417">iššokantieji langai ir peradresavimai</translation> <translation id="6494974875566443634">Tinkinimas</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" /> tinklas iš <ph name="NETWORK_COUNT" />, „<ph name="NETWORK_NAME" />“, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signalo stiprumas <ph name="SIGNAL_STRENGTH" /> %, tvarko administratorius, išsami informacija</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Šiuose duomenyse yra neskelbtino arba pavojingo turinio}=1{Šiame faile yra neskelbtino arba pavojingo turinio}one{Šiuose failuose yra neskelbtino arba pavojingo turinio}few{Šiuose failuose yra neskelbtino arba pavojingo turinio}many{Šiuose failuose yra neskelbtino arba pavojingo turinio}other{Šiuose failuose yra neskelbtino arba pavojingo turinio}}</translation> @@ -4929,6 +4948,7 @@ <translation id="6657585470893396449">Slaptažodis</translation> <translation id="6659213950629089752">Šio puslapio mastelį pakeitė plėtinys „<ph name="NAME" />“</translation> <translation id="6659594942844771486">Skirtukas</translation> +<translation id="6660413144148052430">vietovė</translation> <translation id="666099631117081440">Spausdinimo serveriai</translation> <translation id="6663190258859265334">Baigę naudoti funkciją „Powerwash“ grąžinkite ankstesnę „<ph name="DEVICE_TYPE" />“ įrenginio versiją.</translation> <translation id="6664237456442406323">Deja, jūsų kompiuteris yra sukonfigūruotas naudojant netinkamai suformuotą aparatinės įrangos ID. Tai neleidžia „Chrome“ OS atnaujinti naujausiais saugos pataisymais ir jūsų kompiuteris <ph name="BEGIN_BOLD" />gali būti neatsparus kenkėjiškoms programoms<ph name="END_BOLD" />.</translation> @@ -4983,6 +5003,7 @@ <translation id="672609503628871915">Sužinokite, kas naujo</translation> <translation id="67269783048918309">Siųskite naudojimo ir diagnostikos duomenis. Šiuo metu šis įrenginys automatiškai siunčia „Google“ diagnostikos, įrenginio ir programų naudojimo duomenis. Tai nebus naudojama siekiant nustatyti jūsų vaiko tapatybę ir padės pagerinti sistemos bei programos stabilumą ir teikti kitus patobulinimus. Kai kurie sukaupti duomenys taip pat bus naudingi „Google“ programoms ir partneriams, pvz., „Android“ kūrėjams. Šį <ph name="BEGIN_LINK1" />nustatymą<ph name="END_LINK1" /> taiko savininkas. Jei papildomas „Žiniatinklio ir programų veiklos“ nustatymas įjungtas vaiko įrenginyje, šie duomenys gali būti išsaugoti vaiko „Google“ paskyroje. <ph name="BEGIN_LINK2" />Sužinokite daugiau<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Prisijungta, akumuliatoriaus įkrovos lygis: <ph name="BATTERY_PERCENTAGE" /> proc.</translation> +<translation id="6732087373923685049">fotoaparatas</translation> <translation id="6732801395666424405">Sertifikatai neįkelti</translation> <translation id="6732900235521116609">Negalima pašalinti sparčiojo klavišo</translation> <translation id="6734468588183300211">Kai įjungtas inkognito režimas, svetainės negali naudoti slapukų, siekdamos sužinoti apie naršymo veiklą skirtingose svetainėse, pavyzdžiui, kad galėtų suasmeninti skelbimus. Funkcijos gali neveikti tam tikrose svetainėse.</translation> @@ -5057,6 +5078,7 @@ <translation id="6817174620439930047">Paklausti, kai svetainė nori naudoti sistemos išskirtinius pranešimus MIDI įrenginiams pasiekti (rekomenduojama)</translation> <translation id="6818198425579322765">Verčiama puslapio kalba</translation> <translation id="6818802132960437751">Integruota apsauga nuo virusų</translation> +<translation id="6820143000046097424">nuoseklieji prievadai</translation> <translation id="682123305478866682">Darbalaukio perdavimas</translation> <translation id="6823174134746916417">Paspaudimas palietus jutiklinę dalį</translation> <translation id="6824564591481349393">Kopijuoti &el. pašto adresą</translation> @@ -5490,6 +5512,7 @@ <translation id="730515362922783851">Keistis duomenimis su bet kuriuo įrenginiu vietiniame tinkle ar internete</translation> <translation id="7306521477691455105">Atidarykite skiltį „Nustatymai“, kad prijungtumėte „<ph name="USB_DEVICE_NAME" />“ prie „<ph name="USB_VM_NAME" />“</translation> <translation id="7307129035224081534">Pristabdyta</translation> +<translation id="7308436126008021607">fono sinchronizavimas</translation> <translation id="7309257895202129721">Rodyti &valdiklius</translation> <translation id="7310598146671372464">Nepavyko prisijungti. Serveris nepalaiko nurodytų „Kerberos“ šifruotės tipų. Susisiekite su administratoriumi.</translation> <translation id="7320213904474460808">Nustatyti tinklą kaip numatytąjį</translation> @@ -5631,6 +5654,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Būtina grąžinti nedelsiant}one{Grąžinkite „<ph name="DEVICE_TYPE" />“ įrenginį per {NUM_DAYS} dieną}few{Grąžinkite „<ph name="DEVICE_TYPE" />“ įrenginį per {NUM_DAYS} dienas}many{Grąžinkite „<ph name="DEVICE_TYPE" />“ įrenginį per {NUM_DAYS} dienos}other{Grąžinkite „<ph name="DEVICE_TYPE" />“ įrenginį per {NUM_DAYS} dienų}}</translation> <translation id="7475671414023905704">„Netscape“ prarasto slaptažodžio URL</translation> <translation id="7476454130948140105">Akumuliatorius per daug išsikrovęs, kad būtų galima atnaujinti (<ph name="BATTERY_PERCENT" /> proc.)</translation> +<translation id="7476989672001283112">Automatiškai užblokuota: <ph name="PERMISSION" /> ir dar <ph name="COUNT" /></translation> <translation id="7477793887173910789">Valdykite savo muziką, vaizdo įrašus ir žaidimus</translation> <translation id="7478485216301680444">Nepavyko įdiegti viešojo terminalo programos.</translation> <translation id="7478623944308207463">Programos ir nustatymai bus sinchronizuojami visuose „Chrome“ OS įrenginiuose, kuriuose esate prisijungę naudodami „Google“ paskyrą. Norėdami pasiekti naršyklės sinchronizavimo parinktis, eikite į <ph name="LINK_BEGIN" />„Chrome“ nustatymų skiltį<ph name="LINK_END" />.</translation> @@ -6375,6 +6399,7 @@ <translation id="8288032458496410887">Pašalinti „<ph name="APP" />“...</translation> <translation id="8289128870594824098">Disko dydis</translation> <translation id="8293206222192510085">Pridėti žymę</translation> +<translation id="829335040383910391">garsas</translation> <translation id="8294431847097064396">Šaltinis</translation> <translation id="8298429963694909221">Dabar galite gauti pranešimus iš telefono „<ph name="DEVICE_TYPE" />“ įrenginyje. Jei atsisakysite pranešimų „<ph name="DEVICE_TYPE" />“, atsisakysite jų ir telefone. Įsitikinkite, kad telefonas netoliese ir jame įjungtas „Bluetooth“ bei „Wi-Fi“ ryšys.</translation> <translation id="8299319456683969623">Šiuo metu esate neprisijungę.</translation> @@ -6393,6 +6418,7 @@ <translation id="8317671367883557781">Pridėti tinklo ryšį</translation> <translation id="8319414634934645341">Išplėstinis rakto naudojimas</translation> <translation id="8320459152843401447">Visas ekranas</translation> +<translation id="8321476692217554900">pranešimai</translation> <translation id="8321837372750396788">Šį „<ph name="DEVICE_TYPE" />“ įrenginį tvarkys <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Šis puslapis užblokuotas, kad nepasiektų jūsų mikrofono.</translation> <translation id="8323167517179506834">Įveskite URL</translation> @@ -6458,7 +6484,9 @@ <translation id="8403562727702715619">Neseniai iš „Google“ disko</translation> <translation id="8407199357649073301">Žurnalo lygis:</translation> <translation id="8408068190360279472">Tinklas: <ph name="NETWORK_TYPE" />, jungiamasi</translation> +<translation id="8409413588194360210">mokėjimų doroklės</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Leidžiama: <ph name="PERMISSION" /> ir dar <ph name="COUNT" /></translation> <translation id="8413385045638830869">Pirmiausia paklausti (rekomenduojama)</translation> <translation id="8417548266957501132">Vieno iš tėvų slaptažodis</translation> <translation id="8418445294933751433">&Rodyti kaip skirtuką</translation> @@ -6654,6 +6682,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> arba <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Nakties šviesos spalvų temperatūra</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> nori gauti šiuos leidimus: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> ir kt.</translation> +<translation id="865032292777205197">judesio jutikliai</translation> <translation id="8650543407998814195">Nors nebegalite pasiekti seno profilio, vis tiek galite jį pašalinti.</translation> <translation id="8651585100578802546">Priversti iš naujo įkelti šį puslapį</translation> <translation id="8652400352452647993">Paketo plėtinio klaida</translation> @@ -6793,6 +6822,7 @@ <translation id="8785622406424941542">Rašiklis</translation> <translation id="8787254343425541995">Leisti tarpinius serverius bendrai naudojamuose tinkluose</translation> <translation id="8791534160414513928">Su naršymo srautu siųsti užklausą „Nestebėti“</translation> +<translation id="8792626944327216835">mikrofonas</translation> <translation id="879413103056696865">Kai viešosios interneto prieigos taškas bus įjungtas, „<ph name="PHONE_NAME" />“:</translation> <translation id="8795916974678578410">Naujas langas</translation> <translation id="8797459392481275117">Niekada neversti šios svetainės</translation> @@ -6832,6 +6862,7 @@ <translation id="8823559166155093873">Blokuoti slapukus</translation> <translation id="8823704566850948458">Siūlyti slaptažodį...</translation> <translation id="8824701697284169214">Pridėti pu&slapį...</translation> +<translation id="8827125715368568315">Užblokuota: <ph name="PERMISSION" /> ir dar <ph name="COUNT" /></translation> <translation id="8827289157496676362">Prisegti plėtinį</translation> <translation id="8827752199525959199">Daugiau veiksmų, <ph name="USERNAME" /> (<ph name="DOMAIN" />) slaptažodis</translation> <translation id="882854468542856424">Neleisti jokiai svetainei atrasti netoliese esančių „Bluetooth“ įrenginių</translation> @@ -6932,6 +6963,7 @@ <translation id="8932894639908691771">Prieigos jungikliu parinktys</translation> <translation id="8933960630081805351">&Rodyti ieškojimo priemonėje</translation> <translation id="8934732568177537184">Tęsti</translation> +<translation id="8938306522009698937">doroklės</translation> <translation id="8938800817013097409">USB-C įrenginys (prievadas dešinėje, užpakalinėje dalyje)</translation> <translation id="8940081510938872932">Kompiuteriu atliekama per daug veiksmų šiuo metu. Vėliau bandykite dar kartą.</translation> <translation id="8941173171815156065">Anuliuoti leidimą „<ph name="PERMISSION" />“</translation> @@ -7236,6 +7268,7 @@ <translation id="987264212798334818">Bendra</translation> <translation id="987897973846887088">Nėra pasiekiamų vaizdų</translation> <translation id="988978206646512040">Neleidžiama naudoti tuščio slaptafrazės lauko</translation> +<translation id="991413375315957741">judesio arba šviesos jutikliai</translation> <translation id="992032470292211616">Plėtiniai, programos ir temos gali pakenkti įrenginiui. Tikrai norite tęsti?</translation> <translation id="992256792861109788">Rožinė</translation> <translation id="992592832486024913">Išjungti „ChromeVox“ (ekrano skaitymą balsu)</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 02c5d43..ddab38c 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">Стандардни</translation> <translation id="1252987234827889034">Се појави грешка на профилот</translation> <translation id="1254593899333212300">Директна интернет-врска</translation> +<translation id="1257553931232494454">нивоа на зумирање</translation> <translation id="1259152067760398571">Безбедносната проверка беше извршена вчера</translation> <translation id="1260451001046713751">Секогаш дозволувај скокачки прозорци и пренасочувања од <ph name="HOST" /></translation> <translation id="1261380933454402672">Умерено</translation> @@ -672,6 +673,7 @@ <translation id="1729533290416704613">Исто така, контролира која страница е прикажана кога пребарувате од Omnibox.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />За да ги отстраните апликациите, одете во „Поставки > Google Play Store > Управувајте со поставките за Android > Апликации или Управник со апликации“. Потоа допрете ја апликацијата што сакате да ја деинсталирате (можеби ќе треба да повлечете надесно или налево за да ја најдете). Потоа допрете „Деинсталирај“ или „Оневозможи“.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Се испраќа барање…</translation> +<translation id="1733064249834771892">фонтови</translation> <translation id="1733383495376208985">Шифрирајте ги синхронизираните податоци со сопствената <ph name="BEGIN_LINK" />лозинка за синхронизација<ph name="END_LINK" />. Тоа не ги вклучува начините на плаќање и адресите од Google Pay.</translation> <translation id="1734212868489994726">Светлосина</translation> <translation id="1734230530703461088">Екстензиите не успеаја да се вчитаат во рамките на временското ограничување. Контактирајте со администраторот.</translation> @@ -759,6 +761,7 @@ <translation id="1818913467757368489">Прикачувањето на евиденцијата е во тек.</translation> <translation id="1819721979226826163">Допрете „Известувања за апликации > Услуги на Google Play“.</translation> <translation id="1820028137326691631">Внесете лозинка што ви ја обезбедил администраторот</translation> +<translation id="182139138257690338">автоматски преземања</translation> <translation id="1822140782238030981">Веќе сте корисник на Chrome? Најавете се</translation> <translation id="18245044880483936">Податоците од бекапот нема да се вбројуваат во квотата за простор на Drive на вашето дете.</translation> <translation id="1825565032302550710">Портата мора да биде помеѓу 1024 и 65535</translation> @@ -1199,6 +1202,7 @@ <translation id="2326931316514688470">&Вчитај ја апликацијата повторно</translation> <translation id="2327492829706409234">Вклучи апликација</translation> <translation id="2328561734797404498">Рестартирајте го уредот за да го користите <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">положба на прозорец</translation> <translation id="2329597144923131178">Најавете се за да ги добиете обележувачите, историјата, лозинките и другите поставки на сите ваши уреди.</translation> <translation id="2332131598580221120">Прикажи во продавница</translation> <translation id="2332192922827071008">Отвори ги „Поставките“</translation> @@ -1711,6 +1715,7 @@ <translation id="2894757982205307093">Нова картичка во групата</translation> <translation id="289644616180464099">SIM-картичката е заклучена</translation> <translation id="289695669188700754">ИД на клуч: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Оваа приспособена поставка ќе биде отстранета кога ќе ги затворите сите ваши прозорци „Инкогнито“</translation> <translation id="2897878306272793870">Дали сте сигурни дека сакате да отворите <ph name="TAB_COUNT" /> картички?</translation> <translation id="290105521672621980">Датотеката користи неподдржани функции</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> не може да комуницира со печатачов. Погрижете се печатачот да е приклучен и обидете се повторно.</translation> @@ -1800,6 +1805,7 @@ <translation id="2996286169319737844">Податоците се шифрирани со вашата лозинка за синхронизација. Тоа не ги вклучува начините на плаќање и адресите од Google Pay.</translation> <translation id="2996722619877761919">Прелистување од долгиот раб</translation> <translation id="3000236644796679448">Сајтовите може да прашуваат дали да го користат микрофонот (се препорачува)</translation> +<translation id="3000378525979847272">Дозволени: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Моно аудио</translation> <translation id="3001144475369593262">Детски сметки</translation> <translation id="3003144360685731741">Претпочитани мрежи</translation> @@ -2059,6 +2065,7 @@ <translation id="3305661444342691068">Отвори PDF во Преглед</translation> <translation id="3308116878371095290">Ја спречивме страницата да поставува колачиња.</translation> <translation id="3308134619352333507">Сокриј копче</translation> +<translation id="3308738399950580893">реклами</translation> <translation id="3308852433423051161">Се вчитува „Помошникот на Google“…</translation> <translation id="3309330461362844500">ID за профилот на сертификатот</translation> <translation id="3311445899360743395">Податоците поврзани со апликацијава можеби ќе се отстранат од уредов.</translation> @@ -2119,6 +2126,7 @@ <translation id="3388788256054548012">Датотекава е шифрирана. Побарајте од сопственикот да ја дешифрира.</translation> <translation id="3390013585654699824">Детали за апликацијата</translation> <translation id="3390741581549395454">Успешно е направен бекап на апликациите и датотеките на Linux. Надградбата ќе започне наскоро.</translation> +<translation id="3391482648489541560">изменување датотеки</translation> <translation id="339178315942519818">Прегледувајте ги известувањата од апликациите за разговор на вашиот <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Ако кликнете на копчето „Прифати и продолжи“, се согласувате со обработката опишана погоре за овие услуги на Google.</translation> <translation id="3399432415385675819">Известувањата ќе се оневозможат</translation> @@ -2895,6 +2903,7 @@ <translation id="425573743389990240">Стапка на празнење батерија во вати (негативната вредност значи дека батеријата се полни)</translation> <translation id="4256316378292851214">За&чувај видео како...</translation> <translation id="4258348331913189841">Датотечни системи</translation> +<translation id="4259381619085088639">вашето присуство</translation> <translation id="4259388776256904261">Ова може да потрае</translation> <translation id="4260182282978351200">Датотеката <ph name="FILE_NAME" /> можеби е опасна. Да се испрати во „Напредна заштита на Google“ за скенирање? Притиснете Shift + F6 за да одите до областа на лентата за преземања.</translation> <translation id="4263223596040212967">Проверете го распоредот на тастатурата и обидете се повторно.</translation> @@ -2931,6 +2940,7 @@ <translation id="4303079906735388947">Поставете нов PIN-код за вашиот безбедносен клуч</translation> <translation id="4305402730127028764">Копирај во <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Апликациите мора да се послужат со типот содржина „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">привремена меморија</translation> <translation id="4307992518367153382">Основи</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />К (<ph name="NUM_KILOBYTES_LIVE" />К во живо)</translation> <translation id="4310139701823742692">Погрешен формат на датотека. Проверете ја PPD-датотеката и обидете се повторно.</translation> @@ -3018,6 +3028,7 @@ <translation id="4412698727486357573">Центар за помош</translation> <translation id="44141919652824029">Дали дозволувате <ph name="APP_NAME" /> да го преземе списокот со прикачените USB-уреди?</translation> <translation id="4414232939543644979">Нов &инкогнито прозорец</translation> +<translation id="4414515549596849729">колачиња и податоци за сајтот</translation> <translation id="4415213869328311284">Спремни сте да почнете да го користите <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Не се пронајдени уреди. Отворете статија од центарот за помош во нова картичка.</translation> <translation id="4415276339145661267">Управувајте со сметката на Google</translation> @@ -3089,6 +3100,7 @@ <translation id="4493468155686877504">Препорачано (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Да не се покажува на оваа страница</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> падна</translation> +<translation id="4500587658229086076">небезбедни содржини</translation> <translation id="450099669180426158">Икона извичник</translation> <translation id="4501530680793980440">Потврди отстранување</translation> <translation id="4502423230170890588">Отстрани од уредов</translation> @@ -3129,6 +3141,7 @@ <translation id="4538684596480161368">Секогаш блокирај неизолирани приклучоци на <ph name="HOST" /></translation> <translation id="4538792345715658285">Инсталирано од компаниската политика.</translation> <translation id="4541662893742891060">Не може да се поврзе со профилов. За техничка поддршка, контактирајте со операторот.</translation> +<translation id="4541810033354695636">проширена реалност</translation> <translation id="4542520061254486227">Читајте ги вашите податоци на <ph name="WEBSITE_1" /> и <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Управник со сертификати</translation> <translation id="4544174279960331769">Стандарден син аватар</translation> @@ -3601,6 +3614,7 @@ <translation id="5112577000029535889">&Програмерски алатки</translation> <translation id="5113739826273394829">Доколку кликнете на иконата, рачно ќе го заклучите <ph name="DEVICE_TYPE" />. Следниот пат ќе треба да ја напишете лозинката за да влезете.</translation> <translation id="51143538739122961">Вметнете го безбедносниот клуч и допрете го</translation> +<translation id="5114987907971894280">виртуелна реалност</translation> <translation id="5115309401544567011">Приклучете го вашиот <ph name="DEVICE_TYPE" /> на полнење.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">За&чувај аудио како...</translation> @@ -3900,6 +3914,7 @@ <translation id="5464632865477611176">Активирај овојпат</translation> <translation id="5464660706533281090">Ако корисникот е дете, нема да може да ја промени поставкава.</translation> <translation id="5466374726908360271">&Залепи и пребарај „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Блокирани: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Сајтовите може да прашуваат дали да пуштат заштитени содржини (се препорачува)</translation> <translation id="5468173180030470402">Се бараат споделувања датотеки</translation> <translation id="5469852975082458401">Може да се движите низ страниците со курсорот за текст. Притиснете F7 за да исклучите.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Затвори ги сите апликации на Chrome</translation> <translation id="5797070761912323120">Google може да ја користи вашата историја за да го персонализира „Пребарувањето“, рекламите и другите услуги на Google</translation> <translation id="5798301976526354562">Големина на текст (се применува и на „Автоматски титлови“)</translation> +<translation id="579907812742603813">заштитени содржини</translation> <translation id="579915268381781820">Вашиот безбедносен клуч е отстранет.</translation> <translation id="5799508265798272974">Виртуелен уред на Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Целната датотека е отсечена или отстранета од последното преземање.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Каналот е сменет. Рестартирајте го вашиот уред за да ги примените измените.</translation> <translation id="5877584842898320529">Избраниот печатач не е достапен или не е правилно инсталиран. <ph name="BR" /> Проверете го или обидете се да изберете друг печатач.</translation> <translation id="5882919346125742463">Познати мрежи</translation> +<translation id="5883356647197510494">Автоматски блокирани: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Картичкава е поврзана со USB-уред.</translation> <translation id="5886009770935151472">Прст 1</translation> <translation id="5889282057229379085">Максимален број посредни ЦА: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Пронајди следно</translation> <translation id="6461170143930046705">Се пребаруваат мрежи…</translation> <translation id="6463795194797719782">&Уреди</translation> +<translation id="6464094930452079790">слики</translation> <translation id="6464825623202322042">Овој уред</translation> <translation id="6465841119675156448">Без интернет</translation> <translation id="6466988389784393586">&Отвори ги сите обележувачи</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Авторизацијата не успеа</translation> <translation id="6494327278868541139">Прикажи ги деталите за подобрената заштита</translation> <translation id="6494445798847293442">Не е орган за сертифицирање</translation> +<translation id="6494750904506170417">скокачки програми и пренасочувања</translation> <translation id="6494974875566443634">Приспособување</translation> <translation id="6495925982925244349">Мрежа <ph name="NETWORK_INDEX" /> од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, јачина на сигналот: <ph name="SIGNAL_STRENGTH" /> %, управувана од администраторот, детали</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Податоциве содржат чувствителни или опасни содржини}=1{Датотекава содржи чувствителни или опасни содржини}one{Датотекиве содржат чувствителни или опасни содржини}other{Датотекиве содржат чувствителни или опасни содржини}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Лозинка</translation> <translation id="6659213950629089752">Страницата ја зумираше наставката „<ph name="NAME" />“</translation> <translation id="6659594942844771486">Картичка</translation> +<translation id="6660413144148052430">локација</translation> <translation id="666099631117081440">Сервери за печатење</translation> <translation id="6663190258859265334">Ресетирајте го вашиот <ph name="DEVICE_TYPE" /> со „Фабричко ресетирање“ и вратете го на претходната верзија.</translation> <translation id="6664237456442406323">За жал, вашиот компјутер е конфигуриран со деформиран ИД на хардвер. Ова го спречува Chrome OS да ги ажурира најновите безбедносни поправки и вашиот компјутер <ph name="BEGIN_BOLD" />може да е ранлив на напади од злонамерен софтвер<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Погледнете што има ново</translation> <translation id="67269783048918309">Испраќајте податоци за користење и дијагностика. Овој уред во моментов автоматски испраќа дијагностички и податоци за користењето на уредот и апликациите до Google. Овие податоци нема да се користат за идентификација на вашето дете, а ќе ни помогнат околу стабилноста на системот и апликациите и за други подобрувања. Некои збирни податоци ќе им помогнат на апликациите и партнерите на Google, како што се програмерите на Android. Оваа <ph name="BEGIN_LINK1" />поставка<ph name="END_LINK1" /> е наметната од сопственикот. Ако сте ја вклучиле дополнителната поставка „Активност на интернет и апликации“ за вашето дете, овие податоци може да се зачувуваат во сметката на Google на детето. <ph name="BEGIN_LINK2" />Дознајте повеќе<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Поврзан, <ph name="BATTERY_PERCENTAGE" /> % батерија</translation> +<translation id="6732087373923685049">камера</translation> <translation id="6732801395666424405">Нема вчитано сертификати</translation> <translation id="6732900235521116609">Не може да се отстрани кратенката</translation> <translation id="6734468588183300211">Додека сте во „Инкогнито“, сајтовите не може да ги користат колачињата за да ја гледаат вашата активност од прелистувањето на различни сајтови, на пример, за персонализирање реклами. Функциите на некои сајтови можеби нема да работат.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Прашај кога сајтот сака да користи пораки наменети само за системот за да пристапи до уреди со MIDI (препорачано)</translation> <translation id="6818198425579322765">Јазик на страницата што треба да се преведе</translation> <translation id="6818802132960437751">Вградена заштита од вируси</translation> +<translation id="6820143000046097424">сериски порти</translation> <translation id="682123305478866682">Емитувајте ја работната површина</translation> <translation id="6823174134746916417">Допри за да се кликне на подлогата за допир</translation> <translation id="6824564591481349393">Копирај &адреса на е-пошта</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Разменете податоци со кој било уред на локалната мрежа или интернет</translation> <translation id="7306521477691455105">Отворете „Поставки“ и поврзете го уредот <ph name="USB_DEVICE_NAME" /> со <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Паузирано</translation> +<translation id="7308436126008021607">синхронизација во заднина</translation> <translation id="7309257895202129721">Прикажи &контроли</translation> <translation id="7310598146671372464">Неуспешно најавување. Серверот не ги поддржува одредените типови шифрирање на Kerberos. Контактирајте со администраторот.</translation> <translation id="7320213904474460808">Стандардно на мрежа</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Потребно е итно враќање}one{Вратете го <ph name="DEVICE_TYPE" /> во рок од {NUM_DAYS} ден}other{Вратете го <ph name="DEVICE_TYPE" /> во рок од {NUM_DAYS} дена}}</translation> <translation id="7475671414023905704">URL за изгубена лозинка на Netscape</translation> <translation id="7476454130948140105">Батеријата е речиси празна за да се ажурира (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Автоматски блокирани: <ph name="PERMISSION" /> и уште <ph name="COUNT" /></translation> <translation id="7477793887173910789">Контролирајте ја музиката, видеата и др.</translation> <translation id="7478485216301680444">Киоск-апликацијата не може да се инсталира.</translation> <translation id="7478623944308207463">Вашите апликации и поставки ќе се синхронизираат на сите уреди со Chrome OS каде што сте најавени со сметката на Google. За да ги видите опциите за синхронизација на прелистувачот, одете во <ph name="LINK_BEGIN" />поставките за Chrome<ph name="LINK_END" />.</translation> @@ -6373,6 +6397,7 @@ <translation id="8288032458496410887">Деинсталирајте ја <ph name="APP" />…</translation> <translation id="8289128870594824098">Големина на диск</translation> <translation id="8293206222192510085">Додај обележувач</translation> +<translation id="829335040383910391">звук</translation> <translation id="8294431847097064396">Извор</translation> <translation id="8298429963694909221">Сега може да добивате известувања од телефонот на вашиот <ph name="DEVICE_TYPE" />. Отфрлањето на известувањата на <ph name="DEVICE_TYPE" /> ќе ги отфрли и на телефонот. Проверете дали телефонот е во близина и со вклучени Bluetooth и Wi-Fi.</translation> <translation id="8299319456683969623">Во моментов сте исклучени.</translation> @@ -6391,6 +6416,7 @@ <translation id="8317671367883557781">Додај мрежна врска</translation> <translation id="8319414634934645341">Користење продолжен клуч</translation> <translation id="8320459152843401447">Целиот екран</translation> +<translation id="8321476692217554900">известувања</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> ќе управува со овој <ph name="DEVICE_TYPE" />.</translation> <translation id="8322814362483282060">Страницата е блокирана да не пристапува кон вашиот микрофон.</translation> <translation id="8323167517179506834">Впиши URL</translation> @@ -6456,7 +6482,9 @@ <translation id="8403562727702715619">Неодамна од Google Drive</translation> <translation id="8407199357649073301">Ниво на евиденција:</translation> <translation id="8408068190360279472">Мрежа со <ph name="NETWORK_TYPE" />, се поврзува</translation> +<translation id="8409413588194360210">ракувачи со плаќања</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Дозволени: <ph name="PERMISSION" /> и уште <ph name="COUNT" /></translation> <translation id="8413385045638830869">Прашај прво (препорачано)</translation> <translation id="8417548266957501132">Лозинка на родител</translation> <translation id="8418445294933751433">&Прикажи како картичка</translation> @@ -6652,6 +6680,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> или <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Температура на бојата на „Ноќното светло“</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> сака да: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> и друго</translation> +<translation id="865032292777205197">сензори за движење</translation> <translation id="8650543407998814195">Иако веќе не може да пристапувате до стариот профил, сѐ уште може да го отстраните.</translation> <translation id="8651585100578802546">Принуди повторно вчитување на страницата</translation> <translation id="8652400352452647993">Грешка на екстензијата на пакетот</translation> @@ -6789,6 +6818,7 @@ <translation id="8785622406424941542">Пенкало</translation> <translation id="8787254343425541995">Дозволи прокси за споделени мрежи</translation> <translation id="8791534160414513928">Испратете барање „Не следи“ со сообраќајот на прелистување</translation> +<translation id="8792626944327216835">микрофон</translation> <translation id="879413103056696865">Додека е вклучена точката на пристап, вашиот <ph name="PHONE_NAME" /> ќе:</translation> <translation id="8795916974678578410">Нов прозорец</translation> <translation id="8797459392481275117">Никогаш не преведувај го сајтов</translation> @@ -6828,6 +6858,7 @@ <translation id="8823559166155093873">Блокирај колачиња</translation> <translation id="8823704566850948458">Предложи лозинка…</translation> <translation id="8824701697284169214">Додај стра&ница...</translation> +<translation id="8827125715368568315">Блокирани: <ph name="PERMISSION" /> и уште <ph name="COUNT" /></translation> <translation id="8827289157496676362">Закачи екстензија</translation> <translation id="8827752199525959199">Повеќе дејства, лозинка за <ph name="USERNAME" /> на <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Не дозволувај сајтовите да откриваат уреди со Bluetooth во близина</translation> @@ -6928,6 +6959,7 @@ <translation id="8932894639908691771">Опции за „Пристап со прекинувачи“</translation> <translation id="8933960630081805351">&Прикажи во Наоѓач</translation> <translation id="8934732568177537184">Продолжи</translation> +<translation id="8938306522009698937">ракувачи</translation> <translation id="8938800817013097409">USB-Ц уред (десна порта од задната страна)</translation> <translation id="8940081510938872932">Компјутерот во моментов прави премногу работи. Обидете се повторно подоцна.</translation> <translation id="8941173171815156065">Отповикај ја дозволата „<ph name="PERMISSION" />“</translation> @@ -7232,6 +7264,7 @@ <translation id="987264212798334818">Општо</translation> <translation id="987897973846887088">Нема слики на располагање</translation> <translation id="988978206646512040">Не е дозволена празна лозинка</translation> +<translation id="991413375315957741">сензори за движење или светлина</translation> <translation id="992032470292211616">Наставки, апликации и теми може да му наштетат на вашиот уред. Дали сте сигурни дека сакате да продолжите?</translation> <translation id="992256792861109788">Розова</translation> <translation id="992592832486024913">Оневозможи ChromeVox (говорни повратни информации)</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 0e3ef03..fa0cadc4 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -424,6 +424,7 @@ <translation id="1465827627707997754">പിസ്സാ സ്ലൈസ്</translation> <translation id="1468571364034902819">ഈ പ്രൊഫൈൽ ഉപയോഗിക്കാനാവില്ല</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{പുതിയ ഗ്രൂപ്പിലേക്ക് ടാബ് ചേർക്കുക}other{പുതിയ ഗ്രൂപ്പിലേക്ക് ടാബുകൾ ചേർക്കുക}}</translation> +<translation id="1470350905258700113">ഈ ഉപകരണം ഉപയോഗിക്കുക</translation> <translation id="1470946456740188591">കാരറ്റ് ബ്രൗസ് ചെയ്യൽ ഓണാക്കാനോ ഓഫാക്കാനോ, Ctrl+Search+7 എന്ന കുറുക്കുവഴി ഉപയോഗിക്കുക</translation> <translation id="1472675084647422956">കൂടുതൽ കാണിക്കുക</translation> <translation id="1474785664565228650">മൈക്രോഫോൺ ക്രമീകരണത്തിൽ മാറ്റം വരുത്തിയത് കാരണം Parallels Desktop വീണ്ടും ആരംഭിക്കേണ്ടതുണ്ട്. തുടരാൻ, Parallels Desktop വീണ്ടും ആരംഭിക്കുക.</translation> @@ -1395,6 +1396,7 @@ <translation id="2541002089857695151">പൂർണ്ണസ്ക്രീൻ കാസ്റ്റ് ചെയ്യൽ ഓപ്റ്റിമൈസ് ചെയ്യണോ?</translation> <translation id="2541706104884128042">പുതിയ ഉറക്ക സമയം സജ്ജീകരിച്ചു</translation> <translation id="2542050502251273923">ff_debug ഉപയോഗിച്ച് നെറ്റ്വർക്ക് കണക്ഷൻ മാനേജരുടെയും മറ്റ് സേവനങ്ങളുടെയും ഡീബഗ്ഗ് ചെയ്യൽ നില സജ്ജീകരിക്കുന്നു.</translation> +<translation id="2544292303401268586">ആപ്പുകൾ അപ്ഡേറ്റ് ചെയ്യുന്നതിന്, ഉപകരണം റീസ്റ്റാർട്ട് ചെയ്യാൻ നിങ്ങളുടെ അഡ്മിൻ അഭ്യർത്ഥിച്ചു. ഇത് പൂർത്തിയാകാൻ കുറച്ച് സമയമെടുത്തേക്കാം.</translation> <translation id="2544853746127077729">നെറ്റ്വർക്ക്, പരിശോധിച്ചുറപ്പിക്കൽ സർട്ടിഫിക്കറ്റ് നിരസിച്ചു</translation> <translation id="2546283357679194313">കുക്കികളും സൈറ്റ് ഡാറ്റയും</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> അനുവദിച്ചിരിക്കുന്നു</translation> @@ -2776,6 +2778,7 @@ <translation id="409579654357498729">ക്ലൗഡ് പ്രിന്റിൽ ചേർക്കുക</translation> <translation id="4096508467498758490">ഡെവലപ്പർ മോഡ് വിപുലീകരണങ്ങൾ പ്രവർത്തനരഹിതമാക്കുക</translation> <translation id="4097406557126260163">ആപ്പുകളും വിപുലീകരണങ്ങളും</translation> +<translation id="409742781329613461">Chrome-നുള്ള നുറുങ്ങുകൾ</translation> <translation id="4097560579602855702">Google-ൽ തിരയുക</translation> <translation id="4098667039111970300">ടൂൾബാറിലെ സ്റ്റൈലസ് ടൂളുകൾ</translation> <translation id="4099060993766194518">ഡിഫോൾട്ട് തിരയൽ യന്ത്രം പുനഃസ്ഥാപിക്കണോ?</translation> @@ -4087,6 +4090,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> എന്നതിലേക്ക് റീഡ് ചെയ്യാനും റൈറ്റ് ചെയ്യാനുമുള്ള ആക്സസ് അനുവദിച്ചിരിക്കുന്നു.</translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> എന്നതിലെ നിങ്ങളുടെ വിവരം വായിക്കുക</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" നീക്കംചെയ്യണോ?</translation> +<translation id="5683806393796685434">നിങ്ങളുടെ സജീവമാക്കൽ കോഡ് നൽകുക</translation> <translation id="5684181005476681636">വൈഫൈ വിശദാംശങ്ങള്</translation> <translation id="5684661240348539843">അസറ്റ് ഐഡന്റിഫയർ</translation> <translation id="5687326903064479980">സമയമേഖല</translation> @@ -4338,6 +4342,7 @@ <translation id="5978277834170881274">&അടിസ്ഥാന അക്ഷരത്തെറ്റ് പരിശോധന ഉപയോഗിക്കുക</translation> <translation id="5979084224081478209">പാസ്വേഡ് പരിശോധിക്കൂ</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{നിങ്ങൾ ദോഷകരമാകാൻ സാധ്യതയുള്ള ഒരു വിപുലീകരണം വീണ്ടും ഓണാക്കി}other{നിങ്ങൾ ദോഷകരമാകാൻ സാധ്യതയുള്ള {NUM_EXTENSIONS} വിപുലീകരണങ്ങൾ വീണ്ടും ഓണാക്കി}}</translation> +<translation id="5979353814339191480">ഒരു ഡാറ്റാ പ്ലാൻ അല്ലെങ്കിൽ മൊബൈൽ നെറ്റ്വര്ക്ക് ഡോംഗിൾ ഉള്ളതോ പോർട്ടബിൾ ഹോട്ട്സ്പോട്ടിലേക്ക് ടെതർ ചെയ്തിരിക്കുന്നതോ ആയ Chromebooks-ന് ഈ ഓപ്ഷൻ ബാധകമാണ്</translation> <translation id="5979421442488174909">& <ph name="LANGUAGE" /> ലേക്ക് വിവർത്തനം ചെയ്യുക</translation> <translation id="5979469435153841984">പേജുകൾ ബുക്ക്മാർക്ക് ചെയ്യുന്നതിന്, വിലാസ ബാറിലെ നക്ഷത്ര ചിഹ്നത്തിൽ ക്ലിക്ക് ചെയ്യുക</translation> <translation id="5984222099446776634">സമീപകാലത്ത് സന്ദർശിച്ചത്</translation> @@ -4818,6 +4823,7 @@ <translation id="653659894138286600">ഡോക്യുമെന്റുകളും ചിത്രങ്ങളും സ്കാൻ ചെയ്യുക</translation> <translation id="6537613839935722475">പേരിന് അക്ഷരങ്ങൾ, അക്കങ്ങൾ, ഹൈഫനുകൾ (-) എന്നിവ ഉപയോഗിക്കാം</translation> <translation id="6537880577641744343">കമാൻഡർ</translation> +<translation id="6538098297809675636">കോഡ് കണ്ടെത്തുന്നതിൽ പിശക്</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />ശ്രദ്ധിക്കുക:<ph name="END_BOLD" /> ഡാറ്റയുടെ ശേഖരം പ്രകടനത്തെ കുറയ്ക്കുമെന്നതിനാൽ, ചെയ്യുന്നതെന്താണെന്ന് നിങ്ങൾക്ക് അറിയാമെങ്കിലോ അങ്ങനെ ചെയ്യാൻ നിങ്ങൾ ആവശ്യപ്പെട്ടാലോ മാത്രമേ പ്രവർത്തനക്ഷമമാക്കൂ.</translation> <translation id="6541638731489116978">നിങ്ങളുടെ ചലന സെൻസറുകൾ ആക്സസ് ചെയ്യുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു.</translation> <translation id="6545665334409411530">ആവർത്തന നിരക്ക്</translation> @@ -6014,6 +6020,7 @@ <translation id="7904526211178107182">നിങ്ങളുടെ നെറ്റ്വർക്കിലെ മറ്റ് ഉപകരണങ്ങളിൽ Linux പോർട്ടുകൾ ലഭ്യമാക്കുക.</translation> <translation id="7907837847548254634">ഫോക്കസ് ചെയ്തിരിക്കുന്ന ഒബ്ജക്റ്റിൽ ദ്രുത ഹൈലൈറ്റ് കാണിക്കുക</translation> <translation id="7908378463497120834">ക്ഷമിക്കണം, നിങ്ങളുടെ എക്സ്റ്റേണൽ സ്റ്റോറേജ് ഉപകരണത്തിലെ ഏറ്റവും കുറഞ്ഞത് ഒരു ഭാഗം പോലും മൗണ്ട് ചെയ്യാൻ കഴിഞ്ഞില്ല.</translation> +<translation id="7909324225945368569">നിങ്ങളുടെ പ്രൊഫൈലിന്റെ പേര് മാറ്റുക</translation> <translation id="7909969815743704077">ആൾമാറാട്ട മോഡിൽ ഡൗൺലോഡുചെയ്തു</translation> <translation id="7910768399700579500">&പുതിയ ഫോള്ഡര്</translation> <translation id="7911118814695487383">Linux</translation> @@ -6631,6 +6638,7 @@ <translation id="8642900771896232685">2 സെക്കൻഡ്</translation> <translation id="8642947597466641025">പാഠത്തെ വലുതാക്കുക</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> അപകടകരമായേക്കാം. സ്കാൻ ചെയ്യാൻ Google-ന്റെ വിപുലമായ പരിരക്ഷയിലേക്ക് അയയ്ക്കണോ?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{കുക്കികൾ ഇല്ല}=1{ഒരു കുക്കി ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു}other{# കുക്കികൾ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു}}</translation> <translation id="8644655801811752511">ഈ സുരക്ഷാ കീ പുനഃസജ്ജീകരിക്കാനാകില്ല. സുരക്ഷാ കീ ബന്ധിപ്പിച്ച ഉടൻ അത് പുനഃസജ്ജീകരിക്കാൻ ശ്രമിക്കുക.</translation> <translation id="8645354835496065562">സെൻസർ ആക്സസ് അനുവദിക്കുന്നത് തുടരുക</translation> <translation id="8645920082661222035">അപകടകരമായ ഇവന്റുകൾ നടക്കുന്നതിന് മുമ്പ് അവ പ്രവചിക്കുകയും നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകുകയും ചെയ്യുന്നു</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 05f135a..4a0b19b 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -422,6 +422,7 @@ <translation id="1465827627707997754">पिज्जाको टुक्रो</translation> <translation id="1468571364034902819">यो प्रोफाइल प्रयोग गर्न सकिँदैन</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{नयाँ समूहमा ट्याब थप्नुहोस्}other{नयाँ समूहमा ट्याबहरू थप्नुहोस्}}</translation> +<translation id="1470350905258700113">यो यन्त्र प्रयोग गरियोस्</translation> <translation id="1470946456740188591">सर्टकट तरिकाले क्यारेट ब्राउजिङ अन वा अफ गर्न Ctrl+Search+7 थिच्नुहोस्</translation> <translation id="1472675084647422956">थप देखाउनुहोस्</translation> <translation id="1474785664565228650">माइक्रोफोनको सेटिङमा गरिएका परिवर्तन लागू गर्न Parallels Desktop बन्द गरेर फेरि खोल्नु पर्ने हुन्छ। अगाडि बढ्नका निम्ति Parallels Desktop बन्द गरेर फेरि खोल्नुहोस्।</translation> @@ -1394,6 +1395,7 @@ <translation id="2541002089857695151">पूर्ण स्क्रिनमा cast गर्ने सुविधा अप्टिमाइज गर्ने हो?</translation> <translation id="2541706104884128042">सुत्ने समयको सीमा अद्यावधिक गरियो</translation> <translation id="2542050502251273923">यसले ff_debug प्रयोग गरी नेटवर्क कनेक्सन म्यानेजर तथा अन्य सेवाहरूको डिबग प्रक्रियाको स्तर निर्धारण गर्छ।</translation> +<translation id="2544292303401268586">तपाईंका एड्मिनले एपहरू अपडेट गर्ने प्रयोजनका लागि तपाईंको यन्त्र रिस्टार्ट गर्न अनुरोध गर्नुभएको छ। यो कार्य पूरा हुन केही मिनेट लाग्न सक्छ।</translation> <translation id="2544853746127077729">प्रमाणीकरण प्रमाणपत्र नेटवर्क अस्विकार</translation> <translation id="2546283357679194313">कुकीहरू र साइट डाटा</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> सम्बन्धी अनुमति दिइएको छ</translation> @@ -2776,6 +2778,7 @@ <translation id="409579654357498729">क्लाउड प्रिन्टमा थप्नुहोस्</translation> <translation id="4096508467498758490">विकारकर्ता मोड विस्तारहरू असक्षम गर्नुहोस्</translation> <translation id="4097406557126260163">एप र एक्स्टेन्सनहरू</translation> +<translation id="409742781329613461">Chrome सम्बन्धी सुझावहरू</translation> <translation id="4097560579602855702">Google मा खोज्नुहोस्</translation> <translation id="4098667039111970300">टुलबारमा स्टाइलसका उपकरणहरू देखाइयोस्</translation> <translation id="4099060993766194518">पूर्वनिर्धारित खोज इन्जिनलाई पुनर्स्थापना गर्ने हो?</translation> @@ -4085,6 +4088,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> मा पढ्न र लेख्न अनुमति दिइएको छ।</translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" />मा तपाईंको डेटा पढ्नुहोस्</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" हटाउने हो?</translation> +<translation id="5683806393796685434">कृपया नेटवर्क सक्रिय गर्ने कोड हाल्नुहोस्</translation> <translation id="5684181005476681636">Wi-Fi सम्बन्धी विवरणहरू</translation> <translation id="5684661240348539843">सम्पत्ति पहिचानकर्ता</translation> <translation id="5687326903064479980">समय क्षेत्र</translation> @@ -4335,6 +4339,7 @@ <translation id="5978277834170881274">आधारभूत हिज्जे परीक्षकको प्रयोग गर्नुहोस्</translation> <translation id="5979084224081478209">पासवर्डहरूको जाँच गर्नुहोस्</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{तपाईंले हानिकारक हुन सक्ने १ एक्स्टेन्सन फेरि सक्रिय गर्नुभएको छ}other{तपाईंले हानिकारक हुन सक्ने {NUM_EXTENSIONS} एक्स्टेन्सनहरू फेरि सक्रिय गर्नुभएको छ}}</translation> +<translation id="5979353814339191480">यो विकल्प डेटा प्याक भएको SIM हालिएका वा मोबाइल नेटवर्कको डङ्गल जोडिएका Chromebook हरूमा वा कुनै पोर्टेबल हटस्पटमा टेदरिङ गर्दा लागू हुन्छ</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" /> मा &अनुवाद गर्नुहोस्</translation> <translation id="5979469435153841984">पृष्ठहरूलाई पुस्तक चिन्ह लगाउन ठेगाना पट्टीमा अवस्थित तारा आइकनमा क्लिक गर्नुहोस्</translation> <translation id="5984222099446776634">भर्खरै भ्रमण गरिएको</translation> @@ -4814,6 +4819,7 @@ <translation id="653659894138286600">डकुमेन्ट तथा फोटोहरू स्क्यान गर्नुहोस्</translation> <translation id="6537613839935722475">यन्त्रको नाम राख्दा अक्षर, अङ्क र हाइफन चिन्ह (-) प्रयोग गर्न मिल्छ</translation> <translation id="6537880577641744343">Commander</translation> +<translation id="6538098297809675636">कोड पत्ता लगाउने क्रममा त्रुटि भयो</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />नोट:<ph name="END_BOLD" /> तपाइँले के गरिरहनुभएको छ भनेर थाहा छ भने वा तपाइँलाई त्यसो गर्न अनुरोध गरिएको छ भने मात्रै सक्षम गर्नुहोस्, किनभने लगत सङ्कलन गर्नाले प्रस्तुतीकरण घटाउन सक्छ।</translation> <translation id="6541638731489116978">यो साइटलाई तपाईंको चालसम्बन्धी सेन्सरहरूको पहुँच राख्नबाट रोक लगाइएको छ।</translation> <translation id="6545665334409411530">दोहोरिने दर</translation> @@ -6010,6 +6016,7 @@ <translation id="7904526211178107182">आफ्नो नेटवर्कका अन्य यन्त्रहरूमा Linux का पोर्टहरू उपलब्ध गराउनुहोस्।</translation> <translation id="7907837847548254634">केन्द्रित गरिएको वस्तुलाई तुरुन्तै हाइलाइट गरी देखाउनुहोस्</translation> <translation id="7908378463497120834">माफ गर्नुहोला, तपाईंको भण्डारण साधनको कम्तीमा एक भाग माउन्ट हुन सकेन ।</translation> +<translation id="7909324225945368569">आफ्नो प्रोफाइलको नाम बदल्नुहोस्</translation> <translation id="7909969815743704077">इन्कग्निटोमा डाउनलोड गरियो</translation> <translation id="7910768399700579500">&नयाँ फोल्डर</translation> <translation id="7911118814695487383">Linux</translation> @@ -6626,6 +6633,7 @@ <translation id="8642900771896232685">२ सेकेन्ड</translation> <translation id="8642947597466641025">पाठ ठुलो बानउनुहोस्</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> हानिकारक हुन सक्छ। यो फाइल सुरक्षित छ कि छैन भनी स्क्यान गर्न यसलाई Google को सुरक्षासम्बन्धी उन्नत सुविधामा पठाउने हो?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{कुनै पनि कुकी ब्लक गरिएको छैन}=1{एउटा कुकी ब्लक गरिएको छ}other{# वटा कुकी ब्लक गरिएका छन्}}</translation> <translation id="8644655801811752511">यो सुरक्षा साँचो रिसेट गर्न सकिएन। साँचो प्रविष्टि गर्नेबित्तिकै यसलाई रिसेट गरी हेर्नुहोस्।</translation> <translation id="8645354835496065562">सेन्सरलाई पहुँच राख्ने अनुमति दिन जारी राख्नुहोस्</translation> <translation id="8645920082661222035">जोखिमपूर्ण घटनाहरू घट्नुअघि नै तिनको पूर्वानुमान गर्छ र तपाईंलाई त्यसबारे चेतावनी दिन्छ</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index b1bed57..9f05c41 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Standaard</translation> <translation id="1252987234827889034">Er is een profielfout opgetreden</translation> <translation id="1254593899333212300">Rechtstreekse internetverbinding</translation> +<translation id="1257553931232494454">zoomniveaus</translation> <translation id="1259152067760398571">Veiligheidscheck is gisteren uitgevoerd</translation> <translation id="1260451001046713751">Pop-ups en omleidingen van <ph name="HOST" /> altijd toestaan</translation> <translation id="1261380933454402672">Normaal</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Hiermee wordt ook gecontroleerd welke pagina wordt weergegeven wanneer je vanuit de omnibox zoekt.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Als je apps wilt verwijderen, ga je naar Instellingen > Google Play Store > Android-voorkeuren beheren > Apps of App-beheer en tik je op de app die je wilt verwijderen (je moet mogelijk naar rechts of links swipen om de app te vinden). Tik vervolgens op Verwijderen of Uitschakelen.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Aanvraag wordt verstuurd...</translation> +<translation id="1733064249834771892">lettertypen</translation> <translation id="1733383495376208985">Gesynchroniseerde gegevens versleutelen met je eigen <ph name="BEGIN_LINK" />wachtwoordzin voor synchronisatie<ph name="END_LINK" />. Hieronder vallen geen betaalmethoden en adressen van Google Pay.</translation> <translation id="1734212868489994726">Lichtblauw</translation> <translation id="1734230530703461088">Kan extensies niet binnen de tijdslimiet laden. Neem contact op met je beheerder.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Het logboek wordt geüpload.</translation> <translation id="1819721979226826163">Tik op App-meldingen > Google Play-services.</translation> <translation id="1820028137326691631">Geef het wachtwoord op dat je van de beheerder hebt gekregen</translation> +<translation id="182139138257690338">automatische downloads</translation> <translation id="1822140782238030981">Ben je al Chrome-gebruiker? Log in</translation> <translation id="18245044880483936">Back-upgegevens tellen niet mee voor de Drive-opslaglimiet van je kind.</translation> <translation id="1825565032302550710">Poort moet tussen 1024 en 65535 liggen</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">App opnieuw &laden</translation> <translation id="2327492829706409234">App inschakelen</translation> <translation id="2328561734797404498">Start je apparaat opnieuw op om <ph name="APP_NAME" /> te gebruiken.</translation> +<translation id="2329182534073751090">vensterplaatsing</translation> <translation id="2329597144923131178">Als je inlogt, heb je al je instellingen op al je apparaten: bookmarks, geschiedenis, wachtwoorden en meer.</translation> <translation id="2332131598580221120">Bekijken in de Web Store</translation> <translation id="2332192922827071008">Voorkeuren openen</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Nieuw tabblad in groep</translation> <translation id="289644616180464099">Simkaart is vergrendeld</translation> <translation id="289695669188700754">Sleutel-ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Deze aangepaste instelling wordt verwijderd als je al je incognitovensters sluit</translation> <translation id="2897878306272793870">Weet je zeker dat je <ph name="TAB_COUNT" /> tabbladen wilt openen?</translation> <translation id="290105521672621980">Bestand maakt gebruik van niet-ondersteunde functies</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> kan niet communiceren met deze printer. Controleer of de printer is aangesloten en probeer het opnieuw.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">De gegevens zijn versleuteld met je wachtwoordzin voor synchronisatie. Hieronder vallen geen betaalmethoden en adressen van Google Pay.</translation> <translation id="2996722619877761919">Omslaan aan lange zijde</translation> <translation id="3000236644796679448">Sites kunnen vragen of ze je microfoon mogen gebruiken (aanbevolen)</translation> +<translation id="3000378525979847272">Rechten voor <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> toegestaan</translation> <translation id="3000461861112256445">Monogeluid</translation> <translation id="3001144475369593262">Kinderaccounts</translation> <translation id="3003144360685731741">Voorkeursnetwerken</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Pdf openen in voorbeeldweergave</translation> <translation id="3308116878371095290">Het instellen van cookies door deze pagina is geblokkeerd.</translation> <translation id="3308134619352333507">Knop verbergen</translation> +<translation id="3308738399950580893">advertenties</translation> <translation id="3308852433423051161">Google Assistent laden...</translation> <translation id="3309330461362844500">ID van certificaatprofiel</translation> <translation id="3311445899360743395">Gegevens die zijn gekoppeld aan deze app, worden mogelijk verwijderd van dit apparaat.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Dit bestand is versleuteld. Vraag de eigenaar om het te ontsleutelen.</translation> <translation id="3390013585654699824">App-gegevens</translation> <translation id="3390741581549395454">Er is een back-up gemaakt van Linux-apps en -bestanden. De upgrade wordt binnenkort gestart.</translation> +<translation id="3391482648489541560">bestanden bewerken</translation> <translation id="339178315942519818">Meldingen van je chat-apps bekijken op je <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Door op de knop 'Accepteren en doorgaan' te klikken, ga je akkoord met de bovengenoemde verwerking voor deze Google-services.</translation> <translation id="3399432415385675819">Meldingen worden uitgeschakeld</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Batterij-ontlading in Watt (een negatieve waarde betekent dat de batterij wordt opgeladen)</translation> <translation id="4256316378292851214">&Video opslaan als...</translation> <translation id="4258348331913189841">Bestandssystemen</translation> +<translation id="4259381619085088639">je aanwezigheid</translation> <translation id="4259388776256904261">Dit kan even duren</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> is misschien gevaarlijk. Wil je het bestand naar 'Geavanceerde beveiliging' van Google sturen zodat het kan worden gescand? Druk op Shift+F6 om naar het gedeelte met de downloadbalk te gaan.</translation> <translation id="4263223596040212967">Controleer je toetsenbordindeling en probeer het opnieuw.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Stel een nieuwe pincode in voor je beveiligingssleutel</translation> <translation id="4305402730127028764">Kopiëren naar <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Apps moeten worden weergegeven met inhoudstype '<ph name="CONTENT_TYPE" />'</translation> +<translation id="4306812610847412719">klembord</translation> <translation id="4307992518367153382">Basisinstellingen</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K live)</translation> <translation id="4310139701823742692">Bestand heeft een onjuiste indeling. Controleer het PPD-bestand en probeer het opnieuw.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Helpcentrum</translation> <translation id="44141919652824029"><ph name="APP_NAME" /> toestaan om de lijst met je aangesloten USB-apparaten op te halen?</translation> <translation id="4414232939543644979">Nieuw &incognitovenster</translation> +<translation id="4414515549596849729">cookies en sitegegevens</translation> <translation id="4415213869328311284">Je kunt je <ph name="DEVICE_TYPE" /> nu gebruiken.</translation> <translation id="4415245286584082850">Geen apparaten gevonden. Open een Helpcentrum-artikel op een nieuw tabblad.</translation> <translation id="4415276339145661267">Je Google-account beheren</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Aanbevolen (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Niet op deze pagina weergeven</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> is gecrasht</translation> +<translation id="4500587658229086076">onveilige content</translation> <translation id="450099669180426158">Uitroeptekenpictogram</translation> <translation id="4501530680793980440">Verwijderen bevestigen</translation> <translation id="4502423230170890588">Verwijderen van dit apparaat</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Plug-ins zonder sandbox op <ph name="HOST" /> altijd blokkeren</translation> <translation id="4538792345715658285">Geïnstalleerd door bedrijfsbeleid.</translation> <translation id="4541662893742891060">Kan geen verbinding maken met dit profiel. Neem contact op met je provider voor technische support.</translation> +<translation id="4541810033354695636">augmented reality</translation> <translation id="4542520061254486227">Je gegevens voor <ph name="WEBSITE_1" /> en <ph name="WEBSITE_2" /> lezen</translation> <translation id="4543778593405494224">Certificaatbeheer</translation> <translation id="4544174279960331769">Standaard blauwe avatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">&Hulpprogramma's voor ontwikkelaars</translation> <translation id="5113739826273394829">Als je op dit icoon klikt, vergrendel je deze <ph name="DEVICE_TYPE" /> handmatig. De volgende keer moet je je wachtwoord typen om deze te ontgrendelen.</translation> <translation id="51143538739122961">Plaats je beveiligingssleutel en tik erop</translation> +<translation id="5114987907971894280">virtual reality</translation> <translation id="5115309401544567011">Sluit je <ph name="DEVICE_TYPE" /> aan op een voedingsbron.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Audio op&slaan als...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Eenmalig uitvoeren</translation> <translation id="5464660706533281090">Deze instelling kan niet worden gewijzigd door gebruikers met een kinderaccount.</translation> <translation id="5466374726908360271">Pl&akken en zoeken naar '<ph name="SEARCH_TERMS" />'</translation> +<translation id="5467207440419968613">Rechten voor <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> geblokkeerd</translation> <translation id="5468119583641912100">Sites kunnen vragen of ze beschermde content mogen afspelen (aanbevolen)</translation> <translation id="5468173180030470402">Zoeken naar fileshares</translation> <translation id="5469852975082458401">Je kunt navigeren op pagina's met een tekstcursor. Druk op F7 om dit uit te schakelen.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Alle Chrome-apps sluiten</translation> <translation id="5797070761912323120">Google kan je geschiedenis gebruiken om Google Zoeken, advertenties en andere Google-services te personaliseren</translation> <translation id="5798301976526354562">Tekstgrootte (ook van toepassing op 'Live ondertiteling')</translation> +<translation id="579907812742603813">beschermde content</translation> <translation id="579915268381781820">Je beveiligingssleutel is verwijderd.</translation> <translation id="5799508265798272974">Virtuele Linux-machine: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Bestemmingsbestand is afgekapt of verwijderd sinds de laatste download.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Kanaal gewijzigd. Start het apparaat opnieuw op om de wijzigingen door te voeren.</translation> <translation id="5877584842898320529">De geselecteerde printer is niet beschikbaar of niet correct geïnstalleerd.<ph name="BR" />Controleer de printer of probeer een andere printer te selecteren.</translation> <translation id="5882919346125742463">Bekende netwerken</translation> +<translation id="5883356647197510494">Rechten voor <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> automatisch geblokkeerd</translation> <translation id="5884474295213649357">Dit tabblad is gekoppeld aan een USB-apparaat.</translation> <translation id="5886009770935151472">Vinger 1</translation> <translation id="5889282057229379085">Maximum aantal tussenliggende certificeringsinstanties: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Zoek volgende</translation> <translation id="6461170143930046705">Zoeken naar netwerken...</translation> <translation id="6463795194797719782">B&ewerken</translation> +<translation id="6464094930452079790">afbeeldingen</translation> <translation id="6464825623202322042">Dit apparaat</translation> <translation id="6465841119675156448">Zonder internet</translation> <translation id="6466988389784393586">Alle bookmarks &openen</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Autorisatie mislukt</translation> <translation id="6494327278868541139">Details van geoptimaliseerde beveiliging bekijken</translation> <translation id="6494445798847293442">Geen certificeringsinstantie</translation> +<translation id="6494750904506170417">pop-ups en omleidingen</translation> <translation id="6494974875566443634">Aanpassing</translation> <translation id="6495925982925244349">Netwerk <ph name="NETWORK_INDEX" /> van <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signaalsterkte <ph name="SIGNAL_STRENGTH" />%, beheerd door je beheerder, details</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Deze gegevens bevatten gevoelige of gevaarlijke content}=1{Dit bestand bevat gevoelige of gevaarlijke content}other{Deze bestanden bevatten gevoelige of gevaarlijke content}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Wachtwoord</translation> <translation id="6659213950629089752">Deze pagina is ingezoomd met de extensie '<ph name="NAME" />'</translation> <translation id="6659594942844771486">Tabblad</translation> +<translation id="6660413144148052430">locatie</translation> <translation id="666099631117081440">Afdrukservers</translation> <translation id="6663190258859265334">Powerwash je <ph name="DEVICE_TYPE" /> en zet de vorige versie terug.</translation> <translation id="6664237456442406323">Je computer is geconfigureerd met een hardware-ID met een onjuiste notatie. Dit zorgt ervoor dat Chrome OS niet kan worden bijgewerkt met de nieuwste beveiligingsoplossingen, waardoor je computer <ph name="BEGIN_BOLD" />kwetsbaar kan zijn voor schadelijke aanvallen<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Wat is er nieuw?</translation> <translation id="67269783048918309">Verzend gebruiks- en diagnostische gegevens. Dit apparaat verzendt momenteel automatisch diagnostische, apparaat- en app-gebruiksgegevens naar Google. Deze gegevens worden niet gebruikt om je kind te identificeren en kunnen helpen om de systeem- en app-stabiliteit te verbeteren en andere optimalisaties mogelijk te maken. Daarnaast zijn bepaalde verzamelde gegevens nuttig voor Google-apps en -partners, zoals Android-ontwikkelaars. Deze <ph name="BEGIN_LINK1" />instelling<ph name="END_LINK1" /> wordt afgedwongen door de eigenaar. Als je de instelling voor aanvullende Web- en app-activiteit hebt ingeschakeld voor je kind, kunnen deze gegevens worden opgeslagen in het Google-account van je kind. <ph name="BEGIN_LINK2" />Meer informatie<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Verbonden, batterij <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">camera</translation> <translation id="6732801395666424405">Certificaten niet geladen</translation> <translation id="6732900235521116609">Kan snelkoppeling niet verwijderen</translation> <translation id="6734468588183300211">Als je de incognitomodus gebruikt, kunnen sites je cookies niet gebruiken om je browse-activiteit op verschillende sites te bekijken om bijvoorbeeld advertenties te personaliseren. Functies op bepaalde sites werken mogelijk niet meer.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Vragen als een site berichten exclusief voor het systeem wil gebruiken om toegang te krijgen tot MIDI-apparaten (aanbevolen)</translation> <translation id="6818198425579322765">Paginataal om te vertalen</translation> <translation id="6818802132960437751">Ingebouwde virusbeveiliging</translation> +<translation id="6820143000046097424">seriële poorten</translation> <translation id="682123305478866682">Bureaublad casten</translation> <translation id="6823174134746916417">Tikken-om-te-klikken voor touchpad</translation> <translation id="6824564591481349393">&E-mailadres kopiëren</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Gegevens uitwisselen met elk apparaat op het lokale netwerk of internet</translation> <translation id="7306521477691455105">Open Instellingen om <ph name="USB_DEVICE_NAME" /> te verbinden met <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Onderbroken</translation> +<translation id="7308436126008021607">synchronisatie op de achtergrond</translation> <translation id="7309257895202129721">Besturingselementen &weergeven</translation> <translation id="7310598146671372464">Kan niet inloggen. De server ondersteunt de opgegeven Kerberos-versleutelingstypen niet. Neem contact op met je beheerder.</translation> <translation id="7320213904474460808">Standaardnetwerk gebruiken</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Apparaat onmiddellijk terugsturen}other{Stuur <ph name="DEVICE_TYPE" /> binnen {NUM_DAYS} dagen terug}}</translation> <translation id="7475671414023905704">URL van verloren Netscape-wachtwoord</translation> <translation id="7476454130948140105">Batterij niet voldoende opgeladen voor update (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Recht voor <ph name="PERMISSION" /> en <ph name="COUNT" /> andere automatisch geblokkeerd</translation> <translation id="7477793887173910789">Je muziek, video's en meer bedienen</translation> <translation id="7478485216301680444">Kiosk-app kan niet worden geïnstalleerd.</translation> <translation id="7478623944308207463">Je apps en instellingen worden gesynchroniseerd voor alle Chrome OS-apparaten waarop je bent ingelogd met je Google-account. Ga naar de <ph name="LINK_BEGIN" />Chrome-instellingen<ph name="LINK_END" /> voor opties voor browsersynchronisatie.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887"><ph name="APP" /> verwijderen...</translation> <translation id="8289128870594824098">Schijfgrootte</translation> <translation id="8293206222192510085">Bookmark toevoegen</translation> +<translation id="829335040383910391">geluid</translation> <translation id="8294431847097064396">Bron</translation> <translation id="8298429963694909221">Je kunt nu meldingen van je telefoon krijgen op je <ph name="DEVICE_TYPE" />. Als je meldingen op je <ph name="DEVICE_TYPE" /> sluit, worden ze ook gesloten op je telefoon. Zorg dat je telefoon in de buurt is en dat bluetooth en wifi zijn ingeschakeld.</translation> <translation id="8299319456683969623">Je bent momenteel offline.</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Netwerkverbinding toevoegen</translation> <translation id="8319414634934645341">Uitgebreid sleutelgebruik</translation> <translation id="8320459152843401447">Je volledige scherm</translation> +<translation id="8321476692217554900">meldingen</translation> <translation id="8321837372750396788">Deze <ph name="DEVICE_TYPE" /> wordt beheerd door <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Deze pagina heeft geen toegang tot je microfoon.</translation> <translation id="8323167517179506834">Typ een URL</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Onlangs vanuit Google Drive</translation> <translation id="8407199357649073301">Logniveau:</translation> <translation id="8408068190360279472">Netwerk: <ph name="NETWORK_TYPE" />, verbinden</translation> +<translation id="8409413588194360210">betalingshandlers</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Recht voor <ph name="PERMISSION" /> en <ph name="COUNT" /> andere toegestaan</translation> <translation id="8413385045638830869">Eerst vragen (aanbevolen)</translation> <translation id="8417548266957501132">Wachtwoord van ouder</translation> <translation id="8418445294933751433">Weergeven al&s tabblad</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> of <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Kleurtemperatuur Nachtverlichting</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> wil het volgende: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> en meer</translation> +<translation id="865032292777205197">bewegingssensoren</translation> <translation id="8650543407998814195">Hoewel je geen toegang meer hebt tot je oude profiel, kun je dit nog wel verwijderen.</translation> <translation id="8651585100578802546">Laad pagina opnieuw</translation> <translation id="8652400352452647993">Fout met pakketextensie</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Stylus</translation> <translation id="8787254343425541995">Proxy's voor gedeelde netwerken toestaan</translation> <translation id="8791534160414513928">Een verzoek voor niet bijhouden met je browseverkeer verzenden</translation> +<translation id="8792626944327216835">microfoon</translation> <translation id="879413103056696865">Terwijl de hotspot is ingeschakeld, doet je <ph name="PHONE_NAME" /> het volgende:</translation> <translation id="8795916974678578410">Nieuw venster</translation> <translation id="8797459392481275117">Deze site nooit vertalen</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Cookies blokkeren</translation> <translation id="8823704566850948458">Wachtwoord voorstellen...</translation> <translation id="8824701697284169214">Pa&gina toevoegen...</translation> +<translation id="8827125715368568315">Recht voor <ph name="PERMISSION" /> en <ph name="COUNT" /> andere geblokkeerd</translation> <translation id="8827289157496676362">Extensie vastzetten</translation> <translation id="8827752199525959199">Meer acties, wachtwoord voor <ph name="USERNAME" /> op <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Niet toestaan dat sites Bluetooth-apparaten in de buurt detecteren</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Opties voor 'Toegang via schakelaar'</translation> <translation id="8933960630081805351">&Toon in Finder</translation> <translation id="8934732568177537184">Doorgaan</translation> +<translation id="8938306522009698937">handlers</translation> <translation id="8938800817013097409">USB-C-apparaat (poort rechts aan de achterkant)</translation> <translation id="8940081510938872932">Je computer voert op dit moment te veel acties tegelijk uit. Probeer het later opnieuw.</translation> <translation id="8941173171815156065">Het recht '<ph name="PERMISSION" />' intrekken</translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">Algemeen</translation> <translation id="987897973846887088">Geen afbeeldingen beschikbaar</translation> <translation id="988978206646512040">Een lege wachtwoordzin is niet toegestaan</translation> +<translation id="991413375315957741">bewegings- of lichtsensoren</translation> <translation id="992032470292211616">Extensies, apps en thema's kunnen schade toebrengen aan je apparaat. Weet je zeker dat je wilt doorgaan?</translation> <translation id="992256792861109788">Roze</translation> <translation id="992592832486024913">ChromeVox (gesproken feedback) uitschakelen</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index f294ce7..285c6b56 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Standard</translation> <translation id="1252987234827889034">Det oppsto en profilfeil</translation> <translation id="1254593899333212300">Direkte internettilkobling</translation> +<translation id="1257553931232494454">zoomnivåer</translation> <translation id="1259152067760398571">Sikkerhetssjekken ble kjørt i går</translation> <translation id="1260451001046713751">Tillat alltid forgrunnsvinduer og viderekoblinger fra <ph name="HOST" /></translation> <translation id="1261380933454402672">Moderat</translation> @@ -668,6 +669,7 @@ <translation id="1729533290416704613">Den styrer også hvilken side som vises når du søker fra multifunksjonsfeltet.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />For å fjerne apper, gå til Innstillinger > Google Play Butikk > Administrer Android-innstillinger > Apper eller Appstyring. Trykk på appen du vil avinstallere (du må kanskje sveipe til høyre eller venstre for å finne den). Trykk deretter på Avinstaller eller Slå av.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Sender forespørsel...</translation> +<translation id="1733064249834771892">skrifttyper</translation> <translation id="1733383495376208985">Kryptér synkroniserte data med din egen <ph name="BEGIN_LINK" />passordfrase for synkronisering<ph name="END_LINK" />. Dette inkluderer ikke betalingsmåter og adresser fra Google Pay.</translation> <translation id="1734212868489994726">Lys blå</translation> <translation id="1734230530703461088">Kunne ikke laste inn utvidelser innenfor tidsgrensen. Kontakt administratoren din.</translation> @@ -755,6 +757,7 @@ <translation id="1818913467757368489">Opplasting av loggen pågår.</translation> <translation id="1819721979226826163">Trykk på Appvarsler > Google Play Tjenester.</translation> <translation id="1820028137326691631">Skriv inn administratorgodkjent passord</translation> +<translation id="182139138257690338">automatiske nedlastinger</translation> <translation id="1822140782238030981">Bruker du allerede Chrome? Logg på</translation> <translation id="18245044880483936">De sikkerhetskopierte dataene teller ikke med i Disk-lagringskvoten til barnet ditt.</translation> <translation id="1825565032302550710">Porten må være mellom 1024 og 65535</translation> @@ -1195,6 +1198,7 @@ <translation id="2326931316514688470">&Last inn appen på nytt</translation> <translation id="2327492829706409234">Aktiver appen</translation> <translation id="2328561734797404498">Start enheten på nytt for å bruke <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">vindusplassering</translation> <translation id="2329597144923131178">Logg på for å få bokmerkene, loggen, passordene og de andre innstillingene dine på alle enhetene du bruker.</translation> <translation id="2332131598580221120">Se i Nettmarked</translation> <translation id="2332192922827071008">Åpne Innstillinger</translation> @@ -1707,6 +1711,7 @@ <translation id="2894757982205307093">Ny fane i gruppen</translation> <translation id="289644616180464099">SIM-kortet er låst</translation> <translation id="289695669188700754">Nøkkel-id: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Denne egendefinerte innstillingen blir fjernet når du lukker alle inkognitovinduer</translation> <translation id="2897878306272793870">Er du sikker på at du vil åpne <ph name="TAB_COUNT" /> faner?</translation> <translation id="290105521672621980">Filen bruker funksjoner som ikke støttes</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> kunne ikke kommunisere med denne skriveren. Sørg for at skriveren er koblet til, og prøv igjen.</translation> @@ -1796,6 +1801,7 @@ <translation id="2996286169319737844">Data er kryptert med passordfrasen din for synkronisering. Dette inkluderer ikke betalingsmåter og adresser fra Google Pay.</translation> <translation id="2996722619877761919">Rotér til langsiden</translation> <translation id="3000236644796679448">Nettsteder kan be om å få bruke mikrofonen din (anbefales)</translation> +<translation id="3000378525979847272">Tillot <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Monolyd</translation> <translation id="3001144475369593262">Barnekontoer</translation> <translation id="3003144360685731741">Foretrukne nettverk</translation> @@ -2055,6 +2061,7 @@ <translation id="3305661444342691068">Åpne forhåndsvisning av PDF-en</translation> <translation id="3308116878371095290">Informasjonskapsler fra denne siden ble blokkert.</translation> <translation id="3308134619352333507">Skjul knappen</translation> +<translation id="3308738399950580893">annonser</translation> <translation id="3308852433423051161">Laster inn Google-assistenten …</translation> <translation id="3309330461362844500">Sertifikatprofil-ID</translation> <translation id="3311445899360743395">Data som er tilknyttet denne appen, kan bli fjernet fra denne enheten.</translation> @@ -2115,6 +2122,7 @@ <translation id="3388788256054548012">Denne filen er kryptert. Spør eieren om å dekryptere den.</translation> <translation id="3390013585654699824">Informasjon om appen</translation> <translation id="3390741581549395454">Linux-apper og -filer er sikkerhetskopiert. Oppgraderingen begynner straks.</translation> +<translation id="3391482648489541560">filredigering</translation> <translation id="339178315942519818">Se varsler fra chatteappene dine på <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Ved å klikke på «Godta og fortsett»-knappen godtar du behandlingen som beskrives ovenfor, for disse Google-tjenestene.</translation> <translation id="3399432415385675819">Varsler slås av</translation> @@ -2889,6 +2897,7 @@ <translation id="425573743389990240">Batteriets utladningshastighet i watt (negativ verdi indikerer at batteriet lades)</translation> <translation id="4256316378292851214">La&gre video som</translation> <translation id="4258348331913189841">Filsystemer</translation> +<translation id="4259381619085088639">tilstedeværelsen din</translation> <translation id="4259388776256904261">Dette kan ta en stund</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> kan være farlig. Vil du sende filen til Google Avansert beskyttelse for gjennomsøking? Trykk på Shift+F6 for å gå til nedlastingsraden.</translation> <translation id="4263223596040212967">Kontrollér tastaturoppsettet og prøv på nytt.</translation> @@ -2925,6 +2934,7 @@ <translation id="4303079906735388947">Angi en ny PIN-kode for sikkerhetsnøkkelen din</translation> <translation id="4305402730127028764">Kopiér til <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Apper må leveres med innholdstypen «<ph name="CONTENT_TYPE" />»</translation> +<translation id="4306812610847412719">utklippstavle</translation> <translation id="4307992518367153382">Generelt</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB ubrukt)</translation> <translation id="4310139701823742692">Filen har feil format. Sjekk PPD-filen og prøv på nytt.</translation> @@ -3012,6 +3022,7 @@ <translation id="4412698727486357573">Brukerstøtte</translation> <translation id="44141919652824029">Vil du gi «<ph name="APP_NAME" />» tilgang til listen over tilkoblede USB-enheter?</translation> <translation id="4414232939543644979">Nytt &inkognitovindu</translation> +<translation id="4414515549596849729">informasjonskapsler og nettstedsdata</translation> <translation id="4415213869328311284">Du er klar til å begynne å bruke <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Fant ingen enheter. Åpne en brukerstøtteartikkel i en ny fane.</translation> <translation id="4415276339145661267">Administrer Google-kontoen din</translation> @@ -3083,6 +3094,7 @@ <translation id="4493468155686877504">Anbefalt (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ikke vis på denne siden</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> har krasjet</translation> +<translation id="4500587658229086076">usikkert innhold</translation> <translation id="450099669180426158">Utropstegnikon</translation> <translation id="4501530680793980440">Bekreftelse av fjerning</translation> <translation id="4502423230170890588">Fjern fra denne enheten</translation> @@ -3123,6 +3135,7 @@ <translation id="4538684596480161368">Blokkér alltid programtillegg som ikke er prosessisolert, på <ph name="HOST" /></translation> <translation id="4538792345715658285">Installert av bedriftsinnstillingen.</translation> <translation id="4541662893742891060">Kan ikke koble til denne profilen. Kontakt operatøren din om du trenger teknisk støtte.</translation> +<translation id="4541810033354695636">utvidet virkelighet</translation> <translation id="4542520061254486227">Les dataene dine på <ph name="WEBSITE_1" /> og <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Sertifikatadministrator</translation> <translation id="4544174279960331769">Blått standardbrukerbilde</translation> @@ -3595,6 +3608,7 @@ <translation id="5112577000029535889">&Utviklerverktøy</translation> <translation id="5113739826273394829">Hvis du klikker på dette ikonet, låser du <ph name="DEVICE_TYPE" />-enheten manuelt. Neste gang må du skrive inn passordet ditt for å komme inn.</translation> <translation id="51143538739122961">Sett inn sikkerhetsnøkkelen og berør den</translation> +<translation id="5114987907971894280">virtuell virkelighet</translation> <translation id="5115309401544567011">Koble <ph name="DEVICE_TYPE" />-enheten til en strømkilde.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">La&gre lyd som</translation> @@ -3894,6 +3908,7 @@ <translation id="5464632865477611176">Kjør denne gangen</translation> <translation id="5464660706533281090">Denne innstillingen kan ikke endres av en barnebruker.</translation> <translation id="5466374726908360271">&Lim inn og søk etter «<ph name="SEARCH_TERMS" />»</translation> +<translation id="5467207440419968613">Blokkerte <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Nettsteder kan be om å få spille av beskyttet innhold (anbefales)</translation> <translation id="5468173180030470402">Ser etter delte nettverksressurser</translation> <translation id="5469852975082458401">Du kan navigere på sider med en tekstmarkør. Trykk på F7 for å slå av dette.</translation> @@ -4185,6 +4200,7 @@ <translation id="5794786537412027208">Avslutt alle Chrome-apper</translation> <translation id="5797070761912323120">Google kan bruke loggen din for å gi Søk, annonser og andre Google-tjenester et personlig preg</translation> <translation id="5798301976526354562">Tekststørrelse (gjelder også for direkteteksting)</translation> +<translation id="579907812742603813">beskyttet innhold</translation> <translation id="579915268381781820">Sikkerhetsnøkkelen er fjernet.</translation> <translation id="5799508265798272974">Virtuell Linux-maskin: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Målfilen har blitt komprimert eller fjernet siden siste nedlasting</translation> @@ -4258,6 +4274,7 @@ <translation id="5877064549588274448">Kanalen ble endret. Start enheten på nytt for å aktivere endringene.</translation> <translation id="5877584842898320529">Den valgte skriveren er ikke tilgjengelig, eller den er ikke installert på riktig måte. <ph name="BR" /> Kontrollér skriveren din, eller prøv å velge en annen skriver.</translation> <translation id="5882919346125742463">Kjente nettverk</translation> +<translation id="5883356647197510494">Blokkerte automatisk <ph name="PERMISSION_1" /> og <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Denne fanen er koblet til en USB-enhet.</translation> <translation id="5886009770935151472">Finger 1</translation> <translation id="5889282057229379085">Maksimalt antall mellomliggende sertifiseringsinstanser: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4757,6 +4774,7 @@ <translation id="6460601847208524483">Finn neste</translation> <translation id="6461170143930046705">Søker etter nettverk …</translation> <translation id="6463795194797719782">R&ediger</translation> +<translation id="6464094930452079790">bilder</translation> <translation id="6464825623202322042">Denne enheten</translation> <translation id="6465841119675156448">Uten internett</translation> <translation id="6466988389784393586">&Åpne alle bokmerker</translation> @@ -4780,6 +4798,7 @@ <translation id="6491376743066338510">Kunne ikke autorisere</translation> <translation id="6494327278868541139">Vis detaljer om økt beskyttelse</translation> <translation id="6494445798847293442">Ikke en sertifiseringsinstans</translation> +<translation id="6494750904506170417">forgrunnsvinduer og viderekoblinger</translation> <translation id="6494974875566443634">Tilpasning</translation> <translation id="6495925982925244349">Nettverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" /> – <ph name="NETWORK_NAME" /> – <ph name="SECURITY_STATUS" /> – <ph name="CONNECTION_STATUS" /> – signalstyrke <ph name="SIGNAL_STRENGTH" /> % – administreres av administratoren din – detaljer</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Disse dataene har sensitivt eller farlig innhold}=1{Denne filen har sensitivt eller farlig innhold}other{Disse filene har sensitivt eller farlig innhold}}</translation> @@ -4920,6 +4939,7 @@ <translation id="6657585470893396449">Passord</translation> <translation id="6659213950629089752">Denne siden ble zoomet inn av utvidelsen «<ph name="NAME" />»</translation> <translation id="6659594942844771486">Fane</translation> +<translation id="6660413144148052430">posisjon</translation> <translation id="666099631117081440">Utskriftstjenere</translation> <translation id="6663190258859265334">Kjør Powerwash på <ph name="DEVICE_TYPE" />, og gå tilbake til forrige versjon</translation> <translation id="6664237456442406323">Dessverre er datamaskinen konfigurert med en feilformatert maskinvare-ID. Dette hindrer Chrome OS fra å oppdatere til de siste sikkerhetsoppdateringene, og datamaskinen din <ph name="BEGIN_BOLD" />kan utsettes for skadelige angrep<ph name="END_BOLD" />.</translation> @@ -4974,6 +4994,7 @@ <translation id="672609503628871915">Se hva som er nytt</translation> <translation id="67269783048918309">Send bruks- og diagnostikkdata. Denne enheten sender for øyeblikket diagnostikk-, enhets- og appbruksdata til Google automatisk. Disse dataene brukes ikke til å identifisere barnet ditt, men bidrar til å gjøre systemet og appene bedre og mer stabile. Noen aggregerte data hjelper også Google-apper og -partnere, for eksempel Android-utviklere. Denne <ph name="BEGIN_LINK1" />innstillingen<ph name="END_LINK1" /> håndheves av eieren. Hvis du har slått på innstillingen for annen nett- og appaktivitet for barnet ditt, kan disse dataene bli lagret i barnets Google-konto. <ph name="BEGIN_LINK2" />Finn ut mer<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Koblet til – <ph name="BATTERY_PERCENTAGE" /> % batteri</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Sertifikater er ikke lastet inn</translation> <translation id="6732900235521116609">Kan ikke fjerne snarveien</translation> <translation id="6734468588183300211">Når du er i inkognitomodus, kan ikke nettsteder bruke informasjonskapsler til å se nettleseraktiviteten din på andre nettsteder, for eksempel for å vise deg personlig tilpassede annonser. Det kan hende at funksjoner på enkelte nettsteder slutter å fungere.</translation> @@ -5048,6 +5069,7 @@ <translation id="6817174620439930047">Spør meg når nettsteder vil bruke systemeksklusive meldinger for å få tilgang til MIDI-enheter (anbefales)</translation> <translation id="6818198425579322765">Sidespråket du vil oversette</translation> <translation id="6818802132960437751">Innebygd virusbeskyttelse</translation> +<translation id="6820143000046097424">serielle porter</translation> <translation id="682123305478866682">Cast skrivebordet</translation> <translation id="6823174134746916417">Berøringsklikk på styreflaten</translation> <translation id="6824564591481349393">Kopier &e-postadresse</translation> @@ -5481,6 +5503,7 @@ <translation id="730515362922783851">utveksle data med en hvilken som helst enhet på det lokale nettverket eller Internett.</translation> <translation id="7306521477691455105">Åpne Innstillinger for å koble <ph name="USB_DEVICE_NAME" /> til <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Satt på pause</translation> +<translation id="7308436126008021607">bakgrunnssynkronisering</translation> <translation id="7309257895202129721">Vis &kontroller</translation> <translation id="7310598146671372464">Kan ikke logge på. Tjeneren støtter ikke de angitte Kerberos-krypteringstypene. Ta kontakt med administratoren din.</translation> <translation id="7320213904474460808">Bruk nettverk som standard</translation> @@ -5622,6 +5645,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Må leveres tilbake umiddelbart}other{Levér tilbake <ph name="DEVICE_TYPE" /> innen {NUM_DAYS} dager}}</translation> <translation id="7475671414023905704">Nettadresse for mistet passord – Netscape</translation> <translation id="7476454130948140105">Det er for lite batteri igjen til å starte oppdateringen (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Blokkerte automatisk <ph name="PERMISSION" /> og <ph name="COUNT" /> til</translation> <translation id="7477793887173910789">Styr musikk, video og mer</translation> <translation id="7478485216301680444">Kiosk-appen kunne ikke installeres.</translation> <translation id="7478623944308207463">Appene og innstillingene dine blir synkronisert på alle Chrome OS-enheter hvor du er logget på med Google-kontoen din. For alternativer for nettlesersynkronisering, gå til<ph name="LINK_BEGIN" />Chrome-innstillingene<ph name="LINK_END" />.</translation> @@ -6366,6 +6390,7 @@ <translation id="8288032458496410887">Avinstaller <ph name="APP" /></translation> <translation id="8289128870594824098">Diskstørrelse</translation> <translation id="8293206222192510085">Legg til bokmerke</translation> +<translation id="829335040383910391">lyd</translation> <translation id="8294431847097064396">Kilde</translation> <translation id="8298429963694909221">Du kan nå motta varsler fra telefonen din på <ph name="DEVICE_TYPE" />. Hvis du lukker varsler på <ph name="DEVICE_TYPE" />, blir de også lukket på telefonen. Sørg for at telefonen er i nærheten, og at Bluetooth og Wi-Fi er slått på.</translation> <translation id="8299319456683969623">Du er for øyeblikket ikke på nett.</translation> @@ -6384,6 +6409,7 @@ <translation id="8317671367883557781">Legg til nettverkstilkobling</translation> <translation id="8319414634934645341">Utvidet bruk av nøkkel</translation> <translation id="8320459152843401447">Hele skjermen</translation> +<translation id="8321476692217554900">varsler</translation> <translation id="8321837372750396788">Denne <ph name="DEVICE_TYPE" />-enheten kommer til å bli administrert av <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Mikrofonen er blokkert for denne siden.</translation> <translation id="8323167517179506834">Skriv inn nettadresse</translation> @@ -6449,7 +6475,9 @@ <translation id="8403562727702715619">Nylig fra Google Disk</translation> <translation id="8407199357649073301">Loggnivå:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />-nettverk – kobler til</translation> +<translation id="8409413588194360210">betalingsbehandlere</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Tillot <ph name="PERMISSION" /> og <ph name="COUNT" /> til</translation> <translation id="8413385045638830869">Spør først (anbefales)</translation> <translation id="8417548266957501132">Foreldrepassord</translation> <translation id="8418445294933751433">Vi&s som fane</translation> @@ -6645,6 +6673,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> eller <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Fargetemperatur for Nattlys</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> vil <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> med mer</translation> +<translation id="865032292777205197">bevegelsessensorer</translation> <translation id="8650543407998814195">Du kan fjerne den gamle profilen din selv om du ikke har tilgang til den lenger.</translation> <translation id="8651585100578802546">Tving ny innlasting av siden</translation> <translation id="8652400352452647993">Feil med pakkeutvidelse</translation> @@ -6781,6 +6810,7 @@ <translation id="8785622406424941542">Pekepenn</translation> <translation id="8787254343425541995">Gi tillatelse til proxy-tjenere for delte nettverk</translation> <translation id="8791534160414513928">Send en «Ingen sporing»-forespørsel med nettrafikken din</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Når Wi-Fi-sonen er på, kommer <ph name="PHONE_NAME" /> til å</translation> <translation id="8795916974678578410">Nytt vindu</translation> <translation id="8797459392481275117">Oversett aldri dette nettstedet</translation> @@ -6820,6 +6850,7 @@ <translation id="8823559166155093873">Blokkering av informasjonskapsler</translation> <translation id="8823704566850948458">Foreslå passord …</translation> <translation id="8824701697284169214">Legg til si&de</translation> +<translation id="8827125715368568315">Blokkerte <ph name="PERMISSION" /> og <ph name="COUNT" /> til</translation> <translation id="8827289157496676362">Fest utvidelsen</translation> <translation id="8827752199525959199">Flere handlinger, passord for <ph name="USERNAME" /> på <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Ikke tillat nettsteder å oppdage Bluetooth-enheter i nærheten</translation> @@ -6920,6 +6951,7 @@ <translation id="8932894639908691771">Alternativer for brytertilgang</translation> <translation id="8933960630081805351">&Vis i Finder</translation> <translation id="8934732568177537184">Fortsett</translation> +<translation id="8938306522009698937">behandlere</translation> <translation id="8938800817013097409">USB-C-enhet (høyre port på baksiden)</translation> <translation id="8940081510938872932">Datamaskinen din har for mange baller i luften nå. Prøv på nytt senere.</translation> <translation id="8941173171815156065">Opphev tillatelsen «<ph name="PERMISSION" />»</translation> @@ -7224,6 +7256,7 @@ <translation id="987264212798334818">Generelt</translation> <translation id="987897973846887088">Ingen bilder er tilgjengelige</translation> <translation id="988978206646512040">Tomme passordfraser er ikke tillatt</translation> +<translation id="991413375315957741">bevegelses- eller lyssensorer</translation> <translation id="992032470292211616">Utvidelser, apper og temaer kan skade enheten din. Er du sikker på at du vil fortsette?</translation> <translation id="992256792861109788">Rosa</translation> <translation id="992592832486024913">Slå av ChromeVox (taletilbakemelding)</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index d3c32e5..f4a9c39 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -425,6 +425,7 @@ <translation id="1465827627707997754">ਪੀਜ਼ਾ ਸਲਾਈਸ</translation> <translation id="1468571364034902819">ਇਸ ਪ੍ਰੋਫਾਈਲ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{ਟੈਬ ਨੂੰ ਨਵੇਂ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ}one{ਟੈਬ ਨੂੰ ਨਵੇਂ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ}other{ਟੈਬਾਂ ਨੂੰ ਨਵੇਂ ਗਰੁੱਪ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ}}</translation> +<translation id="1470350905258700113">ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਵਰਤੋ</translation> <translation id="1470946456740188591">ਕੈਰਟ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਲਈ, Ctrl+Search+7 ਸ਼ਾਰਟਕੱਟ ਵਰਤੋ</translation> <translation id="1472675084647422956">ਹੋਰ ਦਿਖਾਓ</translation> <translation id="1474785664565228650">ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਸੈਟਿੰਗ ਵਿੱਚ ਤਬਦੀਲੀ ਲਈ Parallels Desktop ਦਾ ਮੁੜ-ਲਾਂਚ ਹੋਣਾ ਲੋੜੀਂਦਾ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ Parallels Desktop ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰੋ।</translation> @@ -1398,6 +1399,7 @@ <translation id="2541002089857695151">ਕੀ ਪੂਰੀ-ਸਕ੍ਰੀਨ ਕਾਸਟ ਕਰਨਾ ਸੁਯੋਗ ਬਣਾਉਣਾ ਹੈ?</translation> <translation id="2541706104884128042">ਸੌਣ ਦਾ ਨਵਾਂ ਸਮਾਂ ਸੈੱਟ ਕੀਤਾ ਗਿਆ</translation> <translation id="2542050502251273923">ff_debug ਵਰਤ ਕੇ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਪ੍ਰਬੰਧਕ ਅਤੇ ਹੋਰ ਸੇਵਾਵਾਂ ਦਾ ਡੀਬੱਗਿੰਗ ਪੱਧਰ ਸੈੱਟ ਕਰਦਾ ਹੈ।</translation> +<translation id="2544292303401268586">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਐਪਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਨ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਸਨੂੰ ਪੂਰਾ ਹੋਣ ਵਿੱਚ ਕਈ ਮਿੰਟ ਲੱਗ ਸਕਦੇ ਹਨ।</translation> <translation id="2544853746127077729">ਪ੍ਰਮਾਣੀਕਰਨ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਨੂੰ ਨੈੱਟਵਰਕ ਵੱਲੋਂ ਅਸਵੀਕਾਰ ਕੀਤਾ ਗਿਆ</translation> <translation id="2546283357679194313">ਕੁਕੀਜ਼ ਅਤੇ ਸਾਈਟ ਡਾਟਾ</translation> <translation id="2548347166720081527">ਮਨਜ਼ੂਰਸ਼ੁਦਾ <ph name="PERMISSION" /></translation> @@ -2779,6 +2781,7 @@ <translation id="409579654357498729">'ਕਲਾਊਟ ਪ੍ਰਿੰਟ' ਵਿੱਚ ਸਾਮਲ ਕਰੋ</translation> <translation id="4096508467498758490">ਵਿਕਾਸਕਾਰ ਮੋਡ ਐਕਸਟੈਂਸ਼ਨ ਬੰਦ ਕਰੋ</translation> <translation id="4097406557126260163">ਐਪਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ</translation> +<translation id="409742781329613461">Chrome ਲਈ ਨੁਕਤੇ</translation> <translation id="4097560579602855702">Google ਖੋਜੋ</translation> <translation id="4098667039111970300">ਟੂਲਬਾਰ ਵਿੱਚ ਸਟਾਈਲਸ ਟੂਲ</translation> <translation id="4099060993766194518">ਕੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਖੋਜ ਇੰਜਣ ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕਰਨਾ ਹੈ?</translation> @@ -4088,6 +4091,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> ਤੱਕ ਪੜ੍ਹਨ ਅਤੇ ਲਿਖਣ ਦੀ ਪਹੁੰਚ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਗਈ ਹੈ।</translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" /> ਤੇ ਆਪਣਾ ਡਾਟਾ ਪੜ੍ਹੋ</translation> <translation id="5680050361008726776">ਕੀ "<ph name="ESIM_PROFILE_NAME" />" ਨੂੰ ਹਟਾਉਣਾ ਹੈ?</translation> +<translation id="5683806393796685434">ਕਿਰਪਾ ਕਰਕੇ ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਲਈ ਆਪਣਾ ਕੋਡ ਦਾਖਲ ਕਰੋ</translation> <translation id="5684181005476681636">ਵਾਈ-ਫਾਈ ਸੰਬੰਧੀ ਵੇਰਵੇ</translation> <translation id="5684661240348539843">Asset ਪਛਾਣਕਰਤਾ</translation> <translation id="5687326903064479980">ਸਮਾਂਜ਼ੋਨ</translation> @@ -4339,6 +4343,7 @@ <translation id="5978277834170881274">&ਮੂਲ ਸ਼ਬਦ-ਜੋੜ ਜਾਂਚ ਵਰਤੋ</translation> <translation id="5979084224081478209">ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰੋ</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{ਤੁਸੀਂ 1 ਸੰਭਾਵੀ ਤੌਰ 'ਤੇ ਨੁਕਸਾਨਦੇਹ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰ ਦਿੱਤਾ ਹੈ}one{ਤੁਸੀਂ {NUM_EXTENSIONS} ਸੰਭਾਵੀ ਤੌਰ 'ਤੇ ਨੁਕਸਾਨਦੇਹ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰ ਦਿੱਤਾ ਹੈ}other{ਤੁਸੀਂ {NUM_EXTENSIONS} ਸੰਭਾਵੀ ਤੌਰ 'ਤੇ ਨੁਕਸਾਨਦੇਹ ਐਕਸਟੈਂਸ਼ਨਾਂ ਨੂੰ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰ ਦਿੱਤਾ ਹੈ}}</translation> +<translation id="5979353814339191480">ਇਹ ਵਿਕਲਪ ਕਿਸੇ ਡਾਟਾ ਪਲਾਨ ਜਾਂ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਡੋਂਗਲ ਵਾਲੀਆਂ Chromebooks 'ਤੇ ਜਾਂ ਪੋਰਟੇਬਲ ਹੌਟਸਪੌਟ ਤੋਂ ਟੈਦਰਿੰਗ ਕਰਨ ਵੇਲੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ</translation> <translation id="5979421442488174909">&<ph name="LANGUAGE" /> ਵਿੱਚ ਅਨੁਵਾਦ ਕਰੋ</translation> <translation id="5979469435153841984">ਪੰਨਿਆਂ ਨੂੰ ਬੁੱਕਮਾਰਕ ਕਰਨ ਲਈ, ਪਤਾ ਬਾਰ ਵਿੱਚ ਮੌਜੂਦ ਤਾਰੇ 'ਤੇ ਕਲਿੱਕ ਕਰੋ</translation> <translation id="5984222099446776634">ਹਾਲੀਆ ਵਿਜਿਟ ਕੀਤੇ</translation> @@ -4818,6 +4823,7 @@ <translation id="653659894138286600">ਦਸਤਾਵੇਜ਼ਾਂ ਅਤੇ ਚਿੱਤਰਾਂ ਨੂੰ ਸਕੈਨ ਕਰੋ</translation> <translation id="6537613839935722475">ਨਾਮ ਲਈ ਅੱਖਰ, ਨੰਬਰ ਅਤੇ ਹਾਈਫਨ (-) ਵਰਤੇ ਜਾ ਸਕਦੇ ਹਨ</translation> <translation id="6537880577641744343">ਕਮਾਂਡਰ</translation> +<translation id="6538098297809675636">ਕੋਡ ਦਾ ਪਤਾ ਲਗਾਉਣ ਵੇਲੇ ਗੜਬੜ ਹੋ ਗਈ</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />ਨੋਟ:<ph name="END_BOLD" /> ਸਿਰਫ਼ ਤਾਂ ਹੀ ਚਾਲੂ ਕਰੋ ਜੇਕਰ ਤੁਹਾਨੂੰ ਪਤਾ ਹੈ ਕਿ ਤੁਸੀਂ ਕੀ ਕਰ ਰਹੇੇ ਹੋ ਜਾਂ ਜੇਕਰ ਤੁਹਾਨੂੰ ਅਜਿਹਾ ਕਰਨ ਲਈ ਕਿਹਾ ਗਿਆ ਹੈ, ਕਿਉਂਕਿ ਡਾਟਾ ਦਾ ਇਕੱਤਰੀਕਰਨ ਕਾਰਗੁਜ਼ਾਰੀ ਘਟਾ ਸਕਦਾ ਹੈ।</translation> <translation id="6541638731489116978">ਇਸ ਸਾਈਟ ਨੂੰ ਤੁਹਾਡੇ ਗਤੀਸ਼ੀਲਤਾ ਸੈਂਸਰਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਤੋਂ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ।</translation> <translation id="6545665334409411530">ਦੁਹਰਾਉਣ ਦੀ ਦਰ</translation> @@ -6013,6 +6019,7 @@ <translation id="7904526211178107182">ਆਪਣੇ ਨੈੱਟਵਰਕ 'ਤੇ Linux ਪੋਰਟਾਂ ਨੂੰ ਹੋਰਨਾਂ ਡੀਵਾਈਸਾਂ ਲਈ ਉਪਲਬਧ ਕਰਵਾਓ।</translation> <translation id="7907837847548254634">ਫੋਕਸ ਕੀਤੀ ਗਈ ਵਸਤੂ ਨੂੰ ਤੁਰੰਤ ਉਜਾਗਰ ਕਰ ਕੇ ਦਿਖਾਓ</translation> <translation id="7908378463497120834">ਮਾਫ਼ ਕਰਨਾ, ਤੁਹਾਡੀ ਬਾਹਰੀ ਸਟੋਰੇਜ ਡੀਵਾਈਸ 'ਤੇ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਭਾਗ ਮਾਉਂਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।</translation> +<translation id="7909324225945368569">ਆਪਣੇ ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਾਮ ਬਦਲੋ</translation> <translation id="7909969815743704077">ਗੁਮਨਾਮ ਵਿੱਚ ਡਾਊਨਲੋਡ ਕੀਤਾ</translation> <translation id="7910768399700579500">&ਨਵਾਂ ਫੋਲਡਰ</translation> <translation id="7911118814695487383">Linux</translation> @@ -6628,6 +6635,7 @@ <translation id="8642900771896232685">2 ਸਕਿੰਟ</translation> <translation id="8642947597466641025">ਟੈਕਸਟ ਨੂੰ ਵੱਡਾ ਕਰੋ</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> ਖਤਰਨਾਕ ਹੋ ਸਕਦੀ ਹੈ। ਕੀ Google ਉੱਨਤ ਸੁਰੱਖਿਆ ਨੂੰ ਸਕੈਨ ਕਰਨ ਲਈ ਭੇਜਣਾ ਹੈ?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{ਕੋਈ ਕੁਕੀ ਨਹੀਂ}=1{1 ਕੁਕੀ ਬਲਾਕ ਕੀਤੀ ਗਈ ਹੈ}other{# ਕੁਕੀਜ਼ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ}}</translation> <translation id="8644655801811752511">ਇਸ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਨੂੰ ਰੀਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਕੁੰਜੀ ਨੂੰ ਪਾ ਕੇ ਝੱਟ ਉਸਨੂੰ ਰੀਸੈੱਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="8645354835496065562">ਸੈਂਸਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿੰਦੇ ਰਹੋ</translation> <translation id="8645920082661222035">ਖਤਰਨਾਕ ਘਟਨਾਵਾਂ ਦਾ ਪਤਾ ਕਰਕੇ ਉਹਨਾਂ ਦੇ ਵਾਪਰਨ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਚਿਤਾਵਨੀ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index d7b1cc65..46e15159 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Domyślne</translation> <translation id="1252987234827889034">Wystąpił błąd profilu</translation> <translation id="1254593899333212300">Bezpośrednie połączenie internetowe</translation> +<translation id="1257553931232494454">poziomy powiększenia</translation> <translation id="1259152067760398571">Potwierdzenie bezpieczeństwa zostało wykonane wczoraj</translation> <translation id="1260451001046713751">Zawsze zezwalaj na wyskakujące okienka i przekierowania z <ph name="HOST" /></translation> <translation id="1261380933454402672">Umiarkowana</translation> @@ -672,6 +673,7 @@ <translation id="1729533290416704613">Kontroluje także to, jaka strona wyświetla się po wyszukiwaniu w omniboksie.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Aby usunąć aplikacje, otwórz Ustawienia > Sklep Google Play > Zarządzaj ustawieniami Androida > Aplikacje lub Menedżer aplikacji. Następnie kliknij aplikację, którą chcesz odinstalować (jeśli to konieczne, przesuń palcem w prawo lub w lewo, by ją znaleźć), a potem kliknij Odinstaluj lub Wyłącz.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Wysyłanie żądania...</translation> +<translation id="1733064249834771892">czcionki</translation> <translation id="1733383495376208985">Szyfruj synchronizowane dane własnym <ph name="BEGIN_LINK" />hasłem synchronizacji<ph name="END_LINK" />. Nie obejmuje to form płatności ani adresów w Google Pay.</translation> <translation id="1734212868489994726">Jasnoniebieski</translation> <translation id="1734230530703461088">Nie udało się załadować rozszerzeń w przewidzianym na to czasie. Skontaktuj się z administratorem.</translation> @@ -755,6 +757,7 @@ <translation id="1818913467757368489">Trwa przesyłanie logu.</translation> <translation id="1819721979226826163">Kliknij Powiadomienia z aplikacji > Usługi Google Play.</translation> <translation id="1820028137326691631">Wpisz hasło uzyskane od administratora</translation> +<translation id="182139138257690338">pobieranie automatyczne</translation> <translation id="1822140782238030981">Używasz już Chrome? Zaloguj się.</translation> <translation id="18245044880483936">Dane kopii zapasowej nie zmniejszają ilości miejsca dostępnego na Dysku Twojego dziecka.</translation> <translation id="1825565032302550710">Port musi mieć numer z zakresu 1024–65535</translation> @@ -1195,6 +1198,7 @@ <translation id="2326931316514688470">P&rzeładuj aplikację</translation> <translation id="2327492829706409234">Włącz aplikację</translation> <translation id="2328561734797404498">Aby użyć <ph name="APP_NAME" />, uruchom ponownie urządzenie.</translation> +<translation id="2329182534073751090">rozmieszczenie okien</translation> <translation id="2329597144923131178">Zaloguj się, by korzystać z zakładek, historii, haseł i innych ustawień na wszystkich swoich urządzeniach.</translation> <translation id="2332131598580221120">Wyświetl w sklepie</translation> <translation id="2332192922827071008">Otwórz Ustawienia</translation> @@ -1707,6 +1711,7 @@ <translation id="2894757982205307093">Nowa karta w grupie</translation> <translation id="289644616180464099">Karta SIM jest zablokowana</translation> <translation id="289695669188700754">Identyfikator klucza: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Gdy zamkniesz wszystkie okna incognito, to niestandardowe ustawienie zostanie usunięte</translation> <translation id="2897878306272793870">Czy na pewno chcesz otworzyć <ph name="TAB_COUNT" /> zakładki?</translation> <translation id="290105521672621980">Plik korzysta z nieobsługiwanych funkcji</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> nie może skomunikować się z drukarką. Upewnij się, że jest ona podłączona, i spróbuj ponownie.</translation> @@ -1796,6 +1801,7 @@ <translation id="2996286169319737844">Dane są szyfrowane Twoim hasłem synchronizacji. Nie obejmuje to form płatności ani adresów w Google Pay.</translation> <translation id="2996722619877761919">Odwróć wzdłuż dłuższej krawędzi</translation> <translation id="3000236644796679448">Strony mogą prosić o dostęp do mikrofonu (zalecane)</translation> +<translation id="3000378525979847272">Przyznano uprawnienia: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Dźwięk mono</translation> <translation id="3001144475369593262">Konta dla dzieci</translation> <translation id="3003144360685731741">Preferowane sieci</translation> @@ -2055,6 +2061,7 @@ <translation id="3305661444342691068">Otwieraj podgląd plików PDF</translation> <translation id="3308116878371095290">Umieszczanie na komputerze plików cookie z tej strony jest niedozwolone.</translation> <translation id="3308134619352333507">Ukryj przycisk</translation> +<translation id="3308738399950580893">reklamy</translation> <translation id="3308852433423051161">Ładuję Asystenta Google...</translation> <translation id="3309330461362844500">Identyfikator certyfikowanego profilu</translation> <translation id="3311445899360743395">Dane powiązane z tą aplikacją mogą zostać usunięte z urządzenia.</translation> @@ -2115,6 +2122,7 @@ <translation id="3388788256054548012">Ten plik jest zaszyfrowany. Poproś właściciela, by go odszyfrował.</translation> <translation id="3390013585654699824">Szczegóły aplikacji</translation> <translation id="3390741581549395454">Utworzono kopię zapasową aplikacji i plików Linuksa. Uaktualnianie wkrótce się rozpocznie.</translation> +<translation id="3391482648489541560">edytowanie plików</translation> <translation id="339178315942519818">Wyświetlaj powiadomienia z aplikacji do czatowania na urządzeniu <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Klikając przycisk „Zaakceptuj i kontynuuj”, wyrażasz zgodę na opisane powyżej przetwarzanie danych w tych usługach Google.</translation> <translation id="3399432415385675819">Powiadomienia zostaną wyłączone</translation> @@ -2891,6 +2899,7 @@ <translation id="425573743389990240">Szybkość rozładowywania akumulatora w watach (wartość ujemna oznacza, że akumulator się ładuje)</translation> <translation id="4256316378292851214">Za&pisz film wideo jako...</translation> <translation id="4258348331913189841">Systemy plików</translation> +<translation id="4259381619085088639">Twoja obecność</translation> <translation id="4259388776256904261">To może chwilę potrwać</translation> <translation id="4260182282978351200">Plik <ph name="FILE_NAME" /> może być niebezpieczny. Wysłać go do przeskanowania przez Ochronę zaawansowaną Google? Naciśnij Shift+F6, by przejść do obszaru paska pobranych plików.</translation> <translation id="4263223596040212967">Sprawdź układ klawiatury i spróbuj ponownie.</translation> @@ -2927,6 +2936,7 @@ <translation id="4303079906735388947">Ustaw nowy kod PIN klucza bezpieczeństwa</translation> <translation id="4305402730127028764">Skopiuj na: <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikacje muszą być udostępniane z parametrem content-type „<ph name="CONTENT_TYPE" />”</translation> +<translation id="4306812610847412719">schowek</translation> <translation id="4307992518367153382">Podstawowe</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (aktywne <ph name="NUM_KILOBYTES_LIVE" /> KB)</translation> <translation id="4310139701823742692">Plik ma niewłaściwy format. Sprawdź plik PPD i spróbuj ponownie.</translation> @@ -3014,6 +3024,7 @@ <translation id="4412698727486357573">Centrum pomocy</translation> <translation id="44141919652824029">Zezwolić aplikacji <ph name="APP_NAME" /> na odczyt listy podłączonych urządzeń USB?</translation> <translation id="4414232939543644979">Nowe okno &incognito</translation> +<translation id="4414515549596849729">pliki cookie i dane witryn</translation> <translation id="4415213869328311284">Możesz już zacząć używać tego urządzenia (<ph name="DEVICE_TYPE" />).</translation> <translation id="4415245286584082850">Nie znaleziono żadnego urządzenia. Otwórz artykuł w Centrum pomocy na nowej karcie.</translation> <translation id="4415276339145661267">Zarządzaj kontem Google</translation> @@ -3085,6 +3096,7 @@ <translation id="4493468155686877504">Zalecane (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Nie pokazuj na tej stronie</translation> <translation id="4500114933761911433">We wtyczce <ph name="PLUGIN_NAME" /> wystąpił poważny błąd</translation> +<translation id="4500587658229086076">treść niezabezpieczona</translation> <translation id="450099669180426158">Ikona wykrzyknika</translation> <translation id="4501530680793980440">Potwierdź usunięcie</translation> <translation id="4502423230170890588">Usuń z tego urządzenia</translation> @@ -3125,6 +3137,7 @@ <translation id="4538684596480161368">Zawsze blokuj wtyczki poza piaskownicą na <ph name="HOST" /></translation> <translation id="4538792345715658285">Zainstalowane na podstawie zasad przedsiębiorstwa.</translation> <translation id="4541662893742891060">Nie można połączyć z tym profilem. Aby uzyskać pomoc techniczną, skontaktuj się ze swoim operatorem.</translation> +<translation id="4541810033354695636">rzeczywistość rozszerzona</translation> <translation id="4542520061254486227">Odczyt Twoich danych na stronie <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Menedżer certyfikatów</translation> <translation id="4544174279960331769">Domyślny niebieski awatar</translation> @@ -3595,6 +3608,7 @@ <translation id="5112577000029535889">&Narzędzia dla deweloperów</translation> <translation id="5113739826273394829">Jeśli klikniesz tę ikonę, <ph name="DEVICE_TYPE" /> zostanie zablokowany ręcznie. Następnym razem trzeba będzie wpisać hasło, by go odblokować.</translation> <translation id="51143538739122961">Włóż klucz bezpieczeństwa i dotknij go</translation> +<translation id="5114987907971894280">rzeczywistość wirtualna</translation> <translation id="5115309401544567011">Podłącz urządzenie <ph name="DEVICE_TYPE" /> do źródła zasilania.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Za&pisz dźwięk jako...</translation> @@ -3894,6 +3908,7 @@ <translation id="5464632865477611176">Uruchom tym razem</translation> <translation id="5464660706533281090">Dziecko nie może zmienić tego ustawienia.</translation> <translation id="5466374726908360271">&Wklej i wyszukaj „<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">Zablokowano uprawnienia: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Strony mogą prosić o zgodę na odtwarzanie treści chronionych (zalecane)</translation> <translation id="5468173180030470402">Wyszukuję udziały plików</translation> <translation id="5469852975082458401">Możesz poruszać się po stronach przy użyciu kursora tekstowego. Aby wyłączyć tę opcję, naciśnij F7.</translation> @@ -4185,6 +4200,7 @@ <translation id="5794786537412027208">Zamknij wszystkie aplikacje Chrome</translation> <translation id="5797070761912323120">Google może korzystać z Twojej historii, by personalizować wyniki wyszukiwania, reklamy i działanie innych usług</translation> <translation id="5798301976526354562">Rozmiar tekstu (dotyczy też napisów na żywo)</translation> +<translation id="579907812742603813">treść chroniona</translation> <translation id="579915268381781820">Klucz bezpieczeństwa został odłączony.</translation> <translation id="5799508265798272974">Linuksowa maszyna wirtualna: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Od czasu ostatniego pobierania plik docelowy został obcięty lub usunięty.</translation> @@ -4258,6 +4274,7 @@ <translation id="5877064549588274448">Kanał został zmieniony. Aby zastosować zmiany, uruchom ponownie urządzenie.</translation> <translation id="5877584842898320529">Wybrana drukarka jest niedostępna lub nieprawidłowo zainstalowana. <ph name="BR" /> Sprawdź ją lub wybierz inną.</translation> <translation id="5882919346125742463">Znane sieci</translation> +<translation id="5883356647197510494">Automatycznie zablokowano uprawnienia: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Ta karta jest połączona z urządzeniem USB.</translation> <translation id="5886009770935151472">Palec 1</translation> <translation id="5889282057229379085">Maksymalna liczba pośrednich urzędów certyfikacji: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4756,6 +4773,7 @@ <translation id="6460601847208524483">Znajdź następne</translation> <translation id="6461170143930046705">Szukam sieci...</translation> <translation id="6463795194797719782">&Edycja</translation> +<translation id="6464094930452079790">obrazy</translation> <translation id="6464825623202322042">To urządzenie</translation> <translation id="6465841119675156448">Bez internetu</translation> <translation id="6466988389784393586">&Otwórz wszystkie zakładki</translation> @@ -4778,6 +4796,7 @@ <translation id="6490471652906364588">Urządzenie USB-C (prawy port)</translation> <translation id="6491376743066338510">Nieudana autoryzacja</translation> <translation id="6494445798847293442">To nie jest urząd certyfikacji</translation> +<translation id="6494750904506170417">pop-upy i przekierowania</translation> <translation id="6494974875566443634">Dostosowywanie</translation> <translation id="6495925982925244349">Sieć <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, siła sygnału: <ph name="SIGNAL_STRENGTH" />%, zarządzana przez administratora, szczegóły</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Te dane zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}=1{Ten plik zawiera treści niebezpieczne lub treści o charakterze kontrowersyjnym.}few{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}many{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}other{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}}</translation> @@ -4918,6 +4937,7 @@ <translation id="6657585470893396449">Hasło</translation> <translation id="6659213950629089752">Powiększenie strony zostało zmienione przez rozszerzenie „<ph name="NAME" />”</translation> <translation id="6659594942844771486">Karta</translation> +<translation id="6660413144148052430">lokalizacja</translation> <translation id="666099631117081440">Serwery druku</translation> <translation id="6663190258859265334">Wykonaj Powerwash na urządzeniu <ph name="DEVICE_TYPE" /> i przywróć poprzednią wersję.</translation> <translation id="6664237456442406323">Twój komputer jest skonfigurowany przy użyciu błędnie sformatowanego identyfikatora sprzętu. Ta sytuacja uniemożliwia zaktualizowanie systemu operacyjnego Chrome za pomocą najnowszych poprawek zabezpieczeń, a komputer <ph name="BEGIN_BOLD" />może być narażony na złośliwe ataki<ph name="END_BOLD" />.</translation> @@ -4972,6 +4992,7 @@ <translation id="672609503628871915">Zobacz, co nowego</translation> <translation id="67269783048918309">Wysyłaj dane diagnostyczne oraz informacje o użytkowaniu. To urządzenie automatycznie wysyła do Google dane diagnostyczne oraz informacje o używaniu urządzenia i aplikacji. Nie zostaną one użyte do zidentyfikowania Twojego dziecka. Wykorzystamy je, by poprawić stabilność systemu i aplikacji oraz wprowadzić inne ulepszenia. Niektóre dane zbiorcze pomogą nam też udoskonalić aplikacje Google lub zostaną wykorzystane przez naszych partnerów, na przykład deweloperów aplikacji na Androida. To <ph name="BEGIN_LINK1" />ustawienie<ph name="END_LINK1" /> jest wymuszone przez właściciela. Jeśli na koncie Google dziecka włączysz ustawienie Dodatkowa aktywność w internecie i aplikacjach, te dane mogą być zapisywane na tym koncie. <ph name="BEGIN_LINK2" />Więcej informacji<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Połączono, bateria: <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Certyfikaty nie zostały wczytane</translation> <translation id="6732900235521116609">Nie można usunąć skrótu</translation> <translation id="6734468588183300211">W trybie incognito strony nie mogą używać plików cookie do śledzenia Twojej aktywności związanej z przeglądaniem różnych stron, na przykład w celu personalizowania reklam. Funkcje niektórych stron mogą nie działać prawidłowo.</translation> @@ -5046,6 +5067,7 @@ <translation id="6817174620439930047">Pytaj, gdy strona chce użyć komunikatów systemowych, by uzyskać dostęp do urządzeń MIDI (zalecane)</translation> <translation id="6818198425579322765">Język strony do przetłumaczenia</translation> <translation id="6818802132960437751">Wbudowana ochrona antywirusowa</translation> +<translation id="6820143000046097424">porty szeregowe</translation> <translation id="682123305478866682">Przesyłaj pulpit</translation> <translation id="6823174134746916417">Kliknięcie przez dotknięcie touchpada</translation> <translation id="6824564591481349393">Kopiuj adres &e-mail</translation> @@ -5478,6 +5500,7 @@ <translation id="730515362922783851">Wymiana danych z dowolnym urządzeniem w sieci lokalnej lub internecie</translation> <translation id="7306521477691455105">Otwórz Ustawienia, by połączyć urządzenie <ph name="USB_DEVICE_NAME" /> z: <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Wstrzymano</translation> +<translation id="7308436126008021607">synchronizacja w tle</translation> <translation id="7309257895202129721">Pokaż elementy sterują&ce</translation> <translation id="7310598146671372464">Logowanie nie udało się. Serwer nie obsługuje wybranych typów szyfrowania Kerberos. Skontaktuj się z administratorem.</translation> <translation id="7320213904474460808">Łącz domyślnie z siecią</translation> @@ -5618,6 +5641,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Wymagany natychmiastowy zwrot}few{Zwróć urządzenie <ph name="DEVICE_TYPE" /> w ciągu {NUM_DAYS} dni}many{Zwróć urządzenie <ph name="DEVICE_TYPE" /> w ciągu {NUM_DAYS} dni}other{Zwróć urządzenie <ph name="DEVICE_TYPE" /> w ciągu {NUM_DAYS} dnia}}</translation> <translation id="7475671414023905704">Adres URL utraconego hasła firmy Netscape</translation> <translation id="7476454130948140105">Poziom naładowania baterii (<ph name="BATTERY_PERCENT" />%) jest za niski, by zainstalować aktualizację</translation> +<translation id="7476989672001283112">Automatycznie zablokowano uprawnienia: <ph name="PERMISSION" /> i jeszcze <ph name="COUNT" /></translation> <translation id="7477793887173910789">Steruj filmami, muzyką i innymi multimediami</translation> <translation id="7478485216301680444">Nie można zainstalować aplikacji kiosku.</translation> <translation id="7478623944308207463">Twoje aplikacje i ustawienia będą synchronizować się na wszystkich urządzeniach z Chrome OS, na których zalogujesz się na swoje konto Google. Opcje synchronizacji przeglądarki znajdziesz w <ph name="LINK_BEGIN" />ustawieniach Chrome<ph name="LINK_END" />.</translation> @@ -6362,6 +6386,7 @@ <translation id="8288032458496410887">Odinstaluj aplikację <ph name="APP" />…</translation> <translation id="8289128870594824098">Rozmiar dysku</translation> <translation id="8293206222192510085">Dodaj zakładkę</translation> +<translation id="829335040383910391">dźwięk</translation> <translation id="8294431847097064396">Źródło</translation> <translation id="8298429963694909221">Możesz teraz odbierać powiadomienia z telefonu na urządzeniu <ph name="DEVICE_TYPE" />. Zamknięcie powiadomienia na urządzeniu <ph name="DEVICE_TYPE" /> spowoduje zamknięcie go również na telefonie. Sprawdź, czy telefon jest w pobliżu i ma włączone Bluetooth oraz Wi-Fi.</translation> <translation id="8299319456683969623">Jesteś teraz w trybie offline.</translation> @@ -6380,6 +6405,7 @@ <translation id="8317671367883557781">Dodaj połączenie sieciowe</translation> <translation id="8319414634934645341">Rozszerzone użycie klucza</translation> <translation id="8320459152843401447">Cały ekran</translation> +<translation id="8321476692217554900">powiadomienia</translation> <translation id="8321837372750396788">Tym urządzeniem <ph name="DEVICE_TYPE" /> będzie zarządzać <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Ta strona ma zablokowany dostęp do mikrofonu.</translation> <translation id="8323167517179506834">Wpisz URL</translation> @@ -6445,7 +6471,9 @@ <translation id="8403562727702715619">Ostatnie elementy z Dysku Google</translation> <translation id="8407199357649073301">Poziom rejestrowania:</translation> <translation id="8408068190360279472">Sieć <ph name="NETWORK_TYPE" />, łączę</translation> +<translation id="8409413588194360210">moduły do obsługi płatności</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Przyznano uprawnienia: <ph name="PERMISSION" /> i jeszcze <ph name="COUNT" /></translation> <translation id="8413385045638830869">Najpierw zapytaj (zalecane)</translation> <translation id="8417548266957501132">Hasło rodzica</translation> <translation id="8418445294933751433">&Pokaż jako kartę</translation> @@ -6641,6 +6669,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> lub <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura kolorów – Podświetlenie nocne</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> prosi o uprawnienia: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> i inne</translation> +<translation id="865032292777205197">czujniki ruchu</translation> <translation id="8650543407998814195">Chociaż nie możesz już używać swojego starego profilu, możesz go usunąć.</translation> <translation id="8651585100578802546">Wymuś ponowne załadowanie tej strony</translation> <translation id="8652400352452647993">Błąd rozszerzenia pakietu</translation> @@ -6779,6 +6808,7 @@ <translation id="8785622406424941542">Rysik</translation> <translation id="8787254343425541995">Zezwalaj na serwery proxy w sieciach współdzielonych</translation> <translation id="8791534160414513928">Wysyłaj żądanie „Bez śledzenia” podczas przeglądania</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Gdy hotspot jest włączony, <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nowe okno</translation> <translation id="8797459392481275117">Nigdy nie tłumacz tej strony</translation> @@ -6818,6 +6848,7 @@ <translation id="8823559166155093873">Blokuj pliki cookie</translation> <translation id="8823704566850948458">Zaproponuj hasło…</translation> <translation id="8824701697284169214">Dodaj &stronę</translation> +<translation id="8827125715368568315">Zablokowano uprawnienia: <ph name="PERMISSION" /> i jeszcze <ph name="COUNT" /></translation> <translation id="8827289157496676362">Przypnij rozszerzenie</translation> <translation id="8827752199525959199">Więcej czynności, hasło użytkownika <ph name="USERNAME" /> w domenie <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Nie zezwalaj żadnym stronom na wykrywanie urządzeń Bluetooth w pobliżu</translation> @@ -6918,6 +6949,7 @@ <translation id="8932894639908691771">Opcje Switch Access</translation> <translation id="8933960630081805351">&Pokaż w Finderze</translation> <translation id="8934732568177537184">Dalej</translation> +<translation id="8938306522009698937">moduły obsługi</translation> <translation id="8938800817013097409">Urządzenie USB-C (prawy port z tyłu)</translation> <translation id="8940081510938872932">Komputer robi teraz zbyt wiele rzeczy. Spróbuj ponownie później.</translation> <translation id="8941173171815156065">Cofnij uprawnienie „<ph name="PERMISSION" />”</translation> @@ -7221,6 +7253,7 @@ <translation id="987264212798334818">Ogólne</translation> <translation id="987897973846887088">Brak dostępnych plików graficznych</translation> <translation id="988978206646512040">Puste hasło jest niedozwolone</translation> +<translation id="991413375315957741">czujniki ruchu lub światła</translation> <translation id="992032470292211616">Rozszerzenia, aplikacje i motywy mogą wyrządzić szkody na urządzeniu. Na pewno chcesz kontynuować?</translation> <translation id="992256792861109788">Różowy</translation> <translation id="992592832486024913">Wyłącz ChromeVox (komunikaty głosowe)</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index bfc593d..2faf8433 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Predefinidas</translation> <translation id="1252987234827889034">Ocorreu um erro do perfil</translation> <translation id="1254593899333212300">Ligação directa à internet</translation> +<translation id="1257553931232494454">níveis de zoom</translation> <translation id="1259152067760398571">A verificação de segurança foi efetuada ontem.</translation> <translation id="1260451001046713751">Permitir sempre pop-ups e redirecionamentos de <ph name="HOST" /></translation> <translation id="1261380933454402672">Moderada</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Também controla a página apresentada quando pesquisa a partir da Caixa geral.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Para remover aplicações, aceda a Definições > Google Play Store > Gerir as preferências do Android > Apps ou Gestor de aplicações. Toque na aplicação que pretende desinstalar (pode ter de deslizar rapidamente para a direita ou para a esquerda para encontrar a aplicação). Em seguida, toque em Desinstalar ou em Desativar.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">A enviar pedido...</translation> +<translation id="1733064249834771892">tipos de letra</translation> <translation id="1733383495376208985">Encriptar dados sincronizados com a sua própria <ph name="BEGIN_LINK" />frase de acesso de sincronização<ph name="END_LINK" />. Não estão incluídos métodos de pagamento e endereços do Google Pay.</translation> <translation id="1734212868489994726">Azul claro</translation> <translation id="1734230530703461088">Falha ao carregar extensões dentro do limite de tempo. Contacte o seu administrador.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Carregamento do registo em curso.</translation> <translation id="1819721979226826163">Toque em Notificações da aplicação > Serviços do Google Play.</translation> <translation id="1820028137326691631">Introduzir a palavra-passe fornecida pelo administrador</translation> +<translation id="182139138257690338">transferências automáticas</translation> <translation id="1822140782238030981">Já é um utilizador do Chrome? Inicie sessão.</translation> <translation id="18245044880483936">Os dados da cópia de segurança não são contabilizados para a quota do armazenamento do Drive da criança.</translation> <translation id="1825565032302550710">A porta tem de ser entre 1024 e 65535.</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Recarregar aplicação</translation> <translation id="2327492829706409234">Ativar aplicação</translation> <translation id="2328561734797404498">Reinicie o dispositivo para utilizar a app <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">posicionamento de janelas</translation> <translation id="2329597144923131178">Inicie sessão para aceder aos marcadores, ao histórico, às palavras-passe e a outras definições em todos os dispositivos.</translation> <translation id="2332131598580221120">Ver na loja</translation> <translation id="2332192922827071008">Abrir as Preferências</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">Novo separador no grupo</translation> <translation id="289644616180464099">O cartão SIM está bloqueado</translation> <translation id="289695669188700754">ID da chave: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Esta definição personalizada é removida quando fecha todas as janelas de navegação anónima.</translation> <translation id="2897878306272793870">Tem a certeza de que pretende abrir <ph name="TAB_COUNT" /> separadores?</translation> <translation id="290105521672621980">O ficheiro utiliza funcionalidades não suportadas</translation> <translation id="2902127500170292085">A extensão <ph name="EXTENSION_NAME" /> não conseguiu comunicar com esta impressora. Certifique-se de que a impressora está ligada à corrente e tente novamente.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Os dados estão encriptados com a sua frase de acesso de sincronização. Não estão incluídos métodos de pagamento e endereços do Google Pay.</translation> <translation id="2996722619877761919">Virar pela margem mais larga</translation> <translation id="3000236644796679448">Os sites podem solicitar a utilização do microfone (recomendado)</translation> +<translation id="3000378525979847272">Permitiu <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Áudio mono</translation> <translation id="3001144475369593262">Contas de criança</translation> <translation id="3003144360685731741">Redes preferidas</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Abrir PDF na Pré-visualização</translation> <translation id="3308116878371095290">Esta página foi impedida de definir cookies.</translation> <translation id="3308134619352333507">Ocultar Botão</translation> +<translation id="3308738399950580893">anúncios</translation> <translation id="3308852433423051161">A carregar o Assistente Google...</translation> <translation id="3309330461362844500">ID do perfil do certificado</translation> <translation id="3311445899360743395">Os dados associados a esta app serão removidos deste dispositivo.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Este ficheiro está encriptado. Peça ao proprietário para desencriptar.</translation> <translation id="3390013585654699824">Detalhes da app</translation> <translation id="3390741581549395454">Cópia de segurança das aplicações e dos ficheiros do Linux efetuada com êxito. A atualização vai começar em breve.</translation> +<translation id="3391482648489541560">edição de ficheiros</translation> <translation id="339178315942519818">Veja notificações das suas apps de chat no <ph name="DEVICE_TYPE" />.</translation> <translation id="3396800784455899911">Ao clicar no botão "Aceitar e continuar", está a aceitar o processamento descrito acima para estes serviços Google.</translation> <translation id="3399432415385675819">As notificações serão desativadas</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Taxa de descarga da bateria em Watts (Um valor negativo significa que a bateria está em carregamento)</translation> <translation id="4256316378292851214">Guardar &Vídeo Como...</translation> <translation id="4258348331913189841">Sistemas de ficheiros</translation> +<translation id="4259381619085088639">a sua presença</translation> <translation id="4259388776256904261">Esta ação poderá demorar algum tempo.</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> pode ser perigoso. Pretende enviar para a Proteção avançada da Google para análise? Prima Shift + F6 para aceder à área da barra de transferências.</translation> <translation id="4263223596040212967">Verifique o esquema do teclado e tente novamente.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Configure um novo PIN para a sua chave de segurança.</translation> <translation id="4305402730127028764">Copiar para <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">As aplicações têm de ser publicadas com o tipo de conteúdo "<ph name="CONTENT_TYPE" />".</translation> +<translation id="4306812610847412719">área de transferência</translation> <translation id="4307992518367153382">Noções básicas</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K em directo)</translation> <translation id="4310139701823742692">O ficheiro tem o formato errado. Verifique o ficheiro PPD e tente novamente.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Centro de Ajuda</translation> <translation id="44141919652824029">Permitir que o "<ph name="APP_NAME" />" obtenha a lista dos seus dispositivos USB associados?</translation> <translation id="4414232939543644979">Nova Janela de Navegação Anón&ima</translation> +<translation id="4414515549596849729">cookies e dados de sites</translation> <translation id="4415213869328311284">Tem tudo pronto para começar a utilizar o <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Não foram encontrados dispositivos. Abra um artigo do Centro de Ajuda num novo separador.</translation> <translation id="4415276339145661267">Gerir a sua Conta Google</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Recomendado (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Não mostrar nesta página</translation> <translation id="4500114933761911433">O plug-in <ph name="PLUGIN_NAME" /> falhou.</translation> +<translation id="4500587658229086076">conteúdo inseguro</translation> <translation id="450099669180426158">Ícone de ponto de exclamação</translation> <translation id="4501530680793980440">Confirmar Remoção</translation> <translation id="4502423230170890588">Remover deste dispositivo</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Bloquear sempre plug-ins sem isolamento de processos em <ph name="HOST" /></translation> <translation id="4538792345715658285">Instalada pela política da empresa.</translation> <translation id="4541662893742891060">Não é possível ligar a este perfil. Para obter apoio técnico, contacte o seu operador.</translation> +<translation id="4541810033354695636">realidade aumentada</translation> <translation id="4542520061254486227">Ler os seus dados em <ph name="WEBSITE_1" /> e <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Gestor de certificados</translation> <translation id="4544174279960331769">Avatar azul predefinido.</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">Ferramentas &do programador</translation> <translation id="5113739826273394829">Se clicar neste ícone, bloqueia manualmente este <ph name="DEVICE_TYPE" />. Da próxima vez, tem de introduzir a palavra-passe para aceder.</translation> <translation id="51143538739122961">Insira a chave de segurança e toque na mesma.</translation> +<translation id="5114987907971894280">realidade virtual</translation> <translation id="5115309401544567011">Ligue o seu <ph name="DEVICE_TYPE" /> a uma fonte de alimentação.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Gua&rdar Áudio Como...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Executar desta vez</translation> <translation id="5464660706533281090">Esta definição não pode ser alterada por um utilizador secundário.</translation> <translation id="5466374726908360271">Co&lar e pesquisar "<ph name="SEARCH_TERMS" />"</translation> +<translation id="5467207440419968613">Bloqueou <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Os sites podem solicitar a reprodução de conteúdo protegido (recomendado)</translation> <translation id="5468173180030470402">À procura de partilhas de ficheiros…</translation> <translation id="5469852975082458401">Pode navegar pelas páginas com um cursor de texto. Prima F7 para desativar esta opção.</translation> @@ -4191,6 +4206,7 @@ <translation id="5794786537412027208">Sair de todas as Apps do Chrome</translation> <translation id="5797070761912323120">A Google pode utilizar o seu histórico para personalizar a Pesquisa, os anúncios e outros serviços Google.</translation> <translation id="5798301976526354562">Tamanho do texto (também se aplica às Legendas instantâneas)</translation> +<translation id="579907812742603813">conteúdo protegido</translation> <translation id="579915268381781820">A sua chave de segurança foi removida.</translation> <translation id="5799508265798272974">Máquina virtual do Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">O ficheiro de destino foi truncado ou removido desde a última transferência.</translation> @@ -4264,6 +4280,7 @@ <translation id="5877064549588274448">Canal alterado. Reinicie o dispositivo para aplicar as alterações.</translation> <translation id="5877584842898320529">A impressora selecionada não está disponível ou não está instalada corretamente. <ph name="BR" /> Verifique a impressora ou tente selecionar outra impressora.</translation> <translation id="5882919346125742463">Redes conhecidas</translation> +<translation id="5883356647197510494">Bloqueou automaticamente <ph name="PERMISSION_1" /> e <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Este separador está associado a um dispositivo USB.</translation> <translation id="5886009770935151472">Dedo 1</translation> <translation id="5889282057229379085">Número máximo de ACs intermédias:<ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4763,6 +4780,7 @@ <translation id="6460601847208524483">Localizar seguinte</translation> <translation id="6461170143930046705">A procurar redes…</translation> <translation id="6463795194797719782">&Editar</translation> +<translation id="6464094930452079790">imagens</translation> <translation id="6464825623202322042">Este dispositivo</translation> <translation id="6465841119675156448">Sem Internet</translation> <translation id="6466988389784393586">&Abrir Todos os Marcadores</translation> @@ -4786,6 +4804,7 @@ <translation id="6491376743066338510">Falha na autorização</translation> <translation id="6494327278868541139">Mostrar detalhes de proteção melhorada</translation> <translation id="6494445798847293442">Não é uma autoridade de certificação</translation> +<translation id="6494750904506170417">pop-ups e redirecionamentos</translation> <translation id="6494974875566443634">Personalização</translation> <translation id="6495925982925244349">Rede <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Intensidade do sinal <ph name="SIGNAL_STRENGTH" />%, Gerida pelo administrador, Detalhes</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Estes dados têm conteúdo sensível ou perigoso.}=1{Este ficheiro tem conteúdo sensível ou perigoso.}other{Estes ficheiros têm conteúdo sensível ou perigoso.}}</translation> @@ -4926,6 +4945,7 @@ <translation id="6657585470893396449">Palavra-passe</translation> <translation id="6659213950629089752">Foi aumentado o zoom nesta página pela extensão "<ph name="NAME" />"</translation> <translation id="6659594942844771486">Separador</translation> +<translation id="6660413144148052430">localização</translation> <translation id="666099631117081440">Servidores de impressão</translation> <translation id="6663190258859265334">Efetue uma Powerwash ao <ph name="DEVICE_TYPE" /> e volte à versão anterior.</translation> <translation id="6664237456442406323">Infelizmente, o seu computador está configurado com um ID de hardware formatado incorretamente. Este facto impede que o Chrome OS faça a atualização das últimas correções de segurança e o seu computador <ph name="BEGIN_BOLD" />pode estar vulnerável a ataques maliciosos<ph name="END_BOLD" />.</translation> @@ -4980,6 +5000,7 @@ <translation id="672609503628871915">Descobrir as novidades mais recentes</translation> <translation id="67269783048918309">Envie dados de utilização e diagnóstico. Agora, este dispositivo está a enviar automaticamente dados de diagnóstico, de utilização de aplicações e do dispositivo para a Google. Estes dados não serão utilizados para identificar a criança e ajudarão a melhorar a estabilidade das aplicações e do sistema, entre outras melhorias. Alguns dados agregados também ajudarão as aplicações e os parceiros Google, como os programadores Android. Esta <ph name="BEGIN_LINK1" />definição<ph name="END_LINK1" /> é aplicada pelo proprietário. Se a definição Atividade da Web e de apps adicional estiver ativada para a criança, estes dados podem ser guardados na respetiva Conta Google. <ph name="BEGIN_LINK2" />Saiba mais<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Ligado, <ph name="BATTERY_PERCENTAGE" />% de bateria</translation> +<translation id="6732087373923685049">câmara</translation> <translation id="6732801395666424405">Certificados não carregados</translation> <translation id="6732900235521116609">Não foi possível remover o atalho.</translation> <translation id="6734468588183300211">Quando estiver na Navegação anónima, os sites não podem utilizar cookies para ver a sua atividade de navegação em diferentes sites, por exemplo, para personalizar anúncios. As funcionalidades em alguns sites podem falhar.</translation> @@ -5054,6 +5075,7 @@ <translation id="6817174620439930047">Perguntar sempre que um site pretender utilizar mensagens exclusivas do sistema para aceder a dispositivos MIDI (recomendado)</translation> <translation id="6818198425579322765">Idioma da página a traduzir</translation> <translation id="6818802132960437751">Proteção antivírus incorporada</translation> +<translation id="6820143000046097424">portas de série</translation> <translation id="682123305478866682">Transmitir ambiente de trabalho</translation> <translation id="6823174134746916417">Tocar para clicar do touchpad</translation> <translation id="6824564591481349393">Copiar &endereço de email</translation> @@ -5487,6 +5509,7 @@ <translation id="730515362922783851">Trocar dados com qualquer dispositivo na rede local ou na Internet</translation> <translation id="7306521477691455105">Abra as Definições para ligar o dispositivo <ph name="USB_DEVICE_NAME" /> a <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Em pausa</translation> +<translation id="7308436126008021607">sincronização em segundo plano</translation> <translation id="7309257895202129721">Mostrar &controlos</translation> <translation id="7310598146671372464">Não é possível iniciar sessão. O servidor não suporta os tipos de encriptação Kerberos especificados. Contacte o administrador.</translation> <translation id="7320213904474460808">Predefinir rede</translation> @@ -5628,6 +5651,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{É necessária uma devolução imediata}other{Devolva o <ph name="DEVICE_TYPE" /> dentro de {NUM_DAYS} dias}}</translation> <translation id="7475671414023905704">URL de palavra-passe perdida Netscape</translation> <translation id="7476454130948140105">Bateria demasiado fraca para atualizar (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Bloqueou automaticamente <ph name="PERMISSION" /> e mais <ph name="COUNT" /></translation> <translation id="7477793887173910789">Controle a sua música, vídeos e muito mais.</translation> <translation id="7478485216301680444">Não foi possível instalar a app de quiosque.</translation> <translation id="7478623944308207463">As suas apps e definições serão sincronizadas em todos os dispositivos Chrome OS nos quais tenha sessão iniciada com a Conta Google. Para ver as opções de sincronização do navegador, aceda às <ph name="LINK_BEGIN" />definições do Chrome<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Desinstalar a aplicação <ph name="APP" />…</translation> <translation id="8289128870594824098">Tamanho do disco</translation> <translation id="8293206222192510085">Adicionar marcador</translation> +<translation id="829335040383910391">som</translation> <translation id="8294431847097064396">Origem</translation> <translation id="8298429963694909221">Já pode receber notificações do seu telemóvel no <ph name="DEVICE_TYPE" />. Ignorar as notificações no <ph name="DEVICE_TYPE" /> também as ignora no seu telemóvel. Certifique-se de que o telemóvel está próximo e com o Bluetooth e o Wi-Fi ativados.</translation> <translation id="8299319456683969623">De momento, está offline.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Adicionar ligação de rede</translation> <translation id="8319414634934645341">Utilização alargada da chave</translation> <translation id="8320459152843401447">O seu ecrã inteiro</translation> +<translation id="8321476692217554900">notificações</translation> <translation id="8321837372750396788">Este <ph name="DEVICE_TYPE" /> vai ser gerido por <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Esta página foi impedida de aceder ao seu microfone.</translation> <translation id="8323167517179506834">Escrever o URL</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Recentemente do Google Drive</translation> <translation id="8407199357649073301">Nível de registo:</translation> <translation id="8408068190360279472">Rede <ph name="NETWORK_TYPE" />, a ligar…</translation> +<translation id="8409413588194360210">controladores de pagamento</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Permitiu <ph name="PERMISSION" /> e mais <ph name="COUNT" /></translation> <translation id="8413385045638830869">Perguntar primeiro (recomendado)</translation> <translation id="8417548266957501132">Palavra-passe do Pai ou Mãe</translation> <translation id="8418445294933751433">Mo&strar como separador</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ou <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura da cor da Luz noturna</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> pretende: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> e mais</translation> +<translation id="865032292777205197">sensores de movimento</translation> <translation id="8650543407998814195">Embora já não possa aceder ao seu perfil antigo, pode removê-lo.</translation> <translation id="8651585100578802546">Forçar o recarregamento desta página</translation> <translation id="8652400352452647993">Erro de extensão do pacote</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">Caneta stylus</translation> <translation id="8787254343425541995">Permitir proxies para redes partilhadas</translation> <translation id="8791534160414513928">Enviar um pedido "Não rastrear" com o seu tráfego de navegação</translation> +<translation id="8792626944327216835">microfone</translation> <translation id="879413103056696865">Enquanto a zona Wi-Fi estiver ativada, o <ph name="PHONE_NAME" /> irá:</translation> <translation id="8795916974678578410">Nova janela</translation> <translation id="8797459392481275117">Nunca traduzir este site</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Bloquear cookies</translation> <translation id="8823704566850948458">Sugerir palavra-passe…</translation> <translation id="8824701697284169214">Adicionar Pá&gina...</translation> +<translation id="8827125715368568315">Bloqueou <ph name="PERMISSION" /> e mais <ph name="COUNT" /></translation> <translation id="8827289157496676362">Afixar extensão</translation> <translation id="8827752199525959199">Mais ações, palavra-passe de <ph name="USERNAME" /> em <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Não permitir que nenhum site detete dispositivos Bluetooth próximos</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Opções do acesso por comutador</translation> <translation id="8933960630081805351">Mo&strar no Finder</translation> <translation id="8934732568177537184">Continuar</translation> +<translation id="8938306522009698937">controladores</translation> <translation id="8938800817013097409">Dispositivo USB-C (porta traseira direita)</translation> <translation id="8940081510938872932">O seu computador está a executar demasiadas operações neste momento. Tente novamente mais tarde.</translation> <translation id="8941173171815156065">Revogar a autorização "<ph name="PERMISSION" />"</translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">Geral</translation> <translation id="987897973846887088">Nenhuma imagem disponível.</translation> <translation id="988978206646512040">Não é permitida uma frase de acesso vazia</translation> +<translation id="991413375315957741">sensores de movimento ou de luz</translation> <translation id="992032470292211616">As extensões, as aplicações e os temas podem danificar o seu dispositivo móvel. Tem a certeza de que pretende continuar?</translation> <translation id="992256792861109788">Rosa</translation> <translation id="992592832486024913">Desativar o ChromeVox (respostas faladas)</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 3a916de..dd593e76 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">පෙරනිමි</translation> <translation id="1252987234827889034">පැතිකඩ දෝෂයක් ඇති විය</translation> <translation id="1254593899333212300">සෘජු අන්තර්ජාල සබැඳුම</translation> +<translation id="1257553931232494454">විශාලන මට්ටම්</translation> <translation id="1259152067760398571">ආරක්ෂක පරීක්ෂාව ඊයේ ධාවන විය</translation> <translation id="1260451001046713751">සැමවිටම <ph name="HOST" /> වෙතින් උත්පතන සහ හරවා යැවීමට ඉඩ දෙන්න</translation> <translation id="1261380933454402672">මධ්යස්ථ</translation> @@ -669,6 +670,7 @@ <translation id="1729533290416704613">තවද එය Omnibox වෙතින් සොයන විට පෙන්වන වෙබ් පිටුව නිර්ණය කරයි.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />යෙදුම් ඉවත් කිරීමට, සැකසීම් > Google Play Store > Android මනාප කළමනාකරණය > යෙදුම් හෝ යෙදුම් කළමනාකරු වෙත යන්න. අනතුරුව ඔබට අස්ථාපන කිරීමට අවශ්ය යෙදුම තට්ටු කරන්න (ඔබට යෙදුම සොයා ගැනීමට දකුණට හෝ වමට ස්වයිප් කිරීමට අවශ්ය විය හැක). අනතුරුව අස්ථාපන කරන්න හෝ අබල කරන්න තට්ටු කරන්න.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">ඉල්ලීම යවමින්...</translation> +<translation id="1733064249834771892">ෆොන්ට</translation> <translation id="1733383495376208985">ඔබගේම <ph name="BEGIN_LINK" />සමමුහූර්ත මුර-වැකිකඩ<ph name="END_LINK" /> සමඟ සමමුහූර්ත කළ දත්ත සංකේතන කරන්න. මෙයට Google Pay වෙතින් ගෙවීමේ ක්රම සහ ලිපින ඇතුළු නොවේ.</translation> <translation id="1734212868489994726">ලා නිල්</translation> <translation id="1734230530703461088">කාල සීමාව තුළ දිගු පූරණය කිරීම අසාර්ථක විය. කරුණාකර ඔබගේ පරිපාලක සම්බන්ධ කර ගන්න.</translation> @@ -756,6 +758,7 @@ <translation id="1818913467757368489">ලොගයන් උඩුගත කිරීම සිදුවෙමින් පවතී.</translation> <translation id="1819721979226826163">යෙදුම් දැනුම්දීම් > Google Play සේවා තට්ටු කරන්න.</translation> <translation id="1820028137326691631">පරිපාලකයා ලබා දුන් මුරපදය ඇතුළත් කරන්න</translation> +<translation id="182139138257690338">ස්වයංක්රීය බාගැනීම්</translation> <translation id="1822140782238030981">දැනටමත් Chrome පරිශීලකයෙක්ද? පුරන්න</translation> <translation id="18245044880483936">උපස්ථ දත්ත ඔබේ දරුවාගේ Drive ගබඩා පංගුවට ගණන් නොගැනෙයි.</translation> <translation id="1825565032302550710">පෝර්ට් එක 1024 සහ 65535 අතර විය යුතුය</translation> @@ -1196,6 +1199,7 @@ <translation id="2326931316514688470">නැවත පූරණය කිරීමේ යෙදුම</translation> <translation id="2327492829706409234">යෙදුම සක්රිය කරන්න</translation> <translation id="2328561734797404498"><ph name="APP_NAME" /> භාවිත කිරීමට ඔබේ උපාංගය යළි අරඹන්න.</translation> +<translation id="2329182534073751090">කවුළු තැබීම</translation> <translation id="2329597144923131178">ඔබගේ සියලුම උපාංග මත ඇති පොත් සලකුණු, ඉතිහාසය, මුරපද හා වෙනත් සැකසීම් ලබා ගැනීමට පුරනය වන්න.</translation> <translation id="2332131598580221120">අලෙවිසැලෙහි බලන්න</translation> <translation id="2332192922827071008">මනාප විවෘත කරන්න</translation> @@ -1708,6 +1712,7 @@ <translation id="2894757982205307093">කණ්ඩායම තුළ නව පටිත්ත</translation> <translation id="289644616180464099">SIM පත අගුළු වැටී ඇත</translation> <translation id="289695669188700754">යතුරු ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">ඔබ ඔබගේ සියලු අප්රසිද්ධ කවුළු වැසූ විට මෙම අභිරුචි සැකසීම ඉවත් කරනු ඇත</translation> <translation id="2897878306272793870">ඔබට ටැබ <ph name="TAB_COUNT" />ක් විවෘත කිරීමට අවශ්ය බව ඔබට විශ්වාසද?</translation> <translation id="290105521672621980">ගොනුව සහාය නොදක්වන විශේෂාංග භාවිත කරයි</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> මෙම මුද්රණ යන්ත්රය සමග සම්බන්ධ වීමට නොහැකි විය. මුද්රණ යන්ත්රය පේනුගත කර ඇති බව සහතික කරගෙන නැවත උත්සාහ කරන්න.</translation> @@ -1797,6 +1802,7 @@ <translation id="2996286169319737844">ඔබගේ සමමුහූර්ත මුර-වැකිකඩ සමඟ දත්ත සංකේතන කෙරේ. මෙයට Google Pay වෙතින් ගෙවීමේ ක්රම සහ ලිපින ඇතුළු නොවේ.</translation> <translation id="2996722619877761919">දිග දාරයෙන් උඩ දමන්න</translation> <translation id="3000236644796679448">අඩවි ඔබගේ මයික්රෆෝනය භාවිත කිරීමට ඉල්ලිය හැකිය (නිර්දේශිතයි)</translation> +<translation id="3000378525979847272"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ඉඩ දෙන ලදි</translation> <translation id="3000461861112256445">ඒකල ශ්රව්යය</translation> <translation id="3001144475369593262">ළමා ගිණුම්</translation> <translation id="3003144360685731741">කැමති ජාල</translation> @@ -2056,6 +2062,7 @@ <translation id="3305661444342691068">පෙර දැක්මේ PDF විවෘත කරන්න</translation> <translation id="3308116878371095290">මෙම පිටුව කුකි පිහිටුවීමෙන් වළක්වන ලදී.</translation> <translation id="3308134619352333507">බොත්තම සඟවන්න</translation> +<translation id="3308738399950580893">වෙළඳ දැන්වීම්</translation> <translation id="3308852433423051161">Google සහායක පූරණය කරමින්...</translation> <translation id="3309330461362844500">සහතික පැතිකඩ ID</translation> <translation id="3311445899360743395">මෙම යෙදුම සමඟ සම්බන්ධ දත්ත මෙම උපාංගයෙන් ඉවත් කළ හැක.</translation> @@ -2116,6 +2123,7 @@ <translation id="3388788256054548012">මෙම ගොනුව සංකේතිතයි. එහි හිමිකරුට විකේතන කිරිමට කියන්න.</translation> <translation id="3390013585654699824">යෙදුම් විස්තර</translation> <translation id="3390741581549395454">ලිනක්ස් යෙදුම් සහ ගොනු සාර්ථකව උපස්ථ කරන ලදි. උත්ශ්රේණිය ඉක්මනින් ඇරඹේ.</translation> +<translation id="3391482648489541560">ගොනු සංස්කරණය</translation> <translation id="339178315942519818">ඔබේ <ph name="DEVICE_TYPE" /> හි ඔබේ කතාබස් යෙදුම් වෙතින් දැනුම්දීම් බලන්න</translation> <translation id="3396800784455899911">"පිළිගන්න සහ දිගටම පවත්වාගෙන යන්න" බොත්තම ක්ලික් කිරීමෙන්, ඔබ මෙම සේවාවන් සඳහා ඉහත විස්තර කළ Google ක්රියා කරවීම්වලට එකඟ වේ.</translation> <translation id="3399432415385675819">දැනුම්දීම් අබල වනු ඇත</translation> @@ -2893,6 +2901,7 @@ <translation id="425573743389990240">බැටරිය බැසීමේ වේගය වොට්වලින් (ඍණ අගය යනු බැටරිය චාජ් වන බවයි)</translation> <translation id="4256316378292851214">වීඩියෝව ලෙස සු&රකින්න...</translation> <translation id="4258348331913189841">ගොනු පද්ධති</translation> +<translation id="4259381619085088639">ඔබගේ සිටීම</translation> <translation id="4259388776256904261">මෙයට ටික වේලාවක් ගත විය හැකිය</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> අනතුරුදායක විය හැක. ස්කෑන් කිරීම සඳහා Google ඉහළ ආරක්ෂාව වෙත යවන්නේද? බාගැනීම් තීරු ප්රදේශයට මාරු වීමට Shift+F6 ඔබන්න.</translation> <translation id="4263223596040212967">ඔබේ යතුරු පුවරු වින්යාසය පරීක්ෂා කර නැවත උත්සාහ කරන්න.</translation> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">ඔබේ ආරක්ෂක යතුර සඳහා නව රහස් අංකයක් සකසන්න</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" /> වෙත පිටපත් කරන්න</translation> <translation id="4306119971288449206">යෙදුම් පිරිනැමිය යුත්තේ "<ph name="CONTENT_TYPE" />" අන්තර්ගත වර්ගය සමඟිනි</translation> +<translation id="4306812610847412719">පසුරු පුවරුව</translation> <translation id="4307992518367153382">මූලික</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K සජීවි)</translation> <translation id="4310139701823742692">ගොනුව වැරදි ආකෘතියකි. PPD ගොනුව පරීක්ෂා කර නැවත උත්සාහ කරන්න.</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">උදවු මධ්යස්ථානය</translation> <translation id="44141919652824029">ඔබගේ අමුණා ඇති USB උපාංග ලැයිස්තුවක් ලබා ගැනීමට "<ph name="APP_NAME" />" හට ඉඩ දෙන්නද?</translation> <translation id="4414232939543644979">නව &Incognito කවුළුව</translation> +<translation id="4414515549596849729">කුකී සහ අඩවි දත්ත</translation> <translation id="4415213869328311284">ඔබ ඔබේ <ph name="DEVICE_TYPE" /> භාවිත කිරීමට සූදානම්.</translation> <translation id="4415245286584082850">උපාංග කිසිවක් හමු නොවිය. නව පටිත්තකින් උදවු මධ්යස්ථාන ලිපියක් විවෘත කරන්න.</translation> <translation id="4415276339145661267">ඔබේ Google ගිණුම කළමනාකරණය</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">නිර්දේශිතයි (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">මෙම පිටුව මත පෙන්වන්න එපා</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> බිඳ වැටී ඇත</translation> +<translation id="4500587658229086076">අනාරක්ෂිත අන්තර්ගතය</translation> <translation id="450099669180426158">විස්මයාර්ථ ලකුණ අයිකනය</translation> <translation id="4501530680793980440">ඉවත්කිරීම තහවුරු කරන්න</translation> <translation id="4502423230170890588">මෙම උපාංගයෙන් ඉවත් කරන්නද?</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368">සැමවිටම <ph name="HOST" /> මත unsandboxed ප්ලගින අවහිර කරන්න</translation> <translation id="4538792345715658285">ව්යාපාර ප්රතිපත්තිය මඟින් ස්ථාපිත කරන ලදි.</translation> <translation id="4541662893742891060">මෙම පැතිකඩට සම්බන්ධ වීමට නොහැකිය. තාක්ෂණික සහාය සඳහා, කරුණාකර ඔබගේ වාහකය අමතන්න.</translation> +<translation id="4541810033354695636">ආවර්ධිත යථාර්තය</translation> <translation id="4542520061254486227"><ph name="WEBSITE_1" /> සහ <ph name="WEBSITE_2" /> හි ඔබගේ දත්ත කියවන්න</translation> <translation id="4543778593405494224">සහතික කළමනාකරු</translation> <translation id="4544174279960331769">පෙරනිමි නිල් නියුරුව</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">නිර්මාණ උපකරණ</translation> <translation id="5113739826273394829">ඔබ මෙම අයිකනය ක්ලික් කරයි නම්, ඔබ ශ්රමිකව මෙම <ph name="DEVICE_TYPE" /> අගුළු ලයි. ඊලඟ වර ඇතුළු වීමට ඔබට මුරපදය යෙදීමට සිදුවේ.</translation> <translation id="51143538739122961">ඔබේ ආරක්ෂක යතුර ඇතුළත් කර එය ස්පර්ශ කරන්න</translation> +<translation id="5114987907971894280">අතථ්ය යථාර්ථය</translation> <translation id="5115309401544567011">කරුණාකර ඔබේ <ph name="DEVICE_TYPE" /> බල මූලාශ්රයකට පේනුගත කරන්න.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">ගීතය ලෙස සුරකින්න... (&v)</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">දැන් ක්රියාත්මක කරන්න</translation> <translation id="5464660706533281090">මෙම සැකසීම ළමා පරිශීලකයෙකු විසින් වෙනස් නොකළ හැක.</translation> <translation id="5466374726908360271">අලවා “<ph name="SEARCH_TERMS" />” සොයන්න</translation> +<translation id="5467207440419968613"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> අවහිර කරන ලදි</translation> <translation id="5468119583641912100">අඩවි ආරක්ෂිත අන්තර්ගතයන් ධාවනය කිරීමට ඉල්ලිය හැකිය (නිර්දේශිතයි)</translation> <translation id="5468173180030470402">ගොනු බෙදා ගැනීම් සඳහා සොයමින්</translation> <translation id="5469852975082458401">ඔබට පෙළ කර්සරයක් සමගින් පිටුවල සංචාලනය කළ හැකිය. ක්රියාවිරහිත කිරීමට F7 ඔබන්න.</translation> @@ -4189,6 +4204,7 @@ <translation id="5794786537412027208">සියලු Chrome යෙදුම්වලින් ඉවත් වන්න</translation> <translation id="5797070761912323120">සෙවීම, දැන්වීම් සහ අනෙකුත් Google සේවා පුද්ගලායන කිරීමට Google ඔබේ ඉතිහාසය භාවිත කළ හැක</translation> <translation id="5798301976526354562">පෙළ තරම (සජීවී සිරස්තලවලටද යෙදේ)</translation> +<translation id="579907812742603813">ආරක්ෂිත අන්තර්ගතය</translation> <translation id="579915268381781820">ඔබේ ආරක්ෂක යතුර ඉවත් කරනු ලැබීය.</translation> <translation id="5799508265798272974">ලිනක්ස් අතථ්ය යන්ත්රය: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">අවසන් වරට බාගැනීමෙන් පසු අදාළ ගොනුව ලුප්ත කර හෝ වෙනත් තැනකට ගෙනගොස් ඇත.</translation> @@ -4262,6 +4278,7 @@ <translation id="5877064549588274448">නාලිකාව වෙනස් කරන ලදි. වෙනස්කම් යොදා ගැනීමට ඔබේ උපාංගය නැවත අරඹන්න.</translation> <translation id="5877584842898320529">තෝරන ලද මුද්රණ යන්ත්රය ලද නොහැක, නැති නම් නිවැරදිව ස්ථාපන කර නැත. <ph name="BR" /> ඔබේ මුද්රණ යන්ත්රය පරීක්ෂා කරන්න නැති නම් වෙනත් මුද්රණ යන්ත්රයක් තෝරා උත්සාහ කර බලන්න.</translation> <translation id="5882919346125742463">දන්නා ජාල</translation> +<translation id="5883356647197510494"><ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> ස්වයංක්රියව අවහිර කර ඇත</translation> <translation id="5884474295213649357">මෙම ටැබය USB උපාංගයකට සම්බන්ධිතයි.</translation> <translation id="5886009770935151472">ඇඟිල්ල 1</translation> <translation id="5889282057229379085">අතරමැදි CAs හි උපරිම සංඛ්යාව: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4761,6 +4778,7 @@ <translation id="6460601847208524483">ඊළඟ සොයන්න</translation> <translation id="6461170143930046705">ජාල සොයනු ලැබේ...</translation> <translation id="6463795194797719782">&සංස්කරණය</translation> +<translation id="6464094930452079790">රූප</translation> <translation id="6464825623202322042">මෙම උපාංගය</translation> <translation id="6465841119675156448">අන්තර්ජාලය නොමැතිව</translation> <translation id="6466988389784393586">සියලු පිටු සලකුණු &විවෘත කරන්න</translation> @@ -4784,6 +4802,7 @@ <translation id="6491376743066338510">අනුමැතිය දීම අසාර්ථක විය</translation> <translation id="6494327278868541139">වැඩි දියුණු කළ ආරක්ෂණ විස්තර පෙන්වන්න</translation> <translation id="6494445798847293442">සහතිකකරණ අධිකාරියක් නොවේ</translation> +<translation id="6494750904506170417">උත්පතන සහ හරවා යැවීම්</translation> <translation id="6494974875566443634">අභිරුචිකරණය</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" />න් <ph name="NETWORK_INDEX" /> වැනි ජාලය, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, සංඥා ප්රබලතාව <ph name="SIGNAL_STRENGTH" />%, ඔබේ පරිපාලකයා විසින් කළමනාකරණය කරයි, විස්තර</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{මෙම දත්ත තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}=1{මෙම ගොනුව තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}one{මෙම ගොනු තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}other{මෙම ගොනු තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}}</translation> @@ -4922,6 +4941,7 @@ <translation id="6657585470893396449">මුරපදය</translation> <translation id="6659213950629089752">මෙම පිටුව "<ph name="NAME" />" දිගුව මගින් විශාලනය කර තිබුණි</translation> <translation id="6659594942844771486">ටැබ</translation> +<translation id="6660413144148052430">ස්ථානය</translation> <translation id="666099631117081440">මුද්රණ සේවාදායක</translation> <translation id="6663190258859265334">ඔබේ <ph name="DEVICE_TYPE" /> Powerwash කර පෙර සංස්කරණයට ආපසු යන්න.</translation> <translation id="6664237456442406323">අවාසනාවකට මෙන්, ඔබේ පරිගණකය විකෘති වූ දෘඪාංග ID එකකින් වින්යාසගත කර තිබේ. මෙමගින් Chrome OS fනවතම ආරක්ෂණ විසඳුම් මගින් යාවත්කාල වීම වැළකෙන අතර ඔබේ පරිගණකය <ph name="BEGIN_BOLD" />හානිකර ප්රහාරවලට ලක් වීමට ඉඩ තිබේ<ph name="END_BOLD" />.</translation> @@ -4976,6 +4996,7 @@ <translation id="672609503628871915">අළුත් මොනවාදැයි බලන්න</translation> <translation id="67269783048918309">භාවිත සහ දෝෂ නිර්ණ දත්ත යවන්න. මෙම උපාංගය ස්වයංක්රියව රෝග විනිශ්චය, උපාංග සහ යෙදුම් භාවිත දත්ත Google වෙත යවයි. මෙය ඔබේ දරුවා හඳුනා ගැනීමට භාවිත නොකෙරෙන අතර, පද්ධති සහ යෙදුම් ස්ථායිතාවට සහ අනෙකුත් වැඩිදියුණු කිරීම්වලට උදවු කරයි. සමහර එකතු කළ දත්ත Google යෙදුම්වලට සහ Android සංවර්ධකයින් වැනි හවුල්කරුවන්ට ද උදවු කරති. මෙම <ph name="BEGIN_LINK1" />සැකසීම<ph name="END_LINK1" /> හිමිකරු විසින් බලාත්මක කෙරේ. ඔබේ දරුවා සඳහා අමතර වෙබ් සහ යෙදුම් ක්රියාකාරකම් සැකසීම සක්රීය කර තිබේ නම්, මෙම දත්ත ඔවුන්ගේ Google ගිණුමට සුරැකිය හැක. <ph name="BEGIN_LINK2" />තවත් දැන ගන්න<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">සම්බන්ධිතයි, බැටරිය <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">කැමරාව</translation> <translation id="6732801395666424405">සහතිකය පටවා නොමැත</translation> <translation id="6732900235521116609">කෙටිමඟ ඉවත් කළ නොහැක</translation> <translation id="6734468588183300211">අප්රසිද්ධය තුළ සිටින විට, විවිධ වෙබ් අඩවි අතරින් ඔබේ බ්රවුස් කිරීමේ ක්රියාකාරකම් බැලීමට, උදාහරණයක් වශයෙන්, දැන්වීම් පුද්ගලායන කිරීමට වෙබ් අඩවිවලට ඔබේ කුකී භාවිත නොකළ හැක. සමහර වෙබ් අඩවි මත විශේෂාංග කැඩී ගිය හැක.</translation> @@ -5050,6 +5071,7 @@ <translation id="6817174620439930047">MIDI උපාංග වෙත පිවිසීමට පද්ධති අනන්ය පණිවිඩ භාවිත කිරීමට අඩවියකට අවශ්ය විට ඉල්ලන්න (නිර්දේශිතයි)</translation> <translation id="6818198425579322765">පරිවර්තන කළ යුතු පිටු භාෂාව</translation> <translation id="6818802132960437751">ආවේණික වෛරස් ආරක්ෂාව</translation> +<translation id="6820143000046097424">අනුක්රමික තොට</translation> <translation id="682123305478866682">ඩෙස්ක්ටොප් විකාශය කරන්න</translation> <translation id="6823174134746916417">ස්පර්ශ පුවරු ක්ලික් කිරීමට තට්ටු කිරීම</translation> <translation id="6824564591481349393">ඊමේල් ලිපිනය පිටපත් කරන්න (&E)</translation> @@ -5483,6 +5505,7 @@ <translation id="730515362922783851">දේශීය ජාලයක් හෝ අන්තර්ජාලය හරහා ඕනැම උපාංගයක් සමඟ දත්ත හුවමාරු කරගන්න</translation> <translation id="7306521477691455105"><ph name="USB_DEVICE_NAME" /> <ph name="USB_VM_NAME" /> වෙත සම්බන්ධ කිරීමට සැකසිම් විවෘත කරන්න</translation> <translation id="7307129035224081534">විරාම කරන ලදී</translation> +<translation id="7308436126008021607">පසුබිම සමමුහුර්ත කිරීම</translation> <translation id="7309257895202129721">පාලන පෙන්වන්න (&C)</translation> <translation id="7310598146671372464">පිරීමට අසමත් විය. සේවාදායකය විශේෂිතව දක්වන ලද Kerberos සංකේතන වර්ගවලට සහාය නොදක්වයි. කරුණාකර ඔබේ පරිපාලක අමතන්න.</translation> <translation id="7320213904474460808">ජාලයට පෙරනිමි</translation> @@ -5624,6 +5647,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{වහාම ආපසු දීම අවශ්යයි}one{<ph name="DEVICE_TYPE" /> දින {NUM_DAYS}ක් ඇතුළත ආපසු දෙන්න}other{<ph name="DEVICE_TYPE" /> දින {NUM_DAYS}ක් ඇතුළත ආපසු දෙන්න}}</translation> <translation id="7475671414023905704">නෙට්ස්කේප් අහිමි වූ මුරපද URL</translation> <translation id="7476454130948140105">යාවත්කාලීනය සඳහා බැටරිය ඉතා අඩුයි (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112"><ph name="PERMISSION" /> සහ තවත් <ph name="COUNT" />ක් ස්වයංක්රියව අවහිර කරන ලදි</translation> <translation id="7477793887173910789">ඔබේ සංගීත, වීඩියෝ, සහ තවත් ඒවා පාලන කරන්න</translation> <translation id="7478485216301680444">කියෝස්ක් යෙදුම් ස්ථාපනය කළ නොහැක.</translation> <translation id="7478623944308207463">ඔබගේ යෙදුම් සහ සැකසීම් ඔබ ඔබගේ Google ගිණුම මඟින් පුරා ඇති සියලුම Chrome OS උපාංග හරහා සමමුහූර්ත වනු ඇත. බ්රවුසර සමමුහූර්ත විකල්ප සඳහා, <ph name="LINK_BEGIN" />Chrome සැකසීම්<ph name="LINK_END" /> වෙත යන්න.</translation> @@ -6366,6 +6390,7 @@ <translation id="8288032458496410887"><ph name="APP" /> අස්ථාපනය කරමින්...</translation> <translation id="8289128870594824098">තැටි ප්රමාණය</translation> <translation id="8293206222192510085">පිටුසන එක් කරන්න</translation> +<translation id="829335040383910391">ශබ්දය</translation> <translation id="8294431847097064396">මූලාශ්රය</translation> <translation id="8298429963694909221">දැන් ඔබට ඔබගේ <ph name="DEVICE_TYPE" /> හි ඔබගේ දුරකථනය වෙතින් දැනුම්දීම් ලබා ගැනීමට හැකිය. <ph name="DEVICE_TYPE" /> හි ඔබගේ දැනුම්දීම් ඉවත දැමීම ඔබගේ දුරකථනයෙහිද ඒවා ඉවත දමනු ඇත. ඔබගේ දුරකථනය අවට ඇති බව සහ බ්ලූටූත් සහ Wi-Fi ක්රියාත්මකව තිබෙන බව සහතික කර ගන්න.</translation> <translation id="8299319456683969623">ඔබ දැනට නොබැඳි</translation> @@ -6384,6 +6409,7 @@ <translation id="8317671367883557781">ජාල සම්බන්ධතාවය එක් කරන්න</translation> <translation id="8319414634934645341">දීර්ඝ යතුරු භාවිතය</translation> <translation id="8320459152843401447">ඔබගේ මුළු තිරයම</translation> +<translation id="8321476692217554900">දැනුම්දීම්</translation> <translation id="8321837372750396788"><ph name="MANAGER" /> විසින් මෙම <ph name="DEVICE_TYPE" /> කළමනාකරණය කෙරේ.</translation> <translation id="8322814362483282060">ඔබේ මයික්රෙෆෝනය වෙත පිවිසීමෙන් මෙම පිටුව අවහිර කර තිබේ</translation> <translation id="8323167517179506834">ලිපිනය යොදන්න</translation> @@ -6449,7 +6475,9 @@ <translation id="8403562727702715619">Google Drive වෙතින් මෑතදී</translation> <translation id="8407199357649073301">ලොග මට්ටම:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> ජාලය, සම්බන්ධ කෙරේ</translation> +<translation id="8409413588194360210">ගෙවීම් හසුරු</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322"><ph name="PERMISSION" /> සහ තවත් <ph name="COUNT" />ක් ඉඩ දේ</translation> <translation id="8413385045638830869">පළමුව අසන්න (නිර්දේශිතයි)</translation> <translation id="8417548266957501132">මාපිය මුරපදය</translation> <translation id="8418445294933751433">ටැබයක් ලෙස පෙන්වන්න</translation> @@ -6645,6 +6673,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> හෝ <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">රාත්රී ආලෝක වර්ණ උෂ්ණත්වය</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> හට අවශ්යයි: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" />, සහ තවත්</translation> +<translation id="865032292777205197">චලන සංවේදක</translation> <translation id="8650543407998814195">ඔබට තවදුරටත් ඔබේ පැරණි පැතිකඩට ප්රවේශ වීමට නොහැකි වුවද, එය තවමත් ඉවත් කළ හැකිය.</translation> <translation id="8651585100578802546">මෙම පිටුව බලෙන් නැවත පටවන්න</translation> <translation id="8652400352452647993">ඇසුරුම් දිගු දෝෂය</translation> @@ -6782,6 +6811,7 @@ <translation id="8785622406424941542">පන්හිඳ</translation> <translation id="8787254343425541995">බෙදාගත් ජාල සඳහා ප්රොක්සි වලට ඉඩදෙන්න</translation> <translation id="8791534160414513928">ඔබගේ පිරික්සුම් මාර්ග තදබදය සමගින් "හඹා නොයන්න" ඉල්ලීමක් යවන්න</translation> +<translation id="8792626944327216835">මයික්රෝෆෝනය</translation> <translation id="879413103056696865">හොට්ස්පොට් ක්රියාත්මක අතරතුර, ඔබේ <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">නව කවුළුව</translation> <translation id="8797459392481275117">මෙම අඩවිය කිසි විට පරිවර්තනය නොකරන්න</translation> @@ -6821,6 +6851,7 @@ <translation id="8823559166155093873">කුකී අවහිර කරන්න</translation> <translation id="8823704566850948458">මුරපදය යෝජනා කරන්න...</translation> <translation id="8824701697284169214">පිටු&ව එක් කරන්න...</translation> +<translation id="8827125715368568315"><ph name="PERMISSION" /> සහ තවත් <ph name="COUNT" />ක් අවහිර කරන ලදි</translation> <translation id="8827289157496676362">දිගුව අමුණන්න</translation> <translation id="8827752199525959199"><ph name="DOMAIN" /> හි <ph name="USERNAME" /> සඳහා ක්රියා සහ මුරපදය</translation> <translation id="882854468542856424">කිසිම වෙබ් අඩවියකට අවට බ්ලූටූත් උපාංග සොයා ගැනීමට ඉඩ නොදෙන්න</translation> @@ -6921,6 +6952,7 @@ <translation id="8932894639908691771">ප්රවේශ මාරු විකල්ප</translation> <translation id="8933960630081805351">Finder තුළ පෙන්වන්න (&S)</translation> <translation id="8934732568177537184">කරගෙන යන්න</translation> +<translation id="8938306522009698937">හසුරු</translation> <translation id="8938800817013097409">USB-C උපාංගය (පසුපස දකුණු තොට)</translation> <translation id="8940081510938872932">පරිගණකය දැනට කරන වැඩ වැඩියි. පසුව උත්සාහ කරන්න.</translation> <translation id="8941173171815156065">'<ph name="PERMISSION" />' අවසරය ඉවත් කරන්න</translation> @@ -7225,6 +7257,7 @@ <translation id="987264212798334818">සාමාන්ය</translation> <translation id="987897973846887088">රූප ලබා ගත නොහැක</translation> <translation id="988978206646512040">හිස් මුරවැකිකඩවලට ඉඩ නොදේ</translation> +<translation id="991413375315957741">චලන හෝ ආලෝක සංවේදක</translation> <translation id="992032470292211616">දිගු, යෙදුම්, සහ තේමා ඔබගේ පරිගණකයට හානි කළ හැකිය. ඔබට දිගටම කරගෙන යාමට අවශ්ය බව ඔබට විශ්වාසද?</translation> <translation id="992256792861109788">රෝස</translation> <translation id="992592832486024913">ChromeVox (කථා කළ අදහස්) අක්රිය කරන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index a141805..4db1f19 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Predvolené</translation> <translation id="1252987234827889034">Vyskytla sa chyba profilu</translation> <translation id="1254593899333212300">Priame pripojenie k Internetu</translation> +<translation id="1257553931232494454">úrovne lupy</translation> <translation id="1259152067760398571">Kontrola bezpečnosti prebehla včera</translation> <translation id="1260451001046713751">Vždy povoliť zobrazovanie kontextových okien z webu <ph name="HOST" /></translation> <translation id="1261380933454402672">Mierne</translation> @@ -673,6 +674,7 @@ <translation id="1729533290416704613">Tiež určuje, ktorá stránka sa zobrazí pri vyhľadávaní pomocou všeobecného poľa.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Ak chcete odstrániť aplikácie, prejdite do časti Nastavenia > Obchod Google Play > Spravovať predvoľby Androidu > Aplikácie alebo Správca aplikácií. Potom klepnite na aplikáciu, ktorú chcete odinštalovať (možno budete musieť aplikáciu nájsť potiahnutím prstom doľava alebo doprava). Potom klepnite na možnosť Odinštalovať alebo Deaktivovať.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Posielanie požiadavky...</translation> +<translation id="1733064249834771892">písma</translation> <translation id="1733383495376208985">Šifrovať synchronizované údaje pomocou vlastnej <ph name="BEGIN_LINK" />prístupovej frázy synchronizácie<ph name="END_LINK" />. Nezahŕňa to spôsoby platby ani adresy zo služby Google Pay.</translation> <translation id="1734212868489994726">Svetlomodrá</translation> <translation id="1734230530703461088">Rozšírenia sa nepodarilo načítať v časovom limite. Kontaktujte správcu.</translation> @@ -760,6 +762,7 @@ <translation id="1818913467757368489">Prebieha nahrávanie do denníka.</translation> <translation id="1819721979226826163">Klepnite na položky Upozornenia aplikácií > Služby Google Play.</translation> <translation id="1820028137326691631">Zadajte heslo od správcu</translation> +<translation id="182139138257690338">automatické sťahovania</translation> <translation id="1822140782238030981">Už ste používateľ Chromu? Prihláste sa</translation> <translation id="18245044880483936">Zálohované údaje sa nezapočítavajú do kvóty priestoru na Disku vášho dieťaťa.</translation> <translation id="1825565032302550710">Port musí byť v rozsahu od 1024 do 65535</translation> @@ -1200,6 +1203,7 @@ <translation id="2326931316514688470">&Znova načítať aplikáciu</translation> <translation id="2327492829706409234">Povoliť aplikáciu</translation> <translation id="2328561734797404498">Ak chcete používať <ph name="APP_NAME" />, reštartujte svoje zariadenie.</translation> +<translation id="2329182534073751090">umiestnenie okna</translation> <translation id="2329597144923131178">Prihláste sa a používajte svoje záložky, históriu, heslá a ďalšie nastavenia vo všetkých svojich zariadeniach.</translation> <translation id="2332131598580221120">Zobraziť v obchode</translation> <translation id="2332192922827071008">Otvoriť predvoľby</translation> @@ -1711,6 +1715,7 @@ <translation id="2894757982205307093">Nová karta v skupine</translation> <translation id="289644616180464099">SIM karta je uzamknutá</translation> <translation id="289695669188700754">Identifikácia kľúča: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Keď zavriete všetky okná inkognito, toto vlastné nastavenie bude odstránené</translation> <translation id="2897878306272793870">Naozaj chcete otvoriť tento počet kariet: <ph name="TAB_COUNT" />?</translation> <translation id="290105521672621980">Súbor používa nepodporované funkcie</translation> <translation id="2902127500170292085">Rozšíreniu <ph name="EXTENSION_NAME" /> sa nepodarilo komunikovať s touto tlačiarňou. Skontrolujte, či je tlačiareň pripojená a skúste to znova.</translation> @@ -1800,6 +1805,7 @@ <translation id="2996286169319737844">Údaje sú šifrované pomocou vašej prístupovej frázy synchronizácie. Nezahŕňa to spôsoby platby ani adresy zo služby Google Pay.</translation> <translation id="2996722619877761919">Otáčanie na dlhom okraji</translation> <translation id="3000236644796679448">Weby môžu žiadať o používanie vášho mikrofónu (odporúčané)</translation> +<translation id="3000378525979847272">Povolené: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Zvuk mono</translation> <translation id="3001144475369593262">Podradené účty</translation> <translation id="3003144360685731741">Preferované siete</translation> @@ -2059,6 +2065,7 @@ <translation id="3305661444342691068">Otvárať súbory PDF v aplikácii Preview</translation> <translation id="3308116878371095290">Tejto stránke bolo zabránené nastaviť súbory cookie.</translation> <translation id="3308134619352333507">Skryť tlačidlo</translation> +<translation id="3308738399950580893">reklamy</translation> <translation id="3308852433423051161">Načítava sa Asistent Google…</translation> <translation id="3309330461362844500">Identifikátor profilu certifikátu</translation> <translation id="3311445899360743395">Dáta spojené s touto aplikáciou budú odstránené zo zariadenia.</translation> @@ -2119,6 +2126,7 @@ <translation id="3388788256054548012">Tento súbor je šifrovaný. Požiadajte vlastníka, aby ho dešifroval.</translation> <translation id="3390013585654699824">Podrobnosti o aplikácii</translation> <translation id="3390741581549395454">Aplikácie a súbory systému Linux boli úspešne zálohované. Inovácia sa čoskoro začne.</translation> +<translation id="3391482648489541560">úprava súborov</translation> <translation id="339178315942519818">Zobrazte si upozornenia z četových aplikácií v zariadení <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Kliknutím na tlačidlo „Súhlasím, pokračovať“ vyjadrujete súhlas so spracovaním uvedeným vyššie v rámci týchto služieb Googlu.</translation> <translation id="3399432415385675819">Upozornenia budú zakázané</translation> @@ -2895,6 +2903,7 @@ <translation id="425573743389990240">Vybíjanie batérie vo Wattoch (záporná hodnota znamená, že batéria sa nabíja)</translation> <translation id="4256316378292851214">Uložiť &video ako...</translation> <translation id="4258348331913189841">Systémy súborov</translation> +<translation id="4259381619085088639">vaša prítomnosť</translation> <translation id="4259388776256904261">Môže to chvíľu trvať</translation> <translation id="4260182282978351200">Súbor <ph name="FILE_NAME" /> môže byť nebezpečný. Chcete ho odoslať na kontrolu do rozšírenej ochrany Googlu? Stláčaním klávesov Shift + F6 prejdite do oblasti panela so stiahnutými súbormi.</translation> <translation id="4263223596040212967">Skontrolujte svoje rozloženie klávesnice a skúste to znova.</translation> @@ -2931,6 +2940,7 @@ <translation id="4303079906735388947">Nastavte pre svoj bezpečnostný kľúč nový kód PIN</translation> <translation id="4305402730127028764">Kopírovať do zariadenia <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikácie musia byť poskytované s typom obsahu „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">schránka</translation> <translation id="4307992518367153382">Základy</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (aktívne: <ph name="NUM_KILOBYTES_LIVE" /> kB)</translation> <translation id="4310139701823742692">Súbor má nesprávny formát. Skontrolujte súbor PPD a skúste to znova.</translation> @@ -3018,6 +3028,7 @@ <translation id="4412698727486357573">Centrum pomoci</translation> <translation id="44141919652824029">Povoliť aplikácii <ph name="APP_NAME" /> získať zoznam pripojených zariadení USB?</translation> <translation id="4414232939543644979">Nové okno &inkognito</translation> +<translation id="4414515549596849729">Súbory cookie a údaje webov</translation> <translation id="4415213869328311284">Teraz môžete začať používať svoje zariadenie <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Nenašli sa žiadne zariadenia. Otvorte článok centra pomoci na novej karte.</translation> <translation id="4415276339145661267">Spravovať účet Google</translation> @@ -3089,6 +3100,7 @@ <translation id="4493468155686877504">Odporúčané (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Nezobrazovať na tejto stránke</translation> <translation id="4500114933761911433">Doplnok <ph name="PLUGIN_NAME" /> zlyhal</translation> +<translation id="4500587658229086076">nezabezpečený obsah</translation> <translation id="450099669180426158">Ikona Výkričník</translation> <translation id="4501530680793980440">Potvrdiť odstránenie</translation> <translation id="4502423230170890588">Odstrániť z tohto zariadenia</translation> @@ -3129,6 +3141,7 @@ <translation id="4538684596480161368">Na stránkach <ph name="HOST" /> vždy blokovať doplnky, ktoré nie sú v karanténe</translation> <translation id="4538792345715658285">Nainštalované na základe podnikových pravidiel.</translation> <translation id="4541662893742891060">K tomuto profilu sa nepodarilo pripojiť. Technickú podporu vám poskytne operátor.</translation> +<translation id="4541810033354695636">rozšírená realita</translation> <translation id="4542520061254486227">Čítať vaše údaje na weboch <ph name="WEBSITE_1" /> a <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Správca certifikátov</translation> <translation id="4544174279960331769">Predvolený modrý avatar</translation> @@ -3601,6 +3614,7 @@ <translation id="5112577000029535889">&Nástroje pre vývojárov</translation> <translation id="5113739826273394829">Kliknutím na túto ikonu ručne uzamknete toto zariadenie <ph name="DEVICE_TYPE" />. Pri budúcom prístupe budete musieť zadať heslo.</translation> <translation id="51143538739122961">Vložte bezpečnostný kľúč a stlačte jeho tlačidlo</translation> +<translation id="5114987907971894280">virtuálna realita</translation> <translation id="5115309401544567011">Pripojte zariadenie <ph name="DEVICE_TYPE" /> k zdroju napájania.</translation> <translation id="5115338116365931134">Jediné prihlásenie</translation> <translation id="5116628073786783676">Uložiť &zvuk ako...</translation> @@ -3900,6 +3914,7 @@ <translation id="5464632865477611176">Spustiť len tentoraz</translation> <translation id="5464660706533281090">Toto nastavenie nemôže zmeniť používateľ, ktorý je dieťa.</translation> <translation id="5466374726908360271">Prilepiť a &vyhľadať „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Blokované: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Weby môžu žiadať o prehrávanie chráneného obsahu (odporúčané)</translation> <translation id="5468173180030470402">Hľadajú sa zdieľané úložiská</translation> <translation id="5469852975082458401">Stránkami môžete prechádzať pomocou textového kurzora. Stlačením klávesa F7 túto funkciu vypnete.</translation> @@ -4191,6 +4206,7 @@ <translation id="5794786537412027208">Ukončiť všetky aplikácie Chrome</translation> <translation id="5797070761912323120">Google môže pomocou vašej histórie prispôsobiť Vyhľadávanie, reklamy a ďalšie služby Googlu</translation> <translation id="5798301976526354562">Veľkosť textu (platí tiež pre živý prepis)</translation> +<translation id="579907812742603813">chránený obsah</translation> <translation id="579915268381781820">Bezpečnostný kľúč bol odstránený.</translation> <translation id="5799508265798272974">Virtuálny počítač so systémom Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Cieľový súbor bol od posledného stiahnutia upravený alebo odstránený.</translation> @@ -4264,6 +4280,7 @@ <translation id="5877064549588274448">Kanál sa zmenil. Ak chcete zmeny použiť, reštartujte zariadenie.</translation> <translation id="5877584842898320529">Vybraná tlačiareň nie je k dispozícii alebo nie je správne nainštalovaná. <ph name="BR" />Skontrolujte tlačiareň alebo skúste vybrať inú.</translation> <translation id="5882919346125742463">Známe siete</translation> +<translation id="5883356647197510494">Automaticky blokované: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Táto karta je pripojená k zariadeniu USB.</translation> <translation id="5886009770935151472">1. prst</translation> <translation id="5889282057229379085">Maximálny počet sprostredkujúcich certifikačných autorít: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4763,6 +4780,7 @@ <translation id="6460601847208524483">Nájsť ďalšie</translation> <translation id="6461170143930046705">Vyhľadávajú sa siete...</translation> <translation id="6463795194797719782">&Upraviť</translation> +<translation id="6464094930452079790">obrázky</translation> <translation id="6464825623202322042">Toto zariadenie</translation> <translation id="6465841119675156448">Bez internetu</translation> <translation id="6466988389784393586">&Otvoriť všetky záložky</translation> @@ -4786,6 +4804,7 @@ <translation id="6491376743066338510">Autorizácia zlyhala</translation> <translation id="6494327278868541139">Zobraziť podrobnosti o rozšírenej ochrane</translation> <translation id="6494445798847293442">Položka nie je certifikačnou autoritou</translation> +<translation id="6494750904506170417">vyskakovacie okná a presmerovania</translation> <translation id="6494974875566443634">Prispôsobenie</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. sieť z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, sila signálu <ph name="SIGNAL_STRENGTH" /> ovládaná správcom, podrobnosti</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Tieto údaje majú citlivý alebo nebezpečný obsah}=1{Tento súbor má citlivý alebo nebezpečný obsah}few{Tieto súbory majú citlivý alebo nebezpečný obsah}many{Tieto súbory majú citlivý alebo nebezpečný obsah}other{Tieto súbory majú citlivý alebo nebezpečný obsah}}</translation> @@ -4926,6 +4945,7 @@ <translation id="6657585470893396449">Heslo</translation> <translation id="6659213950629089752">Zobrazenie tejto stránky bolo priblížené rozšírením <ph name="NAME" /></translation> <translation id="6659594942844771486">Karta</translation> +<translation id="6660413144148052430">poloha</translation> <translation id="666099631117081440">Tlačové servery</translation> <translation id="6663190258859265334">V zariadení <ph name="DEVICE_TYPE" /> spustite obnovenie Powerwash a obnovte predchádzajúcu verziu.</translation> <translation id="6664237456442406323">Váš počítač je žiaľ nakonfigurovaný pomocou poškodeného ID hardvéru. Systému Chrome OS to zabraňuje získať aktualizácie s najnovšími opravami zabezpečenia a váš počítač <ph name="BEGIN_BOLD" />môže byť zraniteľný voči škodlivým útokom<ph name="END_BOLD" />.</translation> @@ -4980,6 +5000,7 @@ <translation id="672609503628871915">Zobraziť novinky</translation> <translation id="67269783048918309">Odosielať údaje o využití a diagnostiky. Toto zariadenie momentálne automaticky odosiela Googlu diagnostiky a údaje o používaní zariadenia a aplikácií. Nebudú slúžiť na zistenie totožnosti vášho dieťaťa. Pomôžu zvýšiť stabilitu systému a aplikácií a poskytovať ďalšie vylepšenia. Niektoré súhrnné údaje tiež pomôžu aplikáciám Google a partnerom, ako napríklad vývojárom Androidu. Používanie tohto <ph name="BEGIN_LINK1" />nastavenia<ph name="END_LINK1" /> je presadzované vlastníkom. Ak pre dieťa aktivujete dodatočnú aktivitu na internete a v aplikáciách, tieto údaje sa môžu uložiť do jeho účtu Google. <ph name="BEGIN_LINK2" />Ďalšie informácie<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Pripojené, <ph name="BATTERY_PERCENTAGE" /> % batérie</translation> +<translation id="6732087373923685049">fotoaparát</translation> <translation id="6732801395666424405">Certifikáty neboli načítané</translation> <translation id="6732900235521116609">Skratka sa nedá odstrániť</translation> <translation id="6734468588183300211">Weby v anonymnom režime nemôžu pomocou súborov cookie zobraziť vašu aktivitu prehliadania v rámci rôznych webov (napríklad na prispôsobenie reklám). Funkcie na niektorých weboch môžu zlyhávať.</translation> @@ -5054,6 +5075,7 @@ <translation id="6817174620439930047">Opýtať sa, keď bude chcieť web použiť na prístup k zariadeniam MIDI správy exkluzívne pre systém (odporúča sa)</translation> <translation id="6818198425579322765">Jazyk stránky, ktorý chcete prekladať</translation> <translation id="6818802132960437751">Integrovaná antivírusová ochrana</translation> +<translation id="6820143000046097424">sériové porty</translation> <translation id="682123305478866682">Prenášanie plochy</translation> <translation id="6823174134746916417">Kliknutie klepnutím na touchpade</translation> <translation id="6824564591481349393">Kopírovať &e-mailovú adresu</translation> @@ -5487,6 +5509,7 @@ <translation id="730515362922783851">Vymieňať údaje s ktorýmkoľvek zariadením v miestnej sieti alebo na internete</translation> <translation id="7306521477691455105">Otvorte Nastavenia a pripojte <ph name="USB_DEVICE_NAME" /> k zariadeniu <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Pozastavená</translation> +<translation id="7308436126008021607">synchronizácia na pozadí</translation> <translation id="7309257895202129721">Zobraziť &ovládacie prvky</translation> <translation id="7310598146671372464">Nepodarilo sa prihlásiť. Server nepodporuje stanovené typy šifrovania Kerberos. Kontaktujte správcu.</translation> <translation id="7320213904474460808">Preferovať sieť</translation> @@ -5628,6 +5651,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Vyžaduje sa okamžité vrátenie}few{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_DAYS} dní}many{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_DAYS} dňa}other{Vráťte <ph name="DEVICE_TYPE" /> do {NUM_DAYS} dní}}</translation> <translation id="7475671414023905704">Netscape – webová adresa pre zabudnuté heslo</translation> <translation id="7476454130948140105">Batéria je príliš slabá na aktualizáciu (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Je automaticky blokované povolenie <ph name="PERMISSION" /> a ďalšie (<ph name="COUNT" />)</translation> <translation id="7477793887173910789">Ovládajte svoju hudbu, videá a ďalší obsah</translation> <translation id="7478485216301680444">Aplikáciu pre režim kiosku sa nepodarilo nainštalovať.</translation> <translation id="7478623944308207463">Vaše aplikácie a nastavenia budú synchronizované vo všetkých zariadeniach so systémom Chrome OS, v ktorých ste sa prihlásili svojím účtom Google. Možnosti synchronizácie prehliadača nájdete v <ph name="LINK_BEGIN" />nastaveniach Chromu<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Odinštalovať aplikáciu <ph name="APP" />…</translation> <translation id="8289128870594824098">Veľkosť na disku</translation> <translation id="8293206222192510085">Pridať záložku</translation> +<translation id="829335040383910391">zvuk</translation> <translation id="8294431847097064396">Zdroj</translation> <translation id="8298429963694909221">Teraz môžete dostávať upozornenia zo svojho telefónu v zariadení <ph name="DEVICE_TYPE" />. Zrušením upozornení v zariadení <ph name="DEVICE_TYPE" /> ich tiež zrušíte vo svojom telefóne. Telefón majte nablízku so zapnutým rozhraním Bluetooth a pripojením Wi‑Fi.</translation> <translation id="8299319456683969623">Momentálne ste v režime offline.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Pridať sieťové pripojenie</translation> <translation id="8319414634934645341">Rozšírené použitie kľúča</translation> <translation id="8320459152843401447">Celá vaša obrazovka</translation> +<translation id="8321476692217554900">upozornenia</translation> <translation id="8321837372750396788">Toto zariadenie <ph name="DEVICE_TYPE" /> bude spravovať <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Táto stránka má zablokovaný prístup k mikrofónu.</translation> <translation id="8323167517179506834">Zadajte webovú adresu</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Nedávno z Disku Google</translation> <translation id="8407199357649073301">Úroveň denníka:</translation> <translation id="8408068190360279472">Sieť <ph name="NETWORK_TYPE" /> sa pripája</translation> +<translation id="8409413588194360210">obslužné nástroje platieb</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Je aktivované povolenie <ph name="PERMISSION" /> a ďalšie (<ph name="COUNT" />)</translation> <translation id="8413385045638830869">Najprv sa opýtať (odporúčané)</translation> <translation id="8417548266957501132">Heslo rodiča</translation> <translation id="8418445294933751433">&Zobraziť ako kartu</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> alebo <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Teplota farby nočného režimu</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> vyžaduje povolenia <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> a ďalšie</translation> +<translation id="865032292777205197">senzory pohybu</translation> <translation id="8650543407998814195">Aj keď už nemáte prístup k starému profilu, môžete ho stále odstrániť.</translation> <translation id="8651585100578802546">Vynútiť obnovenie tejto stránky</translation> <translation id="8652400352452647993">Chyba zbalenia rozšírenia</translation> @@ -6788,6 +6817,7 @@ <translation id="8785622406424941542">Dotykové pero</translation> <translation id="8787254343425541995">Povoliť servery proxy pre zdieľané siete</translation> <translation id="8791534160414513928">Posielať pri prehliadaní webov požiadavku Do Not Track</translation> +<translation id="8792626944327216835">mikrofón</translation> <translation id="879413103056696865">Keď je hotspot zapnutý, telefón <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nové okno</translation> <translation id="8797459392481275117">Tento web nikdy neprekladať</translation> @@ -6827,6 +6857,7 @@ <translation id="8823559166155093873">Blokovať súbory cookie</translation> <translation id="8823704566850948458">Navrhnúť heslo…</translation> <translation id="8824701697284169214">Pridať strán&ku...</translation> +<translation id="8827125715368568315">Je blokované povolenie <ph name="PERMISSION" /> a ďalšie (<ph name="COUNT" />)</translation> <translation id="8827289157496676362">Pripnúť rozšírenie</translation> <translation id="8827752199525959199">Ďalšie akcie, heslo účtu <ph name="USERNAME" /> v doméne <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Nepovoliť žiadnemu webu objavovať zariadenia Bluetooth v okolí</translation> @@ -6927,6 +6958,7 @@ <translation id="8932894639908691771">Možnosti ovládania prepínačmi</translation> <translation id="8933960630081805351">&Zobraziť v aplikácii Finder</translation> <translation id="8934732568177537184">Pokračovať</translation> +<translation id="8938306522009698937">obslužné nástroje.</translation> <translation id="8938800817013097409">Zariadenie USB-C (pravý port vzadu)</translation> <translation id="8940081510938872932">Počítač momentálne vykonáva priveľa úloh. Skúste to neskôr.</translation> <translation id="8941173171815156065">Odvolať povolenie „<ph name="PERMISSION" />“</translation> @@ -7231,6 +7263,7 @@ <translation id="987264212798334818">Všeobecné</translation> <translation id="987897973846887088">K dispozícii nie sú žiadne obrázky</translation> <translation id="988978206646512040">Prístupová fráza nemôže byť prázdna</translation> +<translation id="991413375315957741">senzory pohybu alebo svetla</translation> <translation id="992032470292211616">Rozšírenia, aplikácie a motívy môžu poškodiť vaše zariadenie. Naozaj chcete pokračovať?</translation> <translation id="992256792861109788">Ružová</translation> <translation id="992592832486024913">Zakázať funkciu ChromeVox (hlasovú spätnú väzbu)</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 78e9218..ee1459f 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -236,6 +236,7 @@ <translation id="125220115284141797">Privzeto</translation> <translation id="1252987234827889034">Prišlo je do napake profila</translation> <translation id="1254593899333212300">Neposredna internetna povezava</translation> +<translation id="1257553931232494454">ravni povečave/pomanjšave</translation> <translation id="1259152067760398571">Varnostno preverjanje je bilo izvedeno včeraj</translation> <translation id="1260451001046713751">Vedno dovoli pojavna okna in preusmeritve spletnega mesta <ph name="HOST" /></translation> <translation id="1261380933454402672">Zmerno</translation> @@ -674,6 +675,7 @@ <translation id="1729533290416704613">Določa tudi, katera stran je prikazana, ko iščete v naslovni vrstici.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Če želite odstraniti aplikacije, pojdite v »Nastavitve« > »Trgovina Google Play« > »Upravljanje nastavitev Androida« > »Aplikacije« ali odprite upravitelja aplikacij. Nato se dotaknite aplikacije, ki jo želite odstraniti (morda boste morali s prstom povleči v desno ali levo, da jo boste našli). Nato se dotaknite »Odstrani« ali »Onemogoči«.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Pošiljanje zahteve ...</translation> +<translation id="1733064249834771892">pisave</translation> <translation id="1733383495376208985">Šifriranje sinhroniziranih podatkov z vašim <ph name="BEGIN_LINK" />geslom za sinhronizacijo<ph name="END_LINK" />. To ne vključuje plačilnih sredstev in naslovov iz Googla Pay.</translation> <translation id="1734212868489994726">Svetlo modra</translation> <translation id="1734230530703461088">Ni bilo mogoče naložiti razširitve znotraj časovne omejitve. Obrnite se na skrbnika.</translation> @@ -761,6 +763,7 @@ <translation id="1818913467757368489">Poteka nalaganje dnevnika.</translation> <translation id="1819721979226826163">Dotaknite se »Obvestila aplikacije > Storitve Google Play«.</translation> <translation id="1820028137326691631">Vnesite geslo, ki ga je priskrbel skrbnik</translation> +<translation id="182139138257690338">samodejni prenosi</translation> <translation id="1822140782238030981">Že uporabljate Chrome? Prijavite se.</translation> <translation id="18245044880483936">Varnostno kopirani podatki se ne štejejo v otrokovo količinsko omejitev prostora za shranjevanje v Googlu Drive.</translation> <translation id="1825565032302550710">Številka vrat mora biti med 1024 in 65535</translation> @@ -1201,6 +1204,7 @@ <translation id="2326931316514688470">&Znova naloži aplikacijo</translation> <translation id="2327492829706409234">Omogoči aplikacijo</translation> <translation id="2328561734797404498">Znova zaženite napravo, če želite uporabljati aplikacijo <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">postavitev oken</translation> <translation id="2329597144923131178">Prijavite se, da boste lahko dostopali do zaznamkov, zgodovine, gesel in drugih nastavitev v vseh napravah.</translation> <translation id="2332131598580221120">Ogled v trgovini</translation> <translation id="2332192922827071008">Odpri nastavitve</translation> @@ -1713,6 +1717,7 @@ <translation id="2894757982205307093">Novi zavihek v skupini</translation> <translation id="289644616180464099">Kartica SIM je zaklenjena</translation> <translation id="289695669188700754">ID ključa: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ta nastavitev po meri bo odstranjena, ko zaprete vsa okna brez beleženja dejavnosti.</translation> <translation id="2897878306272793870">Ali ste prepričani, da želite odpreti naslednje število zavihkov: <ph name="TAB_COUNT" /></translation> <translation id="290105521672621980">Datoteka uporablja nepodprte funkcije</translation> <translation id="2902127500170292085">Komunikacija razširitve <ph name="EXTENSION_NAME" /> s tem tiskalnikom ni bila mogoča. Poskrbite, da je tiskalnik priključen, in poskusite znova.</translation> @@ -1802,6 +1807,7 @@ <translation id="2996286169319737844">Podatki so šifrirani z vašim geslom za sinhronizacijo. To ne vključuje plačilnih sredstev in naslovov iz Googla Pay.</translation> <translation id="2996722619877761919">Obrni na daljšem robu</translation> <translation id="3000236644796679448">Spletna mesta lahko zahtevajo uporabo mikrofona (priporočeno)</translation> +<translation id="3000378525979847272">Dovoljeno: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Mono zvok</translation> <translation id="3001144475369593262">Računi otrok</translation> <translation id="3003144360685731741">Prednostna omrežja</translation> @@ -2061,6 +2067,7 @@ <translation id="3305661444342691068">Odpri PDF v predogledu</translation> <translation id="3308116878371095290">Tej strani je bilo preprečeno nastavljanje piškotkov.</translation> <translation id="3308134619352333507">Gumb »Skrij«</translation> +<translation id="3308738399950580893">oglasi</translation> <translation id="3308852433423051161">Nalaganje Pomočnika Google ...</translation> <translation id="3309330461362844500">ID profila potrdila</translation> <translation id="3311445899360743395">Podatki, povezani s to aplikacijo, bodo morda odstranjeni iz te naprave.</translation> @@ -2121,6 +2128,7 @@ <translation id="3388788256054548012">Ta datoteka je šifrirana. Lastnika datoteke prosite, da jo dešifrira.</translation> <translation id="3390013585654699824">Podrobnosti o aplikaciji</translation> <translation id="3390741581549395454">Aplikacije in datoteke za Linux so uspešno varnostno kopirane. Nadgradnja se bo začela v kratkem.</translation> +<translation id="3391482648489541560">urejanje datotek</translation> <translation id="339178315942519818">Oglejte si obvestila iz aplikacij za klepet v napravi <ph name="DEVICE_TYPE" />.</translation> <translation id="3396800784455899911">Če kliknete gumb »Sprejmi in nadaljuj«, se strinjate z obdelavo, ki je opisana zgoraj za te Googlove storitve.</translation> <translation id="3399432415385675819">Obvestila bodo onemogočena</translation> @@ -2897,6 +2905,7 @@ <translation id="425573743389990240">Hitrost praznjenja akumulatorja v vatih (negativna vrednost pomeni, da se akumulator polni)</translation> <translation id="4256316378292851214">Shr&ani videoposnetek kot ...</translation> <translation id="4258348331913189841">Datotečni sistemi</translation> +<translation id="4259381619085088639">vaša prisotnost</translation> <translation id="4259388776256904261">To lahko traja nekaj časa.</translation> <translation id="4260182282978351200">Datoteka <ph name="FILE_NAME" /> je morda nevarna. Jo želite poslati Googlovi dodatni zaščiti v pregled? Pritisnite Shift + F6, če želite krožiti do območja vrstice s prenosi.</translation> <translation id="4263223596040212967">Preverite postavitev tipkovnice in poskusite znova.</translation> @@ -2933,6 +2942,7 @@ <translation id="4303079906735388947">Nastavitev nove kode PIN za varnostni ključ</translation> <translation id="4305402730127028764">Kopiraj v napravo <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikacije morajo biti opremljene z vrsto vsebine »<ph name="CONTENT_TYPE" />«</translation> +<translation id="4306812610847412719">odložišče</translation> <translation id="4307992518367153382">Osnove</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB dejavno)</translation> <translation id="4310139701823742692">Datoteka je v napačni obliki zapisa. Preverite datoteko PPD in poskusite znova.</translation> @@ -3020,6 +3030,7 @@ <translation id="4412698727486357573">Center za pomoč</translation> <translation id="44141919652824029">Dovolite aplikaciji »<ph name="APP_NAME" />«, da pridobi seznam priključenih naprav USB?</translation> <translation id="4414232939543644979">Novo &okno brez beleženja zgodovine</translation> +<translation id="4414515549596849729">piškotki in podatki spletnih mest</translation> <translation id="4415213869328311284">Pripravljeni ste na začetek uporabe naprave <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Ni naprav. Odprite članek v centru za pomoč na novem zavihku.</translation> <translation id="4415276339145661267">Upravljanje računa Google</translation> @@ -3091,6 +3102,7 @@ <translation id="4493468155686877504">Priporočeno (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ne pokaži na tej strani</translation> <translation id="4500114933761911433">Vtičnik <ph name="PLUGIN_NAME" /> se je zrušil</translation> +<translation id="4500587658229086076">vsebina, ki ni varna</translation> <translation id="450099669180426158">Ikona klicaja</translation> <translation id="4501530680793980440">Potrditev odstranitve</translation> <translation id="4502423230170890588">Odstrani iz naprave</translation> @@ -3131,6 +3143,7 @@ <translation id="4538684596480161368">Vedno blokiraj vtičnike, odstranjene iz peskovnika, na <ph name="HOST" /></translation> <translation id="4538792345715658285">Nameščeno s pravilnikom podjetja.</translation> <translation id="4541662893742891060">Ni se mogoče povezati s tem profilom. Za tehnično podporo se obrnite na operaterja.</translation> +<translation id="4541810033354695636">razširjena resničnost</translation> <translation id="4542520061254486227">Branje vaših podatkov na spletnih mestih <ph name="WEBSITE_1" /> in <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Upravitelj potrdil</translation> <translation id="4544174279960331769">Privzeti modri avatar</translation> @@ -3603,6 +3616,7 @@ <translation id="5112577000029535889">&Orodja za razvijalce</translation> <translation id="5113739826273394829">Če kliknete to ikono, boste ročno zaklenili to napravo: <ph name="DEVICE_TYPE" />. Naslednjič boste morali za odklenitev vnesti geslo.</translation> <translation id="51143538739122961">Vstavite varnostni ključ in se ga dotaknite</translation> +<translation id="5114987907971894280">navidezna resničnost</translation> <translation id="5115309401544567011">Priključite napravo <ph name="DEVICE_TYPE" /> v vir napajanja.</translation> <translation id="5115338116365931134">Enotna prijava</translation> <translation id="5116628073786783676">Shr&ani zvok kot ...</translation> @@ -3902,6 +3916,7 @@ <translation id="5464632865477611176">Zaženi tokrat</translation> <translation id="5464660706533281090">Otroški uporabnik te nastavitve ne more spremeniti.</translation> <translation id="5466374726908360271">&Prilepi in poišči »<ph name="SEARCH_TERMS" />«</translation> +<translation id="5467207440419968613">Blokirano: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Spletna mesta lahko zahtevajo predvajanje zaščitene vsebine (priporočeno)</translation> <translation id="5468173180030470402">Iskanje datotečnih sredstev v skupni rabi</translation> <translation id="5469852975082458401">Po straneh se lahko premikate s kazalcem besedila. Pritisnite F7 za izklop.</translation> @@ -4195,6 +4210,7 @@ <translation id="5794786537412027208">Zapri vse aplikacije za Chrome</translation> <translation id="5797070761912323120">Google lahko vašo zgodovino uporabi za prilagajanje Iskanja Google, oglasov in drugih Googlovih storitev</translation> <translation id="5798301976526354562">Velikost besedila (uporablja se tudi za samodejne podnapise)</translation> +<translation id="579907812742603813">zaščitena vsebina</translation> <translation id="579915268381781820">Varnostni ključ je bil odstranjen.</translation> <translation id="5799508265798272974">Navidezni računalnik za Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Ciljna datoteka je bila po zadnjem prenosu okrnjena ali odstranjena.</translation> @@ -4268,6 +4284,7 @@ <translation id="5877064549588274448">Kanal spremenjen. Znova zaženite napravo, da uveljavite spremembe.</translation> <translation id="5877584842898320529">Izbrani tiskalnik ni na voljo ali ni pravilno nameščen. <ph name="BR" /> Preverite tiskalnik ali izberite drugega.</translation> <translation id="5882919346125742463">Znana omrežja</translation> +<translation id="5883356647197510494">Samodejno blokirano: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Ta zavihek je povezan z napravo USB.</translation> <translation id="5886009770935151472">Prst 1</translation> <translation id="5889282057229379085">Največje število posrednih overiteljev potrdil: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4767,6 +4784,7 @@ <translation id="6460601847208524483">Poišči naslednje</translation> <translation id="6461170143930046705">Iskanje omrežij ...</translation> <translation id="6463795194797719782">&Urejanje</translation> +<translation id="6464094930452079790">slike</translation> <translation id="6464825623202322042">Ta naprava</translation> <translation id="6465841119675156448">Brez interneta</translation> <translation id="6466988389784393586">&Odpri vse zaznamke</translation> @@ -4790,6 +4808,7 @@ <translation id="6491376743066338510">Odobritev ni uspela</translation> <translation id="6494327278868541139">Prikaz podatkov o izboljšani zaščiti</translation> <translation id="6494445798847293442">Ni overitelj potrdil</translation> +<translation id="6494750904506170417">pojavna okna in preusmeritve</translation> <translation id="6494974875566443634">Prilagajanje</translation> <translation id="6495925982925244349">Omrežje <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, moč signala je <ph name="SIGNAL_STRENGTH" /> %, upravlja ga vaš skrbnik, podrobnosti</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{V teh podatkih je občutljiva ali nevarna vsebina}=1{V tej datoteki je občutljiva ali nevarna vsebina}one{V teh datotekah je občutljiva ali nevarna vsebina}two{V teh datotekah je občutljiva ali nevarna vsebina}few{V teh datotekah je občutljiva ali nevarna vsebina}other{V teh datotekah je občutljiva ali nevarna vsebina}}</translation> @@ -4930,6 +4949,7 @@ <translation id="6657585470893396449">Geslo</translation> <translation id="6659213950629089752">To stran je povečala razširitev »<ph name="NAME" />«</translation> <translation id="6659594942844771486">Tabulator</translation> +<translation id="6660413144148052430">lokacija</translation> <translation id="666099631117081440">Strežniki za tiskanje</translation> <translation id="6663190258859265334">V napravi <ph name="DEVICE_TYPE" /> uporabite funkcijo Powerwash in jo povrnite na prejšnjo različico.</translation> <translation id="6664237456442406323">Vaš računalnik je konfiguriran s popačenim ID-jem strojne opreme. Zaradi tega Chrome OS ne more namestiti najnovejših varnostnih popravkov in vaš računalnik <ph name="BEGIN_BOLD" />je lahko še bolj izpostavljen zlonamernim napadom<ph name="END_BOLD" />.</translation> @@ -4984,6 +5004,7 @@ <translation id="672609503628871915">Oglejte si novosti</translation> <translation id="67269783048918309">Pošiljanje podatkov o uporabi in diagnostičnih podatkov. Ta naprava trenutno Googlu samodejno pošilja diagnostične podatke ter podatke o uporabi naprave in aplikacij. Teh podatkov ne bomo uporabljali, da bi prepoznali vašega otroka, temveč za izboljšanje stabilnosti sistema in izvajanja aplikacij ter drugega. Nekateri združeni podatki bodo pomagali tudi Googlovim aplikacijam in partnerjem, na primer razvijalcem za Android. To <ph name="BEGIN_LINK1" />nastavitev<ph name="END_LINK1" /> je uveljavil lastnik naprave. Če ste za otroka vklopili dodatno beleženje dejavnosti v spletu in aplikacijah, bodo ti podatki morda shranjeni v njegovem računu za Google. <ph name="BEGIN_LINK2" />Več o tem<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Povezano, <ph name="BATTERY_PERCENTAGE" /> % energije akumulatorja</translation> +<translation id="6732087373923685049">fotoaparat</translation> <translation id="6732801395666424405">Potrdila niso naložena</translation> <translation id="6732900235521116609">Bližnjice ni mogoče odstraniti</translation> <translation id="6734468588183300211">Ko uporabljate način brez beleženja dejavnosti, spletna mesta ne morejo uporabljati piškotkov za ogled dejavnosti brskanja na različnih spletnih mestih, na primer za osebno prilagajanje oglasov. Funkcije na nekaterih spletnih mestih morda ne bodo delovale.</translation> @@ -5058,6 +5079,7 @@ <translation id="6817174620439930047">Vprašaj, ko želi spletno mesto uporabiti sporočila sysex za dostop do naprav MIDI (priporočeno)</translation> <translation id="6818198425579322765">Jezik strani za prevajanje</translation> <translation id="6818802132960437751">Vgrajena protivirusna zaščita</translation> +<translation id="6820143000046097424">serijska vrata</translation> <translation id="682123305478866682">Predvajanje namizja</translation> <translation id="6823174134746916417">Klikanje z dotikom sledilne ploščice</translation> <translation id="6824564591481349393">Kopiraj &e-poštni naslov</translation> @@ -5491,6 +5513,7 @@ <translation id="730515362922783851">Izmenjava podatkov s poljubno napravo v lokalnem omrežju ali internetu</translation> <translation id="7306521477691455105">Odprite nastavitve, če želite povezati napravo <ph name="USB_DEVICE_NAME" /> z napravo <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Zaustavljeno</translation> +<translation id="7308436126008021607">sinhronizacija v ozadju</translation> <translation id="7309257895202129721">Pokaži &kontrolnike</translation> <translation id="7310598146671372464">Prijava ni uspela. Strežnik ne podpira navedenih vrst šifriranja Kerberos. Obrnite se na skrbnika.</translation> <translation id="7320213904474460808">Privzeto omrežje</translation> @@ -5632,6 +5655,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Zahtevana je takojšnja vrnitev}one{Napravo <ph name="DEVICE_TYPE" /> vrnite v {NUM_DAYS} dnevu}two{Napravo <ph name="DEVICE_TYPE" /> vrnite v {NUM_DAYS} dnevih}few{Napravo <ph name="DEVICE_TYPE" /> vrnite v {NUM_DAYS} dnevih}other{Napravo <ph name="DEVICE_TYPE" /> vrnite v {NUM_DAYS} dnevih}}</translation> <translation id="7475671414023905704">Spletni naslov izgubljenega Netscapeovega gesla</translation> <translation id="7476454130948140105">Akumulator ima premalo energije za posodobitev (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Samodejno blokirano: <ph name="PERMISSION" /> in še <ph name="COUNT" /></translation> <translation id="7477793887173910789">Upravljanje glasbe, videoposnetkov in drugega</translation> <translation id="7478485216301680444">Aplikacije Kiosk ni bilo mogoče namestiti.</translation> <translation id="7478623944308207463">Vaše aplikacije in nastavitve se bodo sinhronizirale v vseh napravah s sistemom Chrome OS, v katerih ste prijavljeni z računom Google. Če vas zanimajo možnosti sinhronizacije brskalnika, odprite <ph name="LINK_BEGIN" />Chromove nastavitve<ph name="LINK_END" />.</translation> @@ -6376,6 +6400,7 @@ <translation id="8288032458496410887">Odmeščanje aplikacije <ph name="APP" /> …</translation> <translation id="8289128870594824098">Velikost diska</translation> <translation id="8293206222192510085">Dodaj zaznamek</translation> +<translation id="829335040383910391">zvok</translation> <translation id="8294431847097064396">Vir</translation> <translation id="8298429963694909221">Zdaj lahko obvestila iz telefona prejemate v napravi <ph name="DEVICE_TYPE" />. Če obvestila opustite v napravi <ph name="DEVICE_TYPE" />, jih opustite tudi v telefonu. Preverite, ali imate telefon v bližini ter ima vklopljeno povezavo Bluetooth in omrežje Wi-Fi.</translation> <translation id="8299319456683969623">Trenutno ste brez povezave.</translation> @@ -6394,6 +6419,7 @@ <translation id="8317671367883557781">Dodaj omrežno povezavo</translation> <translation id="8319414634934645341">Razširjena raba ključa</translation> <translation id="8320459152843401447">Vaš celotni zaslon</translation> +<translation id="8321476692217554900">obvestila</translation> <translation id="8321837372750396788">To napravo <ph name="DEVICE_TYPE" /> bo upravljala domena <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Tej strani je onemogočen dostop do mikrofona.</translation> <translation id="8323167517179506834">Vnesite URL</translation> @@ -6459,7 +6485,9 @@ <translation id="8403562727702715619">Nedavno iz storitve Google Drive</translation> <translation id="8407199357649073301">Raven beleženja:</translation> <translation id="8408068190360279472">Omrežje <ph name="NETWORK_TYPE" />, vzpostavljanje povezave</translation> +<translation id="8409413588194360210">rutine za obravnavo plačil</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Dovoljeno: <ph name="PERMISSION" /> in še <ph name="COUNT" /></translation> <translation id="8413385045638830869">Najprej vprašaj (priporočeno)</translation> <translation id="8417548266957501132">Geslo starša</translation> <translation id="8418445294933751433">&Prikaži kot zavihek</translation> @@ -6655,6 +6683,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ali <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Barvna temperature pri Nočni svetlobi</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> želi: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> in drugo</translation> +<translation id="865032292777205197">tipala gibanja</translation> <translation id="8650543407998814195">Čeprav ne morete več dostopati do starega profila, ga lahko še vedno odstranite.</translation> <translation id="8651585100578802546">Vsili ponovno nalaganje te strani</translation> <translation id="8652400352452647993">Napaka pri pakiranju razširitve</translation> @@ -6794,6 +6823,7 @@ <translation id="8785622406424941542">Pisalo</translation> <translation id="8787254343425541995">Dovoli proxyje za omrežja v skupni rabi</translation> <translation id="8791534160414513928">S prometom brskanja pošlji zahtevo »Ne sledi«</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Medtem ko je dostopna točka vklopljena, bo telefon <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Novo okno</translation> <translation id="8797459392481275117">Nikoli ne prevedi tega spletnega mesta</translation> @@ -6833,6 +6863,7 @@ <translation id="8823559166155093873">Blokiraj piškotke</translation> <translation id="8823704566850948458">Predlagaj geslo …</translation> <translation id="8824701697284169214">Dodaj str&an ...</translation> +<translation id="8827125715368568315">Blokirano: <ph name="PERMISSION" /> in še <ph name="COUNT" /></translation> <translation id="8827289157496676362">Pripenjanje razširitve</translation> <translation id="8827752199525959199">Več dejanj, geslo za uporabniško ime <ph name="USERNAME" /> v domeni <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Nobenemu spletnemu mestu ne dovoli odkrivanja naprav Bluetooth v bližini</translation> @@ -6933,6 +6964,7 @@ <translation id="8932894639908691771">Možnosti stikalnega dostopa</translation> <translation id="8933960630081805351">&Pokaži v Finderju</translation> <translation id="8934732568177537184">Naprej</translation> +<translation id="8938306522009698937">rutine za obravnavo</translation> <translation id="8938800817013097409">Naprava USB-C (vrata desno zadaj)</translation> <translation id="8940081510938872932">V računalniku se trenutno izvaja preveč procesov. Poskusite znova pozneje.</translation> <translation id="8941173171815156065">Preklic dovoljenja »<ph name="PERMISSION" />«</translation> @@ -7237,6 +7269,7 @@ <translation id="987264212798334818">Splošno</translation> <translation id="987897973846887088">Na voljo ni nobenih slik</translation> <translation id="988978206646512040">Prazno geslo ni dovoljeno</translation> +<translation id="991413375315957741">tipalo gibanja ali svetlobe</translation> <translation id="992032470292211616">Razširitve, programi in teme lahko škodujejo napravi. Ali ste prepričani, da želite nadaljevati?</translation> <translation id="992256792861109788">Rožnata</translation> <translation id="992592832486024913">Onemogoči ChromeVox (izgovorjava povratnih informacij)</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index d7da7816..757e31a 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Parazgjedhja</translation> <translation id="1252987234827889034">Ndodhi një gabim i profilit</translation> <translation id="1254593899333212300">Lidhje direkte e internetit</translation> +<translation id="1257553931232494454">nivelet e zmadhimit</translation> <translation id="1259152067760398571">Kontrolli i sigurisë u ekzekutua dje</translation> <translation id="1260451001046713751">Lejo gjithmonë dritaret kërcyese nga <ph name="HOST" /></translation> <translation id="1261380933454402672">Modest</translation> @@ -668,6 +669,7 @@ <translation id="1729533290416704613">Gjithashtu kontrollon se cila faqe shfaqet kur kërkon nga Omnibox.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Për të hequr aplikacionet, shko te Cilësimet > Dyqani i Google Play > Menaxho preferencat e Android > Aplikacionet ose "Menaxheri i aplikacioneve". Më pas trokit tek aplikacioni që dëshiron të çinstalosh (mund të jetë e nevojshme që të rrëshqasësh djathtas ose majtas për të gjetur aplikacionin). Më pas trokit te "Çinstalo" ose "Çaktivizo".<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Po dërgon kërkesën...</translation> +<translation id="1733064249834771892">fontet</translation> <translation id="1733383495376208985">Enkripto të dhënat e sinkronizuara me <ph name="BEGIN_LINK" />frazën tënde të kalimit<ph name="END_LINK" />. Kjo nuk përfshin mënyrat e pagesës dhe adresat nga Google Pay.</translation> <translation id="1734212868489994726">Blu e çelur</translation> <translation id="1734230530703461088">Ngarkimi i shtesave brenda kufirit kohor dështoi. Kontakto me administratorin tënd.</translation> @@ -755,6 +757,7 @@ <translation id="1818913467757368489">Ngarkimi i evidencës në vazhdim.</translation> <translation id="1819721979226826163">Trokit te Njoftimet e aplikacioneve > Shërbimet e Google Play.</translation> <translation id="1820028137326691631">Fut fjalëkalimin e ofruar nga administratori</translation> +<translation id="182139138257690338">shkarkimet automatike</translation> <translation id="1822140782238030981">Je tashmë një përdorues i Chrome? Identifikohu</translation> <translation id="18245044880483936">Të dhënat e rezervimit nuk do të llogariten në kuotën e hapësirës ruajtëse të "Diskut" të fëmijës tënd.</translation> <translation id="1825565032302550710">Porta duhet të jetë mes 1024 dhe 65535</translation> @@ -1195,6 +1198,7 @@ <translation id="2326931316514688470">&Ringarko aplikacionin</translation> <translation id="2327492829706409234">Aktivizo aplikacionin</translation> <translation id="2328561734797404498">Rinise pajisjen tënde për të përdorur <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">vendosja e dritareve</translation> <translation id="2329597144923131178">Identifikohu për të marrë faqeshënuesit, historikun, fjalëkalimet dhe cilësime të tjera në të gjitha pajisjet e tua.</translation> <translation id="2332131598580221120">Shiko në dyqan</translation> <translation id="2332192922827071008">Hap "Preferencat"</translation> @@ -1707,6 +1711,7 @@ <translation id="2894757982205307093">Skedë e re në grup</translation> <translation id="289644616180464099">Karta SIM është e kyçur</translation> <translation id="289695669188700754">ID-ja e çelësit: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ky cilësim i parazgjedhur do të hiqet kur të mbyllësh të gjitha dritaret "e fshehta"</translation> <translation id="2897878306272793870">Je i sigurt se dëshiron të hapësh <ph name="TAB_COUNT" /> skeda?</translation> <translation id="290105521672621980">Skedari përdor funksione që nuk mbështeten</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> nuk mund të komunikonte me këtë printer. Sigurohu që printeri të jetë i lidhur dhe provo përsëri.</translation> @@ -1796,6 +1801,7 @@ <translation id="2996286169319737844">Të dhënat janë enkriptuar me frazën tënde të kalimit. Kjo nuk përfshin mënyrat e pagesës dhe adresat nga Google Pay.</translation> <translation id="2996722619877761919">Ktheje në anën e gjatë</translation> <translation id="3000236644796679448">Sajtet mund të kërkojnë të përdorin mikrofonin tënd (rekomandohet)</translation> +<translation id="3000378525979847272">Të lejuara: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Audioja mono</translation> <translation id="3001144475369593262">Llogaritë e fëmijëve</translation> <translation id="3003144360685731741">Rrjetet e preferuara</translation> @@ -2055,6 +2061,7 @@ <translation id="3305661444342691068">Hap PDF-në në pamjen paraprake</translation> <translation id="3308116878371095290">Kjo faqe u parandalua që të vendosë kuki.</translation> <translation id="3308134619352333507">Fshihe butonin</translation> +<translation id="3308738399950580893">reklamat</translation> <translation id="3308852433423051161">Po ngarkon "Asistentin e Google"...</translation> <translation id="3309330461362844500">ID-ja e profilit të certifikatës</translation> <translation id="3311445899360743395">Të dhënat e lidhura me këtë aplikacion mund të hiqen nga kjo pajisje.</translation> @@ -2115,6 +2122,7 @@ <translation id="3388788256054548012">Ky skedar është i enkriptuar. Kërkoji zotëruesit ta deshifrojë.</translation> <translation id="3390013585654699824">Detajet e aplikacioneve</translation> <translation id="3390741581549395454">Aplikacionet dhe skedarët e Linux janë rezervuar me sukses. Përditësimi do të fillojë së shpejti.</translation> +<translation id="3391482648489541560">modifikimi i skedarëve</translation> <translation id="339178315942519818">Shiko njoftimet nga aplikacionet e tua të bisedës në pajisjen tënde <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Duke klikuar butonin "Prano dhe vazhdo", bie njëherësh dakord me përpunimin e përshkruar më lart për këto shërbime të Google.</translation> <translation id="3399432415385675819">Njoftimet do të çaktivizohen</translation> @@ -2891,6 +2899,7 @@ <translation id="425573743389990240">Norma e shkarkimit të baterisë në vat (vlera negative do të thotë se bateria po ngarkohet)</translation> <translation id="4256316378292851214">Ruaje videon si...</translation> <translation id="4258348331913189841">Sistemet e skedarëve</translation> +<translation id="4259381619085088639">prania jote</translation> <translation id="4259388776256904261">Kjo mund të zgjasë pak</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> mund të jetë i rrezikshëm. Të dërgohet te "Mbrojtja e përparuar" e Google për skanim? Shtyp Shift+F6 për të kaluar në cikël në zonën e shiritit të shkarkimeve.</translation> <translation id="4263223596040212967">Kontrollo strukturën e tastierës dhe provo përsëri.</translation> @@ -2927,6 +2936,7 @@ <translation id="4303079906735388947">Konfiguro një kod të ri PIN për çelësin e sigurisë</translation> <translation id="4305402730127028764">Kopjo te <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikacionet duhet të shërbehen me llojin "<ph name="CONTENT_TYPE" />" të përmbajtjes</translation> +<translation id="4306812610847412719">kujtesa e fragmenteve</translation> <translation id="4307992518367153382">Bazat</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB të drejtpërdrejta)</translation> <translation id="4310139701823742692">Skedari është në formatin e gabuar. Kontrollo skedarin PPD dhe provo përsëri.</translation> @@ -3014,6 +3024,7 @@ <translation id="4412698727486357573">Qendra e ndihmës</translation> <translation id="44141919652824029">Të lejohet që "<ph name="APP_NAME" />" të marrë listën e pajisjeve të tua USB të lidhura?</translation> <translation id="4414232939543644979">Dritare e re "e fshehtë"</translation> +<translation id="4414515549596849729">kukit dhe të dhënat e faqes</translation> <translation id="4415213869328311284">Je gati për të filluar përdorimin e pajisjes sate <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Nuk u gjet asnjë pajisje. Hap një artikull të qendrës së ndihmës në një skedë të re.</translation> <translation id="4415276339145661267">Menaxho "Llogarinë tënde të Google"</translation> @@ -3085,6 +3096,7 @@ <translation id="4493468155686877504">E rekomanduar (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Mos e shfaq në këtë faqe</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> u ndërpre aksidentalisht</translation> +<translation id="4500587658229086076">përmbajtja e pasigurt</translation> <translation id="450099669180426158">Ikona e pikëçuditëses</translation> <translation id="4501530680793980440">Konfirmo heqjen</translation> <translation id="4502423230170890588">Hiq nga kjo pajisje</translation> @@ -3125,6 +3137,7 @@ <translation id="4538684596480161368">Blloko gjithmonë përbërësit shtesë të pakufizuar në <ph name="HOST" /></translation> <translation id="4538792345715658285">U instalua nga politika e ndërmarrjes.</translation> <translation id="4541662893742891060">Nuk mund të lidhet me këtë profil. Për mbështetje teknike, kontakto me operatorin tënd celular.</translation> +<translation id="4541810033354695636">realiteti i zgjeruar</translation> <translation id="4542520061254486227">Lexo të dhënat e tua në <ph name="WEBSITE_1" /> dhe <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Menaxheri i certifikatave</translation> <translation id="4544174279960331769">Avatari i parazgjedhur blu</translation> @@ -3597,6 +3610,7 @@ <translation id="5112577000029535889">&Mjetet e zhvilluesit</translation> <translation id="5113739826273394829">Nëse klikon këtë ikonë, do ta kyçësh manualisht këtë <ph name="DEVICE_TYPE" />. Herën tjetër, do të nevojitet të shkruash fjalëkalimin për të hyrë.</translation> <translation id="51143538739122961">Fut kodin e sigurisë dhe preke</translation> +<translation id="5114987907971894280">realiteti virtual</translation> <translation id="5115309401544567011">Lidhe pajisjen tënde <ph name="DEVICE_TYPE" /> me një burim energjie.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Ru&aje audion si...</translation> @@ -3896,6 +3910,7 @@ <translation id="5464632865477611176">Ekzekutoje këtë herë</translation> <translation id="5464660706533281090">Ky cilësim nuk mund të ndryshohet nga një përdorues fëmijë.</translation> <translation id="5466374726908360271">Ngj&it dhe kërko për “<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">Të bllokuara: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Sajtet mund të kërkojnë të luajnë përmbajtje të mbrojtura (rekomandohet)</translation> <translation id="5468173180030470402">Po kërkon për ndarjet e skedarëve</translation> <translation id="5469852975082458401">Mund t'i navigosh faqet me një kursor teksti. Shtyp F7 për ta çaktivizuar.</translation> @@ -4186,6 +4201,7 @@ <translation id="5794786537412027208">Dil nga të gjitha aplikacionet e Chrome</translation> <translation id="5797070761912323120">Google mund ta përdorë historikun tënd për të personalizuar "Kërko me Google", reklamat dhe shërbime të tjera të Google</translation> <translation id="5798301976526354562">Madhësia e tekstit (zbatohet gjithashtu edhe për "Titrat në çast")</translation> +<translation id="579907812742603813">përmbajtja e mbrojtur</translation> <translation id="579915268381781820">Çelësi yt i sigurisë është hequr.</translation> <translation id="5799508265798272974">Pajisja virtuale Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Skedari i destinacionit u shkurtua ose u hoq që nga shkarkimi i fundit.</translation> @@ -4259,6 +4275,7 @@ <translation id="5877064549588274448">Kanali ndryshoi. Rinise pajisjen tënde për të zbatuar ndryshimet.</translation> <translation id="5877584842898320529">Printeri i zgjedhur nuk ofrohet ose nuk është instaluar si duhet. <ph name="BR" /> Kontrollo printerin ose provo të zgjedhësh një printer tjetër.</translation> <translation id="5882919346125742463">Rrjetet e njohura</translation> +<translation id="5883356647197510494">Të bllokuara automatikisht: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Kjo skedë është e lidhur me një pajisje me USB.</translation> <translation id="5886009770935151472">Gishti 1</translation> <translation id="5889282057229379085">Numri maksimal i autoriteteve ndërmjetëse të certifikatave: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4758,6 +4775,7 @@ <translation id="6460601847208524483">Gjej tjetrin</translation> <translation id="6461170143930046705">Po kërkon për rrjete...</translation> <translation id="6463795194797719782">&Redakto</translation> +<translation id="6464094930452079790">imazhet</translation> <translation id="6464825623202322042">Kjo pajisje</translation> <translation id="6465841119675156448">Pa internet</translation> <translation id="6466988389784393586">&Hapi të gjithë faqeshënuesit</translation> @@ -4781,6 +4799,7 @@ <translation id="6491376743066338510">Autorizimi dështoi</translation> <translation id="6494327278868541139">Shfaq detajet e mbrojtjes së përforcuar</translation> <translation id="6494445798847293442">Nuk është një autoritet certifikimi</translation> +<translation id="6494750904506170417">dritaret kërcyese dhe ridrejtimet</translation> <translation id="6494974875566443634">Personalizimi</translation> <translation id="6495925982925244349">Rrjeti <ph name="NETWORK_INDEX" /> nga <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, fuqia e sinjalit <ph name="SIGNAL_STRENGTH" />%, menaxhuar nga administratori yt, detaje</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Këto të dhëna kanë përmbajtje delikate ose të rrezikshme}=1{Ky skedar ka përmbajtje delikate ose të rrezikshme}other{Këta skedarë kanë përmbajtje delikate ose të rrezikshme}}</translation> @@ -4921,6 +4940,7 @@ <translation id="6657585470893396449">Fjalëkalimi</translation> <translation id="6659213950629089752">Kjo faqe u zmadhua me shtesën "<ph name="NAME" />"</translation> <translation id="6659594942844771486">Skeda</translation> +<translation id="6660413144148052430">vendndodhja</translation> <translation id="666099631117081440">Serverët e printimit</translation> <translation id="6663190258859265334">Kryej Powerwash të pajisjes sate <ph name="DEVICE_TYPE" /> dhe kthehu te versioni i mëparshëm.</translation> <translation id="6664237456442406323">Fatkeqësisht, kompjuteri yt është konfiguruar me një ID hardueri të keqformuar. Kjo parandalon përditësimin e sistemit operaitv Chrome me rregullimet më të fundit të sigurisë dhe kompjuteri yt <ph name="BEGIN_BOLD" />mund të jetë i cenueshëm ndaj sulmeve keqdashëse<ph name="END_BOLD" />.</translation> @@ -4975,6 +4995,7 @@ <translation id="672609503628871915">Shiko ç'të reja ka</translation> <translation id="67269783048918309">Dërgo të dhënat e përdorimit dhe të diagnostikimit. Aktualisht kjo pajisje po dërgon automatikisht te Google të dhënat e diagnostikimit dhe të përdorimit të pajisjes dhe të aplikacioneve. Këto nuk do të përdoren për të identifikuar fëmijën tënd dhe do të ndihmojnë për qëndrueshmërinë e sistemit dhe të aplikacioneve dhe për përmirësime të tjera. Disa të dhëna të përmbledhura do të ndihmojnë po ashtu aplikacionet dhe partnerët e Google, si p.sh. zhvilluesit e Android. Ky <ph name="BEGIN_LINK1" />cilësim<ph name="END_LINK1" /> zbatohet nga zotëruesi. Nëse cilësimi i "Aktivitetit shtesë të uebit dhe të aplikacioneve" është i aktivizuar për fëmijën tënd, këto të dhëna mund të ruhen në "Llogarinë e Google" të fëmijës. <ph name="BEGIN_LINK2" />Mëso më shumë<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">E lidhur, bateria <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Certifikatat nuk janë ngarkuar</translation> <translation id="6732900235521116609">Shkurtorja nuk mund të hiqet</translation> <translation id="6734468588183300211">Në modalitetin "i fshehtë", sajtet nuk mund t'i përdorin kukit e tua për të parë aktivitetin e shfletimit nëpër sajte të ndryshme, për shembull, për të personalizuar reklamat. Veçoritë në disa sajte mund të ndalojnë së funksionuari.</translation> @@ -5049,6 +5070,7 @@ <translation id="6817174620439930047">Pyet kur një faqe kërkon të përdorë mesazhe ekskluzive të sistemit për t'u qasur në pajisjet MIDI (rekomandohet)</translation> <translation id="6818198425579322765">Faqja "Gjuha në të cilën do të përkthehet"</translation> <translation id="6818802132960437751">Mbrojtje e integruar kundër viruseve</translation> +<translation id="6820143000046097424">portat seriale</translation> <translation id="682123305478866682">Transmeto desktopin</translation> <translation id="6823174134746916417">"Trokit për të klikuar" në bllokun me prekje</translation> <translation id="6824564591481349393">Kopjo adresën e &mail-it</translation> @@ -5482,6 +5504,7 @@ <translation id="730515362922783851">Shkëmbe të dhëna me çdo pajisje në rrjetin lokal ose në internet</translation> <translation id="7306521477691455105">Hap "Cilësimet" për të lidhur <ph name="USB_DEVICE_NAME" /> me <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Në pauzë</translation> +<translation id="7308436126008021607">sinkronizimi në sfond</translation> <translation id="7309257895202129721">Shfaq &kontrollet</translation> <translation id="7310598146671372464">Nuk mund të identifikohej. Serveri nuk i mbështet llojet e përcaktuara të enkriptimit Kerberos. Kontakto me administratorin tënd.</translation> <translation id="7320213904474460808">Kalo si parazgjedhje te rrjeti</translation> @@ -5623,6 +5646,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Kërkohet kthimi i menjëhershëm}other{Ktheje pajisjen <ph name="DEVICE_TYPE" /> brenda {NUM_DAYS} ditësh}}</translation> <translation id="7475671414023905704">URL-ja e Netscape për humbjen e fjalëkalimit</translation> <translation id="7476454130948140105">Niveli i baterisë është shumë i ulët për përditësimin (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Të bllokuara automatikisht: <ph name="PERMISSION" /> dhe <ph name="COUNT" /> të tjera</translation> <translation id="7477793887173910789">Kontrollo muzikën, videot e tua etj.</translation> <translation id="7478485216301680444">Aplikacioni kioskë nuk mund të instalohej.</translation> <translation id="7478623944308207463">Aplikacionet dhe cilësimet e tua do të sinkronizohen nëpër të gjitha pajisjet me sistemin operativ Chrome ku je identifikuar me "Llogarinë tënde të Google". Për opsionet e sinkronizimit të shfletuesit, shko te <ph name="LINK_BEGIN" />cilësimet e Chrome<ph name="LINK_END" />.</translation> @@ -6365,6 +6389,7 @@ <translation id="8288032458496410887">Çinstalo <ph name="APP" />...</translation> <translation id="8289128870594824098">Madhësia e diskut</translation> <translation id="8293206222192510085">Shto një faqeshënues</translation> +<translation id="829335040383910391">tingulli</translation> <translation id="8294431847097064396">Burimi</translation> <translation id="8298429963694909221">Tani mund të marrësh njoftime nga telefoni yt në pajisjen tënde <ph name="DEVICE_TYPE" /> Heqja e njoftimeve në pajisjen tënde <ph name="DEVICE_TYPE" /> do t'i heqë ato gjithashtu edhe nga telefoni yt. Sigurohu që telefoni yt të jetë pranë dhe ta ketë të aktivizuar Bluetooth-in dhe Wi-Fi.</translation> <translation id="8299319456683969623">Aktualisht je jashtë linje.</translation> @@ -6383,6 +6408,7 @@ <translation id="8317671367883557781">Shto lidhje rrjeti</translation> <translation id="8319414634934645341">Përdorimi i zgjeruar i çelësit</translation> <translation id="8320459152843401447">I gjithë ekrani</translation> +<translation id="8321476692217554900">njoftimet</translation> <translation id="8321837372750396788">Kjo pajisje <ph name="DEVICE_TYPE" /> do të menaxhohet nga <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Për këtë faqe është bllokuar qasja te mikrofoni.</translation> <translation id="8323167517179506834">Shkruaj URL-në</translation> @@ -6448,7 +6474,9 @@ <translation id="8403562727702715619">Së fundi nga "Disku i Google"</translation> <translation id="8407199357649073301">Niveli i identifikimit:</translation> <translation id="8408068190360279472">Rrjeti <ph name="NETWORK_TYPE" />, po lidhet</translation> +<translation id="8409413588194360210">përpunuesit e pagesave</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Të lejuara: <ph name="PERMISSION" /> dhe <ph name="COUNT" /> të tjera</translation> <translation id="8413385045638830869">Pyet në fillim (rekomandohet)</translation> <translation id="8417548266957501132">Fjalëkalimi i prindit</translation> <translation id="8418445294933751433">&Shfaq si skedë</translation> @@ -6644,6 +6672,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ose <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Temperatura e ngjyrës së "Dritës së natës"</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> kërkon që: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> dhe më shumë</translation> +<translation id="865032292777205197">sensorët e lëvizjes</translation> <translation id="8650543407998814195">Megjithëse nuk mund të qasesh më te profili yt i vjetër, mund ta heqësh atë përsëri.</translation> <translation id="8651585100578802546">Ringarkoje me detyrim këtë faqe</translation> <translation id="8652400352452647993">Gabim i shtesës së paketës</translation> @@ -6780,6 +6809,7 @@ <translation id="8785622406424941542">Stilolapsi</translation> <translation id="8787254343425541995">Lejo përfaqësues për rrjete të ndara</translation> <translation id="8791534160414513928">Dërgo një kërkesë "Mos gjurmo" me trafikun e shfletimit</translation> +<translation id="8792626944327216835">mikrofoni</translation> <translation id="879413103056696865">Kur zona e qasjes për internet është aktive, telefoni yt <ph name="PHONE_NAME" /> do të:</translation> <translation id="8795916974678578410">Dritare e re</translation> <translation id="8797459392481275117">Asnjëherë mos e përkthe këtë sajt</translation> @@ -6819,6 +6849,7 @@ <translation id="8823559166155093873">Blloko kukit</translation> <translation id="8823704566850948458">Sugjero fjalëkalim...</translation> <translation id="8824701697284169214">Shto fa&qen...</translation> +<translation id="8827125715368568315">Të bllokuara: <ph name="PERMISSION" /> dhe <ph name="COUNT" /> të tjera</translation> <translation id="8827289157496676362">Gozhdo shtesën</translation> <translation id="8827752199525959199">Veprime të tjera, fjalëkalimi për <ph name="USERNAME" /> në <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Mos lejo asnjë sajt të zbulojë pajisjet Bluetooth në afërsi</translation> @@ -6919,6 +6950,7 @@ <translation id="8932894639908691771">Opsionet e "Qasjes me çelës"</translation> <translation id="8933960630081805351">&Shfaqe te "Gjetësi"</translation> <translation id="8934732568177537184">Vazhdo</translation> +<translation id="8938306522009698937">përpunuesit</translation> <translation id="8938800817013097409">Pajisja USB-C (porta djathtas, prapa)</translation> <translation id="8940081510938872932">Kompjuteri yt po bën shumë gjëra për momentin. Provo përsëri më vonë.</translation> <translation id="8941173171815156065">Revoko lejen "<ph name="PERMISSION" />"</translation> @@ -7223,6 +7255,7 @@ <translation id="987264212798334818">Të përgjithshme</translation> <translation id="987897973846887088">Nuk ka imazhe në dispozicion</translation> <translation id="988978206646512040">Lënia bosh e frazës së kalimit nuk lejohet</translation> +<translation id="991413375315957741">sensorët e lëvizjes ose të dritës</translation> <translation id="992032470292211616">Shtesat, aplikacionet dhe temat mund të dëmtojnë pajisjen tënde. Je i sigurt se dëshiron të vazhdosh?</translation> <translation id="992256792861109788">Rozë</translation> <translation id="992592832486024913">Çaktivizo ChromeVox (koment me të folur)</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 70d7fdf..f2f1ae9e 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Podrazumevane</translation> <translation id="1252987234827889034">Došlo je do greške na profilu</translation> <translation id="1254593899333212300">Direktna veza sa internetom</translation> +<translation id="1257553931232494454">nivoi zumiranja</translation> <translation id="1259152067760398571">Bezbednosna provera je pokrenuta juče</translation> <translation id="1260451001046713751">Uvek dozvoli iskačuće prozore i preusmeravanja sa <ph name="HOST" /></translation> <translation id="1261380933454402672">Umereno</translation> @@ -670,6 +671,7 @@ <translation id="1729533290416704613">Kontroliše i stranicu koja se prikazuje kada pretražujete iz omniboksa.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Da biste uklonili aplikacije, idite u odeljak Podešavanja > Google Play prodavnica > Upravljajte Android podešavanjima > Aplikacije ili Menadžer aplikacija. Dodirnite aplikaciju koju želite da deinstalirate (možda ćete morati da prevučete nadesno ili nalevo da biste pronašli aplikaciju). Onda dodirnite Deinstaliraj ili Onemogući.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Šalje se zahtev...</translation> +<translation id="1733064249834771892">fontovi</translation> <translation id="1733383495376208985">Šifrujte sinhronizovane podatke pomoću sopstvene <ph name="BEGIN_LINK" />pristupne fraze za sinhronizaciju<ph name="END_LINK" />. To ne obuhvata načine plaćanja i adrese iz Google Pay-a.</translation> <translation id="1734212868489994726">Svetloplava</translation> <translation id="1734230530703461088">Nije uspelo učitavanje dodataka u okviru vremenskog ograničenja. Obratite se administratoru.</translation> @@ -757,6 +759,7 @@ <translation id="1818913467757368489">Otpremanje evidencije je u toku.</translation> <translation id="1819721979226826163">Dodirnite Obaveštenja o aplikaciji > Google Play usluge.</translation> <translation id="1820028137326691631">Unesite lozinku koju ste dobili od administratora</translation> +<translation id="182139138257690338">automatska preuzimanja</translation> <translation id="1822140782238030981">Već koristite Chrome? Prijavite se</translation> <translation id="18245044880483936">Rezervne kopije podataka se ne računaju u odnosu na kvotu memorijskog prostora deteta na Disku.</translation> <translation id="1825565032302550710">Port mora da bude između 1024 i 65535</translation> @@ -1197,6 +1200,7 @@ <translation id="2326931316514688470">&Ponovo učitaj aplikaciju</translation> <translation id="2327492829706409234">Omogući aplikaciju</translation> <translation id="2328561734797404498">Restartujte uređaj da biste koristili aplikaciju <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">postavljanje prozora</translation> <translation id="2329597144923131178">Prijavite se da bi vam obeleživači, istorija, lozinke i druga podešavanja bili dostupni na svim uređajima.</translation> <translation id="2332131598580221120">Prikaži u prodavnici</translation> <translation id="2332192922827071008">Otvori Podešavanja</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">Nova kartica u grupi</translation> <translation id="289644616180464099">SIM kartica je zaključana</translation> <translation id="289695669188700754">ID ključa: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ovo prilagođeno podešavanje se uklanja kada zatvorite sve prozore bez arhiviranja</translation> <translation id="2897878306272793870">Želite li stvarno da otvorite <ph name="TAB_COUNT" /> kartica?</translation> <translation id="290105521672621980">Datoteka koristi funkcije koje nisu podržane</translation> <translation id="2902127500170292085">Komunikacija dodatka <ph name="EXTENSION_NAME" /> sa ovim štampačem nije uspela. Proverite da li je štampač priključen i pokušajte ponovo.</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">Podaci se šifruju pomoću pristupne fraze za sinhronizaciju. To ne obuhvata načine plaćanja i adrese iz Google Pay-a.</translation> <translation id="2996722619877761919">Okreni po dužoj ivici</translation> <translation id="3000236644796679448">Sajtovi mogu da traže da koriste mikrofon (preporučuje se)</translation> +<translation id="3000378525979847272">Dozvoljeno je: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Mono zvuk</translation> <translation id="3001144475369593262">Dečji nalozi</translation> <translation id="3003144360685731741">Željene mreže</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">Otvori PDF u pregledu</translation> <translation id="3308116878371095290">Ovoj stranici je zabranjeno da postavlja kolačiće.</translation> <translation id="3308134619352333507">Sakrij dugme</translation> +<translation id="3308738399950580893">oglasi</translation> <translation id="3308852433423051161">Google pomoćnik se učitava...</translation> <translation id="3309330461362844500">ID profila sertifikata</translation> <translation id="3311445899360743395">Podaci povezani sa ovom aplikacijom će se možda ukloniti sa ovog uređaja.</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">Ova datoteka je šifrovana. Zatražite od vlasnika da je dešifruje.</translation> <translation id="3390013585654699824">Detalji o aplikaciji</translation> <translation id="3390741581549395454">Napravljena je rezervna kopija Linux aplikacija i datoteka. Nadogradnja će uskoro početi.</translation> +<translation id="3391482648489541560">izmena datoteka</translation> <translation id="339178315942519818">Pregledajte obaveštenja iz aplikacija za ćaskanje na uređaju <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Ako kliknete na dugme „Prihvati i nastavi“, prihvatate gorenavedenu obradu za ove Google usluge.</translation> <translation id="3399432415385675819">Obaveštenja će biti onemogućena</translation> @@ -2893,6 +2901,7 @@ <translation id="425573743389990240">Nivo potrošnje baterije u vatima (negativna vrednost znači da se baterija puni)</translation> <translation id="4256316378292851214">Sa&čuvaj video snimak kao...</translation> <translation id="4258348331913189841">Sistemi datoteka</translation> +<translation id="4259381619085088639">vaše prisustvo</translation> <translation id="4259388776256904261">Ovo može da potraje</translation> <translation id="4260182282978351200">Datoteka <ph name="FILE_NAME" /> je možda opasna. Želite li da je pošaljete u Google naprednu zaštitu radi skeniranja? Pritiskajte Shift + F6 da biste prešli na oblast trake sa preuzimanjima.</translation> <translation id="4263223596040212967">Proverite raspored tastature i probajte ponovo.</translation> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">Podesite novi PIN za bezbednosni ključ</translation> <translation id="4305402730127028764">Kopiraj na: <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Aplikacije moraju da se prikazuju sa tipom sadržaja „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">privremena memorija</translation> <translation id="4307992518367153382">Osnovna</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB uživo)</translation> <translation id="4310139701823742692">Format datoteke je pogrešan. Proverite PPD datoteku i probajte ponovo.</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">Centar za pomoć</translation> <translation id="44141919652824029">Želite li da dozvolite da „<ph name="APP_NAME" />“ dobije listu priključenih USB uređaja?</translation> <translation id="4414232939543644979">Novi &prozor bez arhiviranja</translation> +<translation id="4414515549596849729">kolačići i podaci o sajtovima</translation> <translation id="4415213869328311284">Možete da počnete sa korišćenjem uređaja <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Nije pronađen nijedan uređaj. Otvorite članak centra za pomoć na novoj kartici.</translation> <translation id="4415276339145661267">Upravljajte Google nalogom</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">Preporučeno (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ne prikazuj na ovoj stranici</translation> <translation id="4500114933761911433">Dodatna komponenta <ph name="PLUGIN_NAME" /> je otkazala</translation> +<translation id="4500587658229086076">nebezbedan sadržaj</translation> <translation id="450099669180426158">Ikona uzvičnika</translation> <translation id="4501530680793980440">Potvrda uklanjanja</translation> <translation id="4502423230170890588">Ukloni sa ovog uređaja</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368">Uvek blokiraj dodatne komponente koje su izvan zaštićenog okruženja na <ph name="HOST" /></translation> <translation id="4538792345715658285">Instalirano je prema smernicama za preduzeće.</translation> <translation id="4541662893742891060">Povezivanje sa ovim profilom nije uspelo. Obratite se mobilnom operateru radi tehničke podrške.</translation> +<translation id="4541810033354695636">proširena realnost</translation> <translation id="4542520061254486227">Čitanje vaših podataka na <ph name="WEBSITE_1" /> i <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Menadžer sertifikata</translation> <translation id="4544174279960331769">Podrazumevani plavi avatar</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">&Alatke za programere</translation> <translation id="5113739826273394829">Ako kliknete na ovu ikonu, ručno ćete zaključati ovaj <ph name="DEVICE_TYPE" />. Sledeći put ćete morati da unesete lozinku da biste pristupili.</translation> <translation id="51143538739122961">Umetnite bezbednosni ključ i dodirnite ga</translation> +<translation id="5114987907971894280">virtuelna realnost</translation> <translation id="5115309401544567011">Uključite <ph name="DEVICE_TYPE" /> u izvor napajanja.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Sa&čuvaj audio snimak kao...</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">Pokreni ovaj put</translation> <translation id="5464660706533281090">Dete ne može da promeni ovo podešavanje.</translation> <translation id="5466374726908360271">Nalepi i pretraži „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Blokirano je: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Sajtovi mogu da traže da puštaju zaštićen sadržaj (preporučuje se)</translation> <translation id="5468173180030470402">Traže se deljenja datoteka</translation> <translation id="5469852975082458401">Možete da se krećete stranicama pomoću kursora za tekst. Pritisnite F7 da biste to isključili.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Izađi iz svih Chrome aplikacija</translation> <translation id="5797070761912323120">Google može da koristi istoriju za personalizaciju Pretrage, oglasa i drugih Google usluga</translation> <translation id="5798301976526354562">Veličina teksta (primenjuje se i na titl uživo)</translation> +<translation id="579907812742603813">zaštićeni sadržaj</translation> <translation id="579915268381781820">Uklonili ste bezbednosni ključ.</translation> <translation id="5799508265798272974">Linux virtuelna mašina: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Odredišna datoteka je skraćena ili uklonjena od poslednjeg preuzimanja.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Kanal je promenjen. Pokrenite ponovo uređaj da biste primenili promene.</translation> <translation id="5877584842898320529">Izabrani štampač nije dostupan ili nije pravilno instaliran. <ph name="BR" /> Proverite štampač ili izaberite neki drugi.</translation> <translation id="5882919346125742463">Poznate mreže</translation> +<translation id="5883356647197510494">Automatski je blokirano: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Ova kartica je povezana sa USB uređajem.</translation> <translation id="5886009770935151472">Prst 1</translation> <translation id="5889282057229379085">Najveći broj posredničkih CA: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Pronađi sledeće</translation> <translation id="6461170143930046705">Traže se mreže...</translation> <translation id="6463795194797719782">&Izmeni</translation> +<translation id="6464094930452079790">slike</translation> <translation id="6464825623202322042">Ovaj uređaj</translation> <translation id="6465841119675156448">Bez interneta</translation> <translation id="6466988389784393586">&Otvori sve obeleživače</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Provera ovlašćenja nije uspela</translation> <translation id="6494327278868541139">Prikaži detalje o naprednoj zaštiti</translation> <translation id="6494445798847293442">Nije autoritet za izdavanje sertifikata</translation> +<translation id="6494750904506170417">iskačući prozori i preusmeravanja</translation> <translation id="6494974875566443634">Prilagođavanje</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. mreža od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, jačina signala <ph name="SIGNAL_STRENGTH" />%, upravlja administrator, detalji</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Ovi podaci sadrže osetljiv ili opasan sadržaj}=1{Ova datoteka sadrži osetljiv ili opasan sadržaj}one{Ove datoteke sadrže osetljiv ili opasan sadržaj}few{Ove datoteke sadrže osetljiv ili opasan sadržaj}other{Ove datoteke sadrže osetljiv ili opasan sadržaj}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Lozinka</translation> <translation id="6659213950629089752">Ovu stranicu je zumirao dodatak „<ph name="NAME" />“</translation> <translation id="6659594942844771486">Kartica</translation> +<translation id="6660413144148052430">lokacija</translation> <translation id="666099631117081440">Serveri za štampanje</translation> <translation id="6663190258859265334">Obavite Powerwash uređaja <ph name="DEVICE_TYPE" /> i vratite se na prethodnu verziju.</translation> <translation id="6664237456442406323">Nažalost, računar je konfigurisan pomoću pogrešno napravljenog ID-a hardvera. To sprečava Chrome OS da se ažurira najnovijim bezbednosnim ispravkama i računar je <ph name="BEGIN_BOLD" />možda podložan zlonamernim napadima<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Prikaži šta je novo</translation> <translation id="67269783048918309">Šaljite podatke o korišćenju i dijagnostičke podatke. Ovaj uređaj trenutno automatski šalje podatke o dijagnostici, uređaju i korišćenju aplikacija Google-u. Te informacije se neće koristiti za identifikaciju deteta i pomoći će u održavanju stabilnosti sistema i aplikacije i drugim podešavanjima. Neki objedinjeni podaci će takođe pomoći Google aplikacijama i partnerima, poput Android programera. To <ph name="BEGIN_LINK1" />podešavanje<ph name="END_LINK1" /> primenjuje vlasnik. Ako za dete uključite podešavanje dodatne aktivnosti na vebu i u aplikacijama, ti podaci će se možda čuvati na Google nalogu deteta. <ph name="BEGIN_LINK2" />Saznajte više<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Povezano, nivo baterije je <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Sertifikati nisu otpremljeni</translation> <translation id="6732900235521116609">Ne možemo da uklonimo prečicu</translation> <translation id="6734468588183300211">Kada ste u režimu bez arhiviranja, sajtovi ne mogu da koriste kolačiće da bi videli vaše aktivnosti pregledanja na različitim sajtovima, na primer, za personalizaciju oglasa. Funkcije na nekim sajtovima mogu da prestanu sa radom.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Pitaj kada sajt želi da koristi ekskluzivne poruke sistema za pristup MIDI uređajima (preporučeno)</translation> <translation id="6818198425579322765">Jezik stranice sa kog želite da prevodite</translation> <translation id="6818802132960437751">Ugrađena zaštita od virusa</translation> +<translation id="6820143000046097424">serijski portovi</translation> <translation id="682123305478866682">Prebacite radnu površinu</translation> <translation id="6823174134746916417">Dodirni za klik na tačpedu</translation> <translation id="6824564591481349393">Kopiraj adresu &e-pošte</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Razmena podataka sa bilo kojim uređajem na lokalnoj mreži ili internetu</translation> <translation id="7306521477691455105">Otvorite Podešavanja da biste povezali <ph name="USB_DEVICE_NAME" /> sa <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Pauzirano</translation> +<translation id="7308436126008021607">sinhronizacija u pozadini</translation> <translation id="7309257895202129721">Prikaži &kontrole</translation> <translation id="7310598146671372464">Prijavljivanje nije uspelo. Server ne podržava navedene Kerberos tipove šifrovanja. Kontaktirajte administratora.</translation> <translation id="7320213904474460808">Postavi kao podrazumevanu mrežu</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Treba odmah da vratite}one{Vratite <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}few{Vratite <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}other{Vratite <ph name="DEVICE_TYPE" /> u roku od {NUM_DAYS} dana}}</translation> <translation id="7475671414023905704">Netscape URL adresa za izgubljenu lozinku</translation> <translation id="7476454130948140105">Nivo napunjenosti baterije je prenizak za ažuriranje (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Automatski je blokirano: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="7477793887173910789">Kontrolišite muziku, video snimke i drugo</translation> <translation id="7478485216301680444">Nije moguće instalirati kiosk aplikaciju.</translation> <translation id="7478623944308207463">Aplikacije i podešavanja će se sinhronizovati na svim Chrome OS uređajima na kojima ste prijavljeni pomoću svog Google naloga. Opcije sinhronizacije pregledača pronađite u <ph name="LINK_BEGIN" />podešavanjima Chrome-a<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Deinstaliraj: <ph name="APP" />...</translation> <translation id="8289128870594824098">Veličina diska</translation> <translation id="8293206222192510085">Dodavanje obeleživača</translation> +<translation id="829335040383910391">zvuk</translation> <translation id="8294431847097064396">Izvor</translation> <translation id="8298429963694909221">Sada možete da dobijate obaveštenja sa telefona na uređaju <ph name="DEVICE_TYPE" />. Ako odbacite obaveštenja na uređaju <ph name="DEVICE_TYPE" />, odbacićete ih i na telefonu. Uverite se da je telefon u blizini i da su Bluetooth i WiFi uključeni.</translation> <translation id="8299319456683969623">Trenutno ste oflajn.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Dodaj mrežnu vezu</translation> <translation id="8319414634934645341">Upotreba proširenog ključa</translation> <translation id="8320459152843401447">Ceo ekran</translation> +<translation id="8321476692217554900">obaveštenja</translation> <translation id="8321837372750396788">Ovim <ph name="DEVICE_TYPE" /> će upravljati <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Ovoj stranici je zabranjen pristup mikrofonu.</translation> <translation id="8323167517179506834">Unesite URL</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Nedavno sa Google diska</translation> <translation id="8407199357649073301">Nivo evidencije:</translation> <translation id="8408068190360279472">Mreža <ph name="NETWORK_TYPE" />, povezuje se</translation> +<translation id="8409413588194360210">obrađivači plaćanja</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Dozvoljeno je: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="8413385045638830869">Prvo pitaj (preporučeno)</translation> <translation id="8417548266957501132">Lozinka roditelja</translation> <translation id="8418445294933751433">&Prikaži kao karticu</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> ili <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Toplina boja Noćnog svetla</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> želi da: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> i drugo</translation> +<translation id="865032292777205197">senzori za pokret</translation> <translation id="8650543407998814195">Više ne možete da pristupate starom profilu, ali možete i dalje da ga uklonite.</translation> <translation id="8651585100578802546">Prinudno ponovo učitaj ovu stranicu</translation> <translation id="8652400352452647993">Greška u vezi sa pakovanjem dodatka</translation> @@ -6788,6 +6817,7 @@ <translation id="8785622406424941542">Pisaljka</translation> <translation id="8787254343425541995">Dozvoli proksije za deljene mreže</translation> <translation id="8791534160414513928">Šalji zahtev „Ne prati“ uz saobraćaj pregledanja</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Kada je hotspot uključen, <ph name="PHONE_NAME" /> će:</translation> <translation id="8795916974678578410">Novi prozor</translation> <translation id="8797459392481275117">Nikad ne prevodi ovaj sajt</translation> @@ -6827,6 +6857,7 @@ <translation id="8823559166155093873">Blokiraj kolačiće</translation> <translation id="8823704566850948458">Predloži lozinku...</translation> <translation id="8824701697284169214">Dodaj stra&nicu...</translation> +<translation id="8827125715368568315">Blokirano je: <ph name="PERMISSION" /> i još <ph name="COUNT" /></translation> <translation id="8827289157496676362">Zakačite dodatak</translation> <translation id="8827752199525959199">Još radnji, lozinka za <ph name="USERNAME" /> na <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Ne dozvoljavaj nijednom sajtu da otkriva Bluetooth uređaje u blizini</translation> @@ -6927,6 +6958,7 @@ <translation id="8932894639908691771">Opcije pristupa pomoću prekidača</translation> <translation id="8933960630081805351">&Prikaži u Finder-u</translation> <translation id="8934732568177537184">Nastavi</translation> +<translation id="8938306522009698937">obrađivači</translation> <translation id="8938800817013097409">Uređaj sa USB priključkom tipa C (zadnji desni port)</translation> <translation id="8940081510938872932">Računar trenutno radi previše stvari. Probajte ponovo kasnije.</translation> <translation id="8941173171815156065">Opozovite dozvolu „<ph name="PERMISSION" />“</translation> @@ -7231,6 +7263,7 @@ <translation id="987264212798334818">Opšte</translation> <translation id="987897973846887088">Nema dostupnih slika</translation> <translation id="988978206646512040">Polje za pristupnu frazu ne može da bude prazno</translation> +<translation id="991413375315957741">senzori za pokret ili svetlo</translation> <translation id="992032470292211616">Dodaci, aplikacije i teme mogu da naškode uređaju. Želite li stvarno da nastavite?</translation> <translation id="992256792861109788">Ružičasta</translation> <translation id="992592832486024913">Onemogući ChromeVox (govorne povratne informacije)</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 3e543809..ab27ca8 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -235,6 +235,7 @@ <translation id="125220115284141797">Подразумеване</translation> <translation id="1252987234827889034">Дошло је до грешке на профилу</translation> <translation id="1254593899333212300">Директна веза са интернетом</translation> +<translation id="1257553931232494454">нивои зумирања</translation> <translation id="1259152067760398571">Безбедносна провера је покренута јуче</translation> <translation id="1260451001046713751">Увек дозволи искачуће прозоре и преусмеравања са <ph name="HOST" /></translation> <translation id="1261380933454402672">Умерено</translation> @@ -670,6 +671,7 @@ <translation id="1729533290416704613">Контролише и страницу која се приказује када претражујете из омнибокса.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Да бисте уклонили апликације, идите у одељак Подешавања > Google Play продавница > Управљајте Android подешавањима > Апликације или Менаџер апликација. Додирните апликацију коју желите да деинсталирате (можда ћете морати да превучете надесно или налево да бисте пронашли апликацију). Онда додирните Деинсталирај или Онемогући.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Шаље се захтев...</translation> +<translation id="1733064249834771892">фонтови</translation> <translation id="1733383495376208985">Шифрујте синхронизоване податке помоћу сопствене <ph name="BEGIN_LINK" />приступне фразе за синхронизацију<ph name="END_LINK" />. То не обухвата начине плаћања и адресе из Google Pay-а.</translation> <translation id="1734212868489994726">Светлоплава</translation> <translation id="1734230530703461088">Није успело учитавање додатака у оквиру временског ограничења. Обратите се администратору.</translation> @@ -757,6 +759,7 @@ <translation id="1818913467757368489">Отпремање евиденције је у току.</translation> <translation id="1819721979226826163">Додирните Обавештења о апликацији > Google Play услуге.</translation> <translation id="1820028137326691631">Унесите лозинку коју сте добили од администратора</translation> +<translation id="182139138257690338">аутоматска преузимања</translation> <translation id="1822140782238030981">Већ користите Chrome? Пријавите се</translation> <translation id="18245044880483936">Резервне копије података се не рачунају у односу на квоту меморијског простора детета на Диску.</translation> <translation id="1825565032302550710">Порт мора да буде између 1024 и 65535</translation> @@ -1197,6 +1200,7 @@ <translation id="2326931316514688470">&Поново учитај апликацију</translation> <translation id="2327492829706409234">Омогући апликацију</translation> <translation id="2328561734797404498">Рестартујте уређај да бисте користили апликацију <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">постављање прозора</translation> <translation id="2329597144923131178">Пријавите се да би вам обележивачи, историја, лозинке и друга подешавања били доступни на свим уређајима.</translation> <translation id="2332131598580221120">Прикажи у продавници</translation> <translation id="2332192922827071008">Отвори Подешавања</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">Нова картица у групи</translation> <translation id="289644616180464099">SIM картица је закључана</translation> <translation id="289695669188700754">ИД кључа: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Ово прилагођено подешавање се уклања када затворите све прозоре без архивирања</translation> <translation id="2897878306272793870">Желите ли стварно да отворите <ph name="TAB_COUNT" /> картицa?</translation> <translation id="290105521672621980">Датотека користи функције које нису подржане</translation> <translation id="2902127500170292085">Комуникација додатка <ph name="EXTENSION_NAME" /> са овим штампачем није успела. Проверите да ли је штампач прикључен и покушајте поново.</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">Подаци се шифрују помоћу приступне фразе за синхронизацију. То не обухвата начине плаћања и адресе из Google Pay-а.</translation> <translation id="2996722619877761919">Окрени по дужој ивици</translation> <translation id="3000236644796679448">Сајтови могу да траже да користе микрофон (препоручује се)</translation> +<translation id="3000378525979847272">Дозвољено је: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Моно звук</translation> <translation id="3001144475369593262">Дечји налози</translation> <translation id="3003144360685731741">Жељене мреже</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">Отвори PDF у прегледу</translation> <translation id="3308116878371095290">Овој страници је забрањено да поставља колачиће.</translation> <translation id="3308134619352333507">Сакриј дугме</translation> +<translation id="3308738399950580893">огласи</translation> <translation id="3308852433423051161">Google помоћник се учитава...</translation> <translation id="3309330461362844500">ИД профила сертификата</translation> <translation id="3311445899360743395">Подаци повезани са овом апликацијом ће се можда уклонити са овог уређаја.</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">Ова датотека је шифрована. Затражите од власника да је дешифрује.</translation> <translation id="3390013585654699824">Детаљи о апликацији</translation> <translation id="3390741581549395454">Направљена је резервна копија Linux апликација и датотека. Надоградња ће ускоро почети.</translation> +<translation id="3391482648489541560">измена датотека</translation> <translation id="339178315942519818">Прегледајте обавештења из апликација за ћаскање на уређају <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">Ако кликнете на дугме „Прихвати и настави“, прихватате горенаведену обраду за ове Google услуге.</translation> <translation id="3399432415385675819">Обавештења ће бити онемогућена</translation> @@ -2893,6 +2901,7 @@ <translation id="425573743389990240">Ниво потрошње батерије у ватима (негативна вредност значи да се батерија пуни)</translation> <translation id="4256316378292851214">Са&чувај видео снимак као...</translation> <translation id="4258348331913189841">Системи датотека</translation> +<translation id="4259381619085088639">ваше присуство</translation> <translation id="4259388776256904261">Ово може да потраје</translation> <translation id="4260182282978351200">Датотека <ph name="FILE_NAME" /> је можда опасна. Желите ли да је пошаљете у Google напредну заштиту ради скенирања? Притискајте Shift + F6 да бисте прешли на област траке са преузимањима.</translation> <translation id="4263223596040212967">Проверите распоред тастатуре и пробајте поново.</translation> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">Подесите нови PIN за безбедносни кључ</translation> <translation id="4305402730127028764">Копирај на: <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Апликације морају да се приказују са типом садржаја „<ph name="CONTENT_TYPE" />“</translation> +<translation id="4306812610847412719">привремена меморија</translation> <translation id="4307992518367153382">Основна</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB уживо)</translation> <translation id="4310139701823742692">Формат датотеке је погрешан. Проверите PPD датотеку и пробајте поново.</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">Центар за помоћ</translation> <translation id="44141919652824029">Желите ли да дозволите да „<ph name="APP_NAME" />“ добије листу прикључених USB уређаја?</translation> <translation id="4414232939543644979">Нови &прозор без архивирања</translation> +<translation id="4414515549596849729">колачићи и подаци о сајтовима</translation> <translation id="4415213869328311284">Можете да почнете са коришћењем уређаја <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Није пронађен ниједан уређај. Отворите чланак центра за помоћ на новој картици.</translation> <translation id="4415276339145661267">Управљајте Google налогом</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">Препоручено (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Не приказуј на овој страници</translation> <translation id="4500114933761911433">Додатна компонента <ph name="PLUGIN_NAME" /> је отказала</translation> +<translation id="4500587658229086076">небезбедан садржај</translation> <translation id="450099669180426158">Икона узвичника</translation> <translation id="4501530680793980440">Потврда уклањања</translation> <translation id="4502423230170890588">Уклони са овог уређаја</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368">Увек блокирај додатне компоненте које су изван заштићеног окружења на <ph name="HOST" /></translation> <translation id="4538792345715658285">Инсталирано је према смерницама за предузеће.</translation> <translation id="4541662893742891060">Повезивање са овим профилом није успело. Обратите се мобилном оператеру ради техничке подршке.</translation> +<translation id="4541810033354695636">проширена реалност</translation> <translation id="4542520061254486227">Читање ваших података на <ph name="WEBSITE_1" /> и <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Менаџер сертификата</translation> <translation id="4544174279960331769">Подразумевани плави аватар</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">&Алатке за програмере</translation> <translation id="5113739826273394829">Ако кликнете на ову икону, ручно ћете закључати овај <ph name="DEVICE_TYPE" />. Следећи пут ћете морати да унесете лозинку да бисте приступили.</translation> <translation id="51143538739122961">Уметните безбедносни кључ и додирните га</translation> +<translation id="5114987907971894280">виртуелна реалност</translation> <translation id="5115309401544567011">Укључите <ph name="DEVICE_TYPE" /> у извор напајања.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">Са&чувај аудио снимак као...</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">Покрени овај пут</translation> <translation id="5464660706533281090">Дете не може да промени ово подешавање.</translation> <translation id="5466374726908360271">Налепи и претражи „<ph name="SEARCH_TERMS" />“</translation> +<translation id="5467207440419968613">Блокирано је: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Сајтови могу да траже да пуштају заштићен садржај (препоручује се)</translation> <translation id="5468173180030470402">Траже се дељења датотека</translation> <translation id="5469852975082458401">Можете да се крећете страницама помоћу курсора за текст. Притисните F7 да бисте то искључили.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Изађи из свих Chrome апликација</translation> <translation id="5797070761912323120">Google може да користи историју за персонализацију Претраге, огласа и других Google услуга</translation> <translation id="5798301976526354562">Величина текста (примењује се и на титл уживо)</translation> +<translation id="579907812742603813">заштићени садржај</translation> <translation id="579915268381781820">Уклонили сте безбедносни кључ.</translation> <translation id="5799508265798272974">Linux виртуелна машина: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Одредишна датотека је скраћена или уклоњена од последњег преузимања.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Канал је промењен. Покрените поново уређај да бисте применили промене.</translation> <translation id="5877584842898320529">Изабрани штампач није доступан или није правилно инсталиран. <ph name="BR" /> Проверите штампач или изаберите неки други.</translation> <translation id="5882919346125742463">Познате мреже</translation> +<translation id="5883356647197510494">Аутоматски је блокирано: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Ова картица је повезана са USB уређајем.</translation> <translation id="5886009770935151472">Прст 1</translation> <translation id="5889282057229379085">Највећи број посредничких CA: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Пронађи следеће</translation> <translation id="6461170143930046705">Траже се мреже...</translation> <translation id="6463795194797719782">&Измени</translation> +<translation id="6464094930452079790">слике</translation> <translation id="6464825623202322042">Овај уређај</translation> <translation id="6465841119675156448">Без интернета</translation> <translation id="6466988389784393586">&Отвори све обележиваче</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Провера овлашћења није успела</translation> <translation id="6494327278868541139">Прикажи детаље о напредној заштити</translation> <translation id="6494445798847293442">Није ауторитет за издавање сертификата</translation> +<translation id="6494750904506170417">искачући прозори и преусмеравања</translation> <translation id="6494974875566443634">Прилагођавање</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. мрежа од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, јачина сигнала <ph name="SIGNAL_STRENGTH" />%, управља администратор, детаљи</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Ови подаци садрже осетљив или опасан садржај}=1{Ова датотека садржи осетљив или опасан садржај}one{Ове датотеке садрже осетљив или опасан садржај}few{Ове датотеке садрже осетљив или опасан садржај}other{Ове датотеке садрже осетљив или опасан садржај}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Лозинка</translation> <translation id="6659213950629089752">Ову страницу је зумирао додатак „<ph name="NAME" />“</translation> <translation id="6659594942844771486">Картица</translation> +<translation id="6660413144148052430">локација</translation> <translation id="666099631117081440">Сервери за штампање</translation> <translation id="6663190258859265334">Обавите Powerwash уређаја <ph name="DEVICE_TYPE" /> и вратите се на претходну верзију.</translation> <translation id="6664237456442406323">Нажалост, рачунар је конфигурисан помоћу погрешно направљеног ИД-а хардвера. То спречава Chrome ОС да се ажурира најновијим безбедносним исправкама и рачунар је <ph name="BEGIN_BOLD" />можда подложан злонамерним нападима<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Прикажи шта је ново</translation> <translation id="67269783048918309">Шаљите податке о коришћењу и дијагностичке податке. Овај уређај тренутно аутоматски шаље податке о дијагностици, уређају и коришћењу апликација Google-у. Те информације се неће користити за идентификацију детета и помоћи ће у одржавању стабилности система и апликације и другим подешавањима. Неки обједињени подаци ће такође помоћи Google апликацијама и партнерима, попут Android програмера. То <ph name="BEGIN_LINK1" />подешавање<ph name="END_LINK1" /> примењује власник. Ако за дете укључите подешавање додатне активности на вебу и у апликацијама, ти подаци ће се можда чувати на Google налогу детета. <ph name="BEGIN_LINK2" />Сазнајте више<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Повезано, ниво батерије је <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">камера</translation> <translation id="6732801395666424405">Сертификати нису отпремљени</translation> <translation id="6732900235521116609">Не можемо да уклонимо пречицу</translation> <translation id="6734468588183300211">Када сте у режиму без архивирања, сајтови не могу да користе колачиће да би видели ваше активности прегледања на различитим сајтовима, на пример, за персонализацију огласа. Функције на неким сајтовима могу да престану са радом.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Питај када сајт жели да користи ексклузивне поруке система за приступ MIDI уређајима (препоручено)</translation> <translation id="6818198425579322765">Језик странице са ког желите да преводите</translation> <translation id="6818802132960437751">Уграђена заштита од вируса</translation> +<translation id="6820143000046097424">серијски портови</translation> <translation id="682123305478866682">Пребаците радну површину</translation> <translation id="6823174134746916417">Додирни за клик на тачпеду</translation> <translation id="6824564591481349393">Копирај адресу &е-поште</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Размена података са било којим уређајем на локалној мрежи или интернету</translation> <translation id="7306521477691455105">Отворите Подешавања да бисте повезали <ph name="USB_DEVICE_NAME" /> са <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Паузирано</translation> +<translation id="7308436126008021607">синхронизација у позадини</translation> <translation id="7309257895202129721">Прикажи &контроле</translation> <translation id="7310598146671372464">Пријављивање није успело. Сервер не подржава наведене Kerberos типове шифровања. Контактирајте администратора.</translation> <translation id="7320213904474460808">Постави као подразумевану мрежу</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Треба одмах да вратите}one{Вратите <ph name="DEVICE_TYPE" /> у року од {NUM_DAYS} дана}few{Вратите <ph name="DEVICE_TYPE" /> у року од {NUM_DAYS} дана}other{Вратите <ph name="DEVICE_TYPE" /> у року од {NUM_DAYS} дана}}</translation> <translation id="7475671414023905704">Netscape URL адреса за изгубљену лозинку</translation> <translation id="7476454130948140105">Ниво напуњености батерије је пренизак за ажурирање (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Аутоматски је блокирано: <ph name="PERMISSION" /> и још <ph name="COUNT" /></translation> <translation id="7477793887173910789">Контролишите музику, видео снимке и друго</translation> <translation id="7478485216301680444">Није могуће инсталирати киоск апликацију.</translation> <translation id="7478623944308207463">Апликације и подешавања ће се синхронизовати на свим Chrome OS уређајима на којима сте пријављени помоћу свог Google налога. Опције синхронизације прегледача пронађите у <ph name="LINK_BEGIN" />подешавањима Chrome-а<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Деинсталирај: <ph name="APP" />...</translation> <translation id="8289128870594824098">Величина диска</translation> <translation id="8293206222192510085">Додавање обележивача</translation> +<translation id="829335040383910391">звук</translation> <translation id="8294431847097064396">Извор</translation> <translation id="8298429963694909221">Сада можете да добијате обавештења са телефона на уређају <ph name="DEVICE_TYPE" />. Ако одбаците обавештења на уређају <ph name="DEVICE_TYPE" />, одбацићете их и на телефону. Уверите се да је телефон у близини и да су Bluetooth и WiFi укључени.</translation> <translation id="8299319456683969623">Тренутно сте офлајн.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Додај мрежну везу</translation> <translation id="8319414634934645341">Употреба проширеног кључа</translation> <translation id="8320459152843401447">Цео екран</translation> +<translation id="8321476692217554900">обавештења</translation> <translation id="8321837372750396788">Овим <ph name="DEVICE_TYPE" /> ће управљати <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Овој страници је забрањен приступ микрофону.</translation> <translation id="8323167517179506834">Унесите URL</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Недавно са Google диска</translation> <translation id="8407199357649073301">Ниво евиденције:</translation> <translation id="8408068190360279472">Мрежа <ph name="NETWORK_TYPE" />, повезује се</translation> +<translation id="8409413588194360210">обрађивачи плаћања</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Дозвољено је: <ph name="PERMISSION" /> и још <ph name="COUNT" /></translation> <translation id="8413385045638830869">Прво питај (препоручено)</translation> <translation id="8417548266957501132">Лозинка родитеља</translation> <translation id="8418445294933751433">&Прикажи као картицу</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> или <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Топлина боја Ноћног светла</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> жели да: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> и друго</translation> +<translation id="865032292777205197">сензори за покрет</translation> <translation id="8650543407998814195">Више не можете да приступате старом профилу, али можете и даље да га уклоните.</translation> <translation id="8651585100578802546">Принудно поново учитај ову страницу</translation> <translation id="8652400352452647993">Грешка у вези са паковањем додатка</translation> @@ -6788,6 +6817,7 @@ <translation id="8785622406424941542">Писаљка</translation> <translation id="8787254343425541995">Дозволи проксије за дељене мреже</translation> <translation id="8791534160414513928">Шаљи захтев „Не прати“ уз саобраћај прегледања</translation> +<translation id="8792626944327216835">микрофон</translation> <translation id="879413103056696865">Када је хотспот укључен, <ph name="PHONE_NAME" /> ће:</translation> <translation id="8795916974678578410">Нови прозор</translation> <translation id="8797459392481275117">Никад не преводи овај сајт</translation> @@ -6827,6 +6857,7 @@ <translation id="8823559166155093873">Блокирај колачиће</translation> <translation id="8823704566850948458">Предложи лозинку...</translation> <translation id="8824701697284169214">Додај стра&ницу...</translation> +<translation id="8827125715368568315">Блокирано је: <ph name="PERMISSION" /> и још <ph name="COUNT" /></translation> <translation id="8827289157496676362">Закачите додатак</translation> <translation id="8827752199525959199">Још радњи, лозинка за <ph name="USERNAME" /> на <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Не дозвољавај ниједном сајту да открива Bluetooth уређаје у близини</translation> @@ -6927,6 +6958,7 @@ <translation id="8932894639908691771">Опције приступа помоћу прекидача</translation> <translation id="8933960630081805351">&Прикажи у Finder-у</translation> <translation id="8934732568177537184">Настави</translation> +<translation id="8938306522009698937">обрађивачи</translation> <translation id="8938800817013097409">Уређај са USB прикључком типа C (задњи десни порт)</translation> <translation id="8940081510938872932">Рачунар тренутно ради превише ствари. Пробајте поново касније.</translation> <translation id="8941173171815156065">Опозовите дозволу „<ph name="PERMISSION" />“</translation> @@ -7231,6 +7263,7 @@ <translation id="987264212798334818">Опште</translation> <translation id="987897973846887088">Нема доступних слика</translation> <translation id="988978206646512040">Поље за приступну фразу не може да буде празно</translation> +<translation id="991413375315957741">сензори за покрет или светло</translation> <translation id="992032470292211616">Додаци, апликације и теме могу да нашкоде уређају. Желите ли стварно да наставите?</translation> <translation id="992256792861109788">Ружичаста</translation> <translation id="992592832486024913">Онемогући ChromeVox (говорне повратне информације)</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index ba3ec155..806a58708 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">Standard</translation> <translation id="1252987234827889034">Ett profilfel har uppstått</translation> <translation id="1254593899333212300">Direkt Internetanslutning</translation> +<translation id="1257553931232494454">zoomnivåer</translation> <translation id="1259152067760398571">Säkerhetskontrollen kördes i går</translation> <translation id="1260451001046713751">Tillåt alltid popup-fönster och omdirigeringar från <ph name="HOST" /></translation> <translation id="1261380933454402672">Måttlig</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">Det styr också vilken sida som visas när du söker i adressfältet.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Om du vill ta bort appar öppnar du Inställningar > Google Play Butik > Hantera Android-inställningar > Appar eller Apphanteraren. Tryck sedan på appen du vill avinstallera (du kanske måste svepa åt höger eller vänster för att hitta appen). Tryck sedan på Avinstallera eller Inaktivera.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Skickar begäran...</translation> +<translation id="1733064249834771892">teckensnitt</translation> <translation id="1733383495376208985">Kryptera synkroniserad data med en egen <ph name="BEGIN_LINK" />lösenfras för synkronisering<ph name="END_LINK" />. Betalningsmetoder och adresser från Google Pay omfattas inte.</translation> <translation id="1734212868489994726">Ljusblå</translation> <translation id="1734230530703461088">Tilläggen lästes inte in inom tidsgränsen. Kontakta administratören.</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">Uppladdning av loggfil pågår.</translation> <translation id="1819721979226826163">Tryck på Appaviseringar > Google Play-tjänster.</translation> <translation id="1820028137326691631">Ange lösenordet du fått från administratören</translation> +<translation id="182139138257690338">automatiska nedladdningar</translation> <translation id="1822140782238030981">Använder du redan Chrome? Logga in</translation> <translation id="18245044880483936">Säkerhetskopierad data tar inte upp lagringsutrymme på barnets Drive.</translation> <translation id="1825565032302550710">Portnummer måste vara mellan 1024 och 65535</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">&Läs in appen igen</translation> <translation id="2327492829706409234">Aktivera app</translation> <translation id="2328561734797404498">Starta om enheten om du vill använda <ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">fönsterplacering</translation> <translation id="2329597144923131178">Logga in så blir bokmärken, historik, lösenord med mera tillgängligt på alla dina enheter.</translation> <translation id="2332131598580221120">Visa i butik</translation> <translation id="2332192922827071008">Öppna inställningarna</translation> @@ -1710,6 +1714,7 @@ <translation id="2894757982205307093">Ny flik i grupp</translation> <translation id="289644616180464099">SIM-kortet är låst</translation> <translation id="289695669188700754">Nyckel-ID: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Den här anpassade inställningen tas bort när du stänger alla inkognitofönster</translation> <translation id="2897878306272793870">Vill du verkligen öppna <ph name="TAB_COUNT" /> flikar?</translation> <translation id="290105521672621980">Funktioner som inte stöds används i filer</translation> <translation id="2902127500170292085"><ph name="EXTENSION_NAME" /> kunde inte kommunicera med den här skrivaren. Kontrollera att skrivaren är ansluten och försök igen.</translation> @@ -1799,6 +1804,7 @@ <translation id="2996286169319737844">Data krypteras med din lösenfras för synkronisering. Betalningsuppgifter och adresser från Google Pay omfattas inte.</translation> <translation id="2996722619877761919">Vänd längs långsidan</translation> <translation id="3000236644796679448">Webbplatser får begära åtkomst till mikrofonen (rekommenderas)</translation> +<translation id="3000378525979847272">Behörighet till <ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /> har tillåtits</translation> <translation id="3000461861112256445">Monoljud</translation> <translation id="3001144475369593262">Barnkonton</translation> <translation id="3003144360685731741">Prioriterade nätverk</translation> @@ -2058,6 +2064,7 @@ <translation id="3305661444342691068">Öppna PDF i förhandsgranskning</translation> <translation id="3308116878371095290">Den här sidan har förhindrats att ange cookies.</translation> <translation id="3308134619352333507">Dölj knapp</translation> +<translation id="3308738399950580893">annonser</translation> <translation id="3308852433423051161">Google Assistent läses in …</translation> <translation id="3309330461362844500">Id för certifikatprofil</translation> <translation id="3311445899360743395">Data kopplad till den här appen kanske tas bort från enheten.</translation> @@ -2118,6 +2125,7 @@ <translation id="3388788256054548012">Den här filen är krypterad. Be ägaren att dekryptera den.</translation> <translation id="3390013585654699824">Information om appen</translation> <translation id="3390741581549395454">Säkerhetskopieringen av Linux-appar och Linux-filer är klar. Uppgraderingen startar snart.</translation> +<translation id="3391482648489541560">filredigering</translation> <translation id="339178315942519818">Se aviseringar från chattappar på din <ph name="DEVICE_TYPE" /></translation> <translation id="3396800784455899911">När du klickar på Godkänn och fortsätt samtycker du till att dessa tjänster från Google får bearbeta data enligt beskrivningen ovan.</translation> <translation id="3399432415385675819">Aviseringar inaktiveras</translation> @@ -2894,6 +2902,7 @@ <translation id="425573743389990240">Batteriurladdningstakt i watt (ett negativt värde betyder att batteriet laddas)</translation> <translation id="4256316378292851214">S&para video som...</translation> <translation id="4258348331913189841">Filsystem</translation> +<translation id="4259381619085088639">din närvaro</translation> <translation id="4259388776256904261">Det här kan ta en stund</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> kan vara farlig. Vill du skicka den till Avancerat skydd från Google för genomsökning? Stega till nedladdningsfältet med Skift + F6.</translation> <translation id="4263223596040212967">Kontrollera tangentbordslayouten och försök igen.</translation> @@ -2930,6 +2939,7 @@ <translation id="4303079906735388947">Ange en ny pinkod för säkerhetsnyckeln</translation> <translation id="4305402730127028764">Kopiera till <ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Apparna måste visas med content-type <ph name="CONTENT_TYPE" /></translation> +<translation id="4306812610847412719">urklipp</translation> <translation id="4307992518367153382">Grunderna</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K aktiva)</translation> <translation id="4310139701823742692">Filen har fel format. Kontrollera PPD-filen och försök igen.</translation> @@ -3017,6 +3027,7 @@ <translation id="4412698727486357573">Hjälpcenter</translation> <translation id="44141919652824029">Vill du ge <ph name="APP_NAME" /> åtkomstbehörighet till listan med anslutna USB-enheter?</translation> <translation id="4414232939543644979">Nytt &inkognitofönster</translation> +<translation id="4414515549596849729">cookies och webbplatsdata</translation> <translation id="4415213869328311284">Nu kan du börja använda <ph name="DEVICE_TYPE" />.</translation> <translation id="4415245286584082850">Inga enheter hittades. Öppna en hjälpsida på en ny flik.</translation> <translation id="4415276339145661267">Hantera Google-kontot</translation> @@ -3088,6 +3099,7 @@ <translation id="4493468155686877504">Rekommenderas (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Visa inte den här sidan</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> har kraschat</translation> +<translation id="4500587658229086076">osäkert innehåll</translation> <translation id="450099669180426158">Ikon med utropstecken</translation> <translation id="4501530680793980440">Bekräfta borttagning</translation> <translation id="4502423230170890588">Ta bort från den här enheten</translation> @@ -3128,6 +3140,7 @@ <translation id="4538684596480161368">Blockera alltid plugin-program som inte är i sandlådeläge på <ph name="HOST" /></translation> <translation id="4538792345715658285">Installerad på grund av företagets principer.</translation> <translation id="4541662893742891060">Det gick inte att ansluta till profilen. Kontakta operatören för teknisk support.</translation> +<translation id="4541810033354695636">förstärkt verklighet</translation> <translation id="4542520061254486227">Läsa din data på <ph name="WEBSITE_1" /> och <ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Certifikathanterare</translation> <translation id="4544174279960331769">Blå standardavatar</translation> @@ -3600,6 +3613,7 @@ <translation id="5112577000029535889">Verktyg för &utvecklare</translation> <translation id="5113739826273394829">Om du klickar på ikonen låser du <ph name="DEVICE_TYPE" /> manuellt. Nästa gång måste du ange ditt lösenord för att öppna den.</translation> <translation id="51143538739122961">Sätt i säkerhetsnyckeln och tryck på den</translation> +<translation id="5114987907971894280">virtuell verklighet</translation> <translation id="5115309401544567011">Anslut <ph name="DEVICE_TYPE" /> till en strömkälla.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">S&para ljud som...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Kör den här gången</translation> <translation id="5464660706533281090">Inställningen kan inte ändras av barn.</translation> <translation id="5466374726908360271">Kli&stra in och sök efter <ph name="SEARCH_TERMS" /></translation> +<translation id="5467207440419968613">Behörighet till <ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /> har blockerats</translation> <translation id="5468119583641912100">Webbplatser får begära tillstånd att spela upp skyddat innehåll (rekommenderas)</translation> <translation id="5468173180030470402">Söker efter filresurser</translation> <translation id="5469852975082458401">Du kan navigera på sidor med en textmarkör. Tryck på F7 om du vill inaktivera detta.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Stäng alla Chrome-appar</translation> <translation id="5797070761912323120">Google kan anpassa Sök, annonser och andra Google-tjänster utifrån historiken</translation> <translation id="5798301976526354562">Textstorlek (gäller även Live Caption)</translation> +<translation id="579907812742603813">skyddat innehåll</translation> <translation id="579915268381781820">Säkerhetsnyckeln har tagits bort.</translation> <translation id="5799508265798272974">Virtuell maskin för Linux: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Målfilen har trunkerats eller tagits bort efter den senaste nedladdningen.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Kanalen har ändrats. Starta om enheten om du vill tillämpa ändringarna.</translation> <translation id="5877584842898320529">Den valda skrivaren är inte tillgänglig eller har inte installerats korrekt. <ph name="BR" /> Kontrollera skrivaren eller välj en annan.</translation> <translation id="5882919346125742463">Kända nätverk</translation> +<translation id="5883356647197510494">Behörighet till <ph name="PERMISSION_1" /> och <ph name="PERMISSION_2" /> har blockerats automatiskt</translation> <translation id="5884474295213649357">Den här fliken är ansluten till en USB-enhet.</translation> <translation id="5886009770935151472">Finger 1</translation> <translation id="5889282057229379085">Maximalt antal mellanliggande CU: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Sök nästa</translation> <translation id="6461170143930046705">Söker efter nätverk …</translation> <translation id="6463795194797719782">&Redigera</translation> +<translation id="6464094930452079790">bilder</translation> <translation id="6464825623202322042">Den här enheten</translation> <translation id="6465841119675156448">Utan internet</translation> <translation id="6466988389784393586">&Öppna alla bokmärken</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Auktoriseringen misslyckades</translation> <translation id="6494327278868541139">Visa detaljer om förbättrat skydd</translation> <translation id="6494445798847293442">Inte från certifikatutfärdare</translation> +<translation id="6494750904506170417">popup-fönster och omdirigeringar</translation> <translation id="6494974875566443634">Anpassning</translation> <translation id="6495925982925244349">Nätverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signalstyrka <ph name="SIGNAL_STRENGTH" /> %, hanteras av administratören, information</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Det finns känsligt eller skadligt innehåll i denna data}=1{Filen har känsligt eller skadligt innehåll}other{Filerna har känsligt eller skadligt innehåll}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Lösenord</translation> <translation id="6659213950629089752">Den här sidan har zoomats in med tillägget <ph name="NAME" /></translation> <translation id="6659594942844771486">Flik</translation> +<translation id="6660413144148052430">plats</translation> <translation id="666099631117081440">Utskriftsservrar</translation> <translation id="6663190258859265334">Använd Powerwash på din <ph name="DEVICE_TYPE" /> och återgå till föregående version.</translation> <translation id="6664237456442406323">Tyvärr är din dator konfigurerad med ett felaktigt maskinvaru-ID. Detta förhindrar att Chrome OS uppdateras med de senaste säkerhetskorrigeringarna och datorn <ph name="BEGIN_BOLD" />kan vara utsatt för skadlig programvara<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Kolla nyheterna</translation> <translation id="67269783048918309">Skicka diagnostik- och användningsdata. Den här enheten skickar för närvarande diagnostikdata, enhetsdata och data om appanvändning till Google automatiskt. Denna data används till att förbättra systemets och apparnas stabilitet med mera och inte till att identifiera ditt barn. Viss samlad data används även till att förbättra appar från Google och partner, till exempel Android-utvecklare. Ägaren har gjort denna <ph name="BEGIN_LINK1" />inställning<ph name="END_LINK1" /> obligatorisk. Om ytterligare webb- och appaktivitet har aktiverats för ditt barn kan denna data sparas i Google-kontot. <ph name="BEGIN_LINK2" />Läs mer<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Ansluten, <ph name="BATTERY_PERCENTAGE" /> % batterinivå</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Certifikaten har inte lästs in</translation> <translation id="6732900235521116609">Det gick inte att ta bort genvägen</translation> <translation id="6734468588183300211">I inkognitoläget får inte webbplatser se din webbaktivitet på olika webbplatser med hjälp av cookies och till exempel anpassa annonser. Funktioner på vissa webbplatser kan sluta fungera.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Fråga när en webbplats vill använda systemexklusiva meddelanden för att komma åt MIDI-enheter (rekommenderas)</translation> <translation id="6818198425579322765">Språk på sidan som ska översättas</translation> <translation id="6818802132960437751">Inbyggt virusskydd</translation> +<translation id="6820143000046097424">serieportar</translation> <translation id="682123305478866682">Casta skrivbordet</translation> <translation id="6823174134746916417">Lätt klick på styrplattan</translation> <translation id="6824564591481349393">Kopiera &e-postadress</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Utväxla data med enheter i det lokala nätverket eller via internet</translation> <translation id="7306521477691455105">Öppna inställningarna om du vill ansluta <ph name="USB_DEVICE_NAME" /> till <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Pausad</translation> +<translation id="7308436126008021607">synkronisering i bakgrunden</translation> <translation id="7309257895202129721">Visa &kontroller</translation> <translation id="7310598146671372464">Det gick inte att logga in. Servern har inte stöd för de angivna typerna av Kerberos-kryptering. Kontakta administratören.</translation> <translation id="7320213904474460808">Standardnätverk</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Måste returneras omedelbart}other{Returnera <ph name="DEVICE_TYPE" /> inom {NUM_DAYS} dagar}}</translation> <translation id="7475671414023905704">Netscapes webbadress för förlorat lösenord</translation> <translation id="7476454130948140105">Batterinivån är för låg för uppdateringen (<ph name="BATTERY_PERCENT" /> %)</translation> +<translation id="7476989672001283112">Behörighet till <ph name="PERMISSION" /> och <ph name="COUNT" /> till har blockerats automatiskt</translation> <translation id="7477793887173910789">Styr uppspelningen av musik, videor med mera</translation> <translation id="7478485216301680444">Det gick inte att installera kioskappen.</translation> <translation id="7478623944308207463">Appar och inställningar synkroniseras på alla Chrome OS-enheter där du är inloggad på ditt Google-konto. Alternativ för synkronisering av webbläsaren finns i <ph name="LINK_BEGIN" />Chrome-inställningarna<ph name="LINK_END" />.</translation> @@ -6371,6 +6395,7 @@ <translation id="8288032458496410887">Avinstallera <ph name="APP" /> …</translation> <translation id="8289128870594824098">Diskstorlek</translation> <translation id="8293206222192510085">Lägg till bokmärke</translation> +<translation id="829335040383910391">ljud</translation> <translation id="8294431847097064396">Källa</translation> <translation id="8298429963694909221">Du får nu aviseringar från telefonen på din <ph name="DEVICE_TYPE" />. Om du ignorerar aviseringar på din <ph name="DEVICE_TYPE" /> ignoreras de även på telefonen. Kontrollera att telefonen finns i närheten och att Bluetooth och Wi-Fi är aktiverat på den.</translation> <translation id="8299319456683969623">Du är offline för närvarande.</translation> @@ -6389,6 +6414,7 @@ <translation id="8317671367883557781">Lägg till nätverksanslutning</translation> <translation id="8319414634934645341">Utökad nyckelanvändning</translation> <translation id="8320459152843401447">Hela skärmen</translation> +<translation id="8321476692217554900">aviseringar</translation> <translation id="8321837372750396788">Denna <ph name="DEVICE_TYPE" /> hanteras av <ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Den här sidan har blockerats och kan inte komma åt mikrofonen.</translation> <translation id="8323167517179506834">Skriv en webbadress</translation> @@ -6454,7 +6480,9 @@ <translation id="8403562727702715619">Nyligen från Google Drive</translation> <translation id="8407199357649073301">Loggnivå:</translation> <translation id="8408068190360279472">Nätverkstyp: <ph name="NETWORK_TYPE" />, ansluter</translation> +<translation id="8409413588194360210">betalningshanterare</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Behörighet till <ph name="PERMISSION" /> och <ph name="COUNT" /> till har tillåtits</translation> <translation id="8413385045638830869">Fråga först (rekommenderas)</translation> <translation id="8417548266957501132">Förälderns lösenord</translation> <translation id="8418445294933751433">&Visa som flik</translation> @@ -6650,6 +6678,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> eller <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Färgtemperatur för Nattljus</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> vill <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> med mera</translation> +<translation id="865032292777205197">rörelsesensorer</translation> <translation id="8650543407998814195">Du har inte längre åtkomst till den gamla profilen, men du kan fortfarande ta bort den.</translation> <translation id="8651585100578802546">Tvinga webbläsaren att hämta sidan igen</translation> <translation id="8652400352452647993">Fel vid paketering av tillägg</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">E-penna</translation> <translation id="8787254343425541995">Tillåt proxyservrar för delade nätverk</translation> <translation id="8791534160414513928">Skicka en begäran om att inte spåra med webbtrafik</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">När den trådlösa surfzonen är aktiverad sker följande i <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Nytt fönster</translation> <translation id="8797459392481275117">Översätt aldrig den här webbplatsen</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Blockera cookies</translation> <translation id="8823704566850948458">Föreslå lösenord …</translation> <translation id="8824701697284169214">Lägg till si&da ...</translation> +<translation id="8827125715368568315">Behörighet till <ph name="PERMISSION" /> och <ph name="COUNT" /> har blockerats</translation> <translation id="8827289157496676362">Fäst tillägg</translation> <translation id="8827752199525959199">Fler åtgärder, lösenord för <ph name="USERNAME" /> på <ph name="DOMAIN" /></translation> <translation id="882854468542856424">Tillåt inga webbplatser att söka efter Bluetooth-enheter i närheten</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Alternativ för brytarstyrning</translation> <translation id="8933960630081805351">&Visa i Finder</translation> <translation id="8934732568177537184">Fortsätt</translation> +<translation id="8938306522009698937">hanterare</translation> <translation id="8938800817013097409">USB-C-enhet (högra porten på baksidan)</translation> <translation id="8940081510938872932">Datorn har för mycket att göra just nu. Försök igen senare.</translation> <translation id="8941173171815156065">Återkalla behörigheten <ph name="PERMISSION" /></translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">Allmänt</translation> <translation id="987897973846887088">Det finns inga bilder</translation> <translation id="988978206646512040">Lösenfrasen får inte vara tom</translation> +<translation id="991413375315957741">rörelse- eller ljussensorer</translation> <translation id="992032470292211616">Tillägg, appar och teman kan skada enheten. Vill du fortsätta?</translation> <translation id="992256792861109788">Rosa</translation> <translation id="992592832486024913">Inaktivera ChromeVox (talad feedback)</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index c100b68..236717e3 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -424,6 +424,7 @@ <translation id="1465827627707997754">பீட்சா துண்டு</translation> <translation id="1468571364034902819">இந்தச் சுயவிவரத்தைப் பயன்படுத்த முடியாது</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{புதிய குழுவில் தாவலைச் சேர்}other{புதிய குழுவில் தாவல்களைச் சேர்}}</translation> +<translation id="1470350905258700113">இந்தச் சாதனத்தைப் பயன்படுத்து</translation> <translation id="1470946456740188591">சுட்டி உலாவலை இயக்கவோ முடக்கவோ ‘Ctrl+Search+7’ என்ற ஷார்ட்கட் விசைகளைப் பயன்படுத்தவும்</translation> <translation id="1472675084647422956">மேலும் காண்பி</translation> <translation id="1474785664565228650">மைக்ரோஃபோன் அமைப்பில் செய்த மாற்றத்தைச் செயல்படுத்த Parallels Desktopபை மீண்டும் தொடங்க வேண்டும். தொடர Parallels Desktopபை மீண்டும் தொடங்கவும்.</translation> @@ -1398,6 +1399,7 @@ <translation id="2541002089857695151">முழுத்திரை அலைபரப்பலை மேம்படுத்தவா?</translation> <translation id="2541706104884128042">புதிய உறக்க நேரம் அமைக்கப்பட்டது</translation> <translation id="2542050502251273923">நெட்வொர்க் இணைப்பு நிர்வாகி மற்றும் ff_debug என்பதைப் பயன்படுத்தும் பிற சேவைகளின் பிழைதிருத்த நிலையை அமைக்கும்.</translation> +<translation id="2544292303401268586">ஆப்ஸைப் புதுப்பிக்க, சாதனத்தை மீண்டும் தொடங்குமாறு நிர்வாகி கோரியுள்ளார். இது நிறைவடைய சில நிமிடங்கள் ஆகலாம்.</translation> <translation id="2544853746127077729">அங்கீகரிப்புச் சான்றிதழ் நெட்வொர்க்கால் நிராகரிக்கப்பட்டது</translation> <translation id="2546283357679194313">குக்கீகளும் தள தரவும்</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> அனுமதிக்கப்பட்டது</translation> @@ -2780,6 +2782,7 @@ <translation id="409579654357498729">கிளவுடு அச்சில் சேர்</translation> <translation id="4096508467498758490">டெவெலப்பர் பயன்முறை நீட்டிப்புகளை முடக்கவும்</translation> <translation id="4097406557126260163">ஆப்ஸும் நீட்டிப்புகளும்</translation> +<translation id="409742781329613461">Chrome உதவிக்குறிப்புகள்</translation> <translation id="4097560579602855702">Googleளில் தேடுக</translation> <translation id="4098667039111970300">கருவிப்பட்டியில் ஸ்டைலஸ் கருவிகளைக் காட்டுதல்</translation> <translation id="4099060993766194518">இயல்பு தேடல் இன்ஜினை மீட்டமைக்கவா?</translation> @@ -4091,6 +4094,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> இல் எழுதுவதற்கும் படிப்பதற்குமான அணுகல் வழங்கப்பட்டது.</translation> <translation id="5678955352098267522">உங்கள் தரவை <ph name="WEBSITE_1" /> இல் படிக்கவும்</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" ஐ அகற்ற வேண்டுமா?</translation> +<translation id="5683806393796685434">செயல்படுத்தல் குறியீட்டை உள்ளிடவும்</translation> <translation id="5684181005476681636">வைஃபை விவரங்கள்</translation> <translation id="5684661240348539843">பண்பு அடையாளங்காட்டி</translation> <translation id="5687326903064479980">நேரமண்டலம்</translation> @@ -4342,6 +4346,7 @@ <translation id="5978277834170881274">&'அடிப்படை எழுத்துப் பிழை சரிபார்க்கும்' அம்சத்தைப் பயன்படுத்து</translation> <translation id="5979084224081478209">கடவுச்சொற்களைச் சோதித்துப் பார்க்கவும்</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{தீங்கிழைக்கச் சாத்தியமுள்ள 1 நீட்டிப்பை மீண்டும் இயக்கியுள்ளீர்கள்}other{தீங்கிழைக்கச் சாத்தியமுள்ள {NUM_EXTENSIONS} நீட்டிப்புகளை மீண்டும் இயக்கியுள்ளீர்கள்}}</translation> +<translation id="5979353814339191480">டேட்டா பிளான், மொபைல் நெட்வொர்க் டாங்கிள் போன்றவற்றுடன் கூடிய அல்லது போர்டபிள் ஹாட்ஸ்பாட்டுடன் இணைந்துள்ள Chromebookக்குகளுக்கு இந்த விருப்பம் பயன்படுத்தப்படும்</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" /> க்கு &மொழிபெயர்</translation> <translation id="5979469435153841984">பக்கங்களைப் புத்தகக்குறியிட, முகவரிப் பட்டியிலுள்ள நட்சத்திரத்தைக் கிளிக் செய்யவும்</translation> <translation id="5984222099446776634">சமீபத்தில் பார்த்தவை</translation> @@ -4821,6 +4826,7 @@ <translation id="653659894138286600">ஆவணங்களையும் படங்களையும் ஸ்கேன் செய்யலாம்</translation> <translation id="6537613839935722475">எழுத்துகள், எண்கள், இடைக்கோடுகள் (-) ஆகியவற்றைப் பெயரில் பயன்படுத்தலாம்</translation> <translation id="6537880577641744343">கமாண்டர்</translation> +<translation id="6538098297809675636">குறியீட்டைக் கண்டறிவதில் பிழை ஏற்பட்டது</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />குறிப்பு:<ph name="END_BOLD" /> தரவைச் சேகரிப்பது செயல்திறனைக் குறைக்கும் என்பதால், நீங்கள் தெரிந்துதான் செய்கிறீர்கள் என்றால் அல்லது அவ்வாறு செய்ய வேண்டுமெனக் கேட்டுக்கொள்ளப்பட்டிருந்தால் மட்டும் இயக்கவும்.</translation> <translation id="6541638731489116978">இந்தத் தளம் உங்கள் மோஷன் சென்சார்களை அணுகுவது தடுக்கப்பட்டுள்ளது.</translation> <translation id="6545665334409411530">மீண்டும் இயக்குவதன் வீதம்</translation> @@ -6017,6 +6023,7 @@ <translation id="7904526211178107182">உங்கள் நெட்வொர்க்கிலுள்ள பிற சாதனங்களுக்கு Linux போர்ட்டுகள் கிடைக்குமாறு செய்யலாம்.</translation> <translation id="7907837847548254634">ஃபோக்கஸ் செய்யப்படும் பொருள் தெளிவாகத் தெரியும்படி விரைவான ஹைலைட்டைக் காட்டு</translation> <translation id="7908378463497120834">உங்கள் வெளிப்புற சேகரிப்பு சாதனத்தில் குறைந்தபட்சம் ஒரு பிரிவினை இருந்தாலும் அதை ஏற்ற முடியாது. மன்னிக்கவும்.</translation> +<translation id="7909324225945368569">உங்கள் சுயவிவரத்தின் புதிய பெயர்</translation> <translation id="7909969815743704077">மறைநிலையில் பதிவிறக்கப்பட்டது</translation> <translation id="7910768399700579500">&புதிய கோப்புறை</translation> <translation id="7911118814695487383">Linux</translation> @@ -6634,6 +6641,7 @@ <translation id="8642900771896232685">2 வினாடிகள்</translation> <translation id="8642947597466641025">உரையை இன்னும் பெரிதாக்கு</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> ஆபத்தானதாக இருக்கக்கூடும். ஸ்கேன் செய்வதற்கு Google மேம்பட்ட பாதுகாப்புக்கு அனுப்ப வேண்டுமா?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{குக்கீகள் எதுவுமில்லை}=1{1 குக்கீ தடுக்கப்பட்டுள்ளது}other{# குக்கீகள் தடுக்கப்பட்டுள்ளன}}</translation> <translation id="8644655801811752511">இந்தப் பாதுகாப்பு விசையை மீட்டமைக்க முடியவில்லை. விசையைச் செருகிய உடனே அதை மீட்டமைக்க முயலவும்.</translation> <translation id="8645354835496065562">தொடர்ந்து சென்சார் அணுகலை அனுமதி</translation> <translation id="8645920082661222035">ஆபத்தான நிகழ்வுகள் ஏற்படுவதற்கு முன்பு அவற்றைக் கணித்து உங்களை எச்சரிக்கும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index cd290ba..6a8eba0 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -424,6 +424,7 @@ <translation id="1465827627707997754">పిజ్జా ముక్క</translation> <translation id="1468571364034902819">ఈ ప్రొఫైల్ను ఉపయోగించలేరు</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{ట్యాబ్ను కొత్త గ్రూప్నకు జోడించు}other{ట్యాబ్లను కొత్త గ్రూప్నకు జోడించు}}</translation> +<translation id="1470350905258700113">ఈ పరికరాన్ని ఉపయోగించండి</translation> <translation id="1470946456740188591">క్యారెట్ బ్రౌజింగ్ను ఆన్ లేదా ఆఫ్ చేయడానికి, షార్ట్కట్ Ctrl+Search+7ను ఉపయోగించండి</translation> <translation id="1472675084647422956">మరిన్ని చూపించు</translation> <translation id="1474785664565228650">మైక్రోఫోన్ సెట్టింగ్లో మార్చడానికి పారలల్స్ డెస్క్టాప్ను మళ్లీ ప్రారంభించవలసి ఉంటుంది. కొనసాగించడానికి పారలల్స్ డెస్క్టాప్ను మళ్లీ ప్రారంభించండి.</translation> @@ -1398,6 +1399,7 @@ <translation id="2541002089857695151">పూర్తిస్క్రీన్ ప్రసారాన్ని ఆప్టిమైజ్ చేయాలా?</translation> <translation id="2541706104884128042">కొత్త నిద్ర సమయం సెట్ చేయబడింది</translation> <translation id="2542050502251273923">ff_debugను ఉపయోగించి నెట్వర్క్ కనెక్షన్ మేనేజర్ ఇంకా ఇతర సర్వీస్ల డీబగ్గింగ్ స్థాయిని సెట్ చేస్తుంది.</translation> +<translation id="2544292303401268586">యాప్లను అప్డేట్ చేయడానికి మీ పరికరాన్ని రీస్టార్ట్ చేయమని మీ అడ్మినిస్ట్రేటర్ రిక్వెస్ట్ చేశారు. ఇది పూర్తి కావడానికి కొన్ని నిమిషాలు పట్టవచ్చు.</translation> <translation id="2544853746127077729">ప్రామాణీకరణ ప్రమాణపత్రం నెట్వర్క్ ద్వారా తిరస్కరించబడింది</translation> <translation id="2546283357679194313">కుక్కీలు మరియు సైట్ డేటా</translation> <translation id="2548347166720081527"><ph name="PERMISSION" />ను అనుమతించారు</translation> @@ -2780,6 +2782,7 @@ <translation id="409579654357498729">క్లౌడ్ ప్రింట్కు జోడించు</translation> <translation id="4096508467498758490">డెవలపర్ మోడ్ ఎక్స్టెన్షన్లను నిలిపివేయండి</translation> <translation id="4097406557126260163">యాప్లు, ఎక్స్టెన్షన్లు</translation> +<translation id="409742781329613461">Chrome కోసం చిట్కాలు</translation> <translation id="4097560579602855702">Googleలో వెతకండి</translation> <translation id="4098667039111970300">టూల్బార్లోని స్టైలస్ టూల్స్</translation> <translation id="4099060993766194518">డిఫాల్ట్ శోధన ఇంజిన్ను పునరుద్ధరించాలా?</translation> @@ -4090,6 +4093,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" />కి చదవడానికి మరియు వ్రాయడానికి యాక్సెస్ మంజూరు చేయబడింది.</translation> <translation id="5678955352098267522"><ph name="WEBSITE_1" />లోని మీ డేటాను చదవండి</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />"ను తీసివేయాలా?</translation> +<translation id="5683806393796685434">దయచేసి మీ యాక్టివేషన్ కోడ్ను ఎంటర్ చేయండి</translation> <translation id="5684181005476681636">Wi-Fi వివరాలు</translation> <translation id="5684661240348539843">అసెట్ ఐడెంటిఫైయర్</translation> <translation id="5687326903064479980">సమయ మండలి</translation> @@ -4341,6 +4345,7 @@ <translation id="5978277834170881274">ప్రాథమిక స్పెల్ చెక్ను &ఉపయోగించు</translation> <translation id="5979084224081478209">పాస్వర్డ్లను తనిఖీ చేయి</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{మీరు హానికరమైనది అయ్యే అవకాశం ఉన్న 1 ఎక్స్టెన్షన్ను తిరిగి ఆన్ చేశారు}other{మీరు హానికరమైనవి అయ్యే అవకాశం ఉన్న {NUM_EXTENSIONS} ఎక్స్టెన్షన్లను తిరిగి ఆన్ చేశారు}}</translation> +<translation id="5979353814339191480">ఈ ఆప్షన్ డేటా ప్లాన్ లేదా మొబైల్ నెట్వర్క్ డాంగిల్ కలిగిన, లేదా పోర్టబుల్ హాట్స్పాట్కు టెథరింగ్ చేస్తున్న Chromebookలకు వర్తిస్తుంది</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" />కు &అనువదించు</translation> <translation id="5979469435153841984">పేజీలను బుక్మార్క్ చేయాలంటే, చిరునామా బార్లో ఉన్న నక్షత్రాన్ని క్లిక్ చేయండి</translation> <translation id="5984222099446776634">ఇటీవల సందర్శించినవి</translation> @@ -4820,6 +4825,7 @@ <translation id="653659894138286600">డాక్యుమెంట్లు, ఇమేజ్లను స్కాన్ చేయండి</translation> <translation id="6537613839935722475">పేరులో అక్షరాలు, నంబర్లు, అడ్డు గీతలు (-) ఉపయోగించవచ్చు</translation> <translation id="6537880577641744343">కమాండర్</translation> +<translation id="6538098297809675636">కోడ్ను గుర్తించడంలో ఎర్రర్ ఏర్పడింది</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />గమనిక:<ph name="END_BOLD" /> డేటా సేకరణ వలన పనితీరు తగ్గవచ్చు, అందువల్ల మీరు చేస్తున్నది మీకు తెలిసినప్పుడు లేదా ఇలా చేయాలని మీకు చెప్పినప్పుడు మాత్రమే ప్రారంభించండి.</translation> <translation id="6541638731489116978">ఈ సైట్ మీ మోషన్ సెన్సార్లను యాక్సెస్ చేయనీయకుండా బ్లాక్ చేయబడింది.</translation> <translation id="6545665334409411530">పునరావృత రేటు</translation> @@ -6015,6 +6021,7 @@ <translation id="7904526211178107182">మీ నెట్వర్క్లో ఇతర పరికరాలకు Linux పోర్ట్లు అందుబాటులో ఉండేలా చూడండి.</translation> <translation id="7907837847548254634">దృష్టి కేంద్రీకరించిన ఆబ్జెక్ట్పై త్వరిత హైలైట్ను చూపించు</translation> <translation id="7908378463497120834">క్షమించండి, మీ బాహ్య నిల్వ పరికరంలో కనీసం ఒక విభజన కూడా ఉంచబడదు.</translation> +<translation id="7909324225945368569">మీ ప్రొఫైల్కు పేరు మార్చండి</translation> <translation id="7909969815743704077">అజ్ఞాతంలో డౌన్లోడ్ చేయబడింది</translation> <translation id="7910768399700579500">&క్రొత్త ఫోల్డర్</translation> <translation id="7911118814695487383">Linux</translation> @@ -6629,6 +6636,7 @@ <translation id="8642900771896232685">2 సెకన్లు</translation> <translation id="8642947597466641025">టెక్స్ట్ని పెద్దదిగా చేయి</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> ప్రమాదకరమైనది కావచ్చు. స్కాన్ చేయడానికి Google అధునాతన రక్షణకు పంపాలా?</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{కుక్కీలు లేవు}=1{1 కుక్కీ బ్లాక్ చేయబడింది}other{# కుక్కీలు బ్లాక్ చేయబడ్డాయి}}</translation> <translation id="8644655801811752511">ఈ సెక్యూరిటీ కీని రీసెట్ చేయలేకపోయింది. కీని ఇన్సర్ట్ చేసిన తక్షణం రీసెట్ చేయడానికి ప్రయత్నించండి.</translation> <translation id="8645354835496065562">సెన్సార్ యాక్సెన్ను అనుమతించడం కొనసాగించు</translation> <translation id="8645920082661222035">ప్రమాదకరమైన సంఘటనలు జరగడానికి ముందే, వాటిని పసిగట్టి మిమ్మల్ని హెచ్చరిస్తుంది</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index bbadfce..dff8d607 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -425,6 +425,7 @@ <translation id="1465827627707997754">پزّا سلائس</translation> <translation id="1468571364034902819">یہ پروفائل استعمال نہیں کر سکتا</translation> <translation id="1470084204649225129">{NUM_TABS,plural, =1{نئے گروپ میں ٹیب شامل کریں}other{نئے گروپ میں ٹیبز شامل کریں}}</translation> +<translation id="1470350905258700113">یہ آلہ استعمال کریں</translation> <translation id="1470946456740188591">کیرٹ براؤزنگ کو آن یا آف کرنے کے لیے Ctrl+Search+7 شارٹ کٹ کا استعمال کریں</translation> <translation id="1472675084647422956">مزید دکھائیں</translation> <translation id="1474785664565228650">مائیکروفون کی ترتیب میں تبدیلی کے لیے، Parallels ڈیسک ٹاپ کو بند کر کے دوبارہ چلانے کی ضرورت ہے۔ آگے بڑھنے کے لیے Parallels ڈیسک ٹاپ کو بند کر کے دوبارہ چلائیں۔</translation> @@ -1399,6 +1400,7 @@ <translation id="2541002089857695151">پوری اسکرین پر کاسٹ کرنے کو بہتر بنائیں؟</translation> <translation id="2541706104884128042">سونے کا نیا وقت سیٹ کیا گیا ہے</translation> <translation id="2542050502251273923">نیٹ ورک کنکشن مینیجراور ff_debug. استعمال کرنے والی دیگر سروسز کے ڈیبگنگ لیول کا تعین کرتا ہے۔</translation> +<translation id="2544292303401268586">ایپس کو اپ ڈیٹ کرنے کیلئے آپ کے منتظم نے آپ کے آلے کو ری اسٹارٹ کرنے کی درخواست کی ہے۔ اسے مکمل ہونے میں کچھ منٹ لگ سکتے ہیں۔</translation> <translation id="2544853746127077729">نیٹ ورک نے توثیق کا سرٹیفکیٹ مسترد کر دیا گیا</translation> <translation id="2546283357679194313">کوکیز اور سائٹ ڈیٹا</translation> <translation id="2548347166720081527"><ph name="PERMISSION" /> کی اجازت ہے</translation> @@ -2781,6 +2783,7 @@ <translation id="409579654357498729">کلاؤڈ پرنٹ میں شامل کریں</translation> <translation id="4096508467498758490">ڈویلپر وضع کے ایکسٹینشز کو غیر فعال کریں</translation> <translation id="4097406557126260163">ایپس اور ایکسٹینشنز</translation> +<translation id="409742781329613461">Chrome کیلئے تجاویز</translation> <translation id="4097560579602855702">Google پر کچھ تلاش کریں</translation> <translation id="4098667039111970300">ٹول بار میں اسٹائلس ٹولز</translation> <translation id="4099060993766194518">ڈیفالٹ سرچ انجن کو بحال کریں؟</translation> @@ -4090,6 +4093,7 @@ <translation id="5678550637669481956"><ph name="VOLUME_NAME" /> کیلئے پڑھنے اور لکھنے کی رسائی دی گئی ہے۔</translation> <translation id="5678955352098267522">اپنا ڈیٹا <ph name="WEBSITE_1" /> پر پڑھیں</translation> <translation id="5680050361008726776">"<ph name="ESIM_PROFILE_NAME" />" کو ہٹائیں؟</translation> +<translation id="5683806393796685434">براہ کرم اپنی فعالیت کا کوڈ درج کریں</translation> <translation id="5684181005476681636">Wi-Fi کی تفصیلات</translation> <translation id="5684661240348539843">اثاثہ شناخت کنندہ</translation> <translation id="5687326903064479980">ٹائم زون</translation> @@ -4341,6 +4345,7 @@ <translation id="5978277834170881274">املا کی بنیادی جانچ کا &استعمال کریں</translation> <translation id="5979084224081478209">پاس ورڈز چیک کریں</translation> <translation id="5979156418378918004">{NUM_EXTENSIONS,plural, =1{آپ نے 1 ممکنہ طور پر نقصان دہ ایکسٹینشن کو واپس آن کر دیا}other{آپ نے {NUM_EXTENSIONS} ممکنہ طور پر نقصان دہ ایکسٹینشنز کو واپس آن کر دیا}}</translation> +<translation id="5979353814339191480">یہ اختیار ڈیٹا پلان یا موبائل نیٹ ورک ڈونگل والے Chromebooks یا پورٹیبل ہاٹ اسپاٹ کے ٹیدرنگ ہونے پر لاگو ہوتا ہے</translation> <translation id="5979421442488174909"><ph name="LANGUAGE" /> میں &ترجمہ کریں</translation> <translation id="5979469435153841984">صفحات کے بک مارکس محفوظ کرنے کیلئے ایڈریس بار میں ستارہ پر کلک کریں</translation> <translation id="5984222099446776634">حال ہی میں ملاحظہ کردہ</translation> @@ -4820,6 +4825,7 @@ <translation id="653659894138286600">دستاویزات اور تصاویر کو اسکین کریں</translation> <translation id="6537613839935722475">نام حروف، اعداد اور ہائفنز (-) کا استعمال کر سکتا ہے</translation> <translation id="6537880577641744343">کمانڈر</translation> +<translation id="6538098297809675636">کوڈ کا پتہ لگانے میں خرابی</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />نوٹ:<ph name="END_BOLD" /> صرف اس وقت فعال کریں جب آپ کو معلوم ہو کہ آپ کیا کر رہے ہیں یا اگر آپ سے ایسا کرنے کو کہا گیا ہو، کیونکہ ڈیٹا جمع کرنے سے کارکردگی کم ہو سکتی ہے۔</translation> <translation id="6541638731489116978">اس سائٹ کو آپ کے موشن سینسرز تک رسائی حاصل کرنے سے مسدود کر دیا گیا ہے۔</translation> <translation id="6545665334409411530">تکرار کی شرح</translation> @@ -6017,6 +6023,7 @@ <translation id="7904526211178107182">اپنے نیٹ ورک پر دیگر آلات کو Linux پورٹس دستیاب کرائیں۔</translation> <translation id="7907837847548254634">فوکس کردہ آبجیکٹ پر ایک فوری ہائی لائٹ دکھائیں</translation> <translation id="7908378463497120834">معذرت، آپ کے بیرونی اسٹوریج آلہ پر کم از کم ایک پارٹیشن کو ماؤنٹ نہیں کیا جا سکا۔</translation> +<translation id="7909324225945368569">اپنی پروفائل کا نام تبدیل کریں</translation> <translation id="7909969815743704077">پوشیدگی وضع میں ڈاؤن لوڈ کیا گیا</translation> <translation id="7910768399700579500">&نیا فولڈر</translation> <translation id="7911118814695487383">Linux</translation> @@ -6633,6 +6640,7 @@ <translation id="8642900771896232685">2 سیکنڈز</translation> <translation id="8642947597466641025">متن کو اور بڑا بنائیں</translation> <translation id="8643443571868262066"><ph name="FILE_NAME" /> خطرناک ہو سکتا ہے۔ اسکیننگ کے لیے Google کے اعلی تحفظ کو بھیجیں؟</translation> +<translation id="8644047503904673749">{COUNT,plural, =0{کوئی کوکی نہیں}=1{1 کوکی مسدود ہے}other{# کوکیز مسدود ہیں}}</translation> <translation id="8644655801811752511">اس سیکیورٹی کلید کو دوبارہ ترتیب نہیں دیا جا سکتا۔ کلید داخل کرنے کے بعد اسے فوری طور پر دوبارہ ترتیب دینے کی کوشش کریں۔</translation> <translation id="8645354835496065562">سینسر تک رسائی کی اجازت جاری رکھیں</translation> <translation id="8645920082661222035">خطرناک ایونٹس ہونے سے پہلے ان کی پیشین گوئی کرتی ہے اور آپ کو ان کے بارے میں متنبہ کرتی ہے</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 026c4677..e47c48cd 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">Asosiy</translation> <translation id="1252987234827889034">Profil xatoligi yuz berdi</translation> <translation id="1254593899333212300">Internetga to‘g‘ridan-to‘g‘ri ulanish</translation> +<translation id="1257553931232494454">masshtab</translation> <translation id="1259152067760398571">Xavfsizlik tekshiruvi kecha bajarilgan</translation> <translation id="1260451001046713751"><ph name="HOST" /> saytida qalqib chiquvchi oynalar ochish va ularga o‘tish ruxsat berilsin</translation> <translation id="1261380933454402672">Oʻrtacha</translation> @@ -669,6 +670,7 @@ <translation id="1729533290416704613">Bundan tashqari kengaytma Omniboksda so‘rovlar kiritishda foydalaniladigan birlamchi qidiruv tizimini o‘zgartirib qo‘ydi.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Ilovalarni olib tashlash uchun Sozlamalar > Google Play Market > Android sozlamalari boshqaruvi > Ilovalar yoki Ilovalar menejeri menyusiga kiring. Kerakli ilovani tanlab (ilovani topish uchun ekranni oʻng yoki chapga suring), “Olib tashlash” yoki “Faolsizlantirish” parametrini bosing.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">So‘rov yuborilmoqda...</translation> +<translation id="1733064249834771892">shriftlar</translation> <translation id="1733383495376208985">Sinxronlangan maʼlumotlarni <ph name="BEGIN_LINK" />kodli ibora bilan shifrlang<ph name="END_LINK" />. Google Pay manzillari va toʻlov usullari esa shifrlanmaydi.</translation> <translation id="1734212868489994726">Havorang</translation> <translation id="1734230530703461088">Kengaytmalar ajratilgan vaqi ichida yuklanmadi. Administratorga murojaat qiling.</translation> @@ -756,6 +758,7 @@ <translation id="1818913467757368489">Jurnal yuklanmoqda.</translation> <translation id="1819721979226826163">Ilova bildirishnomalari > Google Play xizmatlari ustiga bosing.</translation> <translation id="1820028137326691631">Administrator belgilagan parolni kiriting</translation> +<translation id="182139138257690338">avtomatik yuklamalar</translation> <translation id="1822140782238030981">Chrome ishlatasizmi? Hisobga kiring</translation> <translation id="18245044880483936">Zaxiralangan maʼlumotlar farzandingiz Google Drive omboridagi ajratilgan joyga taʼsir qilmaydi.</translation> <translation id="1825565032302550710">Port 1024 va 65535 orasida boʻlishi lozim</translation> @@ -1196,6 +1199,7 @@ <translation id="2326931316514688470">&Ilovani qayta yuklash</translation> <translation id="2327492829706409234">Ilovani yoqish</translation> <translation id="2328561734797404498"><ph name="APP_NAME" /> ilovasini ishlatish uchun qurilmangizni qayta ishga tushiring.</translation> +<translation id="2329182534073751090">oynani joylashtirish</translation> <translation id="2329597144923131178">Xatcho‘plar, tarix, parollar va boshqa sozlamalarni barcha qurilmalaringizda sinxronlash uchun hisobingizga kiring.</translation> <translation id="2332131598580221120">Internet-do‘konda ochish</translation> <translation id="2332192922827071008">Parametrlarni ochish</translation> @@ -1708,6 +1712,7 @@ <translation id="2894757982205307093">Joriy guruhda yangi varaq ochish</translation> <translation id="289644616180464099">SIM karta qulflangan</translation> <translation id="289695669188700754">Kalit identifikatori: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Bu maxsus sozlama barcha Inkognito oynalar yopilganda olib tashlanadi</translation> <translation id="2897878306272793870">Haqiqatdan ham <ph name="TAB_COUNT" /> ta ichki-oyna ochilsinmi?</translation> <translation id="290105521672621980">Fayl qo‘llab-quvvatlanmaydigan funksiyalarga ega</translation> <translation id="2902127500170292085">“<ph name="EXTENSION_NAME" />” bu printer bilan aloqa o‘rnata olmadi. Printer yoqilganligini tekshiring va qaytadan urining.</translation> @@ -1797,6 +1802,7 @@ <translation id="2996286169319737844">Ma’lumotlar kodli ibora bilan shifrlangan. Google Pay manzillari va toʻlov usullari esa shifrlanmagan.</translation> <translation id="2996722619877761919">Uzun chetidan almashtirish</translation> <translation id="3000236644796679448">Saytlar mikrofondan foydalanishga ruxsat soʻrashi mumkin (tavsiya etiladi)</translation> +<translation id="3000378525979847272">Ruxsat berildi: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Mono audio</translation> <translation id="3001144475369593262">Farzand hisoblari</translation> <translation id="3003144360685731741">Afzal tarmoqlar</translation> @@ -2056,6 +2062,7 @@ <translation id="3305661444342691068">PDF‘ning oldindan ko‘rinishini ochish</translation> <translation id="3308116878371095290">Cookie faylini saqlab olish urinishi bloklandi.</translation> <translation id="3308134619352333507">Tugmani yashirish</translation> +<translation id="3308738399950580893">reklamalar</translation> <translation id="3308852433423051161">Google Assistent yuklanmoqda...</translation> <translation id="3309330461362844500">Sertifikat profili identifikatori</translation> <translation id="3311445899360743395">Bu ilovaga aloqador maʼlumotlar ushbu qurilmadan tozalanadi.</translation> @@ -2116,6 +2123,7 @@ <translation id="3388788256054548012">Bu fayl shifrlangan. Egasidan uning shifrini yechishini soʻrang.</translation> <translation id="3390013585654699824">Ilova axboroti</translation> <translation id="3390741581549395454">Linux ilova va fayllari yangi nusxalarga zaxiralandi. Yangilanish tez orada boshlanadi.</translation> +<translation id="3391482648489541560">fayllarni tahrirlash</translation> <translation id="339178315942519818">Chat ilovalari bildirishnomalarini <ph name="DEVICE_TYPE" /> qurilmangizda koʻrish</translation> <translation id="3396800784455899911">“Roziman va davom etish” tugmasini bosish orqali siz yuqorida keltirilgan Google xizmatlari shartlariga rozilik bildirgan hisoblanasiz.</translation> <translation id="3399432415385675819">Bildirishnomalar kelmay qoladi</translation> @@ -2892,6 +2900,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="4259381619085088639">faolligingiz</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> @@ -2928,6 +2937,7 @@ <translation id="4303079906735388947">Elektron kalitga yangi PIN kod belgilang</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" /> qurilmasiga nusxalash</translation> <translation id="4306119971288449206">Ilovalar “<ph name="CONTENT_TYPE" />” kontent turi bilan ishga tushiriladi</translation> +<translation id="4306812610847412719">vaqtinchalik xotira</translation> <translation id="4307992518367153382">Asosiy</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB faol)</translation> <translation id="4310139701823742692">Fayl formati nosoz. PPD faylni tekshiring va yana urinib ko‘ring.</translation> @@ -3015,6 +3025,7 @@ <translation id="4412698727486357573">Yordam markazi</translation> <translation id="44141919652824029">“<ph name="APP_NAME" />” uchun biriktirilgan USB qurilmalar ro‘yxatini olishiga ruxsat berilsinmi?</translation> <translation id="4414232939543644979">Yangi &inkognito oynasi</translation> +<translation id="4414515549596849729">cookie fayllari va sayt maʼlumotlari</translation> <translation id="4415213869328311284"><ph name="DEVICE_TYPE" /> qurilmangiz xizmatga tayyor.</translation> <translation id="4415245286584082850">Hech qanday qurilma topilmadi. Yangi varaqda Crhome yordam markazi maqolasini oching.</translation> <translation id="4415276339145661267">Google hisobingizni boshqaring</translation> @@ -3086,6 +3097,7 @@ <translation id="4493468155686877504">Tavsiya etiladi (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Bu sahifada ko‘rsatilmasin</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> ishdan chiqdi</translation> +<translation id="4500587658229086076">zararli kontent</translation> <translation id="450099669180426158">Undov belgisi</translation> <translation id="4501530680793980440">O‘chirishni tasdiqlash</translation> <translation id="4502423230170890588">Shu qurilmadan olib tashlash</translation> @@ -3126,6 +3138,7 @@ <translation id="4538684596480161368"><ph name="HOST" /> saytidagi sinov muhitida bo‘lmagan plaginlar doim bloklansin.</translation> <translation id="4538792345715658285">Korporativ siyosatga ko‘ra o‘rnatilgan.</translation> <translation id="4541662893742891060">Bu profilga ulana olmadi. Texnik yordam uchun mobil aloqa operatoringizga murojaat qiling.</translation> +<translation id="4541810033354695636">boyitilgan reallik</translation> <translation id="4542520061254486227"><ph name="WEBSITE_1" /> va <ph name="WEBSITE_2" /> saytlaridagi ma’lumotlarni ko‘rish</translation> <translation id="4543778593405494224">Sertifikatlar menejeri</translation> <translation id="4544174279960331769">Standart ko‘k avatar</translation> @@ -3598,6 +3611,7 @@ <translation id="5112577000029535889">&Dasturchi vositalari</translation> <translation id="5113739826273394829">Bu ikonkani bossangiz, <ph name="DEVICE_TYPE" /> qurilmasi qo‘lbola qulflanadi. Keyin uni qulfdan ochish uchun parolni kiritishingiz kerak bo‘ladi.</translation> <translation id="51143538739122961">Elektron kalitni qayta suqing va undagi tugmani bosing</translation> +<translation id="5114987907971894280">virtual reallik</translation> <translation id="5115309401544567011"><ph name="DEVICE_TYPE" /> qurilmangizni elektr quvvatiga ulang.</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">&Audioni saqlab olish...</translation> @@ -3897,6 +3911,7 @@ <translation id="5464632865477611176">Bir marta ishga tushirish</translation> <translation id="5464660706533281090">Bu sozlamani farzand hisobi oʻzgartira olmaydi.</translation> <translation id="5466374726908360271">Joyla&sh va qidirish: <ph name="SEARCH_TERMS" /></translation> +<translation id="5467207440419968613">Bloklandi: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Saytlar himoyalangan kontent ijrosi uchun ruxsat soʻray oladi (tavsiya etiladi)</translation> <translation id="5468173180030470402">Umumiy jildlar qidirilmoqda</translation> <translation id="5469852975082458401">Sahifalarni matn kursori bilan kezish mumkin. Rejimdan chiqish uchun F7 tugmasini bosing.</translation> @@ -4187,6 +4202,7 @@ <translation id="5794786537412027208">Barcha Chrome ilovalarini yopish</translation> <translation id="5797070761912323120">Qidiruv, rekama va boshqa xizmatlarni sizga moslashtirish uchun Google tarix maʼlumotlaringizdan foydalanishi mumkin</translation> <translation id="5798301976526354562">Matn hajmi (Jonli izohga ham tegishli)</translation> +<translation id="579907812742603813">himoyalangan kontent</translation> <translation id="579915268381781820">Elektron kalitingiz chiqarib olindi.</translation> <translation id="5799508265798272974">Linux virtual mashinasi: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Manzildagi fayl oxirgi yuklashdan so‘ng qisqartirilgan yoki olib tashlangan.</translation> @@ -4260,6 +4276,7 @@ <translation id="5877064549588274448">Kanal o‘zgartirildi. O‘zgartirishlar kuchga kirishi uchun qurilmani qayta ishga tushiring.</translation> <translation id="5877584842898320529">Bu printer mavjud emas yoki noto‘g‘ri o‘rnatilgan.<ph name="BR" /> Uni tekshirib ko‘ring yoki boshqasini tanlang.</translation> <translation id="5882919346125742463">Tanish tarmoqlar</translation> +<translation id="5883356647197510494">Avtomatik bloklandi: <ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Bu sahiva USB qurilmaga ulangan.</translation> <translation id="5886009770935151472">Barmoq izi 1</translation> <translation id="5889282057229379085">SM o‘rtachalarining maksimal miqdori: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4759,6 +4776,7 @@ <translation id="6460601847208524483">Keyingisini topish</translation> <translation id="6461170143930046705">Tarmoqlar qidirilmoqda...</translation> <translation id="6463795194797719782">&O‘zgartirish...</translation> +<translation id="6464094930452079790">rasmlar</translation> <translation id="6464825623202322042">Shu qurilma</translation> <translation id="6465841119675156448">Internetsiz</translation> <translation id="6466988389784393586">Barcha xatcho‘plarni ochish</translation> @@ -4782,6 +4800,7 @@ <translation id="6491376743066338510">Tekshiruvda xatolik yuz berdi</translation> <translation id="6494327278868541139">Kuchaytirilgan himoya tafsilotlarini ochish</translation> <translation id="6494445798847293442">Sertifikatlashtirish markazi emas</translation> +<translation id="6494750904506170417">qalquvchi oyna va yoʻnaltirishlar</translation> <translation id="6494974875566443634">Moslashtirish</translation> <translation id="6495925982925244349">Tarmoq: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, Nomi: <ph name="NETWORK_NAME" />, Himoyasi: <ph name="SECURITY_STATUS" />, Ulanish: <ph name="CONNECTION_STATUS" />, Signal darajasi: <ph name="SIGNAL_STRENGTH" />%, Administrator boshqaruvida, Batafsil</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Bu maʼlumotlarda maxfiy yoki xavfli kontent bor}=1{Bu faylda maxfiy yoki xavfli kontent bor}other{Bu fayllarda maxfiy yoki xavfli kontent bor}}</translation> @@ -4922,6 +4941,7 @@ <translation id="6657585470893396449">Parol</translation> <translation id="6659213950629089752">Sahifa "<ph name="NAME" />" kengaytmasi tomonidan yaqinlashtirildi</translation> <translation id="6659594942844771486">Varaq</translation> +<translation id="6660413144148052430">joylashuv</translation> <translation id="666099631117081440">Chop etish serverlari</translation> <translation id="6663190258859265334"><ph name="DEVICE_TYPE" /> zavod sozlamalarini tiklash va eski versiyaga qaytarish.</translation> <translation id="6664237456442406323">Afsuski, kompyuteringiz noto‘g‘ri tuzilgan apparat identifikatori bilan sozlangan. Buning natijasida Chrome OS xavfsizlikka oid so‘nggi tuzatishlar bilan yangilanmaydi va kompyuteringiz <ph name="BEGIN_BOLD" />zararli hujumlarga ochiq qolishi mumkin<ph name="END_BOLD" />.</translation> @@ -4976,6 +4996,7 @@ <translation id="672609503628871915">Nimalar yangiligini ko‘ring</translation> <translation id="67269783048918309">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. Bu <ph name="BEGIN_LINK1" />parametr<ph name="END_LINK1" /> qurilma egasi tomonidan oʻrnatilgan. 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="6727969043791803658">Ulangan, batareya quvvati: <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">kamera</translation> <translation id="6732801395666424405">Sertifikatlar yuklanmadi</translation> <translation id="6732900235521116609">Yorliq olib tashlanmadi</translation> <translation id="6734468588183300211">Inkognito rejimida cookie fayllaringiz yopiq boʻladi va saytlar reklamalarni sizga moslashtirish uchun brauzerdagi faoliyatingizni kuzata olmaydi. Ayrim saytlardagi funksiyalar ishlamay qolishi mumkin.</translation> @@ -5050,6 +5071,7 @@ <translation id="6817174620439930047">Saytlar MIDI qurilmalarga ruxsat olish uchun tizim xabarlaridan foydalanmoqchi bo‘layotganda xabar berilsin (tavsiya etiladi)</translation> <translation id="6818198425579322765">Tarjima qilinadigan sahifa tili</translation> <translation id="6818802132960437751">Viruslardan ichki himoya</translation> +<translation id="6820143000046097424">ketma-ket portlar</translation> <translation id="682123305478866682">Ish stoli translatsiyasi</translation> <translation id="6823174134746916417">Sensorli panelni ohista teginib bosish</translation> <translation id="6824564591481349393">&E-pochta manzilini nusxalash</translation> @@ -5483,6 +5505,7 @@ <translation id="730515362922783851">Mahalliy tarmoq va internetdagi har qanday qurilma bilan ma’lumot almashinish</translation> <translation id="7306521477691455105"><ph name="USB_DEVICE_NAME" /> bilan <ph name="USB_VM_NAME" /> qurilmalarini ulash uchun Sozlamalarni oching</translation> <translation id="7307129035224081534">Vaqtincha to‘xtatildi</translation> +<translation id="7308436126008021607">orqa fonda sinxronlash</translation> <translation id="7309257895202129721">&Boshqaruv tugmalarini ko‘rsatish</translation> <translation id="7310598146671372464">Hisobga kirib bo‘lmadi. Server tanlangan Kerberos shifrlash usullari bilan mos emas. Administrator bilan bog‘laning.</translation> <translation id="7320213904474460808">Standart tarmoqni tanlash</translation> @@ -5624,6 +5647,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Qurilmani zudlik bilan qaytaring}other{<ph name="DEVICE_TYPE" /> qurilmasini {NUM_DAYS} kunda qaytaring}}</translation> <translation id="7475671414023905704">Netscape yo‘qotilgan parollar URL manzili</translation> <translation id="7476454130948140105">Batareya quvvati yetarli emas (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Avtomatik bloklandi: <ph name="PERMISSION" /> va yana <ph name="COUNT" /> ta</translation> <translation id="7477793887173910789">Multimedia boshqaruvi</translation> <translation id="7478485216301680444">Kiosk-ilovani o‘rnatib bo‘lmadi.</translation> <translation id="7478623944308207463">Ilova va sozlamalaringiz Google hisobingiz bilan kirilgan barcha Chrome OS qurilmalaringizda sinxronlanadi. Brauzer sinxronizatsiyasi parametrlarini <ph name="LINK_BEGIN" />Chrome sozlamalari<ph name="LINK_END" /> orqali sozlash mumkin.</translation> @@ -6366,6 +6390,7 @@ <translation id="8288032458496410887"><ph name="APP" /> o‘chirilmoqda...</translation> <translation id="8289128870594824098">Disk hajmi</translation> <translation id="8293206222192510085">Xatcho‘p qo‘shish</translation> +<translation id="829335040383910391">tovush</translation> <translation id="8294431847097064396">Manba</translation> <translation id="8298429963694909221">Endi telefoningiz bildirishnomalarini <ph name="DEVICE_TYPE" /> qurilmangizda olishingiz mumkin. Bildirishnomalar <ph name="DEVICE_TYPE" /> qurilmasida yopilsa, ular telefonda ham yopiladi. Telefoningiz yoningizda va undagi Bluetooth, Wi-Fi yoniqligini tekshiring.</translation> <translation id="8299319456683969623">Ayni vaqtda siz internetsiz rejimda ishlayapsiz.</translation> @@ -6384,6 +6409,7 @@ <translation id="8317671367883557781">Yangi tarmoqqa ulanish</translation> <translation id="8319414634934645341">Kalitdan keng miqyosda foydalanish</translation> <translation id="8320459152843401447">Butun ekran</translation> +<translation id="8321476692217554900">bildirishnomalar</translation> <translation id="8321837372750396788">Bu <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> tomonidan boshqariladi.</translation> <translation id="8322814362483282060">Bu sahifaning mikrofoningizdan foydalanishi bloklandi.</translation> <translation id="8323167517179506834">URL manzil kiriting</translation> @@ -6449,7 +6475,9 @@ <translation id="8403562727702715619">Google Drive xizmatidan oxirgi fayllar</translation> <translation id="8407199357649073301">Jurnalga yozish darajasi:</translation> <translation id="8408068190360279472">Tarmoq: <ph name="NETWORK_TYPE" />, ulanmoqda</translation> +<translation id="8409413588194360210">toʻlov vositalari</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">Ruxsat berildi: <ph name="PERMISSION" /> va yana <ph name="COUNT" /> ta</translation> <translation id="8413385045638830869">Avval so‘ralsin (tavsiya etiladi)</translation> <translation id="8417548266957501132">Ota-ona paroli</translation> <translation id="8418445294933751433">&Ichki oyna sifatida ko‘rsatish</translation> @@ -6645,6 +6673,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> yoki <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Tungi rejim rang harorati</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> quyidagi ruxsatlarni olmoqchi: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" /> va boshqa</translation> +<translation id="865032292777205197">harakat sensorlari</translation> <translation id="8650543407998814195">Eski profilga ruxsat berilmagan, lekin uni o‘chirib tashlashingiz mumkin.</translation> <translation id="8651585100578802546">Sahifani majburiy yangilash</translation> <translation id="8652400352452647993">Kengaytmani arxivlash xatoligi</translation> @@ -6781,6 +6810,7 @@ <translation id="8785622406424941542">Stilus</translation> <translation id="8787254343425541995">Umumiy tarmoqlarga proksi-serverlardan foydalanishga ruxsat berish</translation> <translation id="8791534160414513928">Chiquvchi trafik kuzatilmasligi so‘rovini jo‘natish</translation> +<translation id="8792626944327216835">mikrofon</translation> <translation id="879413103056696865">Hotspot yoniq ekanligida, <ph name="PHONE_NAME" />:</translation> <translation id="8795916974678578410">Yangi oyna</translation> <translation id="8797459392481275117">Bu sayt hech qachon tarjima qilinmasin</translation> @@ -6820,6 +6850,7 @@ <translation id="8823559166155093873">Cookie fayllarni bloklash</translation> <translation id="8823704566850948458">Parol yaratish...</translation> <translation id="8824701697284169214">Sahifa &qo‘shish...</translation> +<translation id="8827125715368568315">Bloklandi: <ph name="PERMISSION" /> va yana <ph name="COUNT" /> ta</translation> <translation id="8827289157496676362">Kengaytmani mahkamlash</translation> <translation id="8827752199525959199">Qo‘shimcha amallar, <ph name="DOMAIN" /> domenidagi <ph name="USERNAME" /> hisobi uchun parol</translation> <translation id="882854468542856424">Saytlarga atrofdagi Bluetooth qurilmalarni tekshirishni taqiqlash</translation> @@ -6920,6 +6951,7 @@ <translation id="8932894639908691771">Switch Access parametrlari</translation> <translation id="8933960630081805351">Finder’da ko‘rsatish</translation> <translation id="8934732568177537184">Davom etish</translation> +<translation id="8938306522009698937">ishlov berish vositalari</translation> <translation id="8938800817013097409">USB-C qurilma (orqa tomondagi o‘ng port)</translation> <translation id="8940081510938872932">Ayni paytda kompyuteringiz o‘ta ko‘p ishlarni bajarmoqda. Keyinroq urinib ko‘ring.</translation> <translation id="8941173171815156065">“<ph name="PERMISSION" />” ruxsatnomalarini bekor qilish</translation> @@ -7225,6 +7257,7 @@ <translation id="987264212798334818">Umumiy</translation> <translation id="987897973846887088">Hech narsa topilmadi</translation> <translation id="988978206646512040">Kodli ibora kiritilishi majburiy</translation> +<translation id="991413375315957741">harakat va yorugʻlik sensorlari</translation> <translation id="992032470292211616">Kengaytma, ilova va mavzular mobil qurilmangizga zararli bo‘lishi mumkin. Davom ettirilsinmi?</translation> <translation id="992256792861109788">Pushti</translation> <translation id="992592832486024913">ChromeVox‘ni (ovozli ta’rif) o‘chirib qo‘yish</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 0eb079f..91554b4 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -233,6 +233,7 @@ <translation id="125220115284141797">預設</translation> <translation id="1252987234827889034">設定檔發生錯誤</translation> <translation id="1254593899333212300">直接連線到互聯網</translation> +<translation id="1257553931232494454">縮放等級</translation> <translation id="1259152067760398571">昨天已執行安全檢查</translation> <translation id="1260451001046713751">一律顯示 <ph name="HOST" /> 的彈出式視窗及重新導向</translation> <translation id="1261380933454402672">普通模式</translation> @@ -671,6 +672,7 @@ <translation id="1729533290416704613">這個擴充功能也會控管您使用網址列搜尋時所顯示的網頁。</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />如要移除應用程式,請前往「設定」>「Google Play 商店」>「管理 Android 偏好設定」>「應用程式」或「應用程式管理員」,然後輕按您想解除安裝的應用程式 (您可能需要向右或向左滑動,才能找到應用程式),再輕按 [解除安裝] 或 [停用]。<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">正在傳送要求…</translation> +<translation id="1733064249834771892">字型</translation> <translation id="1733383495376208985">使用您的<ph name="BEGIN_LINK" />同步密碼短語<ph name="END_LINK" />,加密已同步處理的資料。Google Pay 的付款方法和地址不會包括在內。</translation> <translation id="1734212868489994726">淺藍色</translation> <translation id="1734230530703461088">無法在時限內載入擴充程式,請聯絡您的管理員。</translation> @@ -758,6 +760,7 @@ <translation id="1818913467757368489">正在上載記錄。</translation> <translation id="1819721979226826163">輕按 [應用程式通知] > [Google Play 服務]。</translation> <translation id="1820028137326691631">輸入管理員提供的密碼</translation> +<translation id="182139138257690338">自動下載</translation> <translation id="1822140782238030981">已是 Chrome 使用者嗎?請登入</translation> <translation id="18245044880483936">備份資料將不會佔用您子女的「雲端硬碟」儲存空間配額。</translation> <translation id="1825565032302550710">連接埠必須介乎 1024 和 65535 之間</translation> @@ -1198,6 +1201,7 @@ <translation id="2326931316514688470">重新載入應用程式(&R)</translation> <translation id="2327492829706409234">啟用應用程式</translation> <translation id="2328561734797404498">請重新啟動裝置,以便使用 <ph name="APP_NAME" />。</translation> +<translation id="2329182534073751090">放置視窗</translation> <translation id="2329597144923131178">登入後,即可從您使用的任何裝置取得自己的書籤、歷史記錄、密碼和其他設定。</translation> <translation id="2332131598580221120">前往商店檢視</translation> <translation id="2332192922827071008">開啟偏好設定</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">在群組中新增分頁</translation> <translation id="289644616180464099">SIM 卡已鎖定</translation> <translation id="289695669188700754">金鑰識別碼:<ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">當您關閉所有無痕式視窗時,系統將會移除此自訂設定</translation> <translation id="2897878306272793870">您確定要開啟 <ph name="TAB_COUNT" /> 分頁嗎?</translation> <translation id="290105521672621980">檔案使用的功能不受支援</translation> <translation id="2902127500170292085">「<ph name="EXTENSION_NAME" />」無法與此打印機通訊。請確定已插上打印機,然後再試一次。</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">系統已使用您的同步密碼短語加密資料。Google Pay 的付款方法和地址不會包括在內。</translation> <translation id="2996722619877761919">長邊翻頁</translation> <translation id="3000236644796679448">網站可要求使用麥克風 (建議)</translation> +<translation id="3000378525979847272">已允許<ph name="PERMISSION_1" />、<ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">單聲道音效</translation> <translation id="3001144475369593262">兒童帳戶</translation> <translation id="3003144360685731741">慣用網絡</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">在預覽中開啟 PDF</translation> <translation id="3308116878371095290">無法為這個網頁設定 Cookie。</translation> <translation id="3308134619352333507">隱藏按鈕</translation> +<translation id="3308738399950580893">廣告</translation> <translation id="3308852433423051161">正在載入「Google 助理」…</translation> <translation id="3309330461362844500">憑證設定檔 ID</translation> <translation id="3311445899360743395">系統可能會從裝置中移除與此應用程式相關的資料。</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">此檔案已加密。請要求擁有者解密。</translation> <translation id="3390013585654699824">應用程式詳情</translation> <translation id="3390741581549395454">已成功備份 Linux 應用程式和檔案。升級即將開始。</translation> +<translation id="3391482648489541560">編輯檔案</translation> <translation id="339178315942519818">在 <ph name="DEVICE_TYPE" /> 上查看即時通訊應用程式的通知</translation> <translation id="3396800784455899911">按一下 [接受並繼續] 按鈕,即表示您同意上述的 Google 服務處理程序。.</translation> <translation id="3399432415385675819">通知將會停用</translation> @@ -2893,6 +2901,7 @@ <translation id="425573743389990240">電池放電速率 (瓦特) (如為負值,表示電池正在充電)</translation> <translation id="4256316378292851214">另存影片(&V)…</translation> <translation id="4258348331913189841">檔案系統</translation> +<translation id="4259381619085088639">您的狀態</translation> <translation id="4259388776256904261">請稍候片刻</translation> <translation id="4260182282978351200"><ph name="FILE_NAME" /> 可能不安全。要傳送到「Google 進階保護」進行掃瞄嗎?按住 Shift+F6 鍵即可切換至下載內容列的位置。</translation> <translation id="4263223596040212967">請檢查您的鍵盤版面配置,然後再試一次。</translation> @@ -2929,6 +2938,7 @@ <translation id="4303079906735388947">為安全密鑰設定新的 PIN</translation> <translation id="4305402730127028764">複製到「<ph name="DEVICE_NAME" />」</translation> <translation id="4306119971288449206">應用程式的內容類型應設為「<ph name="CONTENT_TYPE" />」</translation> +<translation id="4306812610847412719">剪貼簿</translation> <translation id="4307992518367153382">基本</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K 使用中)</translation> <translation id="4310139701823742692">檔案格式錯誤。請檢查 PPD 檔案,然後再試一次。</translation> @@ -3016,6 +3026,7 @@ <translation id="4412698727486357573">說明中心</translation> <translation id="44141919652824029">允許「<ph name="APP_NAME" />」取得已連結 USB 裝置的清單嗎?</translation> <translation id="4414232939543644979">新增無痕式視窗(&I)</translation> +<translation id="4414515549596849729">Cookie 和網站數據</translation> <translation id="4415213869328311284">您的 <ph name="DEVICE_TYPE" /> 已準備就緒。</translation> <translation id="4415245286584082850">搵唔到裝置。你可以喺新分頁度開啟說明中心文章。</translation> <translation id="4415276339145661267">管理您的 Google 帳戶</translation> @@ -3087,6 +3098,7 @@ <translation id="4493468155686877504">建議大小 (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">不要在這個網頁上顯示</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> 發生錯誤,已停止運作</translation> +<translation id="4500587658229086076">不安全的內容</translation> <translation id="450099669180426158">感嘆號圖示</translation> <translation id="4501530680793980440">確認移除</translation> <translation id="4502423230170890588">從此裝置中移除</translation> @@ -3127,6 +3139,7 @@ <translation id="4538684596480161368">永遠在 <ph name="HOST" /> 上封鎖無沙箱防護的外掛程式</translation> <translation id="4538792345715658285">由公司政策安裝</translation> <translation id="4541662893742891060">無法連線至此設定檔。如需技術支援,請聯絡您的流動網絡供應商。</translation> +<translation id="4541810033354695636">擴張實境</translation> <translation id="4542520061254486227">讀取您在 <ph name="WEBSITE_1" /> 和 <ph name="WEBSITE_2" /> 上的資料</translation> <translation id="4543778593405494224">憑證管理員</translation> <translation id="4544174279960331769">預設藍色圖片</translation> @@ -3599,6 +3612,7 @@ <translation id="5112577000029535889">開發人員工具(&D)</translation> <translation id="5113739826273394829">按一下這個圖示後,您就會手動鎖定這部 <ph name="DEVICE_TYPE" />。下次使用時,您必須輸入密碼才可進入。</translation> <translation id="51143538739122961">插入並輕觸安全密鑰</translation> +<translation id="5114987907971894280">虛擬實境</translation> <translation id="5115309401544567011">請將 <ph name="DEVICE_TYPE" /> 接駁電源。</translation> <translation id="5115338116365931134">SSO</translation> <translation id="5116628073786783676">另存音效檔案(&V)…</translation> @@ -3898,6 +3912,7 @@ <translation id="5464632865477611176">執行 (只限這次)</translation> <translation id="5464660706533281090">兒童使用者無法變更此設定。</translation> <translation id="5466374726908360271">貼上並搜尋「<ph name="SEARCH_TERMS" />」 (&S)</translation> +<translation id="5467207440419968613">已封鎖<ph name="PERMISSION_1" />、<ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">網站可要求播放受保護的內容 (建議)</translation> <translation id="5468173180030470402">正在尋找檔案共用</translation> <translation id="5469852975082458401">您可使用文字游標導覽網頁。按 F7 即可關閉。</translation> @@ -4189,6 +4204,7 @@ <translation id="5794786537412027208">結束所有 Chrome 應用程式</translation> <translation id="5797070761912323120">Google 可能會使用您的記錄,為您提供個人化的搜尋服務、廣告和其他 Google 服務</translation> <translation id="5798301976526354562">文字大小 (亦適用於即時字幕)</translation> +<translation id="579907812742603813">受保護的內容</translation> <translation id="579915268381781820">您的安全密鑰已被移除。</translation> <translation id="5799508265798272974">Linux 虛擬機器:<ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">上次下載之後,目標檔案已被截斷或移除。</translation> @@ -4262,6 +4278,7 @@ <translation id="5877064549588274448">版本已變更。請重新啟動裝置以套用變更。</translation> <translation id="5877584842898320529">所選打印機無法使用或尚未正確安裝。<ph name="BR" />請檢查打印機,或嘗試選取其他打印機。</translation> <translation id="5882919346125742463">已知網絡</translation> +<translation id="5883356647197510494">已自動封鎖<ph name="PERMISSION_1" />、<ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">此分頁已連接至 USB 裝置。</translation> <translation id="5886009770935151472">手指 1</translation> <translation id="5889282057229379085">中繼 CA 數目上限:<ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4761,6 +4778,7 @@ <translation id="6460601847208524483">尋找下一個項目</translation> <translation id="6461170143930046705">正在搜尋網絡...</translation> <translation id="6463795194797719782">編輯(&E)</translation> +<translation id="6464094930452079790">圖片</translation> <translation id="6464825623202322042">此裝置</translation> <translation id="6465841119675156448">不使用互聯網</translation> <translation id="6466988389784393586">開啟所有書籤(&O)</translation> @@ -4784,6 +4802,7 @@ <translation id="6491376743066338510">授權失敗</translation> <translation id="6494327278868541139">顯示進階保護功能詳情</translation> <translation id="6494445798847293442">不是憑證授權單位</translation> +<translation id="6494750904506170417">彈出式視窗和重新導向</translation> <translation id="6494974875566443634">自訂</translation> <translation id="6495925982925244349">第 <ph name="NETWORK_INDEX" /> 個網絡,一共有 <ph name="NETWORK_COUNT" /> 個網絡,<ph name="NETWORK_NAME" />,<ph name="SECURITY_STATUS" />,<ph name="CONNECTION_STATUS" />,訊號強度係 <ph name="SIGNAL_STRENGTH" />%,由管理員管理,詳情</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{此資料含有敏感或危險的內容}=1{此檔案含有敏感或危險的內容}other{這些檔案含有敏感或危險的內容}}</translation> @@ -4924,6 +4943,7 @@ <translation id="6657585470893396449">密碼</translation> <translation id="6659213950629089752">「<ph name="NAME" />」擴充功能已調整這個專頁的大小</translation> <translation id="6659594942844771486">分頁</translation> +<translation id="6660413144148052430">位置</translation> <translation id="666099631117081440">列印伺服器</translation> <translation id="6663190258859265334">在 <ph name="DEVICE_TYPE" /> 上執行 Powerwash 並返回先前的版本。</translation> <translation id="6664237456442406323">抱歉,您的電腦是由格式錯誤的硬件 ID 所設定。這樣會防止 Chrome 作業系統更新最新的安全性修復,您的電腦也可能<ph name="BEGIN_BOLD" />容易被惡意攻擊<ph name="END_BOLD" />。</translation> @@ -4978,6 +4998,7 @@ <translation id="672609503628871915">查看最新內容</translation> <translation id="67269783048918309">傳送使用情況和診斷資料。此裝置目前會自動將診斷、裝置及應用程式的使用情況資料傳送至 Google。這些資料不會用來識別您子女的身分,而是用於改善系統和應用程式的穩定性和其他效能。部分彙整資料也會用於協助 Google 應用程式與合作夥伴 (例如 Android 開發人員)。擁有者可強制執行此<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />。如果已為子女開啟其他「網絡及應用程式活動記錄」設定,系統可能會將此資料儲存至其 Google 帳戶。<ph name="BEGIN_LINK2" />瞭解詳情<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">已連接,電量為 <ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">攝錄機</translation> <translation id="6732801395666424405">未載入憑證</translation> <translation id="6732900235521116609">無法移除捷徑</translation> <translation id="6734468588183300211">在無痕模式中,網站不能使用 Cookie 查看您在各網站的瀏覽活動,例如放送個人化廣告。有些網站的功能可能會無法正常運作。</translation> @@ -5052,6 +5073,7 @@ <translation id="6817174620439930047">在網站要使用系統專有訊息存取 MIDI 裝置時詢問您 (建議)</translation> <translation id="6818198425579322765">要翻譯的網頁語言</translation> <translation id="6818802132960437751">內置防毒功能</translation> +<translation id="6820143000046097424">序列連接埠</translation> <translation id="682123305478866682">投放桌面</translation> <translation id="6823174134746916417">觸控板輕按點撃功能</translation> <translation id="6824564591481349393">複製電郵地址(&E)</translation> @@ -5485,6 +5507,7 @@ <translation id="730515362922783851">與區域網絡或互聯網中的任何裝置交換數據</translation> <translation id="7306521477691455105">開啟「設定」即可將 <ph name="USB_DEVICE_NAME" /> 連接至 <ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">已暫停</translation> +<translation id="7308436126008021607">背景同步處理</translation> <translation id="7309257895202129721">顯示控制介面(&C)</translation> <translation id="7310598146671372464">無法登入。伺服器不支援特定的 Kerberos 加密類型。請聯絡您的管理員。</translation> <translation id="7320213904474460808">預設網絡</translation> @@ -5626,6 +5649,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{需要立即歸還}other{請在 {NUM_DAYS} 天內歸還 <ph name="DEVICE_TYPE" />}}</translation> <translation id="7475671414023905704">Netscape 遺失密碼網址</translation> <translation id="7476454130948140105">電量過低,無法更新 (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">已自動封鎖<ph name="PERMISSION" />和其他 <ph name="COUNT" /> 個項目</translation> <translation id="7477793887173910789">控制音樂、影片及其他內容</translation> <translation id="7478485216301680444">Kiosk 應用程式無法安裝。</translation> <translation id="7478623944308207463">您的應用程式和設定將會同步至所有您使用 Google 帳戶登入的 Chrome 作業系統裝置。如要瞭解瀏覽器同步選項,請前往 <ph name="LINK_BEGIN" />Chrome 設定<ph name="LINK_END" />。</translation> @@ -6369,6 +6393,7 @@ <translation id="8288032458496410887">解除安裝 <ph name="APP" />…</translation> <translation id="8289128870594824098">磁碟大小</translation> <translation id="8293206222192510085">新增書籤</translation> +<translation id="829335040383910391">音效</translation> <translation id="8294431847097064396">來源</translation> <translation id="8298429963694909221">您現在可在 <ph name="DEVICE_TYPE" /> 上接收手機的通知。在 <ph name="DEVICE_TYPE" /> 上關閉通知,您手機上的通知也會關閉。請確認您的手機在附近,且已開啟藍牙和 Wi-Fi。</translation> <translation id="8299319456683969623">您目前處於離線狀態。</translation> @@ -6387,6 +6412,7 @@ <translation id="8317671367883557781">新增網絡連線</translation> <translation id="8319414634934645341">擴充金鑰使用方法</translation> <translation id="8320459152843401447">整個畫面</translation> +<translation id="8321476692217554900">通知</translation> <translation id="8321837372750396788">此 <ph name="DEVICE_TYPE" /> 將由 <ph name="MANAGER" /> 管理。</translation> <translation id="8322814362483282060">系統已封鎖這個網頁存取您的麥克風。</translation> <translation id="8323167517179506834">輸入網址</translation> @@ -6452,7 +6478,9 @@ <translation id="8403562727702715619">最近使用過的 Google 雲端硬碟檔案</translation> <translation id="8407199357649073301">記錄等級:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" />網絡,正在連線</translation> +<translation id="8409413588194360210">付款處理常式</translation> <translation id="8410775397654368139">Google Play</translation> +<translation id="8412136526970428322">已允許<ph name="PERMISSION" />和其他 <ph name="COUNT" /> 個項目</translation> <translation id="8413385045638830869">事先詢問 (建議)</translation> <translation id="8417548266957501132">家長密碼</translation> <translation id="8418445294933751433">顯示為分頁(&S)</translation> @@ -6647,6 +6675,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" />或<ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">「夜燈模式」色溫</translation> <translation id="8648544143274677280"><ph name="SITE_NAME" /> 需要你批准:<ph name="FIRST_PERMISSION" />、<ph name="SECOND_PERMISSION" />等等</translation> +<translation id="865032292777205197">動作感應器</translation> <translation id="8650543407998814195">您無法再存取舊設定檔,但可將其移除。</translation> <translation id="8651585100578802546">強制重新載入這個網頁</translation> <translation id="8652400352452647993">封裝擴充程式錯誤</translation> @@ -6783,6 +6812,7 @@ <translation id="8785622406424941542">觸控筆</translation> <translation id="8787254343425541995">允許共用網絡使用 Proxy</translation> <translation id="8791534160414513928">將「不追蹤」要求與瀏覽流量一併傳送</translation> +<translation id="8792626944327216835">麥克風</translation> <translation id="879413103056696865">開啟熱點時,您的 <ph name="PHONE_NAME" /> 將會:</translation> <translation id="8795916974678578410">開啟新視窗</translation> <translation id="8797459392481275117">永不翻譯此網站的內容</translation> @@ -6822,6 +6852,7 @@ <translation id="8823559166155093873">封鎖 Cookie</translation> <translation id="8823704566850948458">建議密碼…</translation> <translation id="8824701697284169214">新增網頁(&G)…</translation> +<translation id="8827125715368568315">已封鎖<ph name="PERMISSION" />和其他 <ph name="COUNT" /> 個項目</translation> <translation id="8827289157496676362">固定擴充功能</translation> <translation id="8827752199525959199">更多操作,<ph name="USERNAME" /> 喺 <ph name="DOMAIN" /> 上面嘅密碼</translation> <translation id="882854468542856424">不允許任何網站探索附近的藍牙裝置</translation> @@ -6922,6 +6953,7 @@ <translation id="8932894639908691771">「按鈕控制」選項</translation> <translation id="8933960630081805351">在 Finder 中顯示(&S)</translation> <translation id="8934732568177537184">繼續</translation> +<translation id="8938306522009698937">處理常式</translation> <translation id="8938800817013097409">USB-C 裝置 (後方右側連接埠)</translation> <translation id="8940081510938872932">您的電腦目前處理的項目太多。請稍後再試。</translation> <translation id="8941173171815156065">撤銷「<ph name="PERMISSION" />」權限</translation> @@ -7226,6 +7258,7 @@ <translation id="987264212798334818">一般</translation> <translation id="987897973846887088">沒有可用的圖片</translation> <translation id="988978206646512040">密碼短語欄位不得留空</translation> +<translation id="991413375315957741">動態或光線感應器</translation> <translation id="992032470292211616">擴充功能、應用程式和主題可能會損害您的裝置,您確定要繼續嗎?</translation> <translation id="992256792861109788">粉紅色</translation> <translation id="992592832486024913">停用 ChromeVox (互動朗讀)</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 8994ce0e..33801b2b 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -234,6 +234,7 @@ <translation id="125220115284141797">Zenzekela</translation> <translation id="1252987234827889034">Kuvele iphutha lephrofayela</translation> <translation id="1254593899333212300">Qondisa ukuxhumeka kwe-inthanethi</translation> +<translation id="1257553931232494454">amaleveli okusondeza</translation> <translation id="1259152067760398571">Ukuhlola kokuphepha kusebenze izolo</translation> <translation id="1260451001046713751">Hlala uvumela okwesikhashana nokuqondiswa kabusha kusukela ku-<ph name="HOST" /></translation> <translation id="1261380933454402672">Thobekile</translation> @@ -670,6 +671,7 @@ <translation id="1729533290416704613">Iphinda ilawule ukuthi yiliphi ikhasi eliboniswayo uma usesha kusuka ku-Omnibox.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Ukuze ususe izinhlelo zokusebenza, iya kuzilungiselelo > isiphathi sezinhlelo zokusebenza noma uhlelo lokusebenza. Bese uthephe uhlelo lokusebenza ofuna ukulikhipha (ungadinga ukuswayiphela ngakwesokudla noma ngakwesokunxele ukuze uthole uhlelo lokusebenza). Bese uthephe okuthi Khipha noma Khubaza.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Ithumela isicelo...</translation> +<translation id="1733064249834771892">amafonti</translation> <translation id="1733383495376208985">Bethela idatha evumelanisiwe <ph name="BEGIN_LINK" />nomshwana wakho wokungena wokuvumelanisa<ph name="END_LINK" />. Lokhu akubandakanyi izindlela zokukokha namakheli kusuka ku-Google Pay.</translation> <translation id="1734212868489994726">Okuluhlaza okwesibhakabhaka okukhanyayo</translation> <translation id="1734230530703461088">Yehlulekile ukulayisha izandiso eziphakathi nomkhawulo wesikhathi. Sicela uxhumane nomlawuli wakho.</translation> @@ -757,6 +759,7 @@ <translation id="1818913467757368489">Ukulayishwa kwelogu kuyaqhubeka.</translation> <translation id="1819721979226826163">Thepha izaziso zohlelo lokusebenza > Amasevisi e-Google Play.</translation> <translation id="1820028137326691631">Faka iphasiwedi enikezwe umphathi</translation> +<translation id="182139138257690338">ukulandwa okuzenzakalelayo</translation> <translation id="1822140782238030981">Usuvele ungumsebenzisi we-Chrome? Ngena ngemvume</translation> <translation id="18245044880483936">Idatha yesipele ngeke ibalwe ukuya kusitoreji se-quota ye-Drayivu yengane yakho.</translation> <translation id="1825565032302550710">Imbobo kufanele ibe phakathi kuka-1024 no-65535</translation> @@ -1197,6 +1200,7 @@ <translation id="2326931316514688470">&Phinda ulayishe uhlelo lokusebenza</translation> <translation id="2327492829706409234">Nika amandla uhlelo lokusebenza</translation> <translation id="2328561734797404498">Sicela uqale kabusha idivayisi yakho ukusebenzisa i-<ph name="APP_NAME" />.</translation> +<translation id="2329182534073751090">ukubekwa kwewindi</translation> <translation id="2329597144923131178">Ngena ngemvume ukuze uthole amabhukhimakhi wakho, umlando, amaphasiwedi, nezinye izilungiselelo kuwo wonke amadivayisi wakho.</translation> <translation id="2332131598580221120">Buka esitolo</translation> <translation id="2332192922827071008">Vula okuthandayo</translation> @@ -1709,6 +1713,7 @@ <translation id="2894757982205307093">Ithebhu entsha kuqembu</translation> <translation id="289644616180464099">I-SIM card ikhiyiwe</translation> <translation id="289695669188700754">I-ID engukhiye: <ph name="KEY_ID" /></translation> +<translation id="2897713966423243833">Leli sethingi elingokwezifiso lizosuswa uma uvala wonke amawindi akho we-Incognito</translation> <translation id="2897878306272793870">Ingabe uqinisekile ukuthi ufuna ukuvula amathebhu angu-<ph name="TAB_COUNT" />?</translation> <translation id="290105521672621980">Ifayela lisebenzisa izici ezingasekelwe</translation> <translation id="2902127500170292085">I-<ph name="EXTENSION_NAME" /> ayikwazanga ukuxhumana nale phrinta. Qiniseka ukuthi iphrinta ixhunyiwe uphinde uzame futhi.</translation> @@ -1798,6 +1803,7 @@ <translation id="2996286169319737844">Idatha ibethelwe ngomshwana wakho wokungena wokuvumelanisa. Lokhu akubandakanyi izindlela zokukhokha kusuka ku-Google Pay.</translation> <translation id="2996722619877761919">Phendukisa kunqenqema olude</translation> <translation id="3000236644796679448">Amasayithi angacela ukusebenzisa imakrofoni yakho (kunconyiwe)</translation> +<translation id="3000378525979847272">Kuvunyelwe i-<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="3000461861112256445">Umsindo we-mono</translation> <translation id="3001144475369593262">Ama-akhawunti wezingane</translation> <translation id="3003144360685731741">Amanethiwekhi ancanyelwayo</translation> @@ -2057,6 +2063,7 @@ <translation id="3305661444342691068">Vula i-PDF ekubukeni kuqala</translation> <translation id="3308116878371095290">Leli khasi livinjelwe kusuka ekusetheni amakhukhi.</translation> <translation id="3308134619352333507">Fihla inkinobho</translation> +<translation id="3308738399950580893">izikhangiso</translation> <translation id="3308852433423051161">Ilayisha umsizi we-Google...</translation> <translation id="3309330461362844500">I-ID yephrofayela yesitifiketi</translation> <translation id="3311445899360743395">Idatha ehlobene nalolu hlelo lokusebenza izosuswa kule divayisi.</translation> @@ -2117,6 +2124,7 @@ <translation id="3388788256054548012">Leli fayela libetheliwe. Cela umnikazi walo ukuthi asuse ukubethela.</translation> <translation id="3390013585654699824">Imininingwane yohlelo lokusebenza</translation> <translation id="3390741581549395454">Izinhlelo zokusebenza namafayela enziwe isipele ngempumelelo. Ukuthuthukiswa kuzoqala maduze.</translation> +<translation id="3391482648489541560">ukuhlelwa kwefayela</translation> <translation id="339178315942519818">Buka izaziso kusuka kwizinhlelo zakho zokusebenza zengxoxo ku-<ph name="DEVICE_TYPE" /> yakho</translation> <translation id="3396800784455899911">Ngokuchofoza inkinobho ethi "Yamuleka uphinde uqhubeke", uvumela inqubomgomo echazwe ngaphezulu yalawa masevisi e-Google.</translation> <translation id="3399432415385675819">Izaziso zizokhutshazwa</translation> @@ -2892,6 +2900,7 @@ <translation id="425573743389990240">Ukulinganisela kokukhishwa kwebhethri ngama-watt (inani elingelihle lisho ukuthi ibhethri liyashaja)</translation> <translation id="4256316378292851214">Londoloza ividiyo njenge...</translation> <translation id="4258348331913189841">Amasistimu wefayela</translation> +<translation id="4259381619085088639">ubukhona bakho</translation> <translation id="4259388776256904261">Lokhu kungathatha isikhathi</translation> <translation id="4260182282978351200">I-<ph name="FILE_NAME" /> ingaba yingozi. Thumela Ekuvikelweni Okuthuthukile kwe-Google ukuze kuskenwe? Cindezela ku-Shift+F6 ukuze wenze umjikelezo kundawo yebha yokulanda.</translation> <translation id="4263223596040212967">Hlola isendlalelo sekhibhodi yakho bese uyazama futhi.</translation> @@ -2928,6 +2937,7 @@ <translation id="4303079906735388947">Setha i-PIN entsha yokhiye wakho wokuqinisekisa ubunikazi</translation> <translation id="4305402730127028764">Kopishela ku-<ph name="DEVICE_NAME" /></translation> <translation id="4306119971288449206">Izinhlelo zokusebenza kumele zinikezwe ngohlobo lokuqukethwe kwe-"<ph name="CONTENT_TYPE" />"</translation> +<translation id="4306812610847412719">ibhodi yokunamathisela</translation> <translation id="4307992518367153382">Izisekelo</translation> <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K bukhoma)</translation> <translation id="4310139701823742692">Ifayela liyifomethi engalungile. Hlola ifayela le-PPD uphinde uzame futhi.</translation> @@ -3015,6 +3025,7 @@ <translation id="4412698727486357573">Isikhungo sosizo</translation> <translation id="44141919652824029">Vumela i-"<ph name="APP_NAME" />" ukuze uthole uhlu lwamadivayisi akho e-USB olunamathiselwe?</translation> <translation id="4414232939543644979">Iwindi elisha le-&Incognito</translation> +<translation id="4414515549596849729">amakhukhi nedatha yesayithi</translation> <translation id="4415213869328311284">Sewukulungele ukuqala usebenzise i-<ph name="DEVICE_TYPE" /> yakho.</translation> <translation id="4415245286584082850">Awekho amadivayisi atholakele. Vula i-athikili yesikhungo sosizo kuthebhu entsha.</translation> <translation id="4415276339145661267">Lawula i-akhawunti yakho ye-Google</translation> @@ -3086,6 +3097,7 @@ <translation id="4493468155686877504">Kunconyiwe (<ph name="INSTALL_SIZE" />)</translation> <translation id="4495419450179050807">Ungabonisi kuleli khasi</translation> <translation id="4500114933761911433">I-<ph name="PLUGIN_NAME" /> ikhubazekile</translation> +<translation id="4500587658229086076">ouqukethwe okungavikelekile</translation> <translation id="450099669180426158">Isithonjana sophawu lesibabazo</translation> <translation id="4501530680793980440">Qinisekisa ukususwa</translation> <translation id="4502423230170890588">Susa kule divayisi</translation> @@ -3126,6 +3138,7 @@ <translation id="4538684596480161368">Hlala uvimbela ama-unsandboxed plugins ku-<ph name="HOST" /></translation> <translation id="4538792345715658285">Kufakwe ngenqubomgomo yebhizinisi.</translation> <translation id="4541662893742891060">Ayikwazi ukuxhuma kule phrofayela. Ngosekelo lwezobuchwepheshe, sicela uxhumane nenkampani yakho yenethiwekhi.</translation> +<translation id="4541810033354695636">i-augmented reality</translation> <translation id="4542520061254486227">Funda idatha yakho ku-<ph name="WEBSITE_1" /> naku-<ph name="WEBSITE_2" /></translation> <translation id="4543778593405494224">Isiphathi sesitifiketi</translation> <translation id="4544174279960331769">Isithombe esizenzakalelayo esiluhlaza okwesibhakabhaka</translation> @@ -3598,6 +3611,7 @@ <translation id="5112577000029535889">Amathuluzi onjiniyela</translation> <translation id="5113739826273394829">Uma uchofoza isithonjana, uzovala ngokwenza le <ph name="DEVICE_TYPE" />. Ngesikhathi esilandelayo, uzodinga ukuthayipha iphasiwedi yakho ukuze ungene.</translation> <translation id="51143538739122961">Faka ukhiye wakho wokuqinisekisa ubunikazi bese uwuthinte</translation> +<translation id="5114987907971894280">into engekho ngokoqobo</translation> <translation id="5115309401544567011">Sicela uxhume i-<ph name="DEVICE_TYPE" /> yakho kumthombo wamandla.</translation> <translation id="5115338116365931134">I-SSO</translation> <translation id="5116628073786783676">Lo&ndoloza umsindo njenge...</translation> @@ -3899,6 +3913,7 @@ <translation id="5464632865477611176">Qalisa ngalesi sikhathi</translation> <translation id="5464660706533281090">Lesi silungiselelo asikwazi ukushintshwa ngomsebenzisi wengane.</translation> <translation id="5466374726908360271">Nama&thisela bese useshe i-“<ph name="SEARCH_TERMS" />”</translation> +<translation id="5467207440419968613">Kuvinjiwe i-<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5468119583641912100">Amasayithi angacela ukudlala okuqukethwe okuvikelwe (kunconyiwe)</translation> <translation id="5468173180030470402">Ufuna ukwabelana kwefayela</translation> <translation id="5469852975082458401">Ungazulazula emakhasini nge-cursor yombhalo. Cindezela u-F7 ukuze uvale.</translation> @@ -4190,6 +4205,7 @@ <translation id="5794786537412027208">Yeka zonke izinhlelo zokusebenza ze-Chrome</translation> <translation id="5797070761912323120">I-Google ingasebenzisa umlando wakho ukuze yenze kube ngokwakho usesho, izikhangiso, namanye amasevisi e-Google</translation> <translation id="5798301976526354562">Usayizi wombhalo (Kusebenza futhi Kokushuthwe Bukhoma)</translation> +<translation id="579907812742603813">okuqukethwe okuvikelekile</translation> <translation id="579915268381781820">Ukhiye wakho wokuqinisekisa ubunikazi ususiwe.</translation> <translation id="5799508265798272974">I-Linux Virtual Machine: <ph name="LINUX_VM_NAME" /></translation> <translation id="5800020978570554460">Ifayela lendawo liye lancishiswa noma lasuswa kusukela ekulandweni kokugcina.</translation> @@ -4263,6 +4279,7 @@ <translation id="5877064549588274448">Isiteshi sishintshiwe. Qala kabusha idivayisi yakho ukuze usebenzise izinguquko.</translation> <translation id="5877584842898320529">Iphrintha ekhethiwe ayitholakali noma ayifakiwe ngokulungile. <ph name="BR" /> Hlola iphrinta yakho noma uzame ukukhetha enye iphrinta.</translation> <translation id="5882919346125742463">Amanethiwekhi aziwayo</translation> +<translation id="5883356647197510494">Kuvinjelwe ngokuzenzakalela i-<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /></translation> <translation id="5884474295213649357">Le thebhu ixhunywe kudivayisi ye-USB.</translation> <translation id="5886009770935151472">Umunwe 1</translation> <translation id="5889282057229379085">Inombolo enkulu yama-CA amaphakathi: <ph name="NUM_INTERMEDIATE_CA" /></translation> @@ -4762,6 +4779,7 @@ <translation id="6460601847208524483">Thola okulandelayo</translation> <translation id="6461170143930046705">Iseshela amanethiwekhi...</translation> <translation id="6463795194797719782">Hlela</translation> +<translation id="6464094930452079790">izithombe</translation> <translation id="6464825623202322042">Le divayisi</translation> <translation id="6465841119675156448">Ngaphandle kwe-inthanethi</translation> <translation id="6466988389784393586">&Vula wonke amabhukhimakhi</translation> @@ -4785,6 +4803,7 @@ <translation id="6491376743066338510">Ukugunyazwa kuhlulekile</translation> <translation id="6494327278868541139">Bonisa imininingwane yokuvikeleka okuthuthukisiwe</translation> <translation id="6494445798847293442">Akulona Igunya Lokuqinisekisa</translation> +<translation id="6494750904506170417">okwesikhashana nokuqondiswa kabusha</translation> <translation id="6494974875566443634">Ukwenza ngokwezifiso</translation> <translation id="6495925982925244349">Inethiwekhi <ph name="NETWORK_INDEX" /> ye-<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, amandla esignali <ph name="SIGNAL_STRENGTH" />%, kuphethwe umlawuli wakho, imininingwane</translation> <translation id="6497457470714179223">{NUM_FILES,plural, =0{Le datha inokuqukethwe okuzwelayo noma okuyingozi}=1{Leli fayela linokuqukethwe okuzwelayo noma okuyingozi}one{Lawa mafayela anokuqukethwe okuzwelayo noma okuyingozi}other{Lawa mafayela anokuqukethwe okuzwelayo noma okuyingozi}}</translation> @@ -4925,6 +4944,7 @@ <translation id="6657585470893396449">Igama lokungena</translation> <translation id="6659213950629089752">Leli khasi lisondezwe isandiso se-"<ph name="NAME" />"</translation> <translation id="6659594942844771486">Ithebhu</translation> +<translation id="6660413144148052430">indawo</translation> <translation id="666099631117081440">Amaseva wokuphrinta</translation> <translation id="6663190258859265334">Yenza i-powerwash idivayisi yakho ye-<ph name="DEVICE_TYPE" /> uphinde ubuyele kwinguqulo yangaphambilini.</translation> <translation id="6664237456442406323">Ngeshwa, ikhompyutha yakho ilungiselelwe nge-ID yezingxenyekazi zekhompyutha ezingekho kahle. Lokhu kuvimbela i-Chrome OS kusukela ekubuyekezeni ngokulungiswa kwakamuva kwezokuvikela futhi ikhompyutha yakho <ph name="BEGIN_BOLD" />ingaba sengcupheni yokuhlaselwa okuyingozo<ph name="END_BOLD" />.</translation> @@ -4979,6 +4999,7 @@ <translation id="672609503628871915">Bona okusha</translation> <translation id="67269783048918309">Thumela idatha yokusetshenziswa neyokuxilonga. Le divayisi manje ithumela ngokuzenzakalela idatha yokuxilonga, yedivayisi, neyokusetshenziswa kwedatha ku-Google. Lokhu ngeke kusetshenziselwe ukukhomba ingane yakho futhi kuzosiza ukuzinza kwesistimu nokohlelo lokusebenza nokunye ukuthuthukiswa. Enye idatha izophinda isize izinhlelo zokusebenza ze-Google nozakwethu, abafana nonjiniyela be-Android. Lesi <ph name="BEGIN_LINK1" />silungiselelo<ph name="END_LINK1" /> siphoqelelwa umnikazi. Uma isilungiselelo esingeziwe sewebhu nesohlelo lokusebenza sivulelwe ingane yakho, le datha ingalondolozwa ku-akhawunti yakhe ye-Google. <ph name="BEGIN_LINK2" />Funda kabanzi<ph name="END_LINK2" /></translation> <translation id="6727969043791803658">Ixhunyiwe, ibhethri ngu-<ph name="BATTERY_PERCENTAGE" />%</translation> +<translation id="6732087373923685049">ikhamera</translation> <translation id="6732801395666424405">Izitifiketi azilayishiwe</translation> <translation id="6732900235521116609">Ayikwazi ukususa isinqamuleli</translation> <translation id="6734468588183300211">Lapho uku-incognito, amasayithi awakwazi ukusebenzisa amakhukhi akho ukubona umsebenzi wakho wokuphequlula kumasayithi ahlukahlukene, ngokwesibonelo, ukwenza izikhangiso ngokwezifiso. Izici ezikwamanye amasayithi zingase zinqamuke.</translation> @@ -5053,6 +5074,7 @@ <translation id="6817174620439930047">Buza uma isayithi lifuna ukusebenzisa imilayezo ekhethekile yesistimu ukufinyelela kumadivayisi we-MIDI (kunconyiwe)</translation> <translation id="6818198425579322765">Ulimi lekhasi ongalihumusha</translation> <translation id="6818802132960437751">Ukuvikelwa kwegciwane okwakhelwe ngaphakathi</translation> +<translation id="6820143000046097424">izimbobo ze-serial</translation> <translation id="682123305478866682">Sakaza ideskthophu</translation> <translation id="6823174134746916417">Thinta ukuze uchofoze iphedi yokuthinta</translation> <translation id="6824564591481349393">Kopisha ikheli le-&imeyili</translation> @@ -5486,6 +5508,7 @@ <translation id="730515362922783851">Shintshisana ngedatha nganoma iyiphi idivayisi kunethiwekhi yasendaweni noma i-inthanethi</translation> <translation id="7306521477691455105">Vula Amasethingi ukuze uxhume i-<ph name="USB_DEVICE_NAME" /> ku-<ph name="USB_VM_NAME" /></translation> <translation id="7307129035224081534">Kumiswe okwesikhashana</translation> +<translation id="7308436126008021607">ukuvumelanisa ingemuva</translation> <translation id="7309257895202129721">Bonisa izilawuli</translation> <translation id="7310598146671372464">Yehlulekile ukungena ngemvume. Le seva ayisekeli izinhlobo ezithile zokubethela kwe-Kerberos. Sicela uxhumane nomlawuli wakho.</translation> <translation id="7320213904474460808">Okuzenzakalelayo ukuya kunethiwekhi</translation> @@ -5627,6 +5650,7 @@ <translation id="747507174130726364">{NUM_DAYS,plural, =1{Ukubuyisela okusheshayo kuyadingeka}one{Buyisela i-<ph name="DEVICE_TYPE" /> phakathi nezinsuku ezingu-{NUM_DAYS}}other{Buyisela i-<ph name="DEVICE_TYPE" /> phakathi nezinsuku ezingu-{NUM_DAYS}}}</translation> <translation id="7475671414023905704">I-Netscape ilahlekelwe yi-URL yephasiwedi</translation> <translation id="7476454130948140105">Ibhethri liphansi kakhulu ukuthi lingabuyekezwa (<ph name="BATTERY_PERCENT" />%)</translation> +<translation id="7476989672001283112">Kuvinjwe ngokuzenzakalelayo i-<ph name="PERMISSION" /> nokungu-<ph name="COUNT" /> ngaphezulu</translation> <translation id="7477793887173910789">Lawula umculo wakho, amavidiyo, nokuningi</translation> <translation id="7478485216301680444">Uhlelo lokusebenza lwekhiyoski alikwazanga ukufakwa.</translation> <translation id="7478623944308207463">Izinhlelo zokusebenza namasethingi kuzovumelanisa kuwo wonke amadivayisi we-Chrome OS lapho ongene khona ngemvume nge-akhawunti yakho ye-Google. Ukuthola izinketho zokuvumelanisa isiphequluli, iya kumasethingi we-<ph name="LINK_BEGIN" />Chrome<ph name="LINK_END" />.</translation> @@ -6370,6 +6394,7 @@ <translation id="8288032458496410887">Ikhipha i-<ph name="APP" />...</translation> <translation id="8289128870594824098">Usayizi wediski</translation> <translation id="8293206222192510085">Engeza ibhukhimakhi</translation> +<translation id="829335040383910391">umsindo</translation> <translation id="8294431847097064396">Umthombo</translation> <translation id="8298429963694909221">Manje ungathola izaziso kusukela kufoni yakho ku-<ph name="DEVICE_TYPE" /> yakho. Ukucashisa izaziso ku-<ph name="DEVICE_TYPE" /> yakho kuzophinda kuzicashise kufoni yakho. Yenza isiqinisekiso sokuthi ifoni yakho iseduze futhi ine-Bluetooth ne-Wi-Fi evuliwe.</translation> <translation id="8299319456683969623">Okwamanje awuxhunyiwe ku-inthanethi</translation> @@ -6388,6 +6413,7 @@ <translation id="8317671367883557781">Engeza uxhumo lenethiwekhi</translation> <translation id="8319414634934645341">Ukusetshenziswa kokhiye onwetshiwe</translation> <translation id="8320459152843401447">Isikrini sakho sonke</translation> +<translation id="8321476692217554900">izaziso</translation> <translation id="8321837372750396788">Le <ph name="DEVICE_TYPE" /> izophathwa i-<ph name="MANAGER" />.</translation> <translation id="8322814362483282060">Leli khasi livinjelwe kusukela ekufinyeleleni kumakrofoni yakho.</translation> <translation id="8323167517179506834">Thayipha i-URL</translation> @@ -6453,7 +6479,9 @@ <translation id="8403562727702715619">Okwakamuva okuvela ku-Google Drayivu</translation> <translation id="8407199357649073301">Ilogu Yefayela:</translation> <translation id="8408068190360279472"><ph name="NETWORK_TYPE" /> inethiwekhi, ukuxhuma</translation> +<translation id="8409413588194360210">izibambi zenkokhelo</translation> <translation id="8410775397654368139">I-Google Play</translation> +<translation id="8412136526970428322">Kuvunyelwe i-<ph name="PERMISSION" /> nokungu-<ph name="COUNT" /> ngaphezulu</translation> <translation id="8413385045638830869">Buza kuqala (kunconyiwe)</translation> <translation id="8417548266957501132">Iphasiwedi yomzali</translation> <translation id="8418445294933751433">Bonisa njengethebhu</translation> @@ -6649,6 +6677,7 @@ <translation id="8648252583955599667"><ph name="GET_HELP_LINK" /> noma <ph name="RE_SCAN_LINK" /></translation> <translation id="8648408795949963811">Umbala we-temperature yokukhanya kwasebusuku</translation> <translation id="8648544143274677280">I-<ph name="SITE_NAME" /> ifuna: <ph name="FIRST_PERMISSION" />, <ph name="SECOND_PERMISSION" />, nokuningi</translation> +<translation id="865032292777205197">izinzwa zokunyakaza</translation> <translation id="8650543407998814195">Nanoma ungasakwazi ukufinyelela kuphrofayela yakho endala, usengayisusa.</translation> <translation id="8651585100578802546">Phoqa ukuphinda ulayishe leli khasi</translation> <translation id="8652400352452647993">Iphutha lesandiso yephakethe</translation> @@ -6786,6 +6815,7 @@ <translation id="8785622406424941542">I-Stylus</translation> <translation id="8787254343425541995">Vumela omeleli kumanethiwekhi abiwe</translation> <translation id="8791534160414513928">Thumela isicelo "Sokungalandeleli" nethrafikhi yakho yokundlulisa amehlo</translation> +<translation id="8792626944327216835">imakrofoni</translation> <translation id="879413103056696865">Ngenkathi i-hotspot ivulekile, i-<ph name="PHONE_NAME" /> yakho izokwazi:</translation> <translation id="8795916974678578410">Iwindi elisha</translation> <translation id="8797459392481275117">Ungalokothi uhumushe leli sayithi</translation> @@ -6825,6 +6855,7 @@ <translation id="8823559166155093873">Vimba amakhukhi</translation> <translation id="8823704566850948458">Iphakamisa iphasiwedi...</translation> <translation id="8824701697284169214">Engeza ikha&si...</translation> +<translation id="8827125715368568315">Kuvinjwe i-<ph name="PERMISSION" /> nokungu-<ph name="COUNT" /> ngaphezulu</translation> <translation id="8827289157496676362">Isandiso sephinikhodi</translation> <translation id="8827752199525959199">Izenzo eziningi, amaphasiwedi ka-<ph name="USERNAME" /> ku-<ph name="DOMAIN" /></translation> <translation id="882854468542856424">Ungavumeli noma iliphi isayithi ukuthi lithole amadivayisi aseduze e-Bluetooth</translation> @@ -6925,6 +6956,7 @@ <translation id="8932894639908691771">Izinketho zokushintsha ukufinyeleleka</translation> <translation id="8933960630081805351">&Bonisa kusitholi</translation> <translation id="8934732568177537184">Qhubeka</translation> +<translation id="8938306522009698937">izibambi</translation> <translation id="8938800817013097409">Idivayisi ye-USB-C (imbobo engakwesokudla ngemuva)</translation> <translation id="8940081510938872932">Ikhompyutha yakho yenza izinto eziningi kakhulu khona manje. Zama futhi emuva kwesikhathi.</translation> <translation id="8941173171815156065">Vuselela imvume ye-'<ph name="PERMISSION" />'</translation> @@ -7229,6 +7261,7 @@ <translation id="987264212798334818">Okujwayelekile</translation> <translation id="987897973846887088">Azikho izithombe ezitholakalayo</translation> <translation id="988978206646512040">Umushwana wokungena ongenalutho awuvunyelwe</translation> +<translation id="991413375315957741">izinzwa zokunyakaza noma zokukhanya</translation> <translation id="992032470292211616">Izandiso, izinhlelo zokusebenza, namatimu angalimaza idivayisi yakho. Ingabe uqinisekile ukuthi ufuna ukuqhubeka?</translation> <translation id="992256792861109788">Okuphinki</translation> <translation id="992592832486024913">Khubaza i-ChromeVox (impendulo ekhulunywayo)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb index 6f76cfc..7b63985 100644 --- a/chrome/app/resources/google_chrome_strings_bs.xtb +++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -236,7 +236,7 @@ <translation id="7339898014177206373">Novi prozor</translation> <translation id="7398801000654795464">Prijavljeni ste na Chrome kao <ph name="USER_EMAIL_ADDRESS" />. Ponovo upotrijebite isti račun za prijavu.</translation> <translation id="7408085963519505752">Uslovi korištenja Chrome OS-a</translation> -<translation id="7416131756095014387">Ovim računom se upravlja. Administrator zahtijeva Chrome profil za pristup. Ovaj profil je u potpunosti odvojen od bilo kojeg ličnog profila. Vaš administrator može ukloniti podatke Chromea koji se generiraju tokom korištenja ovog profila (naprimjer kreirane oznake, historiju, lozinke i druge postavke). <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> +<translation id="7416131756095014387">Ovo je upravljani račun. Administrator zahtijeva Chrome profil za pristup. Ovaj profil je u potpunosti odvojen od bilo kojeg ličnog profila. Vaš administrator može ukloniti podatke Chromea koji se generiraju tokom korištenja ovog profila (naprimjer kreirane oznake, historiju, lozinke i druge postavke). <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> <translation id="7419046106786626209">Chrome OS nije sinhronizirao vaše podatke jer sinhronizacija nije dostupna za vašu domenu.</translation> <translation id="7486227612705979895">Chrome će pristupiti Disku kako bi pružio prijedloge u traci za adresu.</translation> <translation id="7535429826459677826">Google Chrome Dev</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb index 264ac88..073243b 100644 --- a/chrome/app/resources/google_chrome_strings_eu.xtb +++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -210,7 +210,7 @@ <translation id="6566149418543181476">Google Chrome eguneratzen (<ph name="PROGRESS_PERCENT" />)</translation> <translation id="6568793831116033768">Chrome OS sistema</translation> <translation id="6650333065969705433">Rosetta erabili nahi baduzu babestutako multimedia edukia erreproduzitzeko, Chrome berrabiarazi behar duzu.</translation> -<translation id="6668872995670558829">Beharrezkoa da Chrome-ko profil bat izatea</translation> +<translation id="6668872995670558829">Chrome-ko profil bat eduki behar da</translation> <translation id="6676384891291319759">Sartu Interneten</translation> <translation id="6679975945624592337">Onartu Google Chrome atzeko planoan abiaraztea</translation> <translation id="6739177684496155661">Chrome-eko beste profil batean egin nahi duzu aurrera?</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb index ba55aa29..20b2c046 100644 --- a/chrome/app/resources/google_chrome_strings_hi.xtb +++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -77,7 +77,7 @@ <translation id="2857540653560290388">Chrome लॉन्च हो रहा है...</translation> <translation id="2857972467023607093">इस खाते के साथ एक Chrome प्रोफ़ाइल पहले से मौजूद है</translation> <translation id="2871893339301912279">आप Chrome में प्रवेश हैं.</translation> -<translation id="2885378588091291677">काम का प्रबंधक</translation> +<translation id="2885378588091291677">काम का मैनेजर</translation> <translation id="2888126860611144412">Chrome के बारे में</translation> <translation id="2926676257163822632">कमज़ोर पासवर्ड का अंदाज़ा लगाना आसान होता है. Chrome को <ph name="BEGIN_LINK" />आपके लिए मज़बूत पासवर्ड बनाने और उन्हें याद रखने की अनुमति दें<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">किसी गड़बड़ी की वजह से Chrome अपडेट नहीं हुआ. <ph name="BEGIN_LINK" />Chrome को अपडेट करने से जुड़ी समस्याएं और नहीं हो पाने वाले अपडेट ठीक करें.<ph name="END_LINK" /></translation> @@ -222,7 +222,7 @@ <translation id="7054640471403081847">यह कंप्यूटर जल्दी ही Google Chrome अपडेट पाना बंद कर देगा क्योंकि इसका हार्डवेयर अब समर्थित नहीं है.</translation> <translation id="7062128746136194023">आपके अभिभावक ने Chrome के लिए, "साइट, ऐप्लिकेशन, और एक्सटेंशन के लिए अनुमतियां" को बंद कर दिया है. इस <ph name="EXTENSION_TYPE_PARAMETER" /> को जोड़ने की अनुमति नहीं है.</translation> <translation id="7098166902387133879">Google Chrome आपके माइक्रोफ़ोन का उपयोग कर रहा है.</translation> -<translation id="7106741999175697885">काम का प्रबंधक - Google Chrome</translation> +<translation id="7106741999175697885">काम का मैनेजर - Google Chrome</translation> <translation id="7140653346177713799">{COUNT,plural, =0{Chrome के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा.}=1{Chrome के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी गुप्त विंडो फिर से नहीं खुलेगी.}one{Chrome के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}other{Chrome के लिए एक नया अपडेट उपलब्ध है और जैसे ही आप फिर से लॉन्च करेंगे, अपडेट लागू कर दिया जाएगा. आपकी # गुप्त विंडो फिर से नहीं खुलेंगी.}}</translation> <translation id="7155997830309522122">अगर आपने पहले ही पासवर्ड बदल दिया है, तो कृपया Chrome में सेव किए गए पासवर्ड में बदलाव करें, ताकि यह आपके नए पासवर्ड से मेल खाए.</translation> <translation id="7242029209006116544">आप प्रबंधित खाते से साइन इन कर रहे हैं और उसके एडमिन को अपनी Google Chrome प्रोफ़ाइल पर नियंत्रण दे रहे हैं. आपका Chrome डेटा, जैसे आपके ऐप्लिकेशन, बुकमार्क, इतिहास, पासवर्ड, और दूसरे सेटिंग <ph name="USER_NAME" /> से स्थायी रूप से जुड़ जाएंगे. आप Google खाता डैशबोर्ड से इस डेटा को मिटा सकेंगे, लेकिन आप किसी दूसरे खाते से इस डेटा को जोड़ नहीं सकेंगे. <ph name="LEARN_MORE" /></translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index b7520d52..b90082ef 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -3551,6 +3551,8 @@ "enterprise/connectors/file_system/box_api_call_flow.h", "enterprise/connectors/file_system/download_controller.cc", "enterprise/connectors/file_system/download_controller.h", + "enterprise/connectors/file_system/service_settings.cc", + "enterprise/connectors/file_system/service_settings.h", "enterprise/connectors/file_system/signin_dialog_delegate.cc", "enterprise/connectors/file_system/signin_dialog_delegate.h", "enterprise/connectors/reporting_service_settings.cc", @@ -4985,6 +4987,8 @@ "renderer_host/chrome_render_widget_host_view_mac_history_swiper.h", "renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm", "shell_integration_mac.mm", + "upgrade_detector/directory_monitor.cc", + "upgrade_detector/directory_monitor.h", "upgrade_detector/get_installed_version_mac.mm", ] deps += [
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index de964152..26ef45d 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -98,7 +98,7 @@ #include "components/nacl/common/nacl_switches.h" #include "components/network_session_configurator/common/network_features.h" #include "components/network_session_configurator/common/network_switches.h" -#include "components/no_state_prefetch/browser/prerender_field_trial.h" +#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h" #include "components/ntp_tiles/features.h" #include "components/offline_pages/core/offline_page_feature.h" #include "components/omnibox/browser/omnibox_field_trial.h" @@ -3005,6 +3005,15 @@ FEATURE_VALUE_TYPE(media::kAVFoundationCaptureV2), }, #endif // defined(OS_MAC) +#if defined(OS_WIN) + { + "zero-copy-video-capture", + flag_descriptions::kZeroCopyVideoCaptureName, + flag_descriptions::kZeroCopyVideoCaptureDescription, + kOsWin, + FEATURE_VALUE_TYPE(media::kMediaFoundationD3D11VideoCapture), + }, +#endif // defined(OS_WIN) {"debug-packed-apps", flag_descriptions::kDebugPackedAppName, flag_descriptions::kDebugPackedAppDescription, kOsDesktop, SINGLE_VALUE_TYPE(switches::kDebugPackedApps)},
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index 88858a9..6f0c60b 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -203,11 +203,11 @@ } bool IsProfileSignedOut(Profile* profile) { - ProfileAttributesEntry* entry; - bool has_entry = - g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry); - return has_entry && entry->IsSigninRequired(); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + return entry && entry->IsSigninRequired(); } void ConfigureNSAppForKioskMode() {
diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm index d15dee37..32b04c3 100644 --- a/chrome/browser/app_controller_mac_browsertest.mm +++ b/chrome/browser/app_controller_mac_browsertest.mm
@@ -399,10 +399,11 @@ // Lock the active profile. base::ScopedAllowBlockingForTesting allow_blocking; Profile* profile = [ac lastProfile]; - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager()-> - GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); EXPECT_TRUE(entry->IsSigninRequired()); @@ -561,10 +562,11 @@ // Lock the active profile. base::ScopedAllowBlockingForTesting allow_blocking; Profile* profile = [ac lastProfile]; - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); EXPECT_TRUE(entry->IsSigninRequired());
diff --git a/chrome/browser/ash/app_mode/kiosk_profile_loader.cc b/chrome/browser/ash/app_mode/kiosk_profile_loader.cc index 5e4f921..183d484f 100644 --- a/chrome/browser/ash/app_mode/kiosk_profile_loader.cc +++ b/chrome/browser/ash/app_mode/kiosk_profile_loader.cc
@@ -21,7 +21,6 @@ #include "chrome/browser/chromeos/login/demo_mode/demo_app_launcher.h" #include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/lifetime/application_lifetime.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/login/auth/auth_status_consumer.h"
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc index aca5535cd..ed524553 100644 --- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc +++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -88,7 +88,7 @@ public: // TestRecipeReplayChromeFeatureActionExecutor bool AutofillForm(const std::string& focus_element_css_selector, - const std::vector<std::string> iframe_path, + const std::vector<std::string>& iframe_path, const int attempts, content::RenderFrameHost* frame) override { content::WebContents* web_contents = @@ -302,6 +302,9 @@ }; IN_PROC_BROWSER_TEST_P(AutofillCapturedSitesInteractiveTest, Recipe) { + captured_sites_test_utils::PrintInstructions( + "autofill_captured_sites_interactive_uitest"); + // Prints the path of the test to be executed. VLOG(1) << GetParam().site_name; @@ -309,7 +312,8 @@ ASSERT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); bool test_completed = recipe_replayer()->ReplayTest( - GetParam().capture_file_path, GetParam().recipe_file_path); + GetParam().capture_file_path, GetParam().recipe_file_path, + captured_sites_test_utils::GetCommandFilePath()); if (!test_completed) ADD_FAILURE() << "Full execution was unable to complete.";
diff --git a/chrome/browser/autofill/captured_sites_test_utils.cc b/chrome/browser/autofill/captured_sites_test_utils.cc index 4470d96..3518204 100644 --- a/chrome/browser/autofill/captured_sites_test_utils.cc +++ b/chrome/browser/autofill/captured_sites_test_utils.cc
@@ -17,9 +17,12 @@ #include "base/process/launch.h" #include "base/strings/strcat.h" #include "base/strings/string16.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/task/thread_pool.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" #include "base/values.h" @@ -55,6 +58,9 @@ using base::JSONReader; namespace { +// The command-line flag to specify the command file flag. +const char kCommandFileFlag[] = "command_file"; + // The maximum amount of time to wait for Chrome to finish autofilling a form. const base::TimeDelta kAutofillActionWaitForVisualUpdateTimeout = base::TimeDelta::FromSeconds(3); @@ -81,6 +87,148 @@ const char kClockNotSetMessage[] = "No AutofillClock override set from wpr archive: "; + +void PrintDebugInstructions(const base::FilePath& command_file_path) { + const char msg[] = R"( + +*** INTERACTIVE DEBUGGING MODE *** + +To proceed, you should create a named pipe: + $ mkfifo %1$s +and then write commands into it: + $ echo run >%1$s # unpauses execution + $ echo next 2 >%1$s # executes the next 2 actions + $ echo next -1 >%1$s # executes until the last action + $ echo skip -3 >%1$s # jumps back 3 actions + $ echo skip 4 >%1$s # skips the next 4 actions + $ echo where >%1$s # prints the current position + $ echo show -1 >%1$s # prints last 1 actions + $ echo show 1 >%1$s # prints next 1 actions + $ echo help >%1$s # prints this text +)"; + LOG(INFO) << base::StringPrintf(msg, + command_file_path.AsUTF8Unsafe().c_str()); +} + +// Command types to control and debug execution. +// * The |kAbsoluteLimit| and |kRelativeLimit| commands indicate that +// execution shall not proceed if the next action's position is >= |param| +// or >= current_index + |param|, respectively. +// * The |kSkipAction| command jumps |param| actions forward or backward. +// * The |kShowAction| command prints the |param| previous (if < 0) or +// upcoming (if > 0) actions. +// * The |kWhereAmI| command prints the current execution position. +enum class ExecutionCommandType { + kAbsoluteLimit, + kRelativeLimit, + kSkipAction, + kShowAction, + kWhereAmI, +}; + +struct ExecutionCommand { + ExecutionCommandType type = ExecutionCommandType::kAbsoluteLimit; + int param = std::numeric_limits<int>::max(); +}; + +// Blockingly reads the content of |command_file_path|, parses it into +// ExecutionCommands, and returns the result. +std::vector<ExecutionCommand> ReadExecutionCommands( + const base::FilePath& command_file_path) { + std::vector<ExecutionCommand> commands; + std::string command_lines; + if (base::ReadFileToString(command_file_path, &command_lines)) { + for (const auto command : + base::SplitStringPiece(command_lines, "\n", base::TRIM_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { + auto GetParamOr = [command](int default_value) { + size_t space = command.find(' '); + if (space == base::StringPiece::npos) + return default_value; + int value; + if (!base::StringToInt(command.substr(space + 1), &value)) + return default_value; + return value; + }; + + if (base::StartsWith(command, "run")) { + commands.push_back({ExecutionCommandType::kAbsoluteLimit, + std::numeric_limits<int>::max()}); + } else if (base::StartsWith(command, "next")) { + commands.push_back( + {ExecutionCommandType::kRelativeLimit, GetParamOr(1)}); + } else if (base::StartsWith(command, "skip")) { + commands.push_back({ExecutionCommandType::kSkipAction, GetParamOr(1)}); + } else if (base::StartsWith(command, "show")) { + commands.push_back({ExecutionCommandType::kShowAction, GetParamOr(1)}); + } else if (base::StartsWith(command, "where")) { + commands.push_back({ExecutionCommandType::kWhereAmI}); + } else if (base::StartsWith(command, "help")) { + PrintDebugInstructions(command_file_path); + } + } + } + return commands; +} + +struct ExecutionState { + // The position of the next action to be executed. + int index = 0; + // The current bound on the execution. + int limit = std::numeric_limits<int>::max(); + // The number of actions to be executed. + int length = 0; +}; + +// Blockingly reads the commands from |command_file_path| and executes them. +// Execution primarily means manipulation of the |execution_state|, particularly +// `execution_state.limit`. +ExecutionState ProcessCommands(ExecutionState execution_state, + const base::Value::ListView* action_list, + const base::FilePath& command_file_path) { + while (execution_state.limit <= execution_state.index) { + for (ExecutionCommand command : ReadExecutionCommands(command_file_path)) { + switch (command.type) { + case ExecutionCommandType::kAbsoluteLimit: { + execution_state.limit = command.param; + break; + } + case ExecutionCommandType::kRelativeLimit: { + if (command.param >= 0) { + execution_state.limit += command.param; + } else { + execution_state.limit = execution_state.length + command.param; + } + break; + } + case ExecutionCommandType::kSkipAction: { + execution_state.index += command.param; + execution_state.index = std::min(std::max(execution_state.index, 0), + execution_state.length - 1); + break; + } + case ExecutionCommandType::kShowAction: { + int min_index = execution_state.index + std::min(command.param, 0); + int max_index = execution_state.index + std::max(command.param, 0); + min_index = std::max(min_index, 0); + max_index = std::min(max_index, execution_state.length); + for (int i = min_index; i < max_index; ++i) { + LOG(INFO) << "Action " << (i - execution_state.index) << ": " + << (*action_list)[i].DebugString(); + } + break; + } + case ExecutionCommandType::kWhereAmI: { + LOG(INFO) << "Next action is at position " << execution_state.index + << ", limit (excl) is at " << execution_state.limit + << ", last (excl) is at " << execution_state.length; + } + } + } + } + return execution_state; +} + } // namespace namespace captured_sites_test_utils { @@ -185,6 +333,38 @@ #endif } +base::Optional<base::FilePath> GetCommandFilePath() { + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + if (command_line && command_line->HasSwitch(kCommandFileFlag)) { + return base::make_optional( + command_line->GetSwitchValuePath(kCommandFileFlag)); + } + return base::nullopt; +} + +void PrintInstructions(const char* test_file_name) { + const char msg[] = R"( + +*** README *** + +A captured-site test replays an action recipe (*.test) +against recorded web traffic (*.wpr). +These files need to be downloaded separately. + +Recommended flags are: + --test-launcher-timeout=1000000 + --ui-test-action-max-timeout=1000000 + --enable-pixel-output-in-tests + --vmodule=captured_sites_test_utils=1,%s=1: + +For interactive debugging, specify a command file: + --%s=/path/to/file +Commands to step through the test can be written into that file. +Further instructions will be printed then. +)"; + LOG(INFO) << base::StringPrintf(msg, test_file_name, kCommandFileFlag); +} + // FrameObserver -------------------------------------------------------------- IFrameWaiter::IFrameWaiter(content::WebContents* web_contents) : content::WebContentsObserver(web_contents), @@ -312,13 +492,15 @@ TestRecipeReplayer::~TestRecipeReplayer() {} -bool TestRecipeReplayer::ReplayTest(const base::FilePath capture_file_path, - const base::FilePath recipe_file_path) { +bool TestRecipeReplayer::ReplayTest( + const base::FilePath& capture_file_path, + const base::FilePath& recipe_file_path, + const base::Optional<base::FilePath>& command_file_path) { if (!StartWebPageReplayServer(capture_file_path)) return false; if (OverrideAutofillClock(capture_file_path)) VLOG(1) << "AutofillClock was set to:" << autofill::AutofillClock::Now(); - return ReplayRecordedActions(recipe_file_path); + return ReplayRecordedActions(recipe_file_path, command_file_path); } const std::vector<testing::AssertionResult> @@ -680,9 +862,10 @@ } bool TestRecipeReplayer::ReplayRecordedActions( - const base::FilePath& recipe_file_path) { + const base::FilePath& recipe_file_path, + const base::Optional<base::FilePath>& command_file_path) { // Read the text of the recipe file. - base::ThreadRestrictions::SetIOAllowed(true); + base::ScopedAllowBlockingForTesting for_testing; std::string json_text; if (!base::ReadFileToString(recipe_file_path, &json_text)) { ADD_FAILURE() << "Failed to read recipe file '" << recipe_file_path << "'!"; @@ -707,9 +890,45 @@ ADD_FAILURE() << "Failed to extract action list from the recipe!"; return false; } - for (auto& item : action_list_container->GetList()) { + + auto action_list = action_list_container->GetList(); + ExecutionState execution_state{.length = + static_cast<int>(action_list.size())}; + if (command_file_path.has_value()) { + execution_state.limit = 0; // Stop execution initially in debug mode. + PrintDebugInstructions(command_file_path.value()); + } + + while (execution_state.index < execution_state.length) { + if (command_file_path.has_value()) { + while (execution_state.limit <= execution_state.index) { + bool thread_finished = false; + base::ThreadPool::PostTaskAndReplyWithResult( + FROM_HERE, {base::MayBlock()}, + base::BindOnce(&ProcessCommands, execution_state, &action_list, + command_file_path.value()), + base::BindOnce( + [](ExecutionState* execution_state, bool* finished, + ExecutionState new_execution_state) { + *execution_state = new_execution_state; + *finished = true; + }, + &execution_state, &thread_finished)); + while (!thread_finished) { + base::RunLoop run_loop; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop.QuitClosure(), + base::TimeDelta::FromMilliseconds(1000)); + run_loop.Run(); + } + } + } + LOG(INFO) << "Proceeding with execution with action " + << execution_state.index << " of " << execution_state.length + << ": " << action_list[execution_state.index]; + base::DictionaryValue* action; - if (!item.GetAsDictionary(&action)) { + if (!action_list[execution_state.index].GetAsDictionary(&action)) { ADD_FAILURE() << "Failed to extract an individual action from the recipe!"; return false; @@ -785,7 +1004,9 @@ } else { ADD_FAILURE() << "Unrecognized action type: " << *type; } - } // end foreach action + + ++execution_state.index; + } // Dismiss the beforeUnloadDialog if the last page of the test has a // beforeUnload function. @@ -1909,7 +2130,7 @@ bool TestRecipeReplayChromeFeatureActionExecutor::AutofillForm( const std::string& focus_element_css_selector, - const std::vector<std::string> iframe_path, + const std::vector<std::string>& iframe_path, const int attempts, content::RenderFrameHost* frame) { ADD_FAILURE() << "TestRecipeReplayChromeFeatureActionExecutor::AutofillForm "
diff --git a/chrome/browser/autofill/captured_sites_test_utils.h b/chrome/browser/autofill/captured_sites_test_utils.h index 00c2912db..c22a275 100644 --- a/chrome/browser/autofill/captured_sites_test_utils.h +++ b/chrome/browser/autofill/captured_sites_test_utils.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_AUTOFILL_CAPTURED_SITES_TEST_UTILS_H_ #define CHROME_BROWSER_AUTOFILL_CAPTURED_SITES_TEST_UTILS_H_ +#include <fstream> +#include <list> #include <memory> #include <string> #include <vector> @@ -12,6 +14,7 @@ #include "base/command_line.h" #include "base/files/file_path.h" #include "base/strings/strcat.h" +#include "base/values.h" #include "chrome/browser/ui/browser.h" #include "components/autofill/core/browser/test_autofill_clock.h" #include "content/public/browser/browser_context.h" @@ -83,6 +86,12 @@ } }; +base::Optional<base::FilePath> GetCommandFilePath(); + +// Prints tips on how to run captured-site tests. +// |test_file_name| should be without the .cc suffix. +void PrintInstructions(const char* test_file_name); + // IFrameWaiter // // IFrameWaiter is an waiter object that waits for an iframe befitting a @@ -142,7 +151,7 @@ // Triggers Chrome Autofill in the specified input element on the specified // document. virtual bool AutofillForm(const std::string& focus_element_css_selector, - const std::vector<std::string> iframe_path, + const std::vector<std::string>& iframe_path, const int attempts, content::RenderFrameHost* frame); virtual bool AddAutofillProfileInfo(const std::string& field_type, @@ -203,8 +212,9 @@ // Replay a test by: // 1. Starting a WPR server using the specified capture file. // 2. Replaying the specified Test Recipe file. - bool ReplayTest(const base::FilePath capture_file_path, - const base::FilePath recipe_file_path); + bool ReplayTest(const base::FilePath& capture_file_path, + const base::FilePath& recipe_file_path, + const base::Optional<base::FilePath>& command_file_path); const std::vector<testing::AssertionResult> GetValidationFailures() const; @@ -249,7 +259,9 @@ bool RunWebPageReplayCmd(const std::string& cmd, const std::vector<std::string>& args, base::Process* process); - bool ReplayRecordedActions(const base::FilePath& recipe_file_path); + bool ReplayRecordedActions( + const base::FilePath& recipe_file_path, + const base::Optional<base::FilePath>& command_file_path); bool InitializeBrowserToExecuteRecipe( const std::unique_ptr<base::DictionaryValue>& recipe); bool ExecuteAutofillAction(const base::DictionaryValue& action); @@ -335,6 +347,7 @@ // expires. Returns false if no visual update is observed before the given // timeout elapses. bool WaitForVisualUpdate(base::TimeDelta timeout = visual_update_timeout); + Browser* browser_; TestRecipeReplayChromeFeatureActionExecutor* feature_action_executor_;
diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc index 30dcd03..4bce8e8 100644 --- a/chrome/browser/background/background_mode_manager.cc +++ b/chrome/browser/background/background_mode_manager.cc
@@ -374,9 +374,9 @@ // Initially set the name for this background mode data. base::string16 name = l10n_util::GetStringUTF16(IDS_PROFILES_DEFAULT_NAME); - ProfileAttributesEntry* entry; - if (profile_storage_->GetProfileAttributesWithPath( - profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + profile_storage_->GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { name = entry->GetName(); } bmd_ptr->SetName(name); @@ -517,10 +517,9 @@ /////////////////////////////////////////////////////////////////////////////// // BackgroundModeManager, ProfileAttributesStorage::Observer overrides void BackgroundModeManager::OnProfileAdded(const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - bool success = - profile_storage_->GetProfileAttributesWithPath(profile_path, &entry); - DCHECK(success); + ProfileAttributesEntry* entry = + profile_storage_->GetProfileAttributesWithPath(profile_path); + DCHECK(entry); base::string16 profile_name = entry->GetName(); // At this point, the profile should be registered with the background mode // manager, but when it's actually added to the ProfileAttributesStorage is @@ -537,10 +536,9 @@ void BackgroundModeManager::OnProfileWillBeRemoved( const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - bool success = - profile_storage_->GetProfileAttributesWithPath(profile_path, &entry); - DCHECK(success); + ProfileAttributesEntry* entry = + profile_storage_->GetProfileAttributesWithPath(profile_path); + DCHECK(entry); base::string16 profile_name = entry->GetName(); // Remove the profile from our map of profiles. auto it = GetBackgroundModeIterator(profile_name); @@ -561,10 +559,9 @@ void BackgroundModeManager::OnProfileNameChanged( const base::FilePath& profile_path, const base::string16& old_profile_name) { - ProfileAttributesEntry* entry; - bool success = - profile_storage_->GetProfileAttributesWithPath(profile_path, &entry); - DCHECK(success); + ProfileAttributesEntry* entry = + profile_storage_->GetProfileAttributesWithPath(profile_path); + DCHECK(entry); base::string16 new_profile_name = entry->GetName(); BackgroundModeInfoMap::const_iterator it = GetBackgroundModeIterator(old_profile_name); @@ -588,10 +585,10 @@ return nullptr; // Do not permit a locked profile to be used to open a browser. - ProfileAttributesEntry* entry; - bool success = profile_storage_->GetProfileAttributesWithPath( - profile_background_data->first->GetPath(), &entry); - DCHECK(success); + ProfileAttributesEntry* entry = + profile_storage_->GetProfileAttributesWithPath( + profile_background_data->first->GetPath()); + DCHECK(entry); if (entry->IsSigninRequired()) return nullptr; @@ -767,9 +764,9 @@ // Update the ProfileAttributesStorage with the fact whether background // clients are running for this profile. - ProfileAttributesEntry* entry; - if (profile_storage_-> - GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + profile_storage_->GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { entry->SetBackgroundStatus( HasPersistentBackgroundClientForProfile(profile)); }
diff --git a/chrome/browser/background/background_mode_manager_unittest.cc b/chrome/browser/background/background_mode_manager_unittest.cc index 6b2cf08..cb986fe5 100644 --- a/chrome/browser/background/background_mode_manager_unittest.cc +++ b/chrome/browser/background/background_mode_manager_unittest.cc
@@ -512,12 +512,12 @@ EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive()); EXPECT_EQ(2u, storage->GetNumberOfProfiles()); - ProfileAttributesEntry* entry1; - ProfileAttributesEntry* entry2; - ASSERT_TRUE(storage->GetProfileAttributesWithPath(profile_->GetPath(), - &entry1)); - ASSERT_TRUE(storage->GetProfileAttributesWithPath(profile2->GetPath(), - &entry2)); + ProfileAttributesEntry* entry1 = + storage->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry1, nullptr); + ProfileAttributesEntry* entry2 = + storage->GetProfileAttributesWithPath(profile2->GetPath()); + ASSERT_NE(entry2, nullptr); EXPECT_FALSE(entry1->GetBackgroundStatus()); EXPECT_FALSE(entry2->GetBackgroundStatus()); @@ -931,9 +931,10 @@ AdvancedTestBackgroundModeManager manager( *command_line_, profile_manager_->profile_attributes_storage(), true); manager.RegisterProfile(profile_); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_->profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_->profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->GetBackgroundStatus()); EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive()); @@ -970,9 +971,10 @@ AdvancedTestBackgroundModeManager manager( *command_line_, profile_manager_->profile_attributes_storage(), true); manager.RegisterProfile(profile_); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_->profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_->profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->GetBackgroundStatus()); EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive()); @@ -1012,9 +1014,10 @@ AdvancedTestBackgroundModeManager manager( *command_line_, profile_manager_->profile_attributes_storage(), true); manager.RegisterProfile(profile_); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_->profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_->profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->GetBackgroundStatus()); EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index a07f9892..d407c450d2 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -60,6 +60,9 @@ <structure name="IDR_OOBE_COMPONENTS_OOBE_DIALOG_HTML" file="resources/chromeos/login/components/oobe_dialog/oobe_dialog.html" type="chrome_html" /> <structure name="IDR_OOBE_COMPONENTS_OOBE_DIALOG_JS" file="resources/chromeos/login/components/oobe_dialog/oobe_dialog.js" type="chrome_html" /> + <structure name="IDR_OOBE_COMPONENTS_OOBE_LOADING_DIALOG_HTML" file="resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.html" type="chrome_html" /> + <structure name="IDR_OOBE_COMPONENTS_OOBE_LOADING_DIALOG_JS" file="resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.js" type="chrome_html" /> + <!-- New layout (oobe_adaptive_dialog and oobe_content_dialog) corresponds OOBE redesign which has happened in November 2020 --> <structure name="IDR_OOBE_COMPONENTS_OOBE_ADAPTIVE_DIALOG_HTML" file="resources/chromeos/login/components/oobe_adaptive_dialog/oobe_adaptive_dialog.html" type="chrome_html" />
diff --git a/chrome/browser/chromeos/arc/arc_support_host.cc b/chrome/browser/chromeos/arc/arc_support_host.cc index 2b93e8f..c4b5235 100644 --- a/chrome/browser/chromeos/arc/arc_support_host.cc +++ b/chrome/browser/chromeos/arc/arc_support_host.cc
@@ -163,9 +163,9 @@ return os << #name switch (error) { MAP_ERROR(SIGN_IN_NETWORK_ERROR); - MAP_ERROR(SIGN_IN_SERVICE_UNAVAILABLE_ERROR); + MAP_ERROR(SIGN_IN_GMS_SIGNIN_ERROR); MAP_ERROR(SIGN_IN_BAD_AUTHENTICATION_ERROR); - MAP_ERROR(SIGN_IN_GMS_NOT_AVAILABLE_ERROR); + MAP_ERROR(SIGN_IN_GMS_CHECKIN_ERROR); MAP_ERROR(SIGN_IN_CLOUD_PROVISION_FLOW_ACCOUNT_MISSING_ERROR); MAP_ERROR(SIGN_IN_CLOUD_PROVISION_FLOW_DOMAIN_JOIN_FAIL_ERROR); MAP_ERROR(SIGN_IN_CLOUD_PROVISION_FLOW_ENROLLMENT_TOKEN_INVALID); @@ -338,12 +338,10 @@ break switch (error_info.error) { MAP_ERROR(SIGN_IN_NETWORK_ERROR, IDS_ARC_SIGN_IN_NETWORK_ERROR); - MAP_ERROR(SIGN_IN_SERVICE_UNAVAILABLE_ERROR, - IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR); + MAP_ERROR(SIGN_IN_GMS_SIGNIN_ERROR, IDS_ARC_SIGN_IN_GMS_SIGNIN_ERROR); MAP_ERROR(SIGN_IN_BAD_AUTHENTICATION_ERROR, IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR); - MAP_ERROR(SIGN_IN_GMS_NOT_AVAILABLE_ERROR, - IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR); + MAP_ERROR(SIGN_IN_GMS_CHECKIN_ERROR, IDS_ARC_SIGN_IN_GMS_CHECKIN_ERROR); MAP_ERROR(SIGN_IN_CLOUD_PROVISION_FLOW_ACCOUNT_MISSING_ERROR, IDS_ARC_SIGN_IN_CLOUD_PROVISION_FLOW_ACCOUNT_MISSING_ERROR); MAP_ERROR(SIGN_IN_CLOUD_PROVISION_FLOW_DOMAIN_JOIN_FAIL_ERROR, @@ -376,8 +374,8 @@ case Error::SIGN_IN_CLOUD_PROVISION_FLOW_NETWORK_ERROR: case Error::SIGN_IN_CLOUD_PROVISION_FLOW_PERMANENT_ERROR: case Error::SIGN_IN_CLOUD_PROVISION_FLOW_TRANSIENT_ERROR: - case Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR: - case Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR: + case Error::SIGN_IN_GMS_SIGNIN_ERROR: + case Error::SIGN_IN_GMS_CHECKIN_ERROR: case Error::SIGN_IN_UNKNOWN_ERROR: DCHECK(error_info.arg); message = l10n_util::GetStringFUTF16(
diff --git a/chrome/browser/chromeos/arc/arc_support_host.h b/chrome/browser/chromeos/arc/arc_support_host.h index d0f6c08..2f8aa5a 100644 --- a/chrome/browser/chromeos/arc/arc_support_host.h +++ b/chrome/browser/chromeos/arc/arc_support_host.h
@@ -49,9 +49,9 @@ SIGN_IN_CLOUD_PROVISION_FLOW_PERMANENT_ERROR, SIGN_IN_CLOUD_PROVISION_FLOW_INTERRUPTED_ERROR, SIGN_IN_CLOUD_PROVISION_FLOW_ENROLLMENT_TOKEN_INVALID, - SIGN_IN_GMS_NOT_AVAILABLE_ERROR, + SIGN_IN_GMS_CHECKIN_ERROR, SIGN_IN_NETWORK_ERROR, - SIGN_IN_SERVICE_UNAVAILABLE_ERROR, + SIGN_IN_GMS_SIGNIN_ERROR, // This error requires error arg to be passed in ErrorInfo struct // where the value of arg indicates the specific provisioning result // for which this error message is shown.
diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager.cc b/chrome/browser/chromeos/arc/session/arc_session_manager.cc index 80b0501..5382b591 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager.cc
@@ -384,10 +384,10 @@ } if (result.gms_sign_in_error()) - return ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR; + return ArcSupportHost::Error::SIGN_IN_GMS_SIGNIN_ERROR; if (result.gms_check_in_error()) - return ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR; + return ArcSupportHost::Error::SIGN_IN_GMS_CHECKIN_ERROR; if (result.cloud_provision_flow_error()) { return GetCloudProvisionFlowError(
diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc index 67c06594..3cb72fd 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc
@@ -1207,10 +1207,10 @@ ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR, 1 /*GMS_SIGN_IN_NETWORK_ERROR*/}, {arc::mojom::GMSSignInError::GMS_SIGN_IN_TIMEOUT, - ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR, + ArcSupportHost::Error::SIGN_IN_GMS_SIGNIN_ERROR, 5 /*GMS_SIGN_IN_TIMEOUT*/}, {arc::mojom::GMSCheckInError::GMS_CHECK_IN_TIMEOUT, - ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR, + ArcSupportHost::Error::SIGN_IN_GMS_CHECKIN_ERROR, 2 /*GMS_CHECK_IN_TIMEOUT*/}}; class ProvisioningErrorDisplayTest
diff --git a/chrome/browser/chromeos/attestation/attestation_ca_client.cc b/chrome/browser/chromeos/attestation/attestation_ca_client.cc index e4287ac2..5b30d38 100644 --- a/chrome/browser/chromeos/attestation/attestation_ca_client.cc +++ b/chrome/browser/chromeos/attestation/attestation_ca_client.cc
@@ -8,6 +8,8 @@ #include "base/bind.h" #include "base/command_line.h" +#include "base/location.h" +#include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/browser_process.h" #include "chromeos/dbus/constants/dbus_switches.h" #include "net/base/load_flags.h" @@ -164,5 +166,14 @@ return pca_type_; } +void AttestationCAClient::CheckIfAnyProxyPresent( + ProxyPresenceCallback callback) { + // Currently the function just assumes there exists a proxy. Post the task to + // emulate the asynchronous behavior of the coming implementation. + // TODO(b/158532239): Implement this. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), true)); +} + } // namespace attestation } // namespace chromeos
diff --git a/chrome/browser/chromeos/attestation/attestation_ca_client.h b/chrome/browser/chromeos/attestation/attestation_ca_client.h index aeb36604..bc6931a 100644 --- a/chrome/browser/chromeos/attestation/attestation_ca_client.h +++ b/chrome/browser/chromeos/attestation/attestation_ca_client.h
@@ -40,6 +40,8 @@ PrivacyCAType GetType() override; + void CheckIfAnyProxyPresent(ProxyPresenceCallback callback) override; + private: PrivacyCAType pca_type_;
diff --git a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h index 74342818..0ac3242 100644 --- a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h +++ b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h
@@ -13,8 +13,17 @@ // An abstract class for enrollment certificate uploaders. class EnrollmentCertificateUploader { public: - // A callback where |status| is true when the upload is successful. - using UploadCallback = base::OnceCallback<void(bool status)>; + // Execution status reported by |ObtainAndUploadCertificate|. + enum class Status { + // Enrollment certificate is fetched and uploaded. + kSuccess, + // Cannot fetch enrollment certificate. + kFailedToFetch, + // Cannot upload fetched enrollment certificate. + kFailedToUpload + }; + + using UploadCallback = base::OnceCallback<void(Status status)>; virtual ~EnrollmentCertificateUploader() = default;
diff --git a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.cc b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.cc index c452f93..207c32e 100644 --- a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.cc +++ b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.cc
@@ -77,11 +77,17 @@ void EnrollmentCertificateUploaderImpl::Start() { num_retries_ = 0; + if (has_already_uploaded_) { + // Certificate was successfully uploaded earlier. Do not upload second time. + RunCallbacks(Status::kSuccess); + return; + } + // We expect a registered CloudPolicyClient. if (!policy_client_->is_registered()) { LOG(ERROR) << "EnrollmentCertificateUploaderImpl: Invalid CloudPolicyClient."; - RunCallbacks(false); + RunCallbacks(Status::kFailedToFetch); return; } @@ -96,7 +102,7 @@ GetCertificate(); } -void EnrollmentCertificateUploaderImpl::RunCallbacks(bool status) { +void EnrollmentCertificateUploaderImpl::RunCallbacks(Status status) { for (; !callbacks_.empty(); callbacks_.pop()) std::move(callbacks_.front()).Run(status); } @@ -136,13 +142,14 @@ void EnrollmentCertificateUploaderImpl::OnUploadComplete(bool status) { if (status) { + has_already_uploaded_ = true; VLOG(1) << "Enterprise Enrollment Certificate uploaded to DMServer."; + RunCallbacks(Status::kSuccess); } else { LOG(ERROR) << "Failed to upload Enterprise Enrollment Certificate to DMServer."; + RunCallbacks(Status::kFailedToUpload); } - - RunCallbacks(status); } void EnrollmentCertificateUploaderImpl::HandleGetCertificateFailure( @@ -150,7 +157,7 @@ if (status != ATTESTATION_SERVER_BAD_REQUEST_FAILURE) Reschedule(); else - RunCallbacks(false); + RunCallbacks(Status::kFailedToFetch); } void EnrollmentCertificateUploaderImpl::Reschedule() { @@ -162,7 +169,7 @@ retry_delay_); } else { LOG(WARNING) << "EnrollmentCertificateUploaderImpl: Retry limit exceeded."; - RunCallbacks(false); + RunCallbacks(Status::kFailedToFetch); } }
diff --git a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.h b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.h index 7e52ff58..68e91af 100644 --- a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.h +++ b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl.h
@@ -45,7 +45,9 @@ retry_delay_ = retry_delay; } - // Obtains a fresh enrollment certificate and uploads it. + // Obtains a fresh enrollment certificate and uploads it. If certificate has + // already been uploaded - reports success immediately and does not upload + // second time. void ObtainAndUploadCertificate(UploadCallback callback) override; private: @@ -53,7 +55,7 @@ void Start(); // Run all callbacks with |status|. - void RunCallbacks(bool status); + void RunCallbacks(Status status); // Gets a certificate. void GetCertificate(); @@ -83,6 +85,9 @@ int retry_limit_; base::TimeDelta retry_delay_; + // Indicates whether certificate has already been uploaded successfully. + bool has_already_uploaded_ = false; + // Note: This should remain the last member so it'll be destroyed and // invalidate the weak pointers before any other members are destroyed. base::WeakPtrFactory<EnrollmentCertificateUploaderImpl> weak_factory_{this};
diff --git a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl_unittest.cc b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl_unittest.cc index d8138ea..5bb2565 100644 --- a/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl_unittest.cc +++ b/chrome/browser/chromeos/attestation/enrollment_certificate_uploader_impl_unittest.cc
@@ -23,6 +23,7 @@ #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" +using CertStatus = chromeos::attestation::EnrollmentCertificateUploader::Status; using testing::_; using testing::Invoke; using testing::StrictMock; @@ -53,6 +54,11 @@ ATTESTATION_SERVER_BAD_REQUEST_FAILURE, "")); } +void StatusCallbackFailure(policy::CloudPolicyClient::StatusCallback callback) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), false)); +} + void StatusCallbackSuccess(policy::CloudPolicyClient::StatusCallback callback) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), true)); @@ -62,9 +68,13 @@ class EnrollmentCertificateUploaderTest : public ::testing::Test { public: - EnrollmentCertificateUploaderTest() { + EnrollmentCertificateUploaderTest() + : uploader_(&policy_client_, &attestation_flow_) { settings_helper_.ReplaceDeviceSettingsProviderWithStub(); policy_client_.SetDMToken("fake_dm_token"); + + uploader_.set_retry_limit(3); + uploader_.set_retry_delay(base::TimeDelta()); } protected: @@ -84,14 +94,9 @@ .WillOnce(WithArgs<5>(Invoke(CertCallbackSuccess))); } - void Run(bool expected_status) { - EnrollmentCertificateUploaderImpl uploader(&policy_client_, - &attestation_flow_); - uploader.set_retry_limit(3); - uploader.set_retry_delay(base::TimeDelta()); - - uploader.ObtainAndUploadCertificate( - base::BindLambdaForTesting([expected_status](bool status) { + void Run(CertStatus expected_status) { + uploader_.ObtainAndUploadCertificate( + base::BindLambdaForTesting([expected_status](CertStatus status) { EXPECT_EQ(status, expected_status); })); @@ -102,28 +107,48 @@ ScopedCrosSettingsTestHelper settings_helper_; StrictMock<MockAttestationFlow> attestation_flow_; StrictMock<policy::MockCloudPolicyClient> policy_client_; + + EnrollmentCertificateUploaderImpl uploader_; }; TEST_F(EnrollmentCertificateUploaderTest, UnregisteredPolicyClient) { policy_client_.SetDMToken(""); - Run(false /* expected_status */); + Run(/*expected_status=*/CertStatus::kFailedToFetch); } TEST_F(EnrollmentCertificateUploaderTest, GetCertificateUnspecifiedFailure) { EXPECT_CALL(attestation_flow_, GetCertificate(_, _, _, _, _, _)) .WillRepeatedly(WithArgs<5>(Invoke(CertCallbackUnspecifiedFailure))); - Run(false /* expected_status */); + Run(/*expected_status=*/CertStatus::kFailedToFetch); } TEST_F(EnrollmentCertificateUploaderTest, GetCertificateBadRequestFailure) { EXPECT_CALL(attestation_flow_, GetCertificate(_, _, _, _, _, _)) .WillOnce(WithArgs<5>(Invoke(CertCallbackBadRequestFailure))); - Run(false /* expected_status */); + Run(/*expected_status=*/CertStatus::kFailedToFetch); +} + +TEST_F(EnrollmentCertificateUploaderTest, UploadCertificateFailure) { + EXPECT_CALL(attestation_flow_, GetCertificate(_, _, _, _, _, _)) + .WillOnce(WithArgs<5>(Invoke(CertCallbackSuccess))); + EXPECT_CALL(policy_client_, + UploadEnterpriseEnrollmentCertificate("fake_cert", _)) + .WillOnce(WithArgs<1>(Invoke(StatusCallbackFailure))); + + Run(/*expected_status=*/CertStatus::kFailedToUpload); } TEST_F(EnrollmentCertificateUploaderTest, NewCertificate) { SetupMocks(); - Run(true /* expected_status */); + Run(/*expected_status=*/CertStatus::kSuccess); +} + +TEST_F(EnrollmentCertificateUploaderTest, UploadsOnlyOnce) { + SetupMocks(); + Run(/*expected_status=*/CertStatus::kSuccess); + // Mocks expect single upload request and will fail if requested more than + // once. + Run(/*expected_status=*/CertStatus::kSuccess); } } // namespace attestation
diff --git a/chrome/browser/chromeos/attestation/enrollment_policy_observer.cc b/chrome/browser/chromeos/attestation/enrollment_policy_observer.cc index 73b96c51..d1d59027 100644 --- a/chrome/browser/chromeos/attestation/enrollment_policy_observer.cc +++ b/chrome/browser/chromeos/attestation/enrollment_policy_observer.cc
@@ -43,23 +43,21 @@ namespace attestation { EnrollmentPolicyObserver::EnrollmentPolicyObserver( - policy::CloudPolicyClient* policy_client) - : device_settings_service_(DeviceSettingsService::Get()), - policy_client_(policy_client), - num_retries_(0), - retry_limit_(kRetryLimit), - retry_delay_(kRetryDelay) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - device_settings_service_->AddObserver(this); - Start(); -} + policy::CloudPolicyClient* policy_client, + EnrollmentCertificateUploader* certificate_uploader) + : EnrollmentPolicyObserver(policy_client, + DeviceSettingsService::Get(), + certificate_uploader) {} EnrollmentPolicyObserver::EnrollmentPolicyObserver( policy::CloudPolicyClient* policy_client, - DeviceSettingsService* device_settings_service) + DeviceSettingsService* device_settings_service, + EnrollmentCertificateUploader* certificate_uploader) : device_settings_service_(device_settings_service), policy_client_(policy_client), + certificate_uploader_(certificate_uploader), num_retries_(0), + retry_limit_(kRetryLimit), retry_delay_(kRetryDelay) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); device_settings_service_->AddObserver(this); @@ -79,35 +77,65 @@ } void EnrollmentPolicyObserver::Start() { - // If we already uploaded an empty identification, we are done, because - // we asked to compute and upload it only if the PCA refused to give - // us an enrollment certificate, an error that will happen again (the - // AIK certificate sent to request an enrollment certificate does not - // contain an EID). - if (did_upload_empty_eid_) - return; - // If identification for enrollment isn't needed, there is nothing to do. const enterprise_management::PolicyData* policy_data = device_settings_service_->policy_data(); if (!policy_data || !policy_data->enrollment_id_needed()) return; - // We expect a registered CloudPolicyClient. - if (!policy_client_->is_registered()) { - LOG(ERROR) << "EnrollmentPolicyObserver: Invalid CloudPolicyClient."; - return; - } - // Do not allow multiple concurrent starts. if (request_in_flight_) return; + request_in_flight_ = true; - GetEnrollmentId(); + ObtainAndUploadCertificate(); +} + +void EnrollmentPolicyObserver::ObtainAndUploadCertificate() { + certificate_uploader_->ObtainAndUploadCertificate( + base::BindOnce(&EnrollmentPolicyObserver::OnEnrollmentCertificateUploaded, + weak_factory_.GetWeakPtr())); +} + +void EnrollmentPolicyObserver::OnEnrollmentCertificateUploaded( + EnrollmentCertificateUploader::Status status) { + switch (status) { + case EnrollmentCertificateUploader::Status::kSuccess: + // Enrollment certificate uploaded successfully. No need to compute EID. + request_in_flight_ = false; + break; + case EnrollmentCertificateUploader::Status::kFailedToFetch: + LOG(WARNING) << "EnrollmentPolicyObserver: Failed to fetch certificate. " + "Trying to compute and upload enrollment ID."; + GetEnrollmentId(); + break; + case EnrollmentCertificateUploader::Status::kFailedToUpload: + // Enrollment certificate was fetched but not uploaded. It can be uploaded + // later so we will not proceed with computed EID. + request_in_flight_ = false; + break; + } } void EnrollmentPolicyObserver::GetEnrollmentId() { + // If we already uploaded an empty identification, we are done, because + // we asked to compute and upload it only if the PCA refused to give + // us an enrollment certificate, an error that will happen again (the + // AIK certificate sent to request an enrollment certificate does not + // contain an EID). + if (did_upload_empty_eid_) { + request_in_flight_ = false; + return; + } + + // We expect a registered CloudPolicyClient. + if (!policy_client_->is_registered()) { + LOG(ERROR) << "EnrollmentPolicyObserver: Invalid CloudPolicyClient."; + request_in_flight_ = false; + return; + } + ::attestation::GetEnrollmentIdRequest request; request.set_ignore_cache(true); AttestationClient::Get()->GetEnrollmentId( @@ -118,7 +146,7 @@ void EnrollmentPolicyObserver::OnGetEnrollmentId( const ::attestation::GetEnrollmentIdReply& reply) { if (reply.status() != ::attestation::STATUS_SUCCESS) { - LOG(WARNING) << "Failed to get enrollment id: " << reply.status(); + LOG(WARNING) << "Failed to get enrollment ID: " << reply.status(); RescheduleGetEnrollmentId(); return; }
diff --git a/chrome/browser/chromeos/attestation/enrollment_policy_observer.h b/chrome/browser/chromeos/attestation/enrollment_policy_observer.h index 4fb3c4b9..7b8b094 100644 --- a/chrome/browser/chromeos/attestation/enrollment_policy_observer.h +++ b/chrome/browser/chromeos/attestation/enrollment_policy_observer.h
@@ -11,6 +11,7 @@ #include "base/callback.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h" #include "chrome/browser/chromeos/settings/device_settings_service.h" #include "chromeos/dbus/attestation/interface.pb.h" #include "chromeos/dbus/constants/attestation_constants.h" @@ -27,14 +28,18 @@ class EnrollmentPolicyObserver : public DeviceSettingsService::Observer { public: // The observer immediately connects with DeviceSettingsService to listen for - // policy changes. The CloudPolicyClient is used to upload data to the - // server; it must be in the registered state. This class does not take + // policy changes. The EnrollmentCertificateUploader is used to attempt to + // upload enrollment certificate first. If it fails, the observer attempts to + // upload enrollment ID. The CloudPolicyClient is used to upload enrollment ID + // to the server; it must be in the registered state. This class does not take // ownership of |policy_client|. - explicit EnrollmentPolicyObserver(policy::CloudPolicyClient* policy_client); + EnrollmentPolicyObserver(policy::CloudPolicyClient* policy_client, + EnrollmentCertificateUploader* certificate_uploader); // A constructor which accepts custom instances useful for testing. EnrollmentPolicyObserver(policy::CloudPolicyClient* policy_client, - DeviceSettingsService* device_settings_service); + DeviceSettingsService* device_settings_service, + EnrollmentCertificateUploader* certificate_uploader); ~EnrollmentPolicyObserver() override; @@ -50,7 +55,17 @@ // Checks enrollment setting and starts any necessary work. void Start(); - // Gets an enrollment identifier directly. + // Obtains a fresh enrollment certificate, which contains enrollment ID, and + // uploads it. + void ObtainAndUploadCertificate(); + + // Handles certificate upload status. If succeeded or failed to upload - does + // nothing more. If failed to fetch - starts computed enrollment ID flow. + void OnEnrollmentCertificateUploaded( + EnrollmentCertificateUploader::Status status); + + // Gets an enrollment identifier directly. Does nothing if |policy_client_| is + // not registered, or if an empty ID has already been uploaded. void GetEnrollmentId(); // Handles an enrollment identifier obtained directly. @@ -64,8 +79,9 @@ // the enrollment identifier that was uploaded. void OnUploadComplete(const std::string& enrollment_id, bool status); - DeviceSettingsService* device_settings_service_; - policy::CloudPolicyClient* policy_client_; + DeviceSettingsService* const device_settings_service_; + policy::CloudPolicyClient* const policy_client_; + EnrollmentCertificateUploader* const certificate_uploader_; int num_retries_; int retry_limit_; int retry_delay_;
diff --git a/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc b/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc index c8b5abd..6b6e508 100644 --- a/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc +++ b/chrome/browser/chromeos/attestation/enrollment_policy_observer_unittest.cc
@@ -17,12 +17,15 @@ #include "base/strings/string_number_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/chromeos/attestation/enrollment_policy_observer.h" +#include "chrome/browser/chromeos/attestation/mock_enrollment_certificate_uploader.h" #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" #include "chromeos/dbus/attestation/fake_attestation_client.h" #include "chromeos/settings/cros_settings_names.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" #include "testing/gtest/include/gtest/gtest.h" +using CertificateStatus = + chromeos::attestation::EnrollmentCertificateUploader::Status; using testing::_; using testing::Invoke; using testing::Return; @@ -60,10 +63,11 @@ ->GetTestInterface() ->set_enrollment_id_ignore_cache(enrollment_id_); AttestationClient::Get()->GetTestInterface()->set_cached_enrollment_id( - "unexpeted query to cached enrollment id"); + "unexpected query to cached enrollment ID"); } void TearDown() override { + EXPECT_FALSE(observer_->request_in_flight_); observer_.reset(); DeviceSettingsTestBase::TearDown(); AttestationClient::Shutdown(); @@ -75,11 +79,23 @@ void SetUpObserver() { observer_ = std::make_unique<EnrollmentPolicyObserver>( - &policy_client_, device_settings_service_.get()); + &policy_client_, device_settings_service_.get(), + &certificate_uploader_); observer_->set_retry_limit(kRetryLimit); observer_->set_retry_delay(0); } + void ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus status, + int times) { + EXPECT_CALL(certificate_uploader_, ObtainAndUploadCertificate(_)) + .Times(times) + .WillRepeatedly(Invoke( + [status]( + base::OnceCallback<void(CertificateStatus status)> callback) { + std::move(callback).Run(status); + })); + } + void ExpectUploadEnterpriseEnrollmentId(int times) { // Setting a mock behavior with 0 times causes warnings. if (times == 0) { @@ -105,6 +121,7 @@ } StrictMock<policy::MockCloudPolicyClient> policy_client_; + StrictMock<MockEnrollmentCertificateUploader> certificate_uploader_; std::unique_ptr<EnrollmentPolicyObserver> observer_; std::string enrollment_id_; @@ -114,8 +131,41 @@ constexpr char EnrollmentPolicyObserverTest::kEnrollmentId[]; +TEST_F(EnrollmentPolicyObserverTest, UploadEnterpriseEnrollmentCertificate) { + SetUpDevicePolicy(true); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kSuccess, + /*times=*/1); + SetUpObserver(); + PropagateDevicePolicy(); + Run(); +} + +TEST_F(EnrollmentPolicyObserverTest, + UploadEnterpriseEnrollmentCertificateFromExistingPolicy) { + // This test will trigger the observer work twice in a row: when the + // observer is created, and when it gets notified later on. + SetUpDevicePolicy(true); + PropagateDevicePolicy(); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kSuccess, + /*times=*/2); + SetUpObserver(); + PropagateDevicePolicy(); + Run(); +} + +TEST_F(EnrollmentPolicyObserverTest, FailedToUploadEnrollmentCertificate) { + SetUpDevicePolicy(true); + ExpectUploadEnterpriseEnrollmentCertificate( + CertificateStatus::kFailedToUpload, /*times=*/1); + SetUpObserver(); + PropagateDevicePolicy(); + Run(); +} + TEST_F(EnrollmentPolicyObserverTest, UploadEnterpriseEnrollmentId) { SetUpDevicePolicy(true); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kFailedToFetch, + /*times=*/1); ExpectUploadEnterpriseEnrollmentId(1); SetUpObserver(); PropagateDevicePolicy(); @@ -128,6 +178,8 @@ // observer is created, and when it gets notified later on. SetUpDevicePolicy(true); PropagateDevicePolicy(); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kFailedToFetch, + /*times=*/2); ExpectUploadEnterpriseEnrollmentId(2); SetUpObserver(); PropagateDevicePolicy(); @@ -145,6 +197,8 @@ policy_client_.SetDMToken(""); SetUpDevicePolicy(true); SetUpObserver(); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kFailedToFetch, + /*times=*/1); PropagateDevicePolicy(); Run(); } @@ -154,6 +208,8 @@ ->GetTestInterface() ->set_enrollment_id_dbus_error_count(kRetryLimit - 1); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kFailedToFetch, + /*times=*/1); ExpectUploadEnterpriseEnrollmentId(1); SetUpDevicePolicy(true); @@ -168,6 +224,8 @@ ->GetTestInterface() ->set_enrollment_id_dbus_error_count(kRetryLimit); + ExpectUploadEnterpriseEnrollmentCertificate(CertificateStatus::kFailedToFetch, + /*times=*/1); ExpectUploadEnterpriseEnrollmentId(0); SetUpDevicePolicy(true);
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index e1da666..90dc00cf 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -155,7 +155,6 @@ #include "chromeos/components/sensors/sensor_hal_dispatcher.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/homedir_methods.h" #include "chromeos/cryptohome/system_salt_getter.h" @@ -396,7 +395,6 @@ NetworkCertLoader::Initialize(); disks::DiskMountManager::Initialize(); - cryptohome::AsyncMethodCaller::Initialize(); cryptohome::HomedirMethods::Initialize(); NetworkHandler::Initialize(); @@ -424,7 +422,6 @@ ~DBusServices() { sensors::SensorHalDispatcher::Shutdown(); NetworkHandler::Shutdown(); - cryptohome::AsyncMethodCaller::Shutdown(); disks::DiskMountManager::Shutdown(); LoginState::Shutdown(); NetworkCertLoader::Shutdown();
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.cc b/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.cc index 0f96936f..af4ca21f 100644 --- a/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.cc +++ b/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.cc
@@ -135,8 +135,10 @@ time_stamps_.clear(); } -void AppWindowMetricsTracker::RenderViewCreated( - content::RenderViewHost* render_view_host) { +void AppWindowMetricsTracker::RenderFrameCreated( + content::RenderFrameHost* frame_host) { + if (frame_host->GetParent()) + return; SetState(State::kWindowShown); UMA_HISTOGRAM_TIMES(
diff --git a/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.h b/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.h index c8935c0925..b6fb654 100644 --- a/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.h +++ b/chrome/browser/chromeos/lock_screen_apps/app_window_metrics_tracker.h
@@ -45,7 +45,7 @@ void Reset(); // content::WebContentsObserver: - void RenderViewCreated(content::RenderViewHost* render_view_host) override; + void RenderFrameCreated(content::RenderFrameHost* frame_host) override; void DocumentOnLoadCompletedInMainFrame() override; private:
diff --git a/chrome/browser/chromeos/login/auth/cryptohome_authenticator_unittest.cc b/chrome/browser/chromeos/login/auth/cryptohome_authenticator_unittest.cc index e688102a..707496db 100644 --- a/chrome/browser/chromeos/login/auth/cryptohome_authenticator_unittest.cc +++ b/chrome/browser/chromeos/login/auth/cryptohome_authenticator_unittest.cc
@@ -31,7 +31,6 @@ #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/cryptohome/homedir_methods.h" -#include "chromeos/cryptohome/mock_async_method_caller.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/cros_disks_client.h" #include "chromeos/dbus/cryptohome/account_identifier_operators.h" @@ -65,6 +64,9 @@ namespace { +// A fake sanitized username used for testing. +constexpr char kFakeSanitizedUsername[] = "01234567890ABC"; + // Salt used by pre-hashed key. const char kSalt[] = "SALT $$"; @@ -173,8 +175,7 @@ cryptohome::BaseReply reply; reply.MutableExtension(cryptohome::MountReply::reply) - ->set_sanitized_username( - cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); + ->set_sanitized_username(kFakeSanitizedUsername); base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), reply)); } @@ -259,7 +260,6 @@ AccountId::FromUserEmail("me@nowhere.org")), user_manager_(new chromeos::FakeChromeUserManager()), user_manager_enabler_(base::WrapUnique(user_manager_)), - mock_caller_(NULL), consumer_(run_loop_.QuitClosure()), owner_key_util_(new ownership::MockOwnerKeyUtil()) { // Testing profile must be initialized after user_manager_ + @@ -290,8 +290,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( switches::kLoginManager); - mock_caller_ = new cryptohome::MockAsyncMethodCaller; - cryptohome::AsyncMethodCaller::InitializeForTesting(mock_caller_); cryptohome::HomedirMethods::Initialize(); fake_cryptohome_client_ = new TestCryptohomeClient; @@ -307,8 +305,6 @@ SystemSaltGetter::Shutdown(); CryptohomeClient::Shutdown(); - cryptohome::AsyncMethodCaller::Shutdown(); - mock_caller_ = NULL; cryptohome::HomedirMethods::Shutdown(); } @@ -466,8 +462,6 @@ std::unique_ptr<TestingProfileManager> profile_manager_; user_manager::ScopedUserManager user_manager_enabler_; - cryptohome::MockAsyncMethodCaller* mock_caller_; - base::RunLoop run_loop_; MockAuthStatusConsumer consumer_; @@ -675,8 +669,7 @@ TEST_F(CryptohomeAuthenticatorTest, DriveDataResync) { UserContext expected_user_context(user_context_with_transformed_key_); - expected_user_context.SetUserIDHash( - cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); + expected_user_context.SetUserIDHash(kFakeSanitizedUsername); ExpectLoginSuccess(expected_user_context); FailOnLoginFailure(); @@ -721,8 +714,7 @@ TEST_F(CryptohomeAuthenticatorTest, DriveDataRecover) { UserContext expected_user_context(user_context_with_transformed_key_); - expected_user_context.SetUserIDHash( - cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); + expected_user_context.SetUserIDHash(kFakeSanitizedUsername); ExpectLoginSuccess(expected_user_context); FailOnLoginFailure(); @@ -790,8 +782,7 @@ TEST_F(CryptohomeAuthenticatorTest, DriveCreateForNewUser) { UserContext expected_user_context(user_context_with_transformed_key_); - expected_user_context.SetUserIDHash( - cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); + expected_user_context.SetUserIDHash(kFakeSanitizedUsername); ExpectLoginSuccess(expected_user_context); FailOnLoginFailure(); @@ -840,8 +831,7 @@ CreateTransformedKey(Key::KEY_TYPE_SALTED_SHA256, kSalt); UserContext expected_user_context(user_context_with_transformed_key_); - expected_user_context.SetUserIDHash( - cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); + expected_user_context.SetUserIDHash(kFakeSanitizedUsername); ExpectLoginSuccess(expected_user_context); FailOnLoginFailure();
diff --git a/chrome/browser/chromeos/login/enrollment/enrollment_local_policy_server_browsertest.cc b/chrome/browser/chromeos/login/enrollment/enrollment_local_policy_server_browsertest.cc index f067c67a..4b7eebf 100644 --- a/chrome/browser/chromeos/login/enrollment/enrollment_local_policy_server_browsertest.cc +++ b/chrome/browser/chromeos/login/enrollment/enrollment_local_policy_server_browsertest.cc
@@ -43,7 +43,6 @@ #include "chromeos/attestation/attestation_flow_utils.h" #include "chromeos/attestation/mock_attestation_flow.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/session_manager/fake_session_manager_client.h"
diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc index a086cc54..ebc709da 100644 --- a/chrome/browser/chromeos/login/existing_user_controller.cc +++ b/chrome/browser/chromeos/login/existing_user_controller.cc
@@ -83,7 +83,6 @@ #include "chrome/common/url_constants.h" #include "chrome/grit/generated_resources.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/dbus/power/power_manager_client.h"
diff --git a/chrome/browser/chromeos/login/saml/saml_browsertest.cc b/chrome/browser/chromeos/login/saml/saml_browsertest.cc index 737be8f..c92a8d0 100644 --- a/chrome/browser/chromeos/login/saml/saml_browsertest.cc +++ b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
@@ -73,7 +73,6 @@ #include "chromeos/attestation/mock_attestation_flow.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/mock_async_method_caller.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/attestation/fake_attestation_client.h" #include "chromeos/dbus/attestation/interface.pb.h" @@ -1915,7 +1914,6 @@ chromeos::ScopedTestingCrosSettings settings_helper_; StubCrosSettingsProvider* settings_provider_ = nullptr; - cryptohome::MockAsyncMethodCaller* mock_async_method_caller_ = nullptr; attestation::MockMachineCertificateUploader mock_cert_uploader_; NiceMock<chromeos::attestation::MockAttestationFlow> mock_attestation_flow_; chromeos::ScopedStubInstallAttributes stub_install_attributes_; @@ -1926,15 +1924,6 @@ settings_provider_ = settings_helper_.device_settings(); - mock_async_method_caller_ = new NiceMock<cryptohome::MockAsyncMethodCaller>(); - mock_async_method_caller_->SetUp(/*success=*/true, - cryptohome::MountError::MOUNT_ERROR_NONE); - - // Ownership of mock_async_method_caller_ is transferred to - // AsyncMethodCaller::InitializeForTesting. - cryptohome::AsyncMethodCaller::InitializeForTesting( - mock_async_method_caller_); - ON_CALL(mock_attestation_flow_, GetCertificate) .WillByDefault(WithArgs<5>(Invoke(FakeGetCertificateCallbackTrue)));
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc b/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc index 1537eec..b84eb19 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc +++ b/chrome/browser/chromeos/login/screens/encryption_migration_screen.cc
@@ -29,7 +29,6 @@ #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/profiles/profile.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/cryptohome/homedir_methods.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h"
diff --git a/chrome/browser/chromeos/login/screens/encryption_migration_screen_unittest.cc b/chrome/browser/chromeos/login/screens/encryption_migration_screen_unittest.cc index ba17385..71ce6fc 100644 --- a/chrome/browser/chromeos/login/screens/encryption_migration_screen_unittest.cc +++ b/chrome/browser/chromeos/login/screens/encryption_migration_screen_unittest.cc
@@ -15,7 +15,6 @@ #include "chrome/browser/ui/webui/chromeos/login/base_webui_handler.h" #include "chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h" #include "chromeos/cryptohome/homedir_methods.h" -#include "chromeos/cryptohome/mock_async_method_caller.h" #include "chromeos/dbus/cryptohome/account_identifier_operators.h" #include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/power/fake_power_manager_client.h" @@ -126,13 +125,6 @@ std::make_unique<user_manager::ScopedUserManager>( base::WrapUnique(mock_user_manager)); - // This is used by EncryptionMigrationScreen to remove the existing - // cryptohome. Ownership of mock_async_method_caller_ is transferred to - // AsyncMethodCaller::InitializeForTesting. - mock_async_method_caller_ = new cryptohome::MockAsyncMethodCaller; - cryptohome::AsyncMethodCaller::InitializeForTesting( - mock_async_method_caller_); - // Set up fake dbus clients. CryptohomeClient::InitializeFake(); fake_cryptohome_client_ = FakeCryptohomeClient::Get(); @@ -161,7 +153,6 @@ PowerPolicyController::Shutdown(); PowerManagerClient::Shutdown(); CryptohomeClient::Shutdown(); - cryptohome::AsyncMethodCaller::Shutdown(); } protected: @@ -176,7 +167,6 @@ std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_enabler_; FakeCryptohomeClient* fake_cryptohome_client_ = nullptr; // unowned - cryptohome::MockAsyncMethodCaller* mock_async_method_caller_ = nullptr; // Will be set to true in ContinueLogin. bool skip_migration_callback_called_ = false;
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index c8445c3..5bab4ff7 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -8,6 +8,7 @@ #include <algorithm> #include <map> +#include <memory> #include <set> #include <string> #include <utility> @@ -24,6 +25,7 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/path_service.h" +#include "base/scoped_observation.h" #include "base/single_thread_task_runner.h" #include "base/strings/string16.h" #include "base/system/sys_info.h" @@ -499,6 +501,51 @@ } } +// Observes the Device Account's LST and informs UserSessionManager about it. +// Used by UserSessionManager to keep the user's token handle up to date. +class UserSessionManager::DeviceAccountGaiaTokenObserver + : public ash::AccountManager::Observer { + public: + DeviceAccountGaiaTokenObserver( + ash::AccountManager* account_manager, + const AccountId& account_id, + base::RepeatingCallback<void(const AccountId& account_id)> callback) + : account_id_(account_id), callback_(callback) { + account_manager_observation_.Observe(account_manager); + } + + DeviceAccountGaiaTokenObserver(const DeviceAccountGaiaTokenObserver&) = + delete; + DeviceAccountGaiaTokenObserver& operator=( + const DeviceAccountGaiaTokenObserver&) = delete; + + ~DeviceAccountGaiaTokenObserver() override = default; + + // ash::AccountManager::Observer overrides: + void OnTokenUpserted(const account_manager::Account& account) override { + if (account.key.account_type != account_manager::AccountType::kGaia) + return; + if (account.key.id != account_id_.GetGaiaId()) + return; + + callback_.Run(account_id_); + } + + void OnAccountRemoved(const account_manager::Account& account) override { + // Device Account cannot be removed within session. We could have received + // this notification for a secondary account however, so consider this as a + // no-op. + } + + private: + // The account being tracked by `this` instance. + const AccountId account_id_; + // `callback_` is called when `account_id`'s LST changes. + base::RepeatingCallback<void(const AccountId& account_id)> callback_; + base::ScopedObservation<ash::AccountManager, ash::AccountManager::Observer> + account_manager_observation_{this}; +}; + void UserSessionManager::SetNetworkConnectionTracker( network::NetworkConnectionTracker* network_connection_tracker) { DCHECK(network_connection_tracker); @@ -1372,6 +1419,25 @@ VLOG(1) << "Seed IdentityManager with the authenticated account info, " << "success=" << !account_id.empty(); + // At this point, the Device Account has been loaded. Start observing its + // refresh token for changes, so that token handle can be kept in sync. + if (TokenHandlesEnabled()) { + auto device_account_token_observer = + std::make_unique<DeviceAccountGaiaTokenObserver>( + account_manager, user->GetAccountId(), + base::BindRepeating(&UserSessionManager::UpdateTokenHandle, + weak_factory_.GetWeakPtr(), profile)); + auto it = token_observers_.find(profile); + if (it == token_observers_.end()) { + token_observers_.emplace(profile, + std::move(device_account_token_observer)); + } else { + NOTREACHED() + << "Found an existing Gaia token observer for this Profile. " + "Profile is being erroneously initialized twice?"; + } + } + const user_manager::User* user = user_manager->FindUser(user_context.GetAccountId()); bool is_child = user->GetType() == user_manager::USER_TYPE_CHILD; @@ -1526,7 +1592,6 @@ } void UserSessionManager::FinalizePrepareProfile(Profile* profile) { - user_manager::UserManager* user_manager = user_manager::UserManager::Get(); if (user_manager->IsLoggedInAsUserWithGaiaAccount()) { if (user_context_.GetAuthFlow() == UserContext::AUTH_FLOW_GAIA_WITH_SAML) { @@ -1777,16 +1842,7 @@ if (TokenHandlesEnabled() && user && user->HasGaiaAccount()) { CreateTokenUtilIfMissing(); - if (token_handle_util_->ShouldObtainHandle(user->GetAccountId())) { - if (!token_handle_fetcher_.get()) { - token_handle_fetcher_.reset(new TokenHandleFetcher( - token_handle_util_.get(), user->GetAccountId())); - token_handle_fetcher_->BackfillToken( - profile, base::BindOnce(&UserSessionManager::OnTokenHandleObtained, - weak_factory_.GetWeakPtr())); - token_handle_backfill_tried_for_testing_ = true; - } - } + UpdateTokenHandleIfRequired(profile, user->GetAccountId()); } } @@ -2221,6 +2277,7 @@ turn_sync_on_helper_.reset(); token_handle_fetcher_.reset(); token_handle_util_.reset(); + token_observers_.clear(); always_on_vpn_manager_.reset(); u2f_notification_.reset(); release_notes_notification_.reset(); @@ -2282,7 +2339,28 @@ void UserSessionManager::CreateTokenUtilIfMissing() { if (!token_handle_util_.get()) - token_handle_util_.reset(new TokenHandleUtil()); + token_handle_util_ = std::make_unique<TokenHandleUtil>(); +} + +void UserSessionManager::UpdateTokenHandleIfRequired( + Profile* const profile, + const AccountId& account_id) { + if (!token_handle_util_->ShouldObtainHandle(account_id)) + return; + if (token_handle_fetcher_.get()) + return; + + UpdateTokenHandle(profile, account_id); +} + +void UserSessionManager::UpdateTokenHandle(Profile* const profile, + const AccountId& account_id) { + token_handle_fetcher_ = std::make_unique<TokenHandleFetcher>( + token_handle_util_.get(), account_id); + token_handle_fetcher_->BackfillToken( + profile, base::BindOnce(&UserSessionManager::OnTokenHandleObtained, + weak_factory_.GetWeakPtr())); + token_handle_backfill_tried_for_testing_ = true; } void UserSessionManager::NotifyEasyUnlockKeyOpsFinished() {
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h index fdeead3..4b7a414 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.h +++ b/chrome/browser/chromeos/login/session/user_session_manager.h
@@ -348,6 +348,8 @@ ~UserSessionManager() override; private: + // Observes the Device Account's LST and informs UserSessionManager about it. + class DeviceAccountGaiaTokenObserver; friend class test::UserSessionManagerTestApi; friend struct base::DefaultSingletonTraits<UserSessionManager>; @@ -499,9 +501,16 @@ void CreateTokenUtilIfMissing(); + // Update token handle if the existing token handle is missing/invalid. + void UpdateTokenHandleIfRequired(Profile* const profile, + const AccountId& account_id); + + // Force update token handle. + void UpdateTokenHandle(Profile* const profile, const AccountId& account_id); + // Test API methods. void InjectAuthenticatorBuilder( - std::unique_ptr<StubAuthenticatorBuilder> builer); + std::unique_ptr<StubAuthenticatorBuilder> builder); // Controls whether browser instance should be launched after sign in // (used in tests). @@ -601,6 +610,8 @@ std::unique_ptr<TokenHandleUtil> token_handle_util_; std::unique_ptr<TokenHandleFetcher> token_handle_fetcher_; + std::map<Profile*, std::unique_ptr<DeviceAccountGaiaTokenObserver>> + token_observers_; // Whether should launch browser, tests may override this value. bool should_launch_browser_;
diff --git a/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc b/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc index 9b1829c7..f16c402 100644 --- a/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc +++ b/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc
@@ -77,7 +77,6 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" #include "chromeos/dbus/dbus_method_call_status.h"
diff --git a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc index f6c026f..3e98ae1 100644 --- a/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc +++ b/chrome/browser/chromeos/policy/browser_policy_connector_chromeos.cc
@@ -62,7 +62,6 @@ #include "chromeos/attestation/attestation_flow.h" #include "chromeos/constants/chromeos_paths.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h"
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc index 00e4150..9755bc7 100644 --- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc +++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.cc
@@ -200,7 +200,8 @@ enrollment_certificate_uploader_.reset( new chromeos::attestation::EnrollmentCertificateUploaderImpl(client())); enrollment_policy_observer_.reset( - new chromeos::attestation::EnrollmentPolicyObserver(client())); + new chromeos::attestation::EnrollmentPolicyObserver( + client(), enrollment_certificate_uploader_.get())); lookup_key_uploader_.reset( new LookupKeyUploader(device_store(), g_browser_process->local_state(), enrollment_certificate_uploader_.get()));
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc index c607e9ce..6d4d567f 100644 --- a/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc +++ b/chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos_unittest.cc
@@ -36,7 +36,6 @@ #include "chrome/test/base/testing_profile.h" #include "chromeos/attestation/mock_attestation_flow.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/system_salt_getter.h" #include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/dbus_client_implementation_type.h" @@ -151,7 +150,6 @@ void SetUp() override { DeviceSettingsTestBase::SetUp(); - cryptohome::AsyncMethodCaller::Initialize(); device_management_service_.ScheduleInitialization(0); base::RunLoop().RunUntilIdle(); @@ -197,8 +195,6 @@ } void TearDown() override { - cryptohome::AsyncMethodCaller::Shutdown(); - if (initializer_) initializer_->Shutdown(); ShutdownManager();
diff --git a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc b/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc index 3ef09cd5..a766abd 100644 --- a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc +++ b/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc
@@ -9,7 +9,6 @@ #include "base/strings/strcat.h" #include "base/task/post_task.h" #include "base/time/default_clock.h" -#include "chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h" #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" #include "chrome/common/pref_names.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" @@ -102,8 +101,17 @@ if (rsu_device_id == prefs_->GetString(prefs::kLastRsuDeviceIdUploaded)) return; certificate_uploader_->ObtainAndUploadCertificate( - base::BindOnce(&LookupKeyUploader::Result, weak_factory_.GetWeakPtr(), - encoded_rsu_device_id)); + base::BindOnce(&LookupKeyUploader::OnEnrollmentCertificateUploaded, + weak_factory_.GetWeakPtr(), encoded_rsu_device_id)); +} + +void LookupKeyUploader::OnEnrollmentCertificateUploaded( + const std::string& encoded_uploaded_key, + chromeos::attestation::EnrollmentCertificateUploader::Status status) { + const bool success = + status == + chromeos::attestation::EnrollmentCertificateUploader::Status::kSuccess; + Result(encoded_uploaded_key, success); } void LookupKeyUploader::Result(const std::string& encoded_uploaded_key,
diff --git a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h b/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h index 54a5bba..604ad4f 100644 --- a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h +++ b/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h
@@ -13,14 +13,12 @@ #include "base/optional.h" #include "base/time/clock.h" #include "base/time/time.h" +#include "chrome/browser/chromeos/attestation/enrollment_certificate_uploader.h" #include "components/policy/core/common/cloud/cloud_policy_store.h" class PrefService; namespace chromeos { -namespace attestation { -class EnrollmentCertificateUploader; -} class CryptohomeClient; } // namespace chromeos @@ -59,6 +57,10 @@ void OnRsuDeviceIdReceived(base::Optional<cryptohome::BaseReply> result); void HandleRsuDeviceId(const std::string& rsu_device_id); + void OnEnrollmentCertificateUploaded( + const std::string& uploaded_key, + chromeos::attestation::EnrollmentCertificateUploader::Status status); + void Result(const std::string& uploaded_key, bool success); // Used in tests. void SetClock(base::Clock* clock) { clock_ = clock; }
diff --git a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc b/chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc index 2433a43..cfd3cac 100644 --- a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc +++ b/chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc
@@ -24,6 +24,8 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using CertificateStatus = + chromeos::attestation::EnrollmentCertificateUploader::Status; using chromeos::attestation::MockEnrollmentCertificateUploader; using testing::_; using testing::Invoke; @@ -77,9 +79,10 @@ TEST_F(LookupKeyUploaderTest, Uploads) { EXPECT_CALL(certificate_uploader_, ObtainAndUploadCertificate(_)) - .WillOnce(Invoke([](base::OnceCallback<void(bool status)> callback) { - std::move(callback).Run(true); - })); + .WillOnce(Invoke( + [](base::OnceCallback<void(CertificateStatus status)> callback) { + std::move(callback).Run(CertificateStatus::kSuccess); + })); SetCryptohomeReplyTo(kValidRsuDeviceId); Start(); ExpectSavedIdToBe(kValidRsuDeviceIdEncoded); @@ -116,9 +119,10 @@ AdvanceTime(); EXPECT_CALL(certificate_uploader_, ObtainAndUploadCertificate(_)) - .WillOnce(Invoke([](base::OnceCallback<void(bool status)> callback) { - std::move(callback).Run(true); - })); + .WillOnce(Invoke( + [](base::OnceCallback<void(CertificateStatus status)> callback) { + std::move(callback).Run(CertificateStatus::kSuccess); + })); Start(); ExpectSavedIdToBe(kValidRsuDeviceIdEncoded); EXPECT_FALSE(NeedsUpload()); @@ -127,9 +131,9 @@ TEST_F(LookupKeyUploaderTest, UploadsEvenWhenSubmittedBeforeIfForcedByPolicy) { EXPECT_CALL(certificate_uploader_, ObtainAndUploadCertificate(_)) .Times(2) - .WillRepeatedly( - Invoke([](base::OnceCallback<void(bool status)> callback) { - std::move(callback).Run(true); + .WillRepeatedly(Invoke( + [](base::OnceCallback<void(CertificateStatus status)> callback) { + std::move(callback).Run(CertificateStatus::kSuccess); })); SetCryptohomeReplyTo(kValidRsuDeviceId); Start();
diff --git a/chrome/browser/enterprise/connectors/analysis_service_settings.cc b/chrome/browser/enterprise/connectors/analysis_service_settings.cc index 4df8b5c3..ea7b6c6 100644 --- a/chrome/browser/enterprise/connectors/analysis_service_settings.cc +++ b/chrome/browser/enterprise/connectors/analysis_service_settings.cc
@@ -234,6 +234,14 @@ AnalysisServiceSettings::URLPatternSettings::URLPatternSettings() = default; AnalysisServiceSettings::URLPatternSettings::URLPatternSettings( const AnalysisServiceSettings::URLPatternSettings&) = default; +AnalysisServiceSettings::URLPatternSettings::URLPatternSettings( + AnalysisServiceSettings::URLPatternSettings&&) = default; +AnalysisServiceSettings::URLPatternSettings& +AnalysisServiceSettings::URLPatternSettings::operator=( + const AnalysisServiceSettings::URLPatternSettings&) = default; +AnalysisServiceSettings::URLPatternSettings& +AnalysisServiceSettings::URLPatternSettings::operator=( + AnalysisServiceSettings::URLPatternSettings&&) = default; AnalysisServiceSettings::URLPatternSettings::~URLPatternSettings() = default; } // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis_service_settings.h b/chrome/browser/enterprise/connectors/analysis_service_settings.h index ffab01f..99739ca 100644 --- a/chrome/browser/enterprise/connectors/analysis_service_settings.h +++ b/chrome/browser/enterprise/connectors/analysis_service_settings.h
@@ -37,6 +37,9 @@ struct URLPatternSettings { URLPatternSettings(); URLPatternSettings(const URLPatternSettings&); + URLPatternSettings(URLPatternSettings&&); + URLPatternSettings& operator=(const URLPatternSettings&); + URLPatternSettings& operator=(URLPatternSettings&&); ~URLPatternSettings(); // Tags that correspond to the pattern.
diff --git a/chrome/browser/enterprise/connectors/common.cc b/chrome/browser/enterprise/connectors/common.cc index 5e78914a..cbc61eb 100644 --- a/chrome/browser/enterprise/connectors/common.cc +++ b/chrome/browser/enterprise/connectors/common.cc
@@ -23,6 +23,12 @@ ReportingSettings& ReportingSettings::operator=(ReportingSettings&&) = default; ReportingSettings::~ReportingSettings() = default; +FileSystemSettings::FileSystemSettings() = default; +FileSystemSettings::FileSystemSettings(FileSystemSettings&&) = default; +FileSystemSettings& FileSystemSettings::operator=(FileSystemSettings&&) = + default; +FileSystemSettings::~FileSystemSettings() = default; + const char* ConnectorPref(AnalysisConnector connector) { switch (connector) { case AnalysisConnector::BULK_DATA_ENTRY: @@ -44,6 +50,13 @@ } } +const char* ConnectorPref(FileSystemConnector connector) { + switch (connector) { + case FileSystemConnector::SEND_DOWNLOAD_TO_CLOUD: + return kSendDownloadToCloudPref; + } +} + const char* ConnectorScopePref(AnalysisConnector connector) { switch (connector) { case AnalysisConnector::BULK_DATA_ENTRY:
diff --git a/chrome/browser/enterprise/connectors/common.h b/chrome/browser/enterprise/connectors/common.h index 59e03642..4d05495 100644 --- a/chrome/browser/enterprise/connectors/common.h +++ b/chrome/browser/enterprise/connectors/common.h
@@ -7,6 +7,7 @@ #include <set> #include <string> +#include <vector> #include "base/supports_user_data.h" #include "components/enterprise/common/proto/connectors.pb.h" @@ -32,11 +33,17 @@ constexpr char kKeyCustomMessages[] = "custom_messages"; constexpr char kKeyCustomMessagesMessage[] = "message"; constexpr char kKeyCustomMessagesLearnMoreUrl[] = "learn_more_url"; +constexpr char kKeyMimeTypes[] = "mime_types"; +constexpr char kKeyEnterpriseId[] = "enterprise_id"; enum class ReportingConnector { SECURITY_EVENT, }; +enum class FileSystemConnector { + SEND_DOWNLOAD_TO_CLOUD, +}; + // Enum representing if an analysis should block further interactions with the // browser until its verdict is obtained. enum class BlockUntilVerdict { @@ -72,9 +79,7 @@ struct ReportingSettings { ReportingSettings(); - explicit ReportingSettings(GURL url, - const std::string& dm_token, - bool per_profile); + ReportingSettings(GURL url, const std::string& dm_token, bool per_profile); ReportingSettings(ReportingSettings&&); ReportingSettings& operator=(ReportingSettings&&); ~ReportingSettings(); @@ -88,9 +93,26 @@ bool per_profile = false; }; +struct FileSystemSettings { + FileSystemSettings(); + FileSystemSettings(FileSystemSettings&&); + FileSystemSettings& operator=(FileSystemSettings&&); + ~FileSystemSettings(); + + GURL home; + GURL authorization_endpoint; + GURL token_endpoint; + std::string client_id; + std::string client_secret; + std::vector<std::string> scopes; + size_t max_direct_size; + std::set<std::string> mime_types; +}; + // Returns the pref path corresponding to a connector. const char* ConnectorPref(AnalysisConnector connector); const char* ConnectorPref(ReportingConnector connector); +const char* ConnectorPref(FileSystemConnector connector); const char* ConnectorScopePref(AnalysisConnector connector); const char* ConnectorScopePref(ReportingConnector connector);
diff --git a/chrome/browser/enterprise/connectors/connectors_manager.cc b/chrome/browser/enterprise/connectors/connectors_manager.cc index 9950305..de7cb87e 100644 --- a/chrome/browser/enterprise/connectors/connectors_manager.cc +++ b/chrome/browser/enterprise/connectors/connectors_manager.cc
@@ -45,6 +45,15 @@ return pref && pref_change_registrar_.prefs()->HasPrefPath(pref); } +bool ConnectorsManager::IsConnectorEnabled( + FileSystemConnector connector) const { + if (file_system_connector_settings_.count(connector) == 1) + return true; + + const char* pref = ConnectorPref(connector); + return pref && pref_change_registrar_.prefs()->HasPrefPath(pref); +} + base::Optional<ReportingSettings> ConnectorsManager::GetReportingSettings( ReportingConnector connector) { if (!IsConnectorEnabled(connector)) @@ -99,6 +108,25 @@ return analysis_connector_settings_[connector][0].GetAnalysisSettings(url); } +base::Optional<FileSystemSettings> ConnectorsManager::GetFileSystemSettings( + const GURL& url, + FileSystemConnector connector) { + if (!IsConnectorEnabled(connector)) + return base::nullopt; + + if (file_system_connector_settings_.count(connector) == 0) + CacheFileSystemConnectorPolicy(connector); + + // If the connector is still not in memory, it means the pref is set to an + // empty list or that it is not a list. + if (file_system_connector_settings_.count(connector) == 0) + return base::nullopt; + + // While multiple services can be set by the connector policies, only the + // first one is considered for now. + return file_system_connector_settings_[connector][0].GetSettings(url); +} + void ConnectorsManager::CacheAnalysisConnectorPolicy( AnalysisConnector connector) { analysis_connector_settings_.erase(connector); @@ -133,6 +161,23 @@ } } +void ConnectorsManager::CacheFileSystemConnectorPolicy( + FileSystemConnector connector) { + file_system_connector_settings_.erase(connector); + + // Connectors with non-existing policies should not reach this code. + const char* pref = ConnectorPref(connector); + DCHECK(pref); + + const base::ListValue* policy_value = + pref_change_registrar_.prefs()->GetList(pref); + if (policy_value && policy_value->is_list()) { + for (const base::Value& service_settings : policy_value->GetList()) + file_system_connector_settings_[connector].emplace_back( + service_settings, *service_provider_config_); + } +} + bool ConnectorsManager::DelayUntilVerdict(AnalysisConnector connector) { if (IsConnectorEnabled(connector)) { if (analysis_connector_settings_.count(connector) == 0) @@ -154,6 +199,7 @@ StartObservingPref(AnalysisConnector::FILE_DOWNLOADED); StartObservingPref(AnalysisConnector::BULK_DATA_ENTRY); StartObservingPref(ReportingConnector::SECURITY_EVENT); + StartObservingPref(FileSystemConnector::SEND_DOWNLOAD_TO_CLOUD); } void ConnectorsManager::StartObservingPref(AnalysisConnector connector) { @@ -178,6 +224,17 @@ } } +void ConnectorsManager::StartObservingPref(FileSystemConnector connector) { + const char* pref = ConnectorPref(connector); + DCHECK(pref); + if (!pref_change_registrar_.IsObserved(pref)) { + pref_change_registrar_.Add( + pref, + base::BindRepeating(&ConnectorsManager::CacheFileSystemConnectorPolicy, + base::Unretained(this), connector)); + } +} + const ConnectorsManager::AnalysisConnectorsSettings& ConnectorsManager::GetAnalysisConnectorsSettingsForTesting() const { return analysis_connector_settings_; @@ -188,4 +245,9 @@ return reporting_connector_settings_; } +const ConnectorsManager::FileSystemConnectorsSettings& +ConnectorsManager::GetFileSystemConnectorsSettingsForTesting() const { + return file_system_connector_settings_; +} + } // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/connectors_manager.h b/chrome/browser/enterprise/connectors/connectors_manager.h index 6c31aa84..d319b90 100644 --- a/chrome/browser/enterprise/connectors/connectors_manager.h +++ b/chrome/browser/enterprise/connectors/connectors_manager.h
@@ -9,6 +9,7 @@ #include "base/optional.h" #include "chrome/browser/enterprise/connectors/analysis_service_settings.h" #include "chrome/browser/enterprise/connectors/common.h" +#include "chrome/browser/enterprise/connectors/file_system/service_settings.h" #include "chrome/browser/enterprise/connectors/reporting_service_settings.h" #include "chrome/browser/enterprise/connectors/service_provider_config.h" #include "components/prefs/pref_change_registrar.h" @@ -27,6 +28,8 @@ std::map<AnalysisConnector, std::vector<AnalysisServiceSettings>>; using ReportingConnectorsSettings = std::map<ReportingConnector, std::vector<ReportingServiceSettings>>; + using FileSystemConnectorsSettings = + std::map<FileSystemConnector, std::vector<FileSystemServiceSettings>>; ConnectorsManager(PrefService* pref_service, ServiceProviderConfig* config, @@ -46,9 +49,17 @@ const GURL& url, AnalysisConnector connector); + // Validates which settings should be applied to a file system connector + // against cached policies. Cache the policy value the first time this is + // called for every different connector. + base::Optional<FileSystemSettings> GetFileSystemSettings( + const GURL& url, + FileSystemConnector connector); + // Checks if the corresponding connector is enabled. bool IsConnectorEnabled(AnalysisConnector connector) const; bool IsConnectorEnabled(ReportingConnector connector) const; + bool IsConnectorEnabled(FileSystemConnector connector) const; bool DelayUntilVerdict(AnalysisConnector connector); @@ -57,6 +68,8 @@ const; const ReportingConnectorsSettings& GetReportingConnectorsSettingsForTesting() const; + const FileSystemConnectorsSettings& + GetFileSystemConnectorsSettingsForTesting() const; private: // Validates which settings should be applied to an analysis connector event @@ -69,12 +82,14 @@ // Read and cache the policy corresponding to |connector|. void CacheAnalysisConnectorPolicy(AnalysisConnector connector); void CacheReportingConnectorPolicy(ReportingConnector connector); + void CacheFileSystemConnectorPolicy(FileSystemConnector connector); // Sets up |pref_change_registrar_|. Used by the constructor and // SetUpForTesting. void StartObservingPrefs(PrefService* pref_service); void StartObservingPref(AnalysisConnector connector); void StartObservingPref(ReportingConnector connector); + void StartObservingPref(FileSystemConnector connector); // Validates which settings should be applied to an analysis connector event // against connector policies. Cache the policy value the first time this is @@ -90,6 +105,7 @@ // used or when a policy is updated. AnalysisConnectorsSettings analysis_connector_settings_; ReportingConnectorsSettings reporting_connector_settings_; + FileSystemConnectorsSettings file_system_connector_settings_; // Used to track changes of connector policies and propagate them in // |connector_settings_|.
diff --git a/chrome/browser/enterprise/connectors/connectors_manager_unittest.cc b/chrome/browser/enterprise/connectors/connectors_manager_unittest.cc index c19b591..23578320 100644 --- a/chrome/browser/enterprise/connectors/connectors_manager_unittest.cc +++ b/chrome/browser/enterprise/connectors/connectors_manager_unittest.cc
@@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <set> + #include "chrome/browser/enterprise/connectors/connectors_manager.h" #include "base/json/json_reader.h" @@ -33,6 +35,10 @@ constexpr ReportingConnector kAllReportingConnectors[] = { ReportingConnector::SECURITY_EVENT}; +constexpr FileSystemConnector kAllFileSystemConnectors[] = { + FileSystemConnector::SEND_DOWNLOAD_TO_CLOUD, +}; + constexpr char kEmptySettingsPref[] = "[]"; constexpr char kNormalAnalysisSettingsPref[] = R"([ @@ -59,6 +65,29 @@ } ])"; +constexpr char kNormalSendDownloadToCloudPolicy[] = R"([ + { + "service_provider": "box", + "enterprise_id": "1234567890", + "enable": [ + { + "url_list": ["*"], + "mime_types": ["text/plain", "image/png", "application/zip"], + }, + ], + "disable": [ + { + "url_list": ["no.text.com", "no.text.no.image.com"], + "mime_types": ["text/plain"], + }, + { + "url_list": ["no.image.com", "no.text.no.image.com"], + "mime_types": ["image/png"], + }, + ], + }, +])"; + constexpr char kDlpAndMalwareUrl[] = "https://foo.com"; constexpr char kOnlyDlpUrl[] = "https://no.malware.com"; constexpr char kOnlyMalwareUrl[] = "https://no.dlp.com"; @@ -94,6 +123,13 @@ settings.reporting_url); } + void ValidateSettings(const FileSystemSettings& settings) { + // Mime types are the only setting affect by the policy, the rest are + // just copied from the service provider comfig. So only need to validate + // this in tests. + ASSERT_EQ(settings.mime_types, expected_mime_types_); + } + class ScopedConnectorPref { public: ScopedConnectorPref(PrefService* pref_service, @@ -126,6 +162,8 @@ bool expected_block_password_protected_files_ = false; bool expected_block_large_files_ = false; bool expected_block_unsupported_file_types_ = false; + + std::set<std::string> expected_mime_types_; }; class ConnectorsManagerConnectorPoliciesTest @@ -156,11 +194,6 @@ } } - void SetUpExpectedReportingSettings(const char* pref) { - auto expected_settings = ExpectedReportingSettings(pref); - expect_settings_ = expected_settings.has_value(); - } - protected: base::Optional<AnalysisSettings> ExpectedAnalysisSettings(const char* pref, const char* url) { @@ -184,15 +217,6 @@ return settings; } - base::Optional<ReportingSettings> ExpectedReportingSettings( - const char* pref) { - if (pref == kEmptySettingsPref) - return base::nullopt; - - ReportingSettings settings; - return settings; - } - bool expect_settings_; }; @@ -300,11 +324,11 @@ ConnectorsManagerAnalysisConnectorsTest, testing::ValuesIn(kAllAnalysisConnectors)); -class ConnectorsManagerReportingDynamicTest +class ConnectorsManagerReportingTest : public ConnectorsManagerTest, public testing::WithParamInterface<ReportingConnector> { public: - ConnectorsManagerReportingDynamicTest() { + ConnectorsManagerReportingTest() { scoped_feature_list_.InitWithFeatures({kEnterpriseConnectorsEnabled}, {}); } @@ -313,7 +337,7 @@ const char* pref() const { return ConnectorPref(connector()); } }; -TEST_P(ConnectorsManagerReportingDynamicTest, DynamicPolicies) { +TEST_P(ConnectorsManagerReportingTest, DynamicPolicies) { ConnectorsManager manager(pref_service(), GetServiceProviderConfig()); // The cache is initially empty. ASSERT_TRUE(manager.GetReportingConnectorsSettingsForTesting().empty()); @@ -340,8 +364,56 @@ ASSERT_TRUE(manager.GetAnalysisConnectorsSettingsForTesting().empty()); } -INSTANTIATE_TEST_CASE_P(ConnectorsManagerReportingDynamicTest, - ConnectorsManagerReportingDynamicTest, +INSTANTIATE_TEST_CASE_P(ConnectorsManagerReportingTest, + ConnectorsManagerReportingTest, testing::ValuesIn(kAllReportingConnectors)); +class ConnectorsManagerFileSystemTest + : public ConnectorsManagerTest, + public testing::WithParamInterface<FileSystemConnector> { + public: + ConnectorsManagerFileSystemTest() { + scoped_feature_list_.InitWithFeatures({kEnterpriseConnectorsEnabled}, {}); + } + + FileSystemConnector connector() const { return GetParam(); } + + const char* pref() const { return ConnectorPref(connector()); } +}; + +TEST_P(ConnectorsManagerFileSystemTest, DynamicPolicies) { + ConnectorsManager manager(pref_service(), GetServiceProviderConfig()); + // The cache is initially empty. + ASSERT_TRUE(manager.GetFileSystemConnectorsSettingsForTesting().empty()); + + // Once the pref is updated, the settings should be cached, and reporting + // settings can be obtained. + { + ScopedConnectorPref scoped_pref(pref_service(), pref(), + kNormalSendDownloadToCloudPolicy); + + const auto& cached_settings = + manager.GetFileSystemConnectorsSettingsForTesting(); + ASSERT_FALSE(cached_settings.empty()); + ASSERT_EQ(1u, cached_settings.count(connector())); + ASSERT_EQ(1u, cached_settings.at(connector()).size()); + + expected_mime_types_ = {"text/plain", "image/png", "application/zip"}; + + auto settings = cached_settings.at(connector()) + .at(0) + .GetSettings(GURL("https://any.com")); + ASSERT_TRUE(settings.has_value()); + + ValidateSettings(settings.value()); + } + + // The cache should be empty again after the pref is reset. + ASSERT_TRUE(manager.GetAnalysisConnectorsSettingsForTesting().empty()); +} + +INSTANTIATE_TEST_CASE_P(ConnectorsManagerFileSystemTest, + ConnectorsManagerFileSystemTest, + testing::ValuesIn(kAllFileSystemConnectors)); + } // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc index a653285..f324ceb 100644 --- a/chrome/browser/enterprise/connectors/connectors_service.cc +++ b/chrome/browser/enterprise/connectors/connectors_service.cc
@@ -101,6 +101,22 @@ } } } + }, + { + "name": "box", + "display_name": "Box", + "version": { + "1": { + "file_system": { + "home": "https://box.com", + "authorization_endpoint": "https://account.box.com/api/oauth2/authorize", + "token_endpoint": "https://api.box.com/oauth2/token", + "max_direct_size": 20971520, + "scopes": [], + "disable": [ "box.com" ] + } + } + } } ] })"; @@ -165,6 +181,20 @@ return settings; } +base::Optional<FileSystemSettings> ConnectorsService::GetFileSystemSettings( + const GURL& url, + FileSystemConnector connector) { + if (!ConnectorsEnabled()) + return base::nullopt; + + base::Optional<FileSystemSettings> settings = + connectors_manager_->GetFileSystemSettings(url, connector); + if (!settings.has_value()) + return base::nullopt; + + return settings; +} + bool ConnectorsService::IsConnectorEnabled(AnalysisConnector connector) const { if (!ConnectorsEnabled()) return false; @@ -179,6 +209,14 @@ return connectors_manager_->IsConnectorEnabled(connector); } +bool ConnectorsService::IsConnectorEnabled( + FileSystemConnector connector) const { + if (!ConnectorsEnabled()) + return false; + + return connectors_manager_->IsConnectorEnabled(connector); +} + bool ConnectorsService::DelayUntilVerdict(AnalysisConnector connector) { if (!ConnectorsEnabled()) return false;
diff --git a/chrome/browser/enterprise/connectors/connectors_service.h b/chrome/browser/enterprise/connectors/connectors_service.h index 03e7f47e..7dac1a4 100644 --- a/chrome/browser/enterprise/connectors/connectors_service.h +++ b/chrome/browser/enterprise/connectors/connectors_service.h
@@ -52,9 +52,13 @@ base::Optional<AnalysisSettings> GetAnalysisSettings( const GURL& url, AnalysisConnector connector); + base::Optional<FileSystemSettings> GetFileSystemSettings( + const GURL& url, + FileSystemConnector connector); bool IsConnectorEnabled(AnalysisConnector connector) const; bool IsConnectorEnabled(ReportingConnector connector) const; + bool IsConnectorEnabled(FileSystemConnector connector) const; bool DelayUntilVerdict(AnalysisConnector connector);
diff --git a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc index 2bbc38f..2c8142f 100644 --- a/chrome/browser/enterprise/connectors/connectors_service_unittest.cc +++ b/chrome/browser/enterprise/connectors/connectors_service_unittest.cc
@@ -47,6 +47,29 @@ } ])"; +constexpr char kNormalSendDownloadToCloudPref[] = R"([ + { + "service_provider": "box", + "enterprise_id": "1234567890", + "enable": [ + { + "url_list": ["*"], + "mime_types": ["text/plain", "image/png", "application/zip"] + } + ], + "disable": [ + { + "url_list": ["no.text.com", "no.text.no.image.com"], + "mime_types": ["text/plain"] + }, + { + "url_list": ["no.image.com", "no.text.no.image.com"], + "mime_types": ["image/png"] + } + ] + } +])"; + constexpr char kDlpAndMalwareUrl[] = "https://foo.com"; constexpr char kOnlyDlpUrl[] = "https://no.malware.com"; constexpr char kOnlyMalwareUrl[] = "https://no.dlp.com"; @@ -185,6 +208,90 @@ testing::Bool(), testing::ValuesIn({0, 1, 2}))); +// Tests to make sure file system settings work with both the feature flag +// and the policy. The parameter for these tests is a tuple of: +// +// enum class FileSystemConnector[]: array of all file system connectors. +// bool: enable feature flag. +// int: policy value. 0: don't set, 1: set to normal, 2: set to empty. +class ConnectorsServiceFileSystemFeatureTest + : public ConnectorsServiceTest, + public testing::WithParamInterface< + std::tuple<FileSystemConnector, bool, int>> { + public: + ConnectorsServiceFileSystemFeatureTest() { + if (enable_feature_flag()) { + scoped_feature_list_.InitWithFeatures({kEnterpriseConnectorsEnabled}, {}); + } else { + scoped_feature_list_.InitWithFeatures({}, {kEnterpriseConnectorsEnabled}); + } + } + + FileSystemConnector connector() const { return std::get<0>(GetParam()); } + bool enable_feature_flag() const { return std::get<1>(GetParam()); } + int policy_value() const { return std::get<2>(GetParam()); } + + const char* pref() const { return ConnectorPref(connector()); } + + const char* pref_value() const { + switch (policy_value()) { + case 1: + return kNormalSendDownloadToCloudPref; + case 2: + return kEmptySettingsPref; + } + NOTREACHED(); + return nullptr; + } + + bool file_system_enabled() const { + return enable_feature_flag() && policy_value() == 1; + } + + void ValidateSettings(const FileSystemSettings& settings) { + // Mime types are the only setting affect by the policy, the rest are + // just copied from the service provider comfig. So only need to validate + // this in tests. + ASSERT_EQ(settings.mime_types, expected_mime_types_); + } + + void set_expected_mime_types(std::set<std::string> expected_mime_types) { + expected_mime_types_ = std::move(expected_mime_types); + } + + private: + std::set<std::string> expected_mime_types_; +}; + +TEST_P(ConnectorsServiceFileSystemFeatureTest, Test) { + if (policy_value() != 0) { + profile_->GetPrefs()->Set(pref(), *base::JSONReader::Read(pref_value())); + } + + auto settings = + ConnectorsServiceFactory::GetForBrowserContext(profile_) + ->GetFileSystemSettings(GURL("https://any.com"), connector()); + EXPECT_EQ(file_system_enabled(), settings.has_value()); + if (settings.has_value()) { + set_expected_mime_types({"text/plain", "image/png", "application/zip"}); + ValidateSettings(settings.value()); + } + + EXPECT_EQ(enable_feature_flag() && policy_value() == 1, + !ConnectorsServiceFactory::GetForBrowserContext(profile_) + ->ConnectorsManagerForTesting() + ->GetFileSystemConnectorsSettingsForTesting() + .empty()); +} + +INSTANTIATE_TEST_CASE_P( + , + ConnectorsServiceFileSystemFeatureTest, + testing::Combine( + testing::Values(FileSystemConnector::SEND_DOWNLOAD_TO_CLOUD), + testing::Bool(), + testing::ValuesIn({0, 1, 2}))); + TEST_F(ConnectorsServiceTest, RealtimeURLCheck) { profile_->GetPrefs()->SetInteger( prefs::kSafeBrowsingEnterpriseRealTimeUrlCheckMode,
diff --git a/chrome/browser/enterprise/connectors/file_system/service_settings.cc b/chrome/browser/enterprise/connectors/file_system/service_settings.cc new file mode 100644 index 0000000..5853925 --- /dev/null +++ b/chrome/browser/enterprise/connectors/file_system/service_settings.cc
@@ -0,0 +1,220 @@ +// 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/enterprise/connectors/file_system/service_settings.h" + +#include "chrome/browser/enterprise/connectors/service_provider_config.h" +#include "components/policy/core/browser/url_util.h" + +constexpr char kWildcardMimeType[] = "*"; + +namespace enterprise_connectors { + +FileSystemServiceSettings::FileSystemServiceSettings( + const base::Value& settings_value, + const ServiceProviderConfig& service_provider_config) { + if (!settings_value.is_dict()) + return; + + // The service provider identifier should always be there, and it should match + // an existing provider. + const std::string* service_provider_name = + settings_value.FindStringKey(kKeyServiceProvider); + if (service_provider_name) { + service_provider_ = + service_provider_config.GetServiceProvider(*service_provider_name); + } + if (!service_provider_) + return; + + const std::string* enterprise_id = + settings_value.FindStringKey(kKeyEnterpriseId); + if (enterprise_id) { + enterprise_id_ = *enterprise_id; + } else { + return; + } + + // Add the patterns to the settings, which configures settings.matcher and + // settings.*_pattern_settings. No enable patterns implies the settings are + // invalid. + matcher_ = std::make_unique<url_matcher::URLMatcher>(); + url_matcher::URLMatcherConditionSet::ID id(0); + const base::Value* enable = settings_value.FindListKey(kKeyEnable); + if (enable && enable->is_list() && !enable->GetList().empty()) { + for (const base::Value& value : enable->GetList()) + AddUrlPatternSettings(value, true, &id); + } else { + return; + } + + const base::Value* disable = settings_value.FindListKey(kKeyDisable); + if (disable && disable->is_list()) { + for (const base::Value& value : disable->GetList()) + AddUrlPatternSettings(value, false, &id); + } + + // Add all the URLs automatically disabled by the service provider. + base::Value disable_value(base::Value::Type::DICTIONARY); + + std::vector<base::Value> urls; + for (const std::string& url : service_provider_->fs_disable()) + urls.emplace_back(url); + disable_value.SetKey(kKeyUrlList, base::Value(urls)); + + std::vector<base::Value> mime_types; + mime_types.emplace_back(kWildcardMimeType); + disable_value.SetKey(kKeyMimeTypes, base::Value(mime_types)); + + AddUrlPatternSettings(disable_value, false, &id); +} + +FileSystemServiceSettings::FileSystemServiceSettings( + FileSystemServiceSettings&&) = default; +FileSystemServiceSettings::~FileSystemServiceSettings() = default; + +base::Optional<FileSystemSettings> FileSystemServiceSettings::GetSettings( + const GURL& url) const { + if (!IsValid()) + return base::nullopt; + + DCHECK(matcher_); + auto matches = matcher_->MatchURL(url); + if (matches.empty()) + return base::nullopt; + + auto mime_types = GetMimeTypes(matches); + if (mime_types.empty()) + return base::nullopt; + + FileSystemSettings settings; + settings.home = GURL(service_provider_->fs_home_url()); + settings.authorization_endpoint = + GURL(service_provider_->fs_authorization_endpoint()); + settings.token_endpoint = GURL(service_provider_->fs_token_endpoint()); + settings.client_id = "dummy"; // TODO(1157627): read from src-internals. + settings.client_secret = "dummy"; // TODO(1157627): read from src-internals. + settings.scopes = service_provider_->fs_scopes(); + settings.max_direct_size = service_provider_->fs_max_direct_size(); + settings.mime_types = std::move(mime_types); + + return settings; +} + +// static +base::Optional<FileSystemServiceSettings::URLPatternSettings> +FileSystemServiceSettings::GetPatternSettings( + const PatternSettings& patterns, + url_matcher::URLMatcherConditionSet::ID match) { + // If the pattern exists directly in the map, return its settings. + if (patterns.count(match) == 1) + return patterns.at(match); + + // If the pattern doesn't exist in the map, it might mean that it wasn't the + // only pattern to correspond to its settings and that the ID added to + // the map was the one of the last pattern corresponding to those settings. + // This means the next match ID greater than |match| has the correct settings + // if it exists. + auto next = patterns.upper_bound(match); + if (next != patterns.end()) + return next->second; + + return base::nullopt; +} + +bool FileSystemServiceSettings::IsValid() const { + // The settings are valid only if a provider was given. + return service_provider_ && !enterprise_id_.empty(); +} + +void FileSystemServiceSettings::AddUrlPatternSettings( + const base::Value& url_settings_value, + bool enabled, + url_matcher::URLMatcherConditionSet::ID* id) { + DCHECK(id); + DCHECK(service_provider_); + if (enabled) + DCHECK(disabled_patterns_settings_.empty()); + else + DCHECK(!enabled_patterns_settings_.empty()); + + URLPatternSettings setting; + + const base::Value* mime_types = url_settings_value.FindListKey(kKeyMimeTypes); + if (mime_types && mime_types->is_list()) { + for (const base::Value& mime_type : mime_types->GetList()) { + if (mime_type.is_string()) { + setting.mime_types.insert(mime_type.GetString()); + } + } + } else { + return; + } + + // Add the URL patterns to the matcher and store the condition set IDs. + const base::Value* url_list = url_settings_value.FindListKey(kKeyUrlList); + if (url_list && url_list->is_list()) { + const base::ListValue* url_list_value = nullptr; + url_list->GetAsList(&url_list_value); + DCHECK(url_list_value); + policy::url_util::AddFilters(matcher_.get(), enabled, id, url_list_value); + } else { + return; + } + + if (enabled) + enabled_patterns_settings_[*id] = std::move(setting); + else + disabled_patterns_settings_[*id] = std::move(setting); +} + +std::set<std::string> FileSystemServiceSettings::GetMimeTypes( + const std::set<url_matcher::URLMatcherConditionSet::ID>& matches) const { + std::set<std::string> enable_mime_types; + std::set<std::string> disable_mime_types; + for (const url_matcher::URLMatcherConditionSet::ID match : matches) { + // Enabled patterns need to be checked first, otherwise they always match + // the first disabled pattern. + bool enable = true; + auto maybe_pattern_setting = + GetPatternSettings(enabled_patterns_settings_, match); + if (!maybe_pattern_setting.has_value()) { + maybe_pattern_setting = + GetPatternSettings(disabled_patterns_settings_, match); + enable = false; + } + + DCHECK(maybe_pattern_setting.has_value()); + auto mime_types = std::move(maybe_pattern_setting.value().mime_types); + if (enable) + enable_mime_types.insert(mime_types.begin(), mime_types.end()); + else + disable_mime_types.insert(mime_types.begin(), mime_types.end()); + } + + for (const std::string& mime_type_to_disable : disable_mime_types) { + if (mime_type_to_disable == kWildcardMimeType) { + enable_mime_types.clear(); + break; + } + enable_mime_types.erase(mime_type_to_disable); + } + + return enable_mime_types; +} + +FileSystemServiceSettings::URLPatternSettings::URLPatternSettings() = default; +FileSystemServiceSettings::URLPatternSettings::URLPatternSettings( + const FileSystemServiceSettings::URLPatternSettings&) = default; +FileSystemServiceSettings::URLPatternSettings::URLPatternSettings( + FileSystemServiceSettings::URLPatternSettings&&) = default; +FileSystemServiceSettings::URLPatternSettings& +FileSystemServiceSettings::URLPatternSettings::operator=( + const FileSystemServiceSettings::URLPatternSettings&) = default; +FileSystemServiceSettings::URLPatternSettings& +FileSystemServiceSettings::URLPatternSettings::operator=( + FileSystemServiceSettings::URLPatternSettings&&) = default; +FileSystemServiceSettings::URLPatternSettings::~URLPatternSettings() = default; + +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/file_system/service_settings.h b/chrome/browser/enterprise/connectors/file_system/service_settings.h new file mode 100644 index 0000000..8cbb2d1 --- /dev/null +++ b/chrome/browser/enterprise/connectors/file_system/service_settings.h
@@ -0,0 +1,100 @@ +// 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_ENTERPRISE_CONNECTORS_FILE_SYSTEM_SERVICE_SETTINGS_H_ +#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_FILE_SYSTEM_SERVICE_SETTINGS_H_ + +#include <set> +#include <string> + +#include "base/optional.h" +#include "base/values.h" +#include "chrome/browser/enterprise/connectors/common.h" +#include "chrome/browser/enterprise/connectors/service_provider_config.h" +#include "components/url_matcher/url_matcher.h" + +namespace enterprise_connectors { + +// The settings for a report service obtained from a connector policy. +class FileSystemServiceSettings { + public: + explicit FileSystemServiceSettings( + const base::Value& settings_value, + const ServiceProviderConfig& service_provider_config); + FileSystemServiceSettings(FileSystemServiceSettings&&); + ~FileSystemServiceSettings(); + + // Get the settings to apply. base::nullopt implies no file system settings. + base::Optional<FileSystemSettings> GetSettings(const GURL& url) const; + + private: + // The setting to apply when a specific URL pattern is matched. + struct URLPatternSettings { + URLPatternSettings(); + URLPatternSettings(const URLPatternSettings&); + URLPatternSettings(URLPatternSettings&&); + URLPatternSettings& operator=(const URLPatternSettings&); + URLPatternSettings& operator=(URLPatternSettings&&); + ~URLPatternSettings(); + + // Mime types that correspond to the pattern. + std::set<std::string> mime_types; + }; + + // Map from an ID representing a specific matched pattern to its settings. + using PatternSettings = + std::map<url_matcher::URLMatcherConditionSet::ID, URLPatternSettings>; + + // Accessors for the pattern setting maps. + static base::Optional<URLPatternSettings> GetPatternSettings( + const PatternSettings& patterns, + url_matcher::URLMatcherConditionSet::ID match); + + // Returns true if the settings were initialized correctly. If this returns + // false, then GetSettings will always return base::nullopt. + bool IsValid() const; + + // Updates the states of |matcher_|, |enabled_patterns_settings_| and/or + // |disabled_patterns_settings_| from a policy value. + void AddUrlPatternSettings(const base::Value& url_settings_value, + bool enabled, + url_matcher::URLMatcherConditionSet::ID* id); + + // Return mime types found in |enabled_patterns_settings| corresponding to the + // matches while excluding the ones in |disable_patterns_settings|. + std::set<std::string> GetMimeTypes( + const std::set<url_matcher::URLMatcherConditionSet::ID>& matches) const; + + // The service provider matching the name given in a Connector policy. nullptr + // implies that a corresponding service provider doesn't exist and that these + // settings are not valid. + const ServiceProviderConfig::ServiceProvider* service_provider_ = nullptr; + + // The URL matcher created from the patterns set in the analysis policy. The + // condition set IDs returned after matching against a URL can be used to + // check |enabled_patterns_settings| and |disable_patterns_settings| to + // obtain URL-specific settings. + std::unique_ptr<url_matcher::URLMatcher> matcher_; + + // These members map URL patterns to corresponding settings. If an entry in + // the "enabled" or "disabled" lists contains more than one pattern in its + // "url_list" property, only the last pattern's matcher ID will be added the + // map. This keeps the count of these maps smaller and keeps the code from + // duplicating memory for the settings, which are the same for all URL + // patterns in a given entry. This optimization works by using + // std::map::upper_bound to access these maps. The IDs in the disabled + // settings must be greater than the ones in the enabled settings for this to + // work and avoid having the two maps cover an overlap of matches. + PatternSettings enabled_patterns_settings_; + PatternSettings disabled_patterns_settings_; + + // When signing in to Box only accounts that belong to this enterprise are + // accepted. This prevents people from connecting arbitrary Box accounts + // and helps restrict to the enterprise the administrator wants. + std::string enterprise_id_; +}; + +} // namespace enterprise_connectors + +#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_FILE_SYSTEM_SERVICE_SETTINGS_H_
diff --git a/chrome/browser/enterprise/connectors/file_system/service_settings_unittest.cc b/chrome/browser/enterprise/connectors/file_system/service_settings_unittest.cc new file mode 100644 index 0000000..974d855 --- /dev/null +++ b/chrome/browser/enterprise/connectors/file_system/service_settings_unittest.cc
@@ -0,0 +1,222 @@ +// 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 <set> + +#include "base/json/json_reader.h" +#include "base/no_destructor.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/enterprise/connectors/connectors_service.h" +#include "chrome/browser/enterprise/connectors/file_system/service_settings.h" +#include "content/public/test/browser_task_environment.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace enterprise_connectors { + +namespace { + +constexpr char kNormalPolicy[] = R"({ + "service_provider": "box", + "enterprise_id": "1234567890", + "enable": [ + { + "url_list": ["*"], + "mime_types": ["text/plain", "image/png", "application/zip"], + }, + ], + "disable": [ + { + "url_list": ["no.text.com", "no.text.no.image.com"], + "mime_types": ["text/plain"], + }, + { + "url_list": ["no.image.com", "no.text.no.image.com"], + "mime_types": ["image/png"], + }, + ], +})"; + +constexpr char kNoProviderSettings[] = R"({ + "enterprise_id": "1234567890", + "enable": [ + { + "url_list": ["*"], + "mime_types": ["text/plain", "image/png", "application/zip"], + }, + ], + "disable": [ + { + "url_list": ["no.text.com", "no.text.no.image.com"], + "mime_types": ["text/plain"] + }, + { + "url_list": ["no.image.com", "no.text.no.image.com"], + "mime_types": ["image/png"] + }, + ], +})"; + +constexpr char kNoEnterpriseIdSettings[] = R"({ + "service_provider": "google", + "enable": [ + { + "url_list": ["*"], + "mime_types": ["text/plain", "image/png", "application/zip"], + }, + ], + "disable": [ + { + "url_list": ["no.text.com", "no.text.no.image.com"], + "mime_types": ["text/plain"] + }, + { + "url_list": ["no.image.com", "no.text.no.image.com"], + "mime_types": ["image/png"] + }, + ], +})"; + +constexpr char kNoEnablePolicy[] = R"({ + "service_provider": "box", + "enterprise_id": "1234567890", + "disable": [ + { + "url_list": ["no.text.com", "no.text.no.image.com"], + "mime_types": ["text/plain"], + }, + { + "url_list": ["no.image.com", "no.text.no.image.com"], + "mime_types": ["image/png"], + }, + ], +})"; + +constexpr char kSpecificSitesPolicy[] = R"({ + "service_provider": "box", + "enterprise_id": "1234567890", + "enable": [ + { + "url_list": ["site1.com", "site2.com"], + "mime_types": ["text/plain", "image/png", "application/zip"], + }, + ], +})"; + +constexpr char kAllSitePolicy[] = R"({ + "service_provider": "box", + "enterprise_id": "1234567890", + "enable": [ + { + "url_list": ["*"], + "mime_types": ["text/plain", "image/png", "application/zip"], + }, + ], +})"; + +std::set<std::string>* NormalMimeTypes() { + static base::NoDestructor<std::set<std::string>> mime_types( + {"text/plain", "image/png", "application/zip"}); + return mime_types.get(); +} + +std::set<std::string>* NoTextMimeTypes() { + static base::NoDestructor<std::set<std::string>> mime_types( + {"image/png", "application/zip"}); + return mime_types.get(); +} + +std::set<std::string>* NoImageMimeTypes() { + static base::NoDestructor<std::set<std::string>> mime_types( + {"text/plain", "application/zip"}); + return mime_types.get(); +} + +std::set<std::string>* NoTextNoImageMimeTypes() { + static base::NoDestructor<std::set<std::string>> mime_types( + {"application/zip"}); + return mime_types.get(); +} + +constexpr char kNornmalURL[] = "https://normal.com"; +constexpr char kNoTextURL[] = "https://no.text.com"; +constexpr char kNoImageURL[] = "https://no.image.com"; +constexpr char kNoTextNoImageURL[] = "https://no.text.no.image.com"; +constexpr char kSpecificSite1URL[] = "https://site1.com"; +constexpr char kSpecificSite2URL[] = "https://site2.com"; + +} // namespace + +struct TestParam { + TestParam(const char* url, + const char* settings_value, + std::set<std::string>* mime_types) + : url(url), + settings_value(settings_value), + expected_mime_types(mime_types) {} + + const char* url; + const char* settings_value; + std::set<std::string>* expected_mime_types; +}; + +class FileSystemServiceSettingsTest : public testing::TestWithParam<TestParam> { + public: + GURL url() const { return GURL(GetParam().url); } + const char* settings_value() const { return GetParam().settings_value; } + std::set<std::string>* expected_mime_types() const { + return GetParam().expected_mime_types; + } + + private: + content::BrowserTaskEnvironment task_environment_; +}; + +TEST_P(FileSystemServiceSettingsTest, Test) { + auto settings = base::JSONReader::Read(settings_value(), + base::JSON_ALLOW_TRAILING_COMMAS); + ASSERT_TRUE(settings.has_value()); + + ServiceProviderConfig config(kServiceProviderConfig); + FileSystemServiceSettings service_settings(settings.value(), config); + + auto file_system_settings = service_settings.GetSettings(url()); + ASSERT_EQ(expected_mime_types() != nullptr, file_system_settings.has_value()); + if (file_system_settings.has_value()) { + const ServiceProviderConfig::ServiceProvider* provider = + config.GetServiceProvider("box"); + ASSERT_NE(nullptr, provider); + + const auto& settings = file_system_settings.value(); + + ASSERT_EQ(settings.mime_types, *expected_mime_types()); + ASSERT_EQ(settings.home, GURL(provider->fs_home_url())); + ASSERT_EQ(settings.authorization_endpoint, + GURL(provider->fs_authorization_endpoint())); + ASSERT_EQ(settings.token_endpoint, GURL(provider->fs_token_endpoint())); + ASSERT_EQ(settings.max_direct_size, provider->fs_max_direct_size()); + ASSERT_EQ(settings.scopes, provider->fs_scopes()); + } +} + +INSTANTIATE_TEST_CASE_P( + , + FileSystemServiceSettingsTest, + testing::Values( + TestParam(kNornmalURL, kNormalPolicy, NormalMimeTypes()), + TestParam(kNoTextURL, kNormalPolicy, NoTextMimeTypes()), + TestParam(kNoImageURL, kNormalPolicy, NoImageMimeTypes()), + TestParam(kNoTextNoImageURL, kNormalPolicy, NoTextNoImageMimeTypes()), + + TestParam(kSpecificSite1URL, kSpecificSitesPolicy, NormalMimeTypes()), + TestParam(kSpecificSite2URL, kSpecificSitesPolicy, NormalMimeTypes()), + TestParam(kNornmalURL, kSpecificSitesPolicy, nullptr), + + TestParam(kNornmalURL, kNoProviderSettings, nullptr), + TestParam(kNornmalURL, kNoEnterpriseIdSettings, nullptr), + TestParam(kNornmalURL, kNoEnablePolicy, nullptr), + + TestParam("https://box.com", kAllSitePolicy, nullptr), + TestParam("https://www.box.com", kAllSitePolicy, nullptr))); + +} // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/service_provider_config.cc b/chrome/browser/enterprise/connectors/service_provider_config.cc index 1047ec7e..cd385ee3 100644 --- a/chrome/browser/enterprise/connectors/service_provider_config.cc +++ b/chrome/browser/enterprise/connectors/service_provider_config.cc
@@ -14,12 +14,21 @@ constexpr char kKeyServiceProviders[] = "service_providers"; constexpr char kKeyName[] = "name"; constexpr char kKeyAnalysis[] = "analysis"; +constexpr char kKeyFileSystem[] = "file_system"; constexpr char kKeyReporting[] = "reporting"; constexpr char kKeyUrl[] = "url"; constexpr char kKeySupportedTags[] = "supported_tags"; constexpr char kKeyMimeTypes[] = "mime_types"; constexpr char kKeyMaxFileSize[] = "max_file_size"; +// Specific key names of file system connectors. +constexpr char kKeyFsHome[] = "home"; +constexpr char kKeyFsAuthorizationEndpoint[] = "authorization_endpoint"; +constexpr char kKeyFsTokenEndpoint[] = "token_endpoint"; +constexpr char kKeyFsMaxDirectZize[] = "max_direct_size"; +constexpr char kKeyFsScopes[] = "home"; +constexpr char kKeyFsDisable[] = "disable"; + // There is currently only 1 version of this config, so we can just treat it as // any other value in the JSON with its own key. Once that is no longer the // case extra code should be added to decide on the correct version to read. @@ -95,6 +104,47 @@ if (reporting_url) reporting_url_ = *reporting_url; } + + const base::Value* file_system = version_1->FindDictKey(kKeyFileSystem); + if (file_system) { + const std::string* home_url = file_system->FindStringKey(kKeyFsHome); + if (home_url) + fs_home_url_ = *home_url; + + const std::string* auth_endpoint_url = + file_system->FindStringKey(kKeyFsAuthorizationEndpoint); + if (auth_endpoint_url) + fs_authorization_endpoint_ = *auth_endpoint_url; + + const std::string* token_endpoint = + file_system->FindStringKey(kKeyFsTokenEndpoint); + if (token_endpoint) + fs_token_endpoint_ = *token_endpoint; + + auto max_direct_size = file_system->FindIntKey(kKeyFsMaxDirectZize); + if (max_direct_size) + fs_max_direct_size_ = max_direct_size.value(); + + const base::Value* scopes = file_system->FindListKey(kKeyFsScopes); + if (scopes) { + for (const base::Value& scope : scopes->GetList()) { + if (!scope.is_string()) + continue; + + fs_scopes_.push_back(scope.GetString()); + } + } + + const base::Value* disbles = file_system->FindListKey(kKeyFsDisable); + if (disbles) { + for (const base::Value& disable : disbles->GetList()) { + if (!disable.is_string()) + continue; + + fs_disable_.push_back(disable.GetString()); + } + } + } } ServiceProviderConfig::ServiceProvider::ServiceProvider(ServiceProvider&&) =
diff --git a/chrome/browser/enterprise/connectors/service_provider_config.h b/chrome/browser/enterprise/connectors/service_provider_config.h index 3ed998d..2e09d3e 100644 --- a/chrome/browser/enterprise/connectors/service_provider_config.h +++ b/chrome/browser/enterprise/connectors/service_provider_config.h
@@ -39,16 +39,40 @@ ServiceProvider(ServiceProvider&&); ~ServiceProvider(); + // Used with AnalysisConnector. const std::string& analysis_url() const { return analysis_url_; } const std::map<std::string, Tag>& analysis_tags() const { return analysis_tags_; } + + // Used with ReportingConnector. const std::string& reporting_url() const { return reporting_url_; } + // Used with FileSystemConnector. + const std::string& fs_home_url() const { return fs_home_url_; } + const std::string& fs_authorization_endpoint() const { + return fs_authorization_endpoint_; + } + const std::string& fs_token_endpoint() const { return fs_token_endpoint_; } + size_t fs_max_direct_size() const { return fs_max_direct_size_; } + const std::vector<std::string>& fs_scopes() const { return fs_scopes_; } + const std::vector<std::string>& fs_disable() const { return fs_disable_; } + private: + // Used with AnalysisConnector. std::string analysis_url_; std::map<std::string, Tag> analysis_tags_; + + // Used with ReportingConnector. std::string reporting_url_; + + // Used with FileSystemConnector. + std::string fs_home_url_; + std::string fs_authorization_endpoint_; + std::string fs_token_endpoint_; + size_t fs_max_direct_size_; + std::vector<std::string> fs_scopes_; + std::vector<std::string> fs_disable_; }; explicit ServiceProviderConfig(const std::string& config);
diff --git a/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc b/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc index 7247c2a..aacead5b 100644 --- a/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc +++ b/chrome/browser/enterprise/connectors/service_provider_config_unittest.cc
@@ -86,6 +86,19 @@ service_provider->analysis_tags().at("dlp").mime_types()); ASSERT_EQ(MalwareMimeTypes(), service_provider->analysis_tags().at("malware").mime_types()); + + service_provider = config.GetServiceProvider("box"); + ASSERT_NE(nullptr, service_provider); + + ASSERT_EQ("https://box.com", service_provider->fs_home_url()); + ASSERT_EQ("https://account.box.com/api/oauth2/authorize", + service_provider->fs_authorization_endpoint()); + ASSERT_EQ("https://api.box.com/oauth2/token", + service_provider->fs_token_endpoint()); + ASSERT_EQ(20u * 1024 * 1024, service_provider->fs_max_direct_size()); + ASSERT_TRUE(service_provider->fs_scopes().empty()); + ASSERT_EQ(1u, service_provider->fs_disable().size()); + ASSERT_EQ("box.com", service_provider->fs_disable()[0]); } } // namespace enterprise_connectors
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc index 854062c..69cd838 100644 --- a/chrome/browser/extensions/api/identity/identity_apitest.cc +++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -880,29 +880,6 @@ : public IdentityTestWithSignin, public signin::IdentityManager::DiagnosticsObserver { public: - explicit GetAuthTokenFunctionTest(bool is_return_scopes_enabled = true, - bool is_selected_user_id_enabled = true) { - std::vector<base::Feature> enabled_features; - std::vector<base::Feature> disabled_features; - if (is_return_scopes_enabled) { - enabled_features.push_back( - extensions_features::kReturnScopesInGetAuthToken); - } else { - disabled_features.push_back( - extensions_features::kReturnScopesInGetAuthToken); - } - - if (is_selected_user_id_enabled) { - enabled_features.push_back( - extensions_features::kSelectedUserIdInGetAuthToken); - } else { - disabled_features.push_back( - extensions_features::kSelectedUserIdInGetAuthToken); - } - - feature_list_.InitWithFeatures(enabled_features, disabled_features); - } - std::string IssueLoginAccessTokenForAccount(const CoreAccountId& account_id) { std::string access_token = "access_token-" + account_id.ToString(); identity_test_env() @@ -3048,117 +3025,6 @@ false), std::make_pair("", false))); -class GetAuthTokenFunctionReturnScopesDisabledTest - : public GetAuthTokenFunctionTest { - public: - GetAuthTokenFunctionReturnScopesDisabledTest() - : GetAuthTokenFunctionTest(false) {} - - void RunGetAuthTokenFunctionReturnScopesDisabled(ExtensionFunction* function, - const std::string& args, - Browser* browser, - std::string* access_token) { - EXPECT_TRUE( - utils::RunFunction(function, args, browser, api_test_utils::NONE)); - - EXPECT_TRUE(function->GetError().empty()) - << "Unexpected error: " << function->GetError(); - EXPECT_NE(nullptr, function->GetResultList()); - - const auto& result_list = function->GetResultList()->GetList(); - EXPECT_EQ(1ul, result_list.size()); - - const auto& access_token_value = result_list[0]; - EXPECT_TRUE(access_token_value.is_string()); - - *access_token = access_token_value.GetString(); - } -}; - -IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionReturnScopesDisabledTest, - NoOptionsSuccess) { - SignIn("primary@example.com"); - scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); - scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES)); - func->set_extension(extension.get()); - func->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); - - std::string access_token; - RunGetAuthTokenFunctionReturnScopesDisabled(func.get(), "[{}]", browser(), - &access_token); - EXPECT_EQ(std::string(kAccessToken), access_token); - EXPECT_FALSE(func->login_ui_shown()); - EXPECT_FALSE(func->scope_ui_shown()); - EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN, - GetCachedToken(CoreAccountInfo()).status()); - histogram_tester()->ExpectUniqueSample( - kGetAuthTokenResultHistogramName, IdentityGetAuthTokenError::State::kNone, - 1); -} - -// Whether or not returning scopes is enabled should not affect error handling. -IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionReturnScopesDisabledTest, - NonInteractiveMintFailure) { - SignIn("primary@example.com"); - scoped_refptr<FakeGetAuthTokenFunction> func(new FakeGetAuthTokenFunction()); - func->set_extension(CreateExtension(CLIENT_ID | SCOPES)); - func->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_FAILURE); - std::string error = - utils::RunFunctionAndReturnError(func.get(), "[{}]", browser()); - EXPECT_TRUE(base::StartsWith(error, errors::kAuthFailure, - base::CompareCase::INSENSITIVE_ASCII)); - EXPECT_FALSE(func->login_ui_shown()); - EXPECT_FALSE(func->scope_ui_shown()); - histogram_tester()->ExpectUniqueSample( - kGetAuthTokenResultHistogramName, - IdentityGetAuthTokenError::State::kMintTokenAuthFailure, 1); -} - -// There are two parameters, which are stored in a std::pair, for these tests. -// -// std::string: the GetAuthToken arguments -// bool: the expected value of GetAuthToken's enable_granular_permissions -class GetAuthTokenFunctionReturnScopesDisabledEnableGranularPermissionsTest - : public GetAuthTokenFunctionReturnScopesDisabledTest, - public testing::WithParamInterface<std::pair<std::string, bool>> {}; - -// Provided with the arguments for GetAuthToken, ensures that GetAuthToken's -// enable_granular_permissions is some expected value when the -// 'ReturnScopesInGetAuthToken' feature flag is disabled. -IN_PROC_BROWSER_TEST_P( - GetAuthTokenFunctionReturnScopesDisabledEnableGranularPermissionsTest, - EnableGranularPermissions) { - const std::string& args = GetParam().first; - bool expected_enable_granular_permissions = GetParam().second; - - SignIn("primary@example.com"); - auto func = base::MakeRefCounted<FakeGetAuthTokenFunction>(); - auto extension = base::WrapRefCounted(CreateExtension(CLIENT_ID | SCOPES)); - func->set_extension(extension.get()); - func->push_mint_token_result(TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS); - - std::string access_token; - RunGetAuthTokenFunctionReturnScopesDisabled(func.get(), "[{" + args + "}]", - browser(), &access_token); - EXPECT_EQ(kAccessToken, access_token); - - EXPECT_EQ(expected_enable_granular_permissions, - func->enable_granular_permissions()); - EXPECT_FALSE(func->login_ui_shown()); - EXPECT_FALSE(func->scope_ui_shown()); - histogram_tester()->ExpectUniqueSample( - kGetAuthTokenResultHistogramName, IdentityGetAuthTokenError::State::kNone, - 1); -} - -INSTANTIATE_TEST_SUITE_P( - All, - GetAuthTokenFunctionReturnScopesDisabledEnableGranularPermissionsTest, - testing::Values( - std::make_pair("\"enableGranularPermissions\": true", false), - std::make_pair("\"enableGranularPermissions\": false", false), - std::make_pair("", false))); - class RemoveCachedAuthTokenFunctionTest : public ExtensionBrowserTest { protected: bool InvalidateDefaultToken() { @@ -3204,10 +3070,6 @@ class GetAuthTokenFunctionSelectedUserIdTest : public GetAuthTokenFunctionTest { public: - explicit GetAuthTokenFunctionSelectedUserIdTest( - bool is_selected_user_id_enabled = true) - : GetAuthTokenFunctionTest(true, is_selected_user_id_enabled) {} - // Executes a new function and checks that the selected_user_id is the // expected value. The interactive and scopes field are predefined. // The account id specified by the extension is optional. @@ -3375,29 +3237,6 @@ } #endif -class GetAuthTokenFunctionSelectedUserIdDisabledTest - : public GetAuthTokenFunctionSelectedUserIdTest { - public: - GetAuthTokenFunctionSelectedUserIdDisabledTest() - : GetAuthTokenFunctionSelectedUserIdTest(false) {} -}; - -// Tests that Chrome does not use any selected user id value if the -// 'SelectedUserIdInGetAuthToken' flag is disabled. -IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionSelectedUserIdDisabledTest, - SingleAccount) { - auto extension = base::WrapRefCounted(CreateExtension(CLIENT_ID | SCOPES)); - SignIn("primary@example.com"); - CoreAccountInfo primary_account = GetPrimaryAccountInfo(); - - SetCachedGaiaId(primary_account.gaia); - RunNewFunctionAndExpectSelectedUserId(extension, ""); - - histogram_tester()->ExpectUniqueSample( - kGetAuthTokenResultHistogramName, IdentityGetAuthTokenError::State::kNone, - 1); -} - IN_PROC_BROWSER_TEST_F(RemoveCachedAuthTokenFunctionTest, NotFound) { EXPECT_TRUE(InvalidateDefaultToken()); EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND,
diff --git a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc index 37b0b73..f5721ae4 100644 --- a/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_auth_token_function.cc
@@ -92,16 +92,6 @@ } } -bool IsReturnScopesInGetAuthTokenEnabled() { - return base::FeatureList::IsEnabled( - extensions_features::kReturnScopesInGetAuthToken); -} - -bool IsSelectedUserIdInGetAuthTokenEnabled() { - return base::FeatureList::IsEnabled( - extensions_features::kSelectedUserIdInGetAuthToken); -} - } // namespace IdentityGetAuthTokenFunction::IdentityGetAuthTokenFunction() @@ -139,7 +129,7 @@ interactive_ && IsBrowserSigninAllowed(GetProfile()); enable_granular_permissions_ = - IsReturnScopesInGetAuthTokenEnabled() && params->details.get() && + params->details.get() && params->details->enable_granular_permissions.get() && *params->details->enable_granular_permissions; @@ -341,18 +331,14 @@ const std::set<std::string>& granted_scopes) { RecordFunctionResult(IdentityGetAuthTokenError(), remote_consent_approved_); - if (IsReturnScopesInGetAuthTokenEnabled()) { - std::unique_ptr<base::Value> granted_scopes_value = - std::make_unique<base::Value>(base::Value::Type::LIST); - for (const auto& scope : granted_scopes) - granted_scopes_value->Append(scope); + std::unique_ptr<base::Value> granted_scopes_value = + std::make_unique<base::Value>(base::Value::Type::LIST); + for (const auto& scope : granted_scopes) + granted_scopes_value->Append(scope); - CompleteAsyncRun(TwoArguments( - base::Value(access_token), - base::Value::FromUniquePtrValue(std::move(granted_scopes_value)))); - } else { - CompleteAsyncRun(OneArgument(base::Value(access_token))); - } + CompleteAsyncRun(TwoArguments( + base::Value(access_token), + base::Value::FromUniquePtrValue(std::move(granted_scopes_value)))); } void IdentityGetAuthTokenFunction::CompleteFunctionWithError( @@ -1097,8 +1083,7 @@ } std::string IdentityGetAuthTokenFunction::GetSelectedUserId() const { - if (IsSelectedUserIdInGetAuthTokenEnabled() && - selected_gaia_id_ == token_key_.account_info.gaia) + if (selected_gaia_id_ == token_key_.account_info.gaia) return selected_gaia_id_; return "";
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index b7c1ddf..65306a5 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -4768,12 +4768,12 @@ #endif // BUILDFLAG(IS_CHROMEOS_ASH) -#if BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) +#if BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || defined(OS_WIN) const char kZeroCopyVideoCaptureName[] = "Enable Zero-Copy Video Capture"; const char kZeroCopyVideoCaptureDescription[] = "Camera produces a gpu friendly buffer on capture and, if there is, " "hardware accelerated video encoder consumes the buffer"; -#endif // BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) +#endif // BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || defined(OS_WIN) // All views-based platforms --------------------------------------------------
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 6a8397d..099d115b 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2786,10 +2786,10 @@ #endif // #if BUILDFLAG(IS_CHROMEOS_ASH) -#if BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) +#if BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || defined(OS_WIN) extern const char kZeroCopyVideoCaptureName[]; extern const char kZeroCopyVideoCaptureDescription[]; -#endif // BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) +#endif // BUILDFLAG(IS_CHROMEOS_ASH) || defined(OS_MAC) || defined(OS_WIN) // All views-based platforms --------------------------------------------------
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc index b9a43c8..aabb9ad 100644 --- a/chrome/browser/infobars/infobars_browsertest.cc +++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -66,7 +66,6 @@ #if defined(OS_MAC) #include "chrome/browser/ui/cocoa/keystone_infobar_delegate.h" #include "chrome/browser/ui/cocoa/rosetta_required_infobar_delegate.h" -#include "chrome/browser/ui/startup/mac_system_infobar_delegate.h" #endif #if !defined(USE_AURA) @@ -194,7 +193,6 @@ {"plugin_observer", IBD::PLUGIN_OBSERVER_INFOBAR_DELEGATE}, {"file_access_disabled", IBD::FILE_ACCESS_DISABLED_INFOBAR_DELEGATE}, {"keystone_promotion", IBD::KEYSTONE_PROMOTION_INFOBAR_DELEGATE_MAC}, - {"mac_system", IBD::SYSTEM_INFOBAR_DELEGATE_MAC}, {"collected_cookies", IBD::COLLECTED_COOKIES_INFOBAR_DELEGATE}, {"installation_error", IBD::INSTALLATION_ERROR_INFOBAR_DELEGATE}, {"bad_flags", IBD::BAD_FLAGS_INFOBAR_DELEGATE}, @@ -301,14 +299,6 @@ #endif break; - case IBD::SYSTEM_INFOBAR_DELEGATE_MAC: -#if defined(OS_MAC) - MacSystemInfoBarDelegate::Create(GetInfoBarService()); -#else - ADD_FAILURE() << "This infobar is not supported on this OS."; -#endif - break; - case IBD::COLLECTED_COOKIES_INFOBAR_DELEGATE: CollectedCookiesInfoBarDelegate::Create(GetInfoBarService()); break; @@ -451,9 +441,6 @@ IN_PROC_BROWSER_TEST_F(InfoBarUiTest, InvokeUi_keystone_promotion) { ShowAndVerifyUi(); } -IN_PROC_BROWSER_TEST_F(InfoBarUiTest, InvokeUi_mac_system) { - ShowAndVerifyUi(); -} #endif IN_PROC_BROWSER_TEST_F(InfoBarUiTest, InvokeUi_collected_cookies) {
diff --git a/chrome/browser/media/audio_service_util.cc b/chrome/browser/media/audio_service_util.cc index 96f68b6..05d54f5 100644 --- a/chrome/browser/media/audio_service_util.cc +++ b/chrome/browser/media/audio_service_util.cc
@@ -21,10 +21,7 @@ bool IsAudioServiceSandboxEnabled() { base::Optional<bool> force_enable_audio_sandbox; -// TODO(crbug.com/1052397): Revisit the macro expression once build flag switch -// of lacros-chrome is complete. -#if defined(OS_WIN) || defined(OS_MAC) || \ - (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) +#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) const policy::PolicyMap& policies = g_browser_process->browser_policy_connector() ->GetPolicyService() @@ -41,4 +38,3 @@ return force_enable_audio_sandbox.value_or( base::FeatureList::IsEnabled(features::kAudioServiceSandbox)); } -
diff --git a/chrome/browser/media/router/media_router_feature.cc b/chrome/browser/media/router/media_router_feature.cc index 6668db3c..4875422 100644 --- a/chrome/browser/media/router/media_router_feature.cc +++ b/chrome/browser/media/router/media_router_feature.cc
@@ -33,13 +33,18 @@ namespace media_router { #if !defined(OS_ANDROID) +#if !defined(OFFICIAL_BUILD) +// Enables the media router. Can be useful to disable for local +// development on Mac because DIAL local discovery opens a local port +// and triggers a permission prompt. Only toggleable for developer builds. const base::Feature kMediaRouter{"MediaRouter", base::FEATURE_ENABLED_BY_DEFAULT}; +#endif // !defined(OFFICIAL_BUILD) // Controls if browser side DialMediaRouteProvider is enabled. const base::Feature kDialMediaRouteProvider{"DialMediaRouteProvider", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kCastMediaRouteProvider{"CastMediaRouteProvider", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kCastAllowAllIPsFeature{"CastAllowAllIPs", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kGlobalMediaControlsCastStartStop{
diff --git a/chrome/browser/media/router/media_router_feature.h b/chrome/browser/media/router/media_router_feature.h index 92b21537..8fbd5dc 100644 --- a/chrome/browser/media/router/media_router_feature.h +++ b/chrome/browser/media/router/media_router_feature.h
@@ -21,18 +21,11 @@ #if !defined(OS_ANDROID) -// Enables the media router. Can be disabled in tests unrelated to -// Media Router where it interferes. Can also be useful to disable for local -// development on Mac because DIAL local discovery opens a local port -// and triggers a permission prompt. -extern const base::Feature kMediaRouter; - // TODO(crbug.com/1028753): Remove default-enabled kDialMediaRouteProvider after // tests stop disabling it. extern const base::Feature kDialMediaRouteProvider; extern const base::Feature kCastMediaRouteProvider; - // If enabled, allows Media Router to connect to Cast devices on all IP // addresses, not just RFC1918/RFC4193 private addresses. Workaround for // https://crbug.com/813974.
diff --git a/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc b/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc index 7b0fca41..0250c6f 100644 --- a/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc +++ b/chrome/browser/media/router/mojo/media_router_desktop_unittest.cc
@@ -64,13 +64,11 @@ protected: std::unique_ptr<MediaRouterMojoImpl> CreateMediaRouter() override { std::unique_ptr<MockCastMediaSinkService> cast_media_sink_service; - // We disable the DIAL and Cast MRPs because initializing the MRPs requires - // initialization of objects they depend on, which is outside the scope of - // this unit test. MRP initialization is covered by Media Router browser - // tests. - feature_list_.InitWithFeatures( - {}, /* disabled_features */ {kDialMediaRouteProvider, - kCastMediaRouteProvider}); + // We disable the DIAL MRP because initializing the DIAL MRP requires + // initialization of objects it depends on, which is outside the scope of + // this unit test. DIAL MRP initialization is covered by Media Router + // browser tests. + feature_list_.InitAndDisableFeature(kDialMediaRouteProvider); cast_media_sink_service = std::make_unique<MockCastMediaSinkService>(); cast_media_sink_service_ = cast_media_sink_service.get(); media_sink_service_ =
diff --git a/chrome/browser/metrics/metrics_reporting_state_browsertest.cc b/chrome/browser/metrics/metrics_reporting_state_browsertest.cc index 46a8ab83..f8b2fc90 100644 --- a/chrome/browser/metrics/metrics_reporting_state_browsertest.cc +++ b/chrome/browser/metrics/metrics_reporting_state_browsertest.cc
@@ -116,10 +116,10 @@ // Callback from changing whether reporting is enabled. void OnMetricsReportingStateChanged(bool* new_state_ptr, - base::Closure run_loop_closure, + base::OnceClosure run_loop_closure, bool new_state) { *new_state_ptr = new_state; - run_loop_closure.Run(); + std::move(run_loop_closure).Run(); } IN_PROC_BROWSER_TEST_P(MetricsReportingStateTest, ChangeMetricsReportingState) {
diff --git a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc index 116a383b..79bb94f 100644 --- a/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc +++ b/chrome/browser/metrics/process_memory_metrics_emitter_browsertest.cc
@@ -77,21 +77,22 @@ return static_cast<int>(render_process_hosts.size()); } -void RequestGlobalDumpCallback(base::Closure quit_closure, +void RequestGlobalDumpCallback(base::OnceClosure quit_closure, bool success, uint64_t) { - base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure); + base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, + std::move(quit_closure)); ASSERT_TRUE(success); } void OnStartTracingDoneCallback( base::trace_event::MemoryDumpLevelOfDetail explicit_dump_type, - base::Closure quit_closure) { + base::OnceClosure quit_closure) { memory_instrumentation::MemoryInstrumentation::GetInstance() ->RequestGlobalDumpAndAppendToTrace( MemoryDumpType::EXPLICITLY_TRIGGERED, explicit_dump_type, MemoryDumpDeterminism::NONE, - BindOnce(&RequestGlobalDumpCallback, quit_closure)); + BindOnce(&RequestGlobalDumpCallback, std::move(quit_closure))); } class ProcessMemoryMetricsEmitterFake : public ProcessMemoryMetricsEmitter {
diff --git a/chrome/browser/nearby_sharing/nearby_process_manager.cc b/chrome/browser/nearby_sharing/nearby_process_manager.cc index 57745f6..ed0107a8 100644 --- a/chrome/browser/nearby_sharing/nearby_process_manager.cc +++ b/chrome/browser/nearby_sharing/nearby_process_manager.cc
@@ -60,11 +60,11 @@ ProfileAttributesStorage& storage = profile_manager->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - if (!storage.GetProfileAttributesWithPath(advertising_profile_path, &entry)) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(advertising_profile_path); + if (!entry) { // Stored profile path is invalid so remove it. local_state->ClearPref(::prefs::kNearbySharingActiveProfilePrefName); - return nullptr; } return entry; }
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/chrome/browser/notifications/notification_platform_bridge_mac.mm index 76a98042..8987351 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac.mm +++ b/chrome/browser/notifications/notification_platform_bridge_mac.mm
@@ -5,6 +5,8 @@ #include "chrome/browser/notifications/notification_platform_bridge_mac.h" #include "chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h" +#import <UserNotifications/UserNotifications.h> + #include <memory> #include <utility> @@ -83,14 +85,18 @@ // static std::unique_ptr<NotificationPlatformBridge> NotificationPlatformBridge::Create() { - if (@available(macOS 10.14, *)) { - if (base::FeatureList::IsEnabled(features::kNewMacNotificationAPI)) { - return std::make_unique<NotificationPlatformBridgeMacUNNotification>(); - } - } // TODO(crbug.com/1170731): Use a helper app to display alerts. base::scoped_nsobject<NSObject<AlertDispatcher>> alert_dispatcher( [[AlertDispatcherXPC alloc] init]); + + if (@available(macOS 10.14, *)) { + if (base::FeatureList::IsEnabled(features::kNewMacNotificationAPI)) { + return std::make_unique<NotificationPlatformBridgeMacUNNotification>( + [UNUserNotificationCenter currentNotificationCenter], + alert_dispatcher.get()); + } + } + return std::make_unique<NotificationPlatformBridgeMac>( [NSUserNotificationCenter defaultUserNotificationCenter], alert_dispatcher.get());
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h index 2f820c1..810eae8 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h +++ b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h
@@ -12,6 +12,7 @@ #include "base/containers/flat_set.h" #include "base/mac/scoped_nsobject.h" +#include "chrome/browser/notifications/alert_dispatcher_mac.h" #include "chrome/browser/notifications/notification_common.h" #include "chrome/browser/notifications/notification_image_retainer.h" #include "chrome/browser/notifications/notification_platform_bridge.h" @@ -30,11 +31,9 @@ class API_AVAILABLE(macosx(10.14)) NotificationPlatformBridgeMacUNNotification : public NotificationPlatformBridge { public: - NotificationPlatformBridgeMacUNNotification(); - - explicit NotificationPlatformBridgeMacUNNotification( - UNUserNotificationCenter* notification_center); - + NotificationPlatformBridgeMacUNNotification( + UNUserNotificationCenter* notification_center, + id<AlertDispatcher> alert_dispatcher); NotificationPlatformBridgeMacUNNotification( const NotificationPlatformBridgeMacUNNotification&) = delete; NotificationPlatformBridgeMacUNNotification& operator=( @@ -57,9 +56,8 @@ void RequestPermission(); private: - // Remove the closed notification and its category from the objects carrying - // them. - void DoClose(const std::string& notification_id); + // Remove the closed alert notification. + void DoCloseAlert(Profile* profile, const std::string& notification_id); // Process notification request that got delivered successfully. void DeliveredSuccessfully( @@ -76,6 +74,16 @@ // runner. void DoSynchronizeNotifications(base::flat_set<std::string> notification_ids); + // Called with |alert_ids| for |profile| from the |alert_dispatcher_|. + void DidGetDisplayedAlerts(Profile* profile, + GetDisplayedNotificationsCallback callback, + std::set<std::string> alert_ids, + bool supports_synchronization); + + // Called with all |alert_ids| for all profiles from the |alert_dispatcher_|. + void DidGetAllDisplayedAlerts( + base::flat_set<MacNotificationIdentifier> alert_ids); + // Cocoa class that receives callbacks from the UNUserNotificationCenter. base::scoped_nsobject<UNNotificationCenterDelegate> delegate_; @@ -83,6 +91,9 @@ // this can be overridden in tests. base::scoped_nsobject<UNUserNotificationCenter> notification_center_; + // The object in charge of dispatching alert notifications. + base::scoped_nsprotocol<id<AlertDispatcher>> alert_dispatcher_; + // An object that keeps temp files alive long enough for macOS to pick up. NotificationImageRetainer image_retainer_;
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm index 17073e5..189dc328 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm +++ b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification.mm
@@ -4,6 +4,8 @@ #include "chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h" +#include <vector> + #import <UserNotifications/UserNotifications.h> #include "base/bind.h" @@ -58,15 +60,12 @@ @end NotificationPlatformBridgeMacUNNotification:: - NotificationPlatformBridgeMacUNNotification() - : NotificationPlatformBridgeMacUNNotification( - [UNUserNotificationCenter currentNotificationCenter]) {} - -NotificationPlatformBridgeMacUNNotification:: NotificationPlatformBridgeMacUNNotification( - UNUserNotificationCenter* notification_center) + UNUserNotificationCenter* notification_center, + id<AlertDispatcher> alert_dispatcher) : delegate_([UNNotificationCenterDelegate alloc]), notification_center_([notification_center retain]), + alert_dispatcher_([alert_dispatcher retain]), categories_([[NSMutableSet alloc] init]), delivered_categories_([[NSMutableDictionary alloc] init]), delivered_notifications_([[NSMutableDictionary alloc] init]) { @@ -82,7 +81,7 @@ ~NotificationPlatformBridgeMacUNNotification() { [notification_center_ setDelegate:nil]; [notification_center_ removeAllDeliveredNotifications]; - // TODO(crbug/1134539): Close alerts. + [alert_dispatcher_ closeAllNotifications]; } void NotificationPlatformBridgeMacUNNotification::Display( @@ -119,9 +118,14 @@ // TODO(crbug/1138176): Resize images by adding a transparent border so that // its dimensions are uniform and do not get resized once sent to the // notification center. - base::FilePath path = - image_retainer_.RegisterTemporaryImage(notification.icon()); - [builder setIconPath:base::SysUTF8ToNSString(path.value())]; + if (is_alert) { + // TODO(crbug.com/1127306): Use the gfx::Image when sending via Mojo? + [builder setIcon:notification.icon().ToNSImage()]; + } else { + base::FilePath path = + image_retainer_.RegisterTemporaryImage(notification.icon()); + [builder setIconPath:base::SysUTF8ToNSString(path.value())]; + } } [builder setShowSettingsButton:notification.should_show_settings_button()]; @@ -146,19 +150,21 @@ setNotificationType:[NSNumber numberWithInteger:static_cast<NSInteger>( notification_type)]]; + std::string system_notification_id = DeriveMacNotificationId( + profile->IsOffTheRecord(), GetProfileId(profile), notification.id()); + NSString* notification_id = base::SysUTF8ToNSString(system_notification_id); + [builder setIdentifier:notification_id]; + if (is_alert) { - // TODO(crbug.com/1134539): Send out an alert. - NOTIMPLEMENTED(); + NSDictionary* dict = [builder buildDictionary]; + [alert_dispatcher_ dispatchNotification:dict]; + DeliveredSuccessfully(system_notification_id, std::move(builder)); + return; } // Create a new category from the desired action buttons. UNNotificationCategory* category = [builder buildCategory]; - std::string system_notification_id = DeriveMacNotificationId( - profile->IsOffTheRecord(), GetProfileId(profile), notification.id()); - NSString* notification_id = base::SysUTF8ToNSString(system_notification_id); - [builder setIdentifier:base::SysUTF8ToNSString(system_notification_id)]; - // Check if this notification had an already existing category from a previous // call, if that is the case then remove it. if (UNNotificationCategory* existing = @@ -219,6 +225,7 @@ void NotificationPlatformBridgeMacUNNotification::Close( Profile* profile, const std::string& notification_id) { + NSString* originalNotificationId = base::SysUTF8ToNSString(notification_id); NSString* notificationId = base::SysUTF8ToNSString(DeriveMacNotificationId( profile->IsOffTheRecord(), GetProfileId(profile), notification_id)); base::WeakPtr<NotificationPlatformBridgeMacUNNotification> weak_ptr = @@ -229,53 +236,42 @@ for (UNNotification* notification in notifications) { NSString* toastNotificationId = [[notification request] identifier]; if ([notificationId isEqualToString:toastNotificationId]) { - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce( - &NotificationPlatformBridgeMacUNNotification::DoClose, weak_ptr, - base::SysNSStringToUTF8(notificationId))); - break; + [notification_center_ + removeDeliveredNotificationsWithIdentifiers:@[ notificationId ]]; + return; } } + + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce( + &NotificationPlatformBridgeMacUNNotification::DoCloseAlert, + weak_ptr, profile, + base::SysNSStringToUTF8(originalNotificationId))); }]; - // TODO(crbug/1134539): If the notification was not present as a banner, check - // alerts. + + // Remove the category of the closed notification, and remove it from + // |delivered_notifications_|. + // TODO(knollr): Move notification category handling into a reusable class. + if (UNNotificationCategory* existing = + [delivered_categories_ objectForKey:notificationId]) { + [categories_ removeObject:existing]; + [delivered_categories_ removeObjectForKey:notificationId]; + } + [delivered_notifications_ removeObjectForKey:notificationId]; } void NotificationPlatformBridgeMacUNNotification::GetDisplayed( Profile* profile, GetDisplayedNotificationsCallback callback) const { - bool incognito = profile->IsOffTheRecord(); - NSString* profileId = base::SysUTF8ToNSString(GetProfileId(profile)); - // Create a copyable version of the OnceCallback because ObjectiveC blocks - // copy all referenced variables via copy constructor. - auto copyable_callback = base::AdaptCallbackForRepeating(std::move(callback)); - - [notification_center_ getDeliveredNotificationsWithCompletionHandler:^( - NSArray<UNNotification*>* _Nonnull notifications) { - std::set<std::string> displayedNotifications; - - for (UNNotification* notification in notifications) { - NSString* toastProfileId = [[[[notification request] content] userInfo] - objectForKey:notification_constants::kNotificationProfileId]; - bool incognitoNotification = [[[[[notification request] content] userInfo] - objectForKey:notification_constants::kNotificationIncognito] - boolValue]; - - if ([toastProfileId isEqualToString:profileId] && - incognito == incognitoNotification) { - displayedNotifications.insert( - base::SysNSStringToUTF8([[[[notification request] content] userInfo] - objectForKey:notification_constants::kNotificationId])); - } - } - // TODO(crbug/1134570): Query for displayed alerts as well. - - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(copyable_callback, std::move(displayedNotifications), - true /* supports_synchronization */)); - }]; + GetDisplayedNotificationsCallback alerts_callback = base::BindOnce( + &NotificationPlatformBridgeMacUNNotification::DidGetDisplayedAlerts, + weak_factory_.GetWeakPtr(), profile, std::move(callback)); + [alert_dispatcher_ + getDisplayedAlertsForProfileId:base::SysUTF8ToNSString( + GetProfileId(profile)) + incognito:profile && profile->IsOffTheRecord() + callback:std::move(alerts_callback)]; } void NotificationPlatformBridgeMacUNNotification::SetReadyCallback( @@ -301,19 +297,17 @@ }]; } -void NotificationPlatformBridgeMacUNNotification::DoClose( +void NotificationPlatformBridgeMacUNNotification::DoCloseAlert( + Profile* profile, const std::string& notification_id) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + NSString* notificationId = base::SysUTF8ToNSString(notification_id); + NSString* profileId = base::SysUTF8ToNSString(GetProfileId(profile)); + bool incognito = profile->IsOffTheRecord(); - NSString* toast_id = base::SysUTF8ToNSString(notification_id); - [notification_center_ - removeDeliveredNotificationsWithIdentifiers:@[ toast_id ]]; - - // Remove the category of the closed notification, and remove it from - // |delivered_notifications_|. - [categories_ removeObject:[delivered_categories_ objectForKey:toast_id]]; - [delivered_categories_ removeObjectForKey:toast_id]; - [delivered_notifications_ removeObjectForKey:toast_id]; + [alert_dispatcher_ closeNotificationWithId:notificationId + profileId:profileId + incognito:incognito]; } void NotificationPlatformBridgeMacUNNotification::DeliveredSuccessfully( @@ -347,26 +341,13 @@ void NotificationPlatformBridgeMacUNNotification::SynchronizeNotifications() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - base::WeakPtr<NotificationPlatformBridgeMacUNNotification> weak_ptr = - weak_factory_.GetWeakPtr(); - - [notification_center_ getDeliveredNotificationsWithCompletionHandler:^( - NSArray<UNNotification*>* _Nonnull notifications) { - base::flat_set<std::string> notification_ids; - - for (UNNotification* notification in notifications) { - std::string notification_id = - base::SysNSStringToUTF8([[notification request] identifier]); - notification_ids.insert(std::move(notification_id)); - } - - // TODO(crbug/1134570): Check for displayed alerts as well. - - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, base::BindOnce(&NotificationPlatformBridgeMacUNNotification:: - DoSynchronizeNotifications, - weak_ptr, std::move(notification_ids))); - }]; + // TODO(crbug.com/1127306): Skip the |alert_dispatcher_| if it is using the + // NSUserNotification API as it can handle close events. + [alert_dispatcher_ + getAllDisplayedAlertsWithCallback: + base::BindOnce(&NotificationPlatformBridgeMacUNNotification:: + DidGetAllDisplayedAlerts, + weak_factory_.GetWeakPtr())]; } void NotificationPlatformBridgeMacUNNotification::DoSynchronizeNotifications( @@ -395,9 +376,11 @@ [[delivered_notifications_ objectForKey:notification_id] mutableCopy]); // Remove the category of the dismissed notification. - [categories_ - removeObject:[delivered_categories_ objectForKey:notification_id]]; - [delivered_categories_ removeObjectForKey:notification_id]; + if (UNNotificationCategory* existing = + [delivered_categories_ objectForKey:notification_id]) { + [categories_ removeObject:existing]; + [delivered_categories_ removeObjectForKey:notification_id]; + } // Closed notifications need to carry // NotificationOperation::NOTIFICATION_CLOSE and an invalid button index. @@ -418,6 +401,77 @@ synchronize_displayed_notifications_timer_.Stop(); } +void NotificationPlatformBridgeMacUNNotification::DidGetDisplayedAlerts( + Profile* profile, + GetDisplayedNotificationsCallback callback, + std::set<std::string> alert_ids, + bool supports_synchronization) { + // Create a copyable version of the OnceCallback because ObjectiveC blocks + // copy all referenced variables via copy constructor. + auto copyable_callback = base::AdaptCallbackForRepeating(std::move(callback)); + bool incognito = profile->IsOffTheRecord(); + NSString* profileId = base::SysUTF8ToNSString(GetProfileId(profile)); + + [notification_center_ getDeliveredNotificationsWithCompletionHandler:^( + NSArray<UNNotification*>* _Nonnull notifications) { + std::set<std::string> displayedNotifications; + + for (UNNotification* notification in notifications) { + NSString* toastProfileId = [[[[notification request] content] userInfo] + objectForKey:notification_constants::kNotificationProfileId]; + bool incognitoNotification = [[[[[notification request] content] userInfo] + objectForKey:notification_constants::kNotificationIncognito] + boolValue]; + + if ([toastProfileId isEqualToString:profileId] && + incognito == incognitoNotification) { + displayedNotifications.insert( + base::SysNSStringToUTF8([[[[notification request] content] userInfo] + objectForKey:notification_constants::kNotificationId])); + } + } + + for (const std::string& alert_id : alert_ids) + displayedNotifications.insert(alert_id); + + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(copyable_callback, std::move(displayedNotifications), + supports_synchronization)); + }]; +} + +void NotificationPlatformBridgeMacUNNotification::DidGetAllDisplayedAlerts( + base::flat_set<MacNotificationIdentifier> alert_ids) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + base::WeakPtr<NotificationPlatformBridgeMacUNNotification> weak_ptr = + weak_factory_.GetWeakPtr(); + + [notification_center_ getDeliveredNotificationsWithCompletionHandler:^( + NSArray<UNNotification*>* _Nonnull notifications) { + std::vector<std::string> notification_ids; + notification_ids.reserve([notifications count] + alert_ids.size()); + + for (UNNotification* notification in notifications) { + std::string notification_id = + base::SysNSStringToUTF8([[notification request] identifier]); + notification_ids.push_back(std::move(notification_id)); + } + + for (const MacNotificationIdentifier& alert_id : alert_ids) { + notification_ids.push_back(DeriveMacNotificationId( + alert_id.incognito, alert_id.profile_id, alert_id.notification_id)); + } + + base::flat_set<std::string> all_ids(std::move(notification_ids)); + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, base::BindOnce(&NotificationPlatformBridgeMacUNNotification:: + DoSynchronizeNotifications, + weak_ptr, std::move(all_ids))); + }]; +} + // ///////////////////////////////////////////////////////////////////////////// @implementation UNNotificationCenterDelegate
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification_unittest.mm b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification_unittest.mm index 00af233..6d8c8230f 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac_unnotification_unittest.mm +++ b/chrome/browser/notifications/notification_platform_bridge_mac_unnotification_unittest.mm
@@ -8,10 +8,15 @@ #include "base/mac/mac_util.h" #include "base/mac/scoped_nsobject.h" #include "base/run_loop.h" +#include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/test/bind.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/mock_callback.h" +#include "chrome/browser/notifications/notification_display_service_tester.h" #include "chrome/browser/notifications/notification_platform_bridge_mac_unnotification.h" +#include "chrome/browser/notifications/notification_platform_bridge_mac_utils.h" +#include "chrome/browser/notifications/stub_alert_dispatcher_mac.h" #include "chrome/browser/notifications/unnotification_metrics.h" #include "chrome/browser/ui/cocoa/notifications/notification_constants_mac.h" #include "chrome/browser/ui/cocoa/notifications/unnotification_builder_mac.h" @@ -169,13 +174,17 @@ void SetUp() override { ASSERT_TRUE(manager_.SetUp()); profile_ = manager_.CreateTestingProfile("Moe"); + display_service_tester_ = + std::make_unique<NotificationDisplayServiceTester>(profile_); + alert_dispatcher_.reset([[StubAlertDispatcher alloc] init]); if (@available(macOS 10.14, *)) { center_.reset([[FakeUNUserNotificationCenter alloc] init]); [[center_ settings] setAlertStyle:UNAlertStyleBanner]; [[center_ settings] setAuthorizationStatus:UNAuthorizationStatusAuthorized]; bridge_ = std::make_unique<NotificationPlatformBridgeMacUNNotification>( - static_cast<UNUserNotificationCenter*>(center_.get())); + static_cast<UNUserNotificationCenter*>(center_.get()), + alert_dispatcher_.get()); } } @@ -193,14 +202,36 @@ return notification; } + Notification CreateAlert(const std::string& notificationId = "id1") { + Notification notification = CreateNotification(notificationId); + notification.set_never_timeout(true); + return notification; + } + + std::set<std::string> GetDisplayedSync() API_AVAILABLE(macosx(10.14)) { + base::RunLoop run_loop; + std::set<std::string> displayed; + bridge_->GetDisplayed(profile_, base::BindLambdaForTesting( + [&](std::set<std::string> notifications, + bool supports_synchronization) { + displayed = std::move(notifications); + run_loop.Quit(); + })); + run_loop.Run(); + return displayed; + } + + base::scoped_nsobject<StubAlertDispatcher> alert_dispatcher_; API_AVAILABLE(macosx(10.14)) base::scoped_nsobject<FakeUNUserNotificationCenter> center_; API_AVAILABLE(macosx(10.14)) std::unique_ptr<NotificationPlatformBridgeMacUNNotification> bridge_; TestingProfile* profile_ = nullptr; base::HistogramTester histogram_tester_; - content::BrowserTaskEnvironment task_environment_; + content::BrowserTaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; TestingProfileManager manager_; + std::unique_ptr<NotificationDisplayServiceTester> display_service_tester_; }; class UNNotificationPlatformBridgeMacPermissionStatusTest @@ -236,6 +267,41 @@ } } +TEST_F(UNNotificationPlatformBridgeMacTest, TestDisplayAlert) { + if (@available(macOS 10.14, *)) { + Notification alert = CreateAlert(); + // Some OS versions don't support alerts. + if (!IsAlertNotificationMac(alert)) + return; + + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, alert, + /*metadata=*/nullptr); + + // Expect the alert to be shown via |alert_dispatcher_| and not |center_|. + [center_ getDeliveredNotificationsWithCompletionHandler:^( + NSArray<UNNotification*>* _Nonnull notifications) { + ASSERT_EQ(0u, [notifications count]); + }]; + NSArray* displayed_alerts = [alert_dispatcher_ alerts]; + ASSERT_EQ(1u, [displayed_alerts count]); + + // Verify alert content. + NSDictionary* delivered_alert = [displayed_alerts objectAtIndex:0]; + NSString* title = [delivered_alert + objectForKey:notification_constants::kNotificationTitle]; + NSString* informative_text = [delivered_alert + objectForKey:notification_constants::kNotificationInformativeText]; + NSString* subtitle = [delivered_alert + objectForKey:notification_constants::kNotificationSubTitle]; + NSString* identifier = [delivered_alert + objectForKey:notification_constants::kNotificationIdentifier]; + EXPECT_NSEQ(@"Title", title); + EXPECT_NSEQ(@"Context", informative_text); + EXPECT_NSEQ(@"gmail.com", subtitle); + EXPECT_NSEQ(@"r|Moe|id1", identifier); + } +} + TEST_F(UNNotificationPlatformBridgeMacTest, TestDisplayMultipleProfiles) { if (@available(macOS 10.14, *)) { TestingProfile* profile_1 = manager_.CreateTestingProfile("P1"); @@ -376,6 +442,22 @@ } } +TEST_F(UNNotificationPlatformBridgeMacTest, TestCloseAlert) { + if (@available(macOS 10.14, *)) { + Notification alert = CreateAlert("id1"); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, alert, + /*metadata=*/nullptr); + ASSERT_EQ(1u, [[alert_dispatcher_ alerts] count]); + + bridge_->Close(profile_, "id1"); + // RunLoop is used here to ensure that Close has finished executing before + // the notification count is checked below. Since Close executes + // asynchronous calls the order is not guaranteed by nature. + base::RunLoop().RunUntilIdle(); + ASSERT_EQ(0u, [[alert_dispatcher_ alerts] count]); + } +} + TEST_F(UNNotificationPlatformBridgeMacTest, TestGetDisplayed) { if (@available(macOS 10.14, *)) { Notification notification = CreateNotification(); @@ -393,70 +475,70 @@ EXPECT_EQ(1u, [notifications count]); }]; - base::RunLoop run_loop; - int notification_count = -1; - bridge_->GetDisplayed( - profile_, - base::BindLambdaForTesting([&](std::set<std::string> notifications, - bool supports_synchronization) { - notification_count = notifications.size(); - run_loop.Quit(); - })); - run_loop.Run(); - EXPECT_EQ(1, notification_count); + EXPECT_EQ(1u, GetDisplayedSync().size()); } } TEST_F(UNNotificationPlatformBridgeMacTest, TestGetDisplayedMultipleNotifications) { if (@available(macOS 10.14, *)) { - Notification first_notification = CreateNotification("id1"); - + // Setup 2 banners and 1 alert for the correct profile. bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, - first_notification, nullptr); - - Notification second_notification = CreateNotification("id2"); + CreateNotification("id1"), /*metadata=*/nullptr); bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, - second_notification, nullptr); + CreateNotification("id2"), /*metadata=*/nullptr); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, + CreateAlert("id3"), /*metadata=*/nullptr); - base::RunLoop run_loop; - int notification_count = -1; - bridge_->GetDisplayed( - profile_, - base::BindLambdaForTesting([&](std::set<std::string> notifications, - bool supports_synchronization) { - notification_count = notifications.size(); - run_loop.Quit(); - })); - run_loop.Run(); - EXPECT_EQ(2, notification_count); + // Add some more notifications for other profiles that shouldn't show up. + TestingProfile::Builder profile_builder; + profile_builder.SetPath(profile_->GetPath()); + profile_builder.SetProfileName(profile_->GetProfileUserName()); + Profile* incogito_profile = profile_builder.BuildIncognito(profile_); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, + incogito_profile, CreateNotification("id1"), + /*metadata=*/nullptr); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, + incogito_profile, CreateAlert("id99"), + /*metadata=*/nullptr); + TestingProfile* other_profile = manager_.CreateTestingProfile("Other"); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, other_profile, + CreateNotification("id2"), /*metadata=*/nullptr); - [center_ getNotificationCategoriesWithCompletionHandler:^( - NSSet<UNNotificationCategory*>* categories) { - EXPECT_EQ(2u, [categories count]); + EXPECT_EQ(3u, GetDisplayedSync().size()); + + size_t expected_alerts = IsAlertNotificationMac(CreateAlert()) ? 2 : 0; + [center_ getDeliveredNotificationsWithCompletionHandler:^( + NSArray<UNNotification*>* _Nonnull notifications) { + EXPECT_EQ(6u - expected_alerts, [notifications count]); }]; + ASSERT_EQ(expected_alerts, [[alert_dispatcher_ alerts] count]); } } TEST_F(UNNotificationPlatformBridgeMacTest, TestQuitRemovesNotifications) { if (@available(macOS 10.14, *)) { - Notification notification = CreateNotification(); - + // Setup one banner and one alert notification. bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, - notification, nullptr); + CreateNotification(), nullptr); + [alert_dispatcher_ dispatchNotification:@{}]; + // Check that both notifications are present. [center_ getDeliveredNotificationsWithCompletionHandler:^( NSArray<UNNotification*>* _Nonnull notifications) { EXPECT_EQ(1u, [notifications count]); }]; + EXPECT_EQ(1u, [[alert_dispatcher_ alerts] count]); + // Destroying the bridge should close all notifications. bridge_.reset(); - // The destructor of the bridge_ will call removeAllDeliveredNotifications. + // Check that all notifications are closed. [center_ getDeliveredNotificationsWithCompletionHandler:^( NSArray<UNNotification*>* _Nonnull notifications) { EXPECT_EQ(0u, [notifications count]); }]; + EXPECT_EQ(0u, [[alert_dispatcher_ alerts] count]); } } @@ -596,6 +678,49 @@ } } +TEST_F(UNNotificationPlatformBridgeMacTest, TestSynchronizeNotifications) { + if (@available(macOS 10.14, *)) { + Notification banner1 = CreateNotification("banner1"); + Notification banner2 = CreateNotification("banner2"); + Notification alert1 = CreateAlert("alert1"); + Notification alert2 = CreateAlert("alert2"); + + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, + banner1, /*metadata=*/nullptr); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, + banner2, /*metadata=*/nullptr); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, + alert1, /*metadata=*/nullptr); + bridge_->Display(NotificationHandler::Type::WEB_PERSISTENT, profile_, + alert2, /*metadata=*/nullptr); + + EXPECT_EQ(4u, GetDisplayedSync().size()); + + // Remove two notifications without notifying the |brigde_|. + std::string profile_id = NotificationPlatformBridge::GetProfileId(profile_); + [center_ removeDeliveredNotificationsWithIdentifiers:@[ + base::SysUTF8ToNSString(DeriveMacNotificationId( + profile_->IsOffTheRecord(), profile_id, "banner1")) + ]]; + [alert_dispatcher_ + closeNotificationWithId:@"alert2" + profileId:base::SysUTF8ToNSString(profile_id) + incognito:profile_->IsOffTheRecord()]; + + // Let some time pass but not enough to trigger synchronization. + task_environment_.FastForwardBy(base::TimeDelta::FromMinutes(5)); + + // Let more time pass to trigger synchronization and two close events. + base::MockCallback< + StubNotificationDisplayService::ProcessNotificationOperationCallback> + operation_callback; + EXPECT_CALL(operation_callback, Run).Times(2); + display_service_tester_->SetProcessNotificationOperationDelegate( + operation_callback.Get()); + task_environment_.FastForwardBy(base::TimeDelta::FromMinutes(5)); + } +} + TEST_P(UNNotificationPlatformBridgeMacPermissionStatusTest, PermissionStatus) { if (@available(macOS 10.14, *)) { UNNotificationPermissionStatus permission_status = GetParam(); @@ -620,7 +745,8 @@ base::HistogramTester histogram_tester; auto bridge = std::make_unique<NotificationPlatformBridgeMacUNNotification>( - static_cast<UNUserNotificationCenter*>(center.get())); + static_cast<UNUserNotificationCenter*>(center.get()), + alert_dispatcher_.get()); histogram_tester.ExpectTotalCount( "Notifications.Permissions.UNNotification.Banners.PermissionStatus", 1); @@ -659,7 +785,8 @@ base::HistogramTester histogram_tester; auto bridge = std::make_unique<NotificationPlatformBridgeMacUNNotification>( - static_cast<UNUserNotificationCenter*>(center.get())); + static_cast<UNUserNotificationCenter*>(center.get()), + alert_dispatcher_.get()); histogram_tester.ExpectTotalCount( "Notifications.Permissions.UNNotification.Banners.Style", 1);
diff --git a/chrome/browser/notifications/notification_platform_bridge_mac_utils.mm b/chrome/browser/notifications/notification_platform_bridge_mac_utils.mm index 88e8cdf2..7e696c22 100644 --- a/chrome/browser/notifications/notification_platform_bridge_mac_utils.mm +++ b/chrome/browser/notifications/notification_platform_bridge_mac_utils.mm
@@ -4,14 +4,12 @@ #include "chrome/browser/notifications/notification_platform_bridge_mac_utils.h" -#include "base/feature_list.h" #include "base/i18n/number_formatting.h" #include "base/optional.h" #include "base/strings/strcat.h" #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/system/sys_info.h" -#include "chrome/browser/browser_features.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/notifications/notification_display_service_impl.h" #include "chrome/browser/profiles/profile_manager.h" @@ -253,11 +251,8 @@ } bool IsAlertNotificationMac(const message_center::Notification& notification) { - // TODO(crbug/1134539): Support alerts via UNNotification API. - if (base::FeatureList::IsEnabled(features::kNewMacNotificationAPI)) - return false; - // We show alerts via an XPC service, check if that's possible. + // TODO(crbug.com/1127306): Don't check this once we use the helper app. if (!MacOSSupportsXPCAlerts()) return false;
diff --git a/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewTest.java b/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewTest.java index 40a3e24..1c6d548 100644 --- a/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewTest.java +++ b/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewTest.java
@@ -8,7 +8,6 @@ import static org.chromium.chrome.browser.paint_preview.TabbedPaintPreviewTest.assertAttachedAndShown; import android.os.SystemClock; -import android.support.test.uiautomator.UiObjectNotFoundException; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; @@ -176,7 +175,7 @@ */ @Test @MediumTest - public void testRemoveOnActionbarClick() throws ExecutionException, InterruptedException { + public void testRemoveOnSnackbarClick() throws ExecutionException, InterruptedException { Tab tab = sActivityTestRule.getActivity().getActivityTab(); StartupPaintPreview startupPaintPreview = TestThreadUtils.runOnUiThreadBlocking( () -> new StartupPaintPreview(tab, null, null, null, null)); @@ -202,7 +201,7 @@ */ @Test @MediumTest - public void testRemoveOnNavigation() throws ExecutionException, UiObjectNotFoundException { + public void testRemoveOnNavigation() throws ExecutionException { Tab tab = sActivityTestRule.getActivity().getActivityTab(); StartupPaintPreview startupPaintPreview = TestThreadUtils.runOnUiThreadBlocking( () -> new StartupPaintPreview(tab, null, null, null, null)); @@ -245,7 +244,8 @@ private void simulateLongPress(View view, float x, float y) throws ExecutionException, InterruptedException { - simulateTapWithDuration(view, x, y, ViewConfiguration.getLongPressTimeout() + 100); + Thread.sleep(100); + simulateTapWithDuration(view, x, y, ViewConfiguration.getLongPressTimeout() + 200); } private void simulateTapWithDuration(View view, float x, float y, long holdDurationMs)
diff --git a/chrome/browser/password_manager/android/password_store_bridge.cc b/chrome/browser/password_manager/android/password_store_bridge.cc index 20af6400..48c9928 100644 --- a/chrome/browser/password_manager/android/password_store_bridge.cc +++ b/chrome/browser/password_manager/android/password_store_bridge.cc
@@ -89,7 +89,15 @@ } void PasswordStoreBridge::ClearAllPasswords(JNIEnv* env) { - password_store_->ClearStore(base::DoNothing()); + password_store_->ClearStore( + base::BindOnce(&PasswordStoreBridge::OnPasswordStoreCleared, + weak_factory_.GetWeakPtr())); +} + +void PasswordStoreBridge::OnPasswordStoreCleared(bool success) { + if (success) { + saved_passwords_presenter_.Init(); + } } void PasswordStoreBridge::Destroy(JNIEnv* env) {
diff --git a/chrome/browser/password_manager/android/password_store_bridge.h b/chrome/browser/password_manager/android/password_store_bridge.h index d2fb07c0..20e6042 100644 --- a/chrome/browser/password_manager/android/password_store_bridge.h +++ b/chrome/browser/password_manager/android/password_store_bridge.h
@@ -58,6 +58,10 @@ void OnEdited(const password_manager::PasswordForm& form) override; + // Callback executed after clearing the password store. It re-initializes + // `saved_passwords_presenter_`. + void OnPasswordStoreCleared(bool success); + // The corresponding java object. base::android::ScopedJavaGlobalRef<jobject> java_bridge_; @@ -70,10 +74,13 @@ password_manager::SavedPasswordsPresenter saved_passwords_presenter_{ password_store_}; - // A scoped observer for |saved_passwords_presenter_|. + // A scoped observer for `saved_passwords_presenter_`. base::ScopedObservation<password_manager::SavedPasswordsPresenter, password_manager::SavedPasswordsPresenter::Observer> observed_saved_password_presenter_{this}; + + // `weak_factory_` is used for all callback uses. + base::WeakPtrFactory<PasswordStoreBridge> weak_factory_{this}; }; #endif // CHROME_BROWSER_PASSWORD_MANAGER_ANDROID_PASSWORD_STORE_BRIDGE_H_
diff --git a/chrome/browser/password_manager/multi_profile_credentials_filter_unittest.cc b/chrome/browser/password_manager/multi_profile_credentials_filter_unittest.cc index 5dfe84d..16406a19 100644 --- a/chrome/browser/password_manager/multi_profile_credentials_filter_unittest.cc +++ b/chrome/browser/password_manager/multi_profile_credentials_filter_unittest.cc
@@ -94,10 +94,10 @@ std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); Profile* profile_2 = profile_manager()->CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - profile_manager() - ->profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_2->GetPath(), &entry); + ProfileAttributesEntry* entry = + profile_manager() + ->profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_2->GetPath()); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); AddTab(browser(), GURL("http://foo/1"));
diff --git a/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc b/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc index f64f1ae9..901c5097 100644 --- a/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc +++ b/chrome/browser/password_manager/password_manager_captured_sites_interactive_uitest.cc
@@ -229,11 +229,15 @@ }; IN_PROC_BROWSER_TEST_P(CapturedSitesPasswordManagerBrowserTest, Recipe) { + captured_sites_test_utils::PrintInstructions( + "password_manager_captured_sites_interactive_uitest"); + base::FilePath src_dir; ASSERT_TRUE(base::PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); bool test_completed = recipe_replayer()->ReplayTest( - GetParam().capture_file_path, GetParam().recipe_file_path); + GetParam().capture_file_path, GetParam().recipe_file_path, + captured_sites_test_utils::GetCommandFilePath()); if (!test_completed) ADD_FAILURE() << "Full execution was unable to complete."; }
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index 2228548..b09482a 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -130,6 +130,7 @@ using guest_view::TestGuestViewManagerFactory; using ui::AXTreeFormatter; +namespace { const int kNumberLoadTestParts = 10; #if defined(OS_MAC) @@ -151,6 +152,17 @@ run_loop.Run(); } +void WaitForLoadStart(content::WebContents* web_contents) { + while (!web_contents->IsLoading() && + !web_contents->GetController().GetLastCommittedEntry()) { + base::RunLoop run_loop; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout()); + run_loop.Run(); + } +} +} // namespace + // Check if the |actual| string matches the string or the string pattern in // |pattern| and print a readable message if it does not match. #define ASSERT_MULTILINE_STR_MATCHES(pattern, actual) \ @@ -461,10 +473,8 @@ // for https://crbug.com/536637. The original implementation checked that the // BrowserPlugin hosting the pdf extension was focused; in this re-write, we // make sure the guest view's WebContents has focus. -// -// Flaky: crbug.com/1126876 IN_PROC_BROWSER_TEST_F(PDFExtensionTestWithTestGuestViewManager, - DISABLED_PdfInMainFrameHasFocus) { + PdfInMainFrameHasFocus) { // Load test HTML, and verify the text area has focus. GURL main_url(embedded_test_server()->GetURL("/pdf/test.pdf")); ui_test_utils::NavigateToURL(browser(), main_url); @@ -474,6 +484,7 @@ auto* guest_web_contents = GetGuestViewManager()->WaitForSingleGuestCreated(); ASSERT_TRUE(guest_web_contents); EXPECT_NE(embedder_web_contents, guest_web_contents); + WaitForLoadStart(guest_web_contents); EXPECT_TRUE(content::WaitForLoadStop(guest_web_contents)); // Make sure the guest WebContents has focus. @@ -487,16 +498,8 @@ // has the correct URL for the PDF extension. // TODO(wjmaclean): Are there any attributes we can/should test with respect to // the extension's loaded html? -// TODO(https://crbug.com/1126876): Re-enable. Flaky on all linux, chromeos and -// windows. -#if defined(OS_WIN) || defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) || \ - BUILDFLAG(IS_CHROMEOS_LACROS) -#define MAYBE_PdfExtensionLoadedInGuest DISABLED_PdfExtensionLoadedInGuest -#else -#define MAYBE_PdfExtensionLoadedInGuest PdfExtensionLoadedInGuest -#endif IN_PROC_BROWSER_TEST_F(PDFExtensionTestWithTestGuestViewManager, - MAYBE_PdfExtensionLoadedInGuest) { + PdfExtensionLoadedInGuest) { // Load test HTML, and verify the text area has focus. GURL main_url(embedded_test_server()->GetURL("/pdf/test.pdf")); ui_test_utils::NavigateToURL(browser(), main_url); @@ -506,6 +509,7 @@ auto* guest_web_contents = GetGuestViewManager()->WaitForSingleGuestCreated(); ASSERT_TRUE(guest_web_contents); EXPECT_NE(embedder_web_contents, guest_web_contents); + WaitForLoadStart(guest_web_contents); EXPECT_TRUE(content::WaitForLoadStop(guest_web_contents)); // Verify we loaded the extension. @@ -536,16 +540,8 @@ // This test verifies that when a PDF is served with a restrictive // Content-Security-Policy, the embed tag is still sized correctly. // Regression test for https://crbug.com/271452. -// Flaky on win and linux: crbug.com/1150197 -// TODO(crbug.com/1052397): Revisit once build flag switch of lacros-chrome is -// complete. -#if defined(OS_WIN) || (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) -#define MAYBE_CSPDoesNotBlockEmbedStyles DISABLED_CSPDoesNotBlockEmbedStyles -#else -#define MAYBE_CSPDoesNotBlockEmbedStyles CSPDoesNotBlockEmbedStyles -#endif IN_PROC_BROWSER_TEST_F(PDFExtensionTestWithTestGuestViewManager, - MAYBE_CSPDoesNotBlockEmbedStyles) { + CSPDoesNotBlockEmbedStyles) { GURL main_url(embedded_test_server()->GetURL("/pdf/test-csp.pdf")); ui_test_utils::NavigateToURL(browser(), main_url); auto* embedder_web_contents = GetActiveWebContents(); @@ -555,6 +551,7 @@ auto* guest_web_contents = GetGuestViewManager()->WaitForSingleGuestCreated(); ASSERT_TRUE(guest_web_contents); EXPECT_NE(embedder_web_contents, guest_web_contents); + WaitForLoadStart(guest_web_contents); EXPECT_TRUE(content::WaitForLoadStop(guest_web_contents)); // Verify the extension was loaded. @@ -594,7 +591,7 @@ // overrides an X-Frame-Options header on a PDF response. // Regression test for https://crbug.com/1107535. IN_PROC_BROWSER_TEST_F(PDFExtensionTestWithTestGuestViewManager, - DISABLED_CSPFrameAncestorsOverridesXFrameOptions) { + CSPFrameAncestorsOverridesXFrameOptions) { GURL main_url( embedded_test_server()->GetURL("/pdf/frame-test-csp-and-xfo.html")); ui_test_utils::NavigateToURL(browser(), main_url); @@ -605,6 +602,7 @@ auto* guest_web_contents = GetGuestViewManager()->WaitForSingleGuestCreated(); ASSERT_TRUE(guest_web_contents); EXPECT_NE(embedder_web_contents, guest_web_contents); + WaitForLoadStart(guest_web_contents); EXPECT_TRUE(content::WaitForLoadStop(guest_web_contents)); // Verify the extension was loaded.
diff --git a/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc b/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc index da1acf179..705b4775 100644 --- a/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc +++ b/chrome/browser/predictors/autocomplete_action_predictor_unittest.cc
@@ -27,8 +27,8 @@ #include "components/history/core/browser/history_service.h" #include "components/history/core/browser/in_memory_database.h" #include "components/history/core/browser/url_database.h" +#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h" #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" -#include "components/no_state_prefetch/browser/prerender_field_trial.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/autocomplete_result.h" #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc b/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc index 03ba582c..9dc55b1 100644 --- a/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc +++ b/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc
@@ -37,9 +37,9 @@ #include "components/content_settings/core/browser/cookie_settings.h" #include "components/content_settings/core/common/pref_names.h" #include "components/no_state_prefetch/browser/no_state_prefetch_contents.h" +#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h" #include "components/no_state_prefetch/browser/no_state_prefetch_handle.h" #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" -#include "components/no_state_prefetch/browser/prerender_field_trial.h" #include "components/no_state_prefetch/browser/prerender_link_manager.h" #include "components/no_state_prefetch/common/prerender_origin.h" #include "components/no_state_prefetch/common/prerender_util.h"
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragment.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragment.java index 2653185..4b16a6a84 100644 --- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragment.java +++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSettingsFragment.java
@@ -10,8 +10,11 @@ import android.view.ViewGroup; import android.widget.LinearLayout; +import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import org.chromium.base.metrics.RecordUserAction; +import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.ui.text.SpanApplier; import org.chromium.ui.text.SpanApplier.SpanInfo; @@ -20,8 +23,12 @@ /** * Settings fragment for privacy sandbox settings. This class represents a View in the MVC paradigm. */ -public class PrivacySandboxSettingsFragment extends PreferenceFragmentCompat { +public class PrivacySandboxSettingsFragment + extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { public static final String TRIAL_DESCRIPTION_PREFERENCE = "privacy_sandbox_trial_description"; + public static final String TOGGLE_PREFERENCE = "privacy_sandbox_toggle"; + + private PrivacySandboxBridge mBridge; /** * Initializes all the objects related to the preferences page. @@ -37,6 +44,23 @@ getContext().getString(R.string.privacy_sandbox_trial_description), new SpanInfo("<li1>", "</li1>", new ChromeBulletSpan(getContext())), new SpanInfo("<li2>", "</li2>", new ChromeBulletSpan(getContext())))); + + mBridge = new PrivacySandboxBridge(); + ChromeSwitchPreference privacySandboxToggle = + (ChromeSwitchPreference) findPreference(TOGGLE_PREFERENCE); + privacySandboxToggle.setOnPreferenceChangeListener(this); + privacySandboxToggle.setChecked(mBridge.isPrivacySandboxEnabled()); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + String key = preference.getKey(); + if (!TOGGLE_PREFERENCE.equals(key)) return true; + boolean enabled = (boolean) newValue; + RecordUserAction.record(enabled ? "Settings.PrivacySandbox.ApisEnabled" + : "Settings.PrivacySandbox.ApisDisabled"); + mBridge.setPrivacySandboxEnabled(enabled); + return true; } @Override
diff --git a/chrome/browser/profiles/avatar_menu_desktop.cc b/chrome/browser/profiles/avatar_menu_desktop.cc index 51529e2..e4968404 100644 --- a/chrome/browser/profiles/avatar_menu_desktop.cc +++ b/chrome/browser/profiles/avatar_menu_desktop.cc
@@ -20,9 +20,11 @@ int preferred_size) { if (!g_browser_process->profile_manager()) return ImageLoadStatus::BROWSER_SHUTTING_DOWN; - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + if (!entry) { // This can happen if the user deletes the current profile. return ImageLoadStatus::PROFILE_DELETED; }
diff --git a/chrome/browser/profiles/gaia_info_update_service.cc b/chrome/browser/profiles/gaia_info_update_service.cc index 3ff8b96..0d80062 100644 --- a/chrome/browser/profiles/gaia_info_update_service.cc +++ b/chrome/browser/profiles/gaia_info_update_service.cc
@@ -47,9 +47,9 @@ ClearProfileEntry(); return; } - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; } @@ -84,9 +84,9 @@ if (!info.IsValid()) return; - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; } gaia_id_of_profile_attribute_entry_ = info.gaia; @@ -116,9 +116,9 @@ if (!info.IsValid()) return; - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; } @@ -131,9 +131,9 @@ } void GAIAInfoUpdateService::ClearProfileEntry() { - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; } gaia_id_of_profile_attribute_entry_ = ""; @@ -180,9 +180,9 @@ void GAIAInfoUpdateService::OnAccountsInCookieUpdated( const signin::AccountsInCookieJarInfo& accounts_in_cookie_jar_info, const GoogleServiceAuthError& error) { - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; }
diff --git a/chrome/browser/profiles/profile_activity_metrics_recorder.cc b/chrome/browser/profiles/profile_activity_metrics_recorder.cc index be53bdc..4cb3145 100644 --- a/chrome/browser/profiles/profile_activity_metrics_recorder.cc +++ b/chrome/browser/profiles/profile_activity_metrics_recorder.cc
@@ -34,11 +34,17 @@ if (profile->IsGuestSession() || profile->IsEphemeralGuestProfile()) return 0; - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager() || - !g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + if (!g_browser_process->profile_manager()) { + VLOG(1) << "Failed to read profile bucket index because profile manager " + "doesn't exist."; + return -1; + } + + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (!entry) { // This can happen if the profile is deleted. VLOG(1) << "Failed to read profile bucket index because attributes entry " "doesn't exist."; @@ -102,10 +108,11 @@ if (profile->IsEphemeralGuestProfile()) return; - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (!entry) { // This can happen if the profile is deleted / for guest profile. return; }
diff --git a/chrome/browser/profiles/profile_attributes_storage.cc b/chrome/browser/profiles/profile_attributes_storage.cc index b8047cc4..fe8190e 100644 --- a/chrome/browser/profiles/profile_attributes_storage.cc +++ b/chrome/browser/profiles/profile_attributes_storage.cc
@@ -248,11 +248,10 @@ ProfileAttributesStorage::GetAllProfilesAttributes(bool include_guest_profile) { std::vector<ProfileAttributesEntry*> ret; for (const auto& path_and_entry : profile_attributes_entries_) { - ProfileAttributesEntry* entry; // Initialize any entries that are not yet initialized. - bool success = GetProfileAttributesWithPath( - base::FilePath(path_and_entry.first), &entry); - DCHECK(success); + ProfileAttributesEntry* entry = + GetProfileAttributesWithPath(base::FilePath(path_and_entry.first)); + DCHECK(entry); if (!entry->IsGuest() || include_guest_profile) ret.push_back(entry); }
diff --git a/chrome/browser/profiles/profile_attributes_storage.h b/chrome/browser/profiles/profile_attributes_storage.h index 67759b3..3c04355d 100644 --- a/chrome/browser/profiles/profile_attributes_storage.h +++ b/chrome/browser/profiles/profile_attributes_storage.h
@@ -79,13 +79,12 @@ std::vector<ProfileAttributesEntry*> GetAllProfilesAttributesSortedByLocalProfilName(); - // Populates |entry| with the data for the profile at |path| and returns true - // if the operation is successful and |entry| can be used. Returns false - // otherwise. - // |entry| should not be cached as it may not reflect subsequent changes to - // the profile's metadata. - virtual bool GetProfileAttributesWithPath( - const base::FilePath& path, ProfileAttributesEntry** entry) = 0; + // Returns a ProfileAttributesEntry with the data for the profile at |path| + // if the operation is successful. Returns |nullptr| otherwise. + // Returned value should not be cached because the profile entry may be + // deleted at any time, an then using this value would cause use-after-free. + virtual ProfileAttributesEntry* GetProfileAttributesWithPath( + const base::FilePath& path) = 0; // Returns the count of known profiles. virtual size_t GetNumberOfProfiles(
diff --git a/chrome/browser/profiles/profile_attributes_storage_unittest.cc b/chrome/browser/profiles/profile_attributes_storage_unittest.cc index 5b93177..33e22a5b 100644 --- a/chrome/browser/profiles/profile_attributes_storage_unittest.cc +++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
@@ -203,17 +203,19 @@ TEST_F(ProfileAttributesStorageTest, ProfileNotFound) { EXPECT_EQ(0U, storage()->GetNumberOfProfiles()); - ProfileAttributesEntry* entry; - ASSERT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ASSERT_EQ(storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")), + nullptr); AddTestingProfile(); EXPECT_EQ(1U, storage()->GetNumberOfProfiles()); - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); - ASSERT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path1"), &entry)); + ASSERT_NE(storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")), + nullptr); + ASSERT_EQ(storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path1")), + nullptr); } TEST_F(ProfileAttributesStorageTest, AddProfile) { @@ -231,23 +233,24 @@ VerifyAndResetCallExpectations(); EXPECT_EQ(1U, storage()->GetNumberOfProfiles()); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("new_profile_path_1"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("new_profile_path_1")); + ASSERT_NE(entry, nullptr); EXPECT_EQ(base::ASCIIToUTF16("new_profile_name_1"), entry->GetName()); } TEST_F(ProfileAttributesStorageTest, RemoveProfile) { EXPECT_EQ(0U, storage()->GetNumberOfProfiles()); - ProfileAttributesEntry* entry; - ASSERT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_EQ(entry, nullptr); AddTestingProfile(); EXPECT_EQ(1U, storage()->GetNumberOfProfiles()); - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(entry, nullptr); EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName()); // Deleting an existing profile. This should call observers and make the entry @@ -256,8 +259,9 @@ storage()->RemoveProfile(GetProfilePath("testing_profile_path0")); VerifyAndResetCallExpectations(); EXPECT_EQ(0U, storage()->GetNumberOfProfiles()); - EXPECT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + EXPECT_EQ(entry, nullptr); } TEST_F(ProfileAttributesStorageTest, MultipleProfiles) { @@ -272,16 +276,17 @@ EXPECT_EQ(5U, storage()->GetNumberOfProfiles()); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(entry, nullptr); EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName()); AddCallExpectationsForRemoveProfile(0); storage()->RemoveProfile(GetProfilePath("testing_profile_path0")); VerifyAndResetCallExpectations(); - ASSERT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_EQ(entry, nullptr); EXPECT_EQ(4U, storage()->GetNumberOfProfiles()); std::vector<ProfileAttributesEntry*> entries = @@ -294,9 +299,9 @@ TEST_F(ProfileAttributesStorageTest, InitialValues) { AddTestingProfile(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(entry, nullptr); EXPECT_EQ(GetProfilePath("testing_profile_path0"), entry->GetPath()); EXPECT_EQ(base::ASCIIToUTF16("testing_profile_name0"), entry->GetName()); EXPECT_EQ(std::string("testing_profile_gaia0"), entry->GetGAIAId()); @@ -311,8 +316,8 @@ base::FilePath path = GetProfilePath("testing_profile_path0"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(path, &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath(path); + ASSERT_NE(entry, nullptr); EXPECT_EQ(path, entry->GetPath()); EXPECT_CALL(observer(), OnProfileNameChanged(path, _)).Times(2); @@ -363,9 +368,9 @@ TEST_F(ProfileAttributesStorageTest, EntryInternalAccessors) { AddTestingProfile(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(entry, nullptr); EXPECT_EQ(GetProfilePath("testing_profile_path0"), entry->GetPath()); @@ -449,9 +454,9 @@ TEST_F(ProfileAttributesStorageTest, ProfileActiveTime) { AddTestingProfile(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(entry, nullptr); // Check the state before active time is stored. const char kActiveTimeKey[] = "active_time"; @@ -486,8 +491,8 @@ base::FilePath path = GetProfilePath("testing_profile_path0"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(path, &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath(path); + ASSERT_NE(entry, nullptr); EXPECT_CALL(observer(), OnProfileAuthInfoChanged(path)).Times(1); entry->SetAuthInfo("", base::string16(), false); @@ -509,9 +514,9 @@ base::FilePath path = GetProfilePath("testing_profile_path0"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(entry, nullptr); entry->SetSupervisedUserId(""); ASSERT_FALSE(entry->IsSupervised()); @@ -545,9 +550,9 @@ base::ASCIIToUTF16("lima_username"), true, 1, std::string(""), EmptyAccountId()); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("alpha_path"), &entry)); + ProfileAttributesEntry* entry = + storage()->GetProfileAttributesWithPath(GetProfilePath("alpha_path")); + ASSERT_NE(entry, nullptr); // Trigger a ProfileInfoCache re-sort. entry->SetLocalProfileName(base::ASCIIToUTF16("zulu_name"), @@ -562,13 +567,14 @@ EXPECT_EQ(3U, storage()->GetNumberOfProfiles()); - ProfileAttributesEntry* first_entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &first_entry)); + ProfileAttributesEntry* first_entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(first_entry, nullptr); - ProfileAttributesEntry* second_entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path1"), &second_entry)); + ProfileAttributesEntry* second_entry = + storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path1")); + ASSERT_NE(second_entry, nullptr); EXPECT_EQ( base::ASCIIToUTF16("testing_profile_name0"), first_entry->GetName()); @@ -576,8 +582,9 @@ AddCallExpectationsForRemoveProfile(1); storage()->RemoveProfile(GetProfilePath("testing_profile_path1")); VerifyAndResetCallExpectations(); - ASSERT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path1"), &second_entry)); + second_entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path1")); + ASSERT_EQ(second_entry, nullptr); EXPECT_EQ(GetProfilePath("testing_profile_path0"), first_entry->GetPath()); EXPECT_EQ( @@ -589,8 +596,9 @@ profile_info_cache()->RemoveProfile( GetProfilePath("testing_profile_path2")); VerifyAndResetCallExpectations(); - ASSERT_FALSE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path2"), &second_entry)); + second_entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path2")); + ASSERT_EQ(second_entry, nullptr); } TEST_F(ProfileAttributesStorageTest, AccessFromElsewhere) { @@ -598,13 +606,14 @@ DisableObserver(); // No need to test observers in this test. - ProfileAttributesEntry* first_entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &first_entry)); + ProfileAttributesEntry* first_entry = storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(first_entry, nullptr); - ProfileAttributesEntry* second_entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath( - GetProfilePath("testing_profile_path0"), &second_entry)); + ProfileAttributesEntry* second_entry = + storage()->GetProfileAttributesWithPath( + GetProfilePath("testing_profile_path0")); + ASSERT_NE(second_entry, nullptr); first_entry->SetLocalProfileName(base::ASCIIToUTF16("NewName"), /*is_default_name=*/false); @@ -666,8 +675,8 @@ base::FilePath path = GetProfilePath("testing_profile_path0"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(path, &entry)); + ProfileAttributesEntry* entry = storage()->GetProfileAttributesWithPath(path); + ASSERT_NE(entry, nullptr); ASSERT_FALSE(entry->IsSigninRequired()); entry->LockForceSigninProfile(false); @@ -691,8 +700,9 @@ base::FilePath profile_path = GetProfilePath("testing_profile_path0"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + storage()->GetProfileAttributesWithPath(profile_path); + ASSERT_NE(entry, nullptr); ASSERT_EQ(0U, entry->GetAvatarIconIndex()); EXPECT_CALL(observer(), OnProfileAvatarChanged(profile_path)).Times(1); @@ -738,8 +748,9 @@ // |GetHighResAvater| does not contain a cached avatar, so it should return // null. - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + storage()->GetProfileAttributesWithPath(profile_path); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->GetHighResAvatar()); // The previous |GetHighResAvater| starts |LoadAvatarPictureFromPath| async. @@ -847,8 +858,9 @@ // Load the avatar image. storage()->set_disable_avatar_download_for_testing(false); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + storage()->GetProfileAttributesWithPath(profile_path); + ASSERT_NE(entry, nullptr); ASSERT_FALSE(entry->IsUsingGAIAPicture()); EXPECT_CALL(observer(), OnProfileHighResAvatarLoaded(profile_path)).Times(1); entry->GetAvatarIcon(); @@ -953,8 +965,9 @@ AddTestingProfile(); base::FilePath profile_path = GetProfilePath("testing_profile_path0"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage()->GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + storage()->GetProfileAttributesWithPath(profile_path); + ASSERT_NE(entry, nullptr); EXPECT_CALL(observer(), OnProfileAvatarChanged(profile_path)).Times(1); entry->SetAvatarIconIndex(profiles::GetPlaceholderAvatarIndex()); VerifyAndResetCallExpectations();
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.cc b/chrome/browser/profiles/profile_avatar_icon_util.cc index 430632e..84ea1a7d 100644 --- a/chrome/browser/profiles/profile_avatar_icon_util.cc +++ b/chrome/browser/profiles/profile_avatar_icon_util.cc
@@ -429,10 +429,11 @@ #if defined(OS_MAC) gfx::Image GetAvatarIconForNSMenu(const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + if (!entry) { // This can happen if the user deletes the current profile. return gfx::Image(); }
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index dff31edc..c02ee9e5 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -360,9 +360,10 @@ // until this is guaranteed via go/cros-dent-1-lacros. ProfileAttributesStorage& profile_attributes_storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry = nullptr; - if (!profile_attributes_storage.GetProfileAttributesWithPath( - profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage.GetProfileAttributesWithPath( + profile->GetPath()); + if (!entry) { return false; } return entry->GetGAIAId() == init_params->device_account_gaia_id; @@ -1581,19 +1582,17 @@ void ProfileImpl::UpdateSupervisedUserIdInStorage() { ProfileManager* profile_manager = g_browser_process->profile_manager(); - ProfileAttributesEntry* entry; - bool has_entry = profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(GetPath(), &entry); - if (has_entry) + ProfileAttributesEntry* entry = profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(GetPath()); + if (entry) entry->SetSupervisedUserId(GetPrefs()->GetString(prefs::kSupervisedUserId)); } void ProfileImpl::UpdateNameInStorage() { - ProfileAttributesEntry* entry; - bool has_entry = g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(GetPath(), &entry); - if (has_entry) { + ProfileAttributesEntry* entry = g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(GetPath()); + if (entry) { entry->SetLocalProfileName( base::UTF8ToUTF16(GetPrefs()->GetString(prefs::kProfileName)), GetPrefs()->GetBoolean(prefs::kProfileUsingDefaultName)); @@ -1601,11 +1600,10 @@ } void ProfileImpl::UpdateAvatarInStorage() { - ProfileAttributesEntry* entry; - bool has_entry = g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(GetPath(), &entry); - if (has_entry) { + ProfileAttributesEntry* entry = g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(GetPath()); + if (entry) { entry->SetAvatarIconIndex( GetPrefs()->GetInteger(prefs::kProfileAvatarIndex)); entry->SetIsUsingDefaultAvatar( @@ -1616,11 +1614,10 @@ } void ProfileImpl::UpdateIsEphemeralInStorage() { - ProfileAttributesEntry* entry; - bool has_entry = g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(GetPath(), &entry); - if (has_entry) { + ProfileAttributesEntry* entry = g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(GetPath()); + if (entry) { entry->SetIsEphemeral( GetPrefs()->GetBoolean(prefs::kForceEphemeralProfiles)); }
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc index a7f02c6..044d548 100644 --- a/chrome/browser/profiles/profile_info_cache.cc +++ b/chrome/browser/profiles/profile_info_cache.cc
@@ -239,8 +239,8 @@ void ProfileInfoCache::DeleteProfileFromCache( const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - if (!GetProfileAttributesWithPath(profile_path, &entry)) { + ProfileAttributesEntry* entry = GetProfileAttributesWithPath(profile_path); + if (!entry) { NOTREACHED(); return; } @@ -667,20 +667,19 @@ DeleteProfileFromCache(profile_path); } -bool ProfileInfoCache::GetProfileAttributesWithPath( - const base::FilePath& path, ProfileAttributesEntry** entry) { +ProfileAttributesEntry* ProfileInfoCache::GetProfileAttributesWithPath( + const base::FilePath& path) { const auto entry_iter = profile_attributes_entries_.find(path.value()); if (entry_iter == profile_attributes_entries_.end()) - return false; + return nullptr; std::unique_ptr<ProfileAttributesEntry>& current_entry = entry_iter->second; if (!current_entry) { // The profile info is in the cache but its entry isn't created yet, insert // it in the map. - current_entry.reset(new ProfileAttributesEntry()); + current_entry = std::make_unique<ProfileAttributesEntry>(); current_entry->Initialize(this, path, prefs_); } - *entry = current_entry.get(); - return true; + return current_entry.get(); }
diff --git a/chrome/browser/profiles/profile_info_cache.h b/chrome/browser/profiles/profile_info_cache.h index 18fd348..8a7a4b1 100644 --- a/chrome/browser/profiles/profile_info_cache.h +++ b/chrome/browser/profiles/profile_info_cache.h
@@ -121,8 +121,8 @@ void RemoveProfileByAccountId(const AccountId& account_id) override; void RemoveProfile(const base::FilePath& profile_path) override; - bool GetProfileAttributesWithPath(const base::FilePath& path, - ProfileAttributesEntry** entry) override; + ProfileAttributesEntry* GetProfileAttributesWithPath( + const base::FilePath& path) override; void DisableProfileMetricsForTesting() override; void NotifyProfileAuthInfoChanged(const base::FilePath& profile_path);
diff --git a/chrome/browser/profiles/profile_info_cache_unittest.cc b/chrome/browser/profiles/profile_info_cache_unittest.cc index d88b3dd..672e47d 100644 --- a/chrome/browser/profiles/profile_info_cache_unittest.cc +++ b/chrome/browser/profiles/profile_info_cache_unittest.cc
@@ -69,8 +69,8 @@ void ProfileNameVerifierObserver::OnProfileAdded( const base::FilePath& profile_path) { - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); base::string16 profile_name = entry->GetName(); EXPECT_TRUE(profile_names_.find(profile_path) == profile_names_.end()); profile_names_.insert({profile_path, profile_name}); @@ -92,8 +92,8 @@ void ProfileNameVerifierObserver::OnProfileNameChanged( const base::FilePath& profile_path, const base::string16& old_profile_name) { - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); base::string16 new_profile_name = entry->GetName(); EXPECT_TRUE(profile_names_[profile_path] == old_profile_name); profile_names_[profile_path] = new_profile_name; @@ -178,8 +178,8 @@ base::string16(), false, i, supervised_user_id, EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); entry->SetBackgroundStatus(true); base::string16 gaia_name = ASCIIToUTF16(base::StringPrintf("gaia_%ud", i)); entry->SetGAIAName(gaia_name); @@ -214,8 +214,8 @@ base::FilePath profile_path = GetProfilePath(base::StringPrintf("path_%ud", i)); int index = GetCache()->GetIndexOfProfileWithPath(profile_path); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); base::string16 profile_name = ASCIIToUTF16(base::StringPrintf("name_%ud", index)); base::string16 gaia_name = ASCIIToUTF16(base::StringPrintf("gaia_%ud", i)); @@ -235,15 +235,15 @@ GetCache()->AddProfileToCache(profile_path_1, ASCIIToUTF16("Person 1"), std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_1 = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path_1, &entry_1); + ProfileAttributesEntry* entry_1 = + GetCache()->GetProfileAttributesWithPath(profile_path_1); base::string16 profile_name(ASCIIToUTF16("Person 2")); base::FilePath profile_path_2 = GetProfilePath("path_2"); GetCache()->AddProfileToCache(GetProfilePath("path_2"), profile_name, std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_2 = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path_2, &entry_2); + ProfileAttributesEntry* entry_2 = + GetCache()->GetProfileAttributesWithPath(profile_path_2); // Sanity check. EXPECT_TRUE(entry_1->GetGAIAName().empty()); @@ -277,8 +277,8 @@ GetCache()->AddProfileToCache( GetProfilePath("path_1"), ASCIIToUTF16("Person 1"), std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_1 = nullptr; - GetCache()->GetProfileAttributesWithPath(GetProfilePath("path_1"), &entry_1); + ProfileAttributesEntry* entry_1 = + GetCache()->GetProfileAttributesWithPath(GetProfilePath("path_1")); EXPECT_EQ(ASCIIToUTF16("Person 1"), entry_1->GetName()); entry_1->SetGAIAName(ASCIIToUTF16("Patt Smith")); EXPECT_EQ(ASCIIToUTF16("Patt Smith"), entry_1->GetName()); @@ -298,8 +298,8 @@ GetCache()->AddProfileToCache( GetProfilePath("path_2"), ASCIIToUTF16("Person 2"), std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_2 = nullptr; - GetCache()->GetProfileAttributesWithPath(GetProfilePath("path_2"), &entry_2); + ProfileAttributesEntry* entry_2 = + GetCache()->GetProfileAttributesWithPath(GetProfilePath("path_2")); EXPECT_EQ(ASCIIToUTF16("Patt"), entry_1->GetName()); EXPECT_EQ(ASCIIToUTF16("Person 2"), entry_2->GetName()); @@ -323,8 +323,8 @@ GetCache()->AddProfileToCache( GetProfilePath("path_3"), ASCIIToUTF16("Person 3"), std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_3 = nullptr; - GetCache()->GetProfileAttributesWithPath(GetProfilePath("path_3"), &entry_3); + ProfileAttributesEntry* entry_3 = + GetCache()->GetProfileAttributesWithPath(GetProfilePath("path_3")); entry_3->SetGAIAName(ASCIIToUTF16("Patt Smith")); EXPECT_EQ(ASCIIToUTF16("Patt"), entry_1->GetName()); EXPECT_EQ(ASCIIToUTF16("Patt Smith"), entry_3->GetName()); @@ -370,8 +370,8 @@ base::string16 name_2 = ASCIIToUTF16("name_2"); GetCache()->AddProfileToCache(path_2, name_2, std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(path_2, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(path_2); EXPECT_EQ(2u, GetCache()->GetNumberOfProfiles()); GetCache()->DeleteProfileFromCache(path_1); @@ -392,10 +392,10 @@ GetCache()->AddProfileToCache(profile_path_2, ASCIIToUTF16("name_2"), std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_1; - GetCache()->GetProfileAttributesWithPath(profile_path_1, &entry_1); - ProfileAttributesEntry* entry_2; - GetCache()->GetProfileAttributesWithPath(profile_path_2, &entry_2); + ProfileAttributesEntry* entry_1 = + GetCache()->GetProfileAttributesWithPath(profile_path_1); + ProfileAttributesEntry* entry_2 = + GetCache()->GetProfileAttributesWithPath(profile_path_2); base::string16 new_name = ASCIIToUTF16("new_name"); entry_2->SetLocalProfileName(new_name, false); @@ -434,10 +434,10 @@ base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry_1 = nullptr; - GetCache()->GetProfileAttributesWithPath(path_1, &entry_1); - ProfileAttributesEntry* entry_2 = nullptr; - GetCache()->GetProfileAttributesWithPath(path_2, &entry_2); + ProfileAttributesEntry* entry_1 = + GetCache()->GetProfileAttributesWithPath(path_1); + ProfileAttributesEntry* entry_2 = + GetCache()->GetProfileAttributesWithPath(path_2); EXPECT_FALSE(entry_1->GetBackgroundStatus()); EXPECT_FALSE(entry_2->GetBackgroundStatus()); @@ -469,8 +469,8 @@ GetCache()->AddProfileToCache(path_2, ASCIIToUTF16("name_2"), std::string(), base::string16(), false, kDefaultAvatarIndex, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(path_2, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(path_2); // Sanity check. EXPECT_EQ(NULL, GetCache()->GetGAIAPictureOfProfileAtIndex(0)); @@ -574,8 +574,8 @@ GetCache()->AddProfileToCache(profile_path, ASCIIToUTF16("Test"), std::string(), base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_FALSE(entry->IsSupervised()); entry->SetSupervisedUserId(supervised_users::kChildAccountSUID); @@ -583,8 +583,7 @@ EXPECT_EQ(supervised_users::kChildAccountSUID, entry->GetSupervisedUserId()); ResetCache(); - entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + entry = GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_TRUE(entry->IsSupervised()); entry->SetSupervisedUserId(std::string()); @@ -604,8 +603,8 @@ base::string16(), false, 0, std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); gfx::Image gaia_image(gfx::test::CreateImage()); GetCache()->SetGAIAPictureOfProfileAtIndex(0, "GAIA_IMAGE_URL_WITH_SIZE_0", @@ -642,8 +641,8 @@ ->GetPath(); base::FilePath profile_path[] = {path_1, path_2}; for (const base::FilePath& path : profile_path) { - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(path); bool is_supervised = entry->GetName() == supervised_user_name; EXPECT_EQ(is_supervised, entry->IsSupervised()); std::string supervised_user_id = @@ -679,8 +678,8 @@ GetCache()->AddProfileToCache(profile_path, profile_name, std::string(), base::string16(), false, i, "", EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_TRUE(entry); EXPECT_EQ(profile_name, entry->GetName()); } @@ -752,8 +751,8 @@ // impossible to check because GetProfileAttributesWithPath is called during // profile creation. - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_EQ( entry, GetCache()->profile_attributes_entries_[profile_path.value()].get()); @@ -775,9 +774,9 @@ ASSERT_EQ(0u, GetCache()->profile_attributes_entries_.count( profile_path.value())); - ProfileAttributesEntry* entry = nullptr; - EXPECT_FALSE(GetCache()->GetProfileAttributesWithPath(profile_path, - &entry)); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); + EXPECT_EQ(entry, nullptr); ASSERT_EQ(0u, GetCache()->profile_attributes_entries_.count( profile_path.value())); } @@ -804,12 +803,11 @@ for (size_t i = 0; i < base::size(kTestCases); ++i) { base::FilePath profile_path = GetProfilePath(kTestCases[i].profile_path); base::string16 profile_name = ASCIIToUTF16(kTestCases[i].profile_name); - entry = nullptr; GetCache()->AddProfileToCache(profile_path, profile_name, std::string(), base::string16(), false, i, "", EmptyAccountId()); - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + entry = GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_TRUE(entry); entry->SetIsUsingDefaultName(kTestCases[i].is_using_default_name); } @@ -821,12 +819,11 @@ GetCache(); ProfileInfoCache::SetLegacyProfileMigrationForTesting(false); - entry = nullptr; - GetCache()->GetProfileAttributesWithPath( - GetProfilePath(kTestCases[4].profile_path), &entry); + entry = GetCache()->GetProfileAttributesWithPath( + GetProfilePath(kTestCases[4].profile_path)); EXPECT_EQ(ASCIIToUTF16(kTestCases[4].profile_name), entry->GetName()); - GetCache()->GetProfileAttributesWithPath( - GetProfilePath(kTestCases[10].profile_path), &entry); + entry = GetCache()->GetProfileAttributesWithPath( + GetProfilePath(kTestCases[10].profile_path)); EXPECT_EQ(ASCIIToUTF16(kTestCases[10].profile_name), entry->GetName()); // Legacy profile names like "Default Profile" and "First user" should be @@ -847,8 +844,7 @@ std::set<base::string16> actual_profile_names; for (auto* path : profile_path) { - entry = nullptr; - GetCache()->GetProfileAttributesWithPath(GetProfilePath(path), &entry); + entry = GetCache()->GetProfileAttributesWithPath(GetProfilePath(path)); actual_profile_names.insert(entry->GetName()); } EXPECT_EQ(actual_profile_names, expected_profile_names); @@ -919,11 +915,11 @@ for (size_t i = 0; i < base::size(kTestCases); ++i) { base::FilePath profile_path = GetProfilePath(kTestCases[i].profile_path); base::string16 profile_name = ASCIIToUTF16(kTestCases[i].profile_name); - ProfileAttributesEntry* entry = nullptr; GetCache()->AddProfileToCache(profile_path, profile_name, std::string(), base::string16(), false, i, "", EmptyAccountId()); - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_TRUE(entry); entry->SetIsUsingDefaultName(true); } @@ -935,8 +931,8 @@ for (size_t i = 0; i < base::size(kTestCases); ++i) { base::FilePath profile_path = GetProfilePath(kTestCases[i].profile_path); base::string16 profile_name = ASCIIToUTF16(kTestCases[i].profile_name); - ProfileAttributesEntry* entry = nullptr; - GetCache()->GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + GetCache()->GetProfileAttributesWithPath(profile_path); EXPECT_TRUE(entry); EXPECT_EQ(profile_name, entry->GetName()); }
diff --git a/chrome/browser/profiles/profile_list_desktop_browsertest.cc b/chrome/browser/profiles/profile_list_desktop_browsertest.cc index 9ac4fd1..bfeecb8 100644 --- a/chrome/browser/profiles/profile_list_desktop_browsertest.cc +++ b/chrome/browser/profiles/profile_list_desktop_browsertest.cc
@@ -78,9 +78,9 @@ Profile* current_profile = browser()->profile(); ProfileAttributesStorage& storage = profile_manager->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(storage.GetProfileAttributesWithPath(current_profile->GetPath(), - &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(current_profile->GetPath()); + ASSERT_NE(entry, nullptr); std::unique_ptr<AvatarMenu> menu = CreateAvatarMenu(&storage); menu->RebuildMenu();
diff --git a/chrome/browser/profiles/profile_list_desktop_unittest.cc b/chrome/browser/profiles/profile_list_desktop_unittest.cc index 587a0482e..0d92700 100644 --- a/chrome/browser/profiles/profile_list_desktop_unittest.cc +++ b/chrome/browser/profiles/profile_list_desktop_unittest.cc
@@ -214,9 +214,10 @@ // Change the name of the first profile, and this triggers the resorting of // the avatar menu. - ProfileAttributesEntry* entry; - ASSERT_TRUE(manager()->profile_attributes_storage()-> - GetProfileAttributesWithPath(profile1->GetPath(), &entry)); + ProfileAttributesEntry* entry = + manager()->profile_attributes_storage()->GetProfileAttributesWithPath( + profile1->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetLocalProfileName(ASCIIToUTF16(newname1), false); EXPECT_EQ(1, change_count());
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index 5b983a9..86f6283 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -344,9 +344,9 @@ // Helper function for ScheduleForcedEphemeralProfileForDeletion. bool IsRegisteredAsEphemeral(ProfileAttributesStorage* storage, const base::FilePath& profile_dir) { - ProfileAttributesEntry* entry = nullptr; - return storage->GetProfileAttributesWithPath(profile_dir, &entry) && - entry->IsEphemeral(); + ProfileAttributesEntry* entry = + storage->GetProfileAttributesWithPath(profile_dir); + return entry && entry->IsEphemeral(); } #endif @@ -584,9 +584,9 @@ bool ProfileManager::LoadProfileByPath(const base::FilePath& profile_path, bool incognito, ProfileLoadedCallback callback) { - ProfileAttributesEntry* entry = nullptr; - if (!GetProfileAttributesStorage().GetProfileAttributesWithPath(profile_path, - &entry)) { + ProfileAttributesEntry* entry = + GetProfileAttributesStorage().GetProfileAttributesWithPath(profile_path); + if (!entry) { std::move(callback).Run(nullptr); LOG(ERROR) << "Loading a profile path that does not exist"; return false; @@ -941,8 +941,9 @@ return; ProfileAttributesStorage& storage = GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - if (storage.GetProfileAttributesWithPath(profile_dir, &entry)) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_dir); + if (entry) { storage.RecordDeletedProfileState(entry); } ProfileMetrics::LogProfileDeleteUser(deletion_source); @@ -1104,8 +1105,9 @@ const bool profile_is_child = profile->IsChild(); const bool profile_is_new = profile->IsNewProfile(); if (!profile_is_new && profile_is_child != user_is_child) { - ProfileAttributesEntry* entry; - if (storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { LOG(WARNING) << "Profile child status has changed."; storage.RemoveProfile(profile->GetPath()); } @@ -1144,17 +1146,16 @@ profile_name = l10n_util::GetStringUTF8(IDS_PROFILES_GUEST_PROFILE_NAME); avatar_index = 0; } else { - ProfileAttributesEntry* entry; - bool has_entry = storage.GetProfileAttributesWithPath(profile->GetPath(), - &entry); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); // If the profile attributes storage has an entry for this profile, use the // data in the profile attributes storage. - if (has_entry) { + if (entry) { avatar_index = entry->GetAvatarIconIndex(); profile_name = base::UTF16ToUTF8(entry->GetLocalProfileName()); supervised_user_id = entry->GetSupervisedUserId(); } else if (profile->GetPath() == - profiles::GetDefaultProfileDir(user_data_dir())) { + profiles::GetDefaultProfileDir(user_data_dir())) { avatar_index = profiles::GetPlaceholderAvatarIndex(); #if !BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OS_ANDROID) profile_name = @@ -1451,10 +1452,10 @@ // Set the block extensions bit on the ExtensionService. There likely are no // blockable extensions to block. - ProfileAttributesEntry* entry; - bool has_entry = GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry); - if (has_entry && entry->IsSigninRequired()) { + ProfileAttributesEntry* entry = + GetProfileAttributesStorage().GetProfileAttributesWithPath( + profile->GetPath()); + if (entry && entry->IsSigninRequired()) { extensions::ExtensionSystem::Get(profile) ->extension_service() ->BlockAllExtensions(); @@ -1757,9 +1758,9 @@ sync_service->StopAndClear(); } - ProfileAttributesEntry* entry; - bool has_entry = storage.GetProfileAttributesWithPath(profile_dir, &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_dir); + DCHECK(entry); ProfileMetrics::LogProfileDelete(entry->IsAuthenticated()); // Some platforms store passwords in keychains. They should be removed. scoped_refptr<password_manager::PasswordStore> password_store = @@ -1890,13 +1891,12 @@ base::string16 username = base::UTF8ToUTF16(account_info.email); ProfileAttributesStorage& storage = GetProfileAttributesStorage(); - // |entry| and |has_entry| below are put inside a pair of brackets for - // scoping, to avoid potential clashes of variable names. + // |entry| below is put inside a pair of brackets for scoping, to avoid + // potential clashes of variable names. { - ProfileAttributesEntry* entry; - bool has_entry = storage.GetProfileAttributesWithPath(profile->GetPath(), - &entry); - if (has_entry) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { #if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) bool was_authenticated_status = entry->IsAuthenticated(); #endif @@ -1956,10 +1956,9 @@ username, is_consented_primary_account, icon_index, supervised_user_id, account_id); - ProfileAttributesEntry* entry; - bool has_entry = - storage.GetProfileAttributesWithPath(profile->GetPath(), &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + DCHECK(entry); if (profile->IsEphemeralGuestProfile()) entry->SetIsGuest(true); @@ -2130,9 +2129,10 @@ if (profile_path_base != GetLastUsedProfileName()) profiles::SetLastUsedProfile(profile_path_base); - ProfileAttributesEntry* entry; - if (GetProfileAttributesStorage(). - GetProfileAttributesWithPath(last_active->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + GetProfileAttributesStorage().GetProfileAttributesWithPath( + last_active->GetPath()); + if (entry) { entry->SetActiveTimeToNow(); } }
diff --git a/chrome/browser/profiles/profile_manager_browsertest.cc b/chrome/browser/profiles/profile_manager_browsertest.cc index bf53116..871afec 100644 --- a/chrome/browser/profiles/profile_manager_browsertest.cc +++ b/chrome/browser/profiles/profile_manager_browsertest.cc
@@ -874,9 +874,10 @@ EXPECT_TRUE(guest->IsEphemeralGuestProfile()); ProfileManager* profile_manager = g_browser_process->profile_manager(); - ProfileAttributesEntry* entry; - EXPECT_TRUE(profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(guest->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(guest->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_TRUE(entry->IsGuest()); EXPECT_TRUE(entry->IsEphemeral()); }
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc index 2d4c20e..2e00af7 100644 --- a/chrome/browser/profiles/profile_manager_unittest.cc +++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -220,11 +220,11 @@ // Update IsEphemeral in attributes storage, normally it happened via // kForceEphemeralProfiles pref change event routed to // ProfileImpl::UpdateIsEphemeralInStorage(). - ProfileAttributesEntry* entry; ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - EXPECT_TRUE( - storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsEphemeral(true); } @@ -537,13 +537,15 @@ #else EXPECT_EQ(1u, storage.GetNumberOfProfiles()); #endif - ProfileAttributesEntry* entry; + ProfileAttributesEntry* entry = nullptr; #if BUILDFLAG(ENABLE_SUPERVISED_USERS) - ASSERT_TRUE(storage.GetProfileAttributesWithPath(supervised_path, &entry)); + entry = storage.GetProfileAttributesWithPath(supervised_path); + ASSERT_NE(entry, nullptr); EXPECT_TRUE(entry->IsOmitted()); #endif - ASSERT_TRUE(storage.GetProfileAttributesWithPath(nonsupervised_path, &entry)); + entry = storage.GetProfileAttributesWithPath(nonsupervised_path); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsOmitted()); } @@ -774,9 +776,9 @@ size_t avatar_index = profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(dest_path, &entry)); + ProfileAttributesEntry* entry = profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(dest_path); + ASSERT_NE(entry, nullptr); // Check if the profile prefs are the same as the cache prefs EXPECT_EQ(profile_name, base::UTF16ToUTF8(entry->GetName())); @@ -1726,16 +1728,16 @@ const base::string16 email2(ASCIIToUTF16("user2@gmail.com")); const base::string16 email3(ASCIIToUTF16("user3@gmail.com")); - ProfileAttributesEntry* entry; + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile1->GetPath()); - ASSERT_TRUE(storage.GetProfileAttributesWithPath(profile1->GetPath(), - &entry)); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo("12345", email1, true); entry->SetGAIAGivenName(base::string16()); entry->SetGAIAName(base::string16()); - ASSERT_TRUE(storage.GetProfileAttributesWithPath(profile2->GetPath(), - &entry)); + entry = storage.GetProfileAttributesWithPath(profile2->GetPath()); + ASSERT_NE(entry, nullptr); #if !BUILDFLAG(IS_CHROMEOS_ASH) // (Default profile, Batman,..) are legacy profile names on Desktop and are // not considered default profile names for newly created profiles. @@ -1748,8 +1750,8 @@ entry->SetGAIAGivenName(base::string16()); entry->SetGAIAName(base::string16()); - ASSERT_TRUE(storage.GetProfileAttributesWithPath(profile3->GetPath(), - &entry)); + entry = storage.GetProfileAttributesWithPath(profile3->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo("34567", email3, true); entry->SetGAIAGivenName(base::string16()); @@ -1766,8 +1768,8 @@ // Adding a Gaia name to a profile that previously had a default name should // start displaying it. const base::string16 gaia_given_name(ASCIIToUTF16("Robin")); - ASSERT_TRUE(storage.GetProfileAttributesWithPath(profile1->GetPath(), - &entry)); + entry = storage.GetProfileAttributesWithPath(profile1->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetGAIAGivenName(gaia_given_name); EXPECT_EQ(gaia_given_name, profiles::GetAvatarNameForProfile(profile1->GetPath()));
diff --git a/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc b/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc index 5e3dcd2..302c2d95 100644 --- a/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc +++ b/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc
@@ -311,9 +311,9 @@ void RenameProfile(const base::Location& location, const base::FilePath& profile_path, const base::string16& new_profile_name) { - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_attributes_storage_-> - GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path); + ASSERT_NE(entry, nullptr); ASSERT_NE(entry->GetLocalProfileName(), new_profile_name); entry->SetLocalProfileName(new_profile_name, /*is_default_name=*/false); task_environment_.RunUntilIdle(); @@ -790,9 +790,10 @@ // Ensure that changing the avatar icon and the name does not result in a // shortcut being created. - ProfileAttributesEntry* entry_3; - ASSERT_TRUE(profile_attributes_storage_-> - GetProfileAttributesWithPath(profile_3_path_, &entry_3)); + ProfileAttributesEntry* entry_3 = + profile_attributes_storage_->GetProfileAttributesWithPath( + profile_3_path_); + ASSERT_NE(entry_3, nullptr); entry_3->SetAvatarIconIndex(3u); task_environment_.RunUntilIdle(); EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_3_name_)); @@ -805,9 +806,10 @@ // Rename the second profile and ensure its shortcut got renamed. const base::string16 new_profile_2_name = L"New Name 2"; - ProfileAttributesEntry* entry_2; - ASSERT_TRUE(profile_attributes_storage_-> - GetProfileAttributesWithPath(profile_2_path_, &entry_2)); + ProfileAttributesEntry* entry_2 = + profile_attributes_storage_->GetProfileAttributesWithPath( + profile_2_path_); + ASSERT_NE(entry_2, nullptr); entry_2->SetLocalProfileName(new_profile_2_name, /*is_default_name=*/false); task_environment_.RunUntilIdle(); EXPECT_FALSE(ProfileShortcutExistsAtDefaultPath(profile_2_name_)); @@ -928,9 +930,10 @@ EXPECT_EQ(badged_icon_1, badged_icon_2); // Change profile 1's icon. - ProfileAttributesEntry* entry_1; - ASSERT_TRUE(profile_attributes_storage_-> - GetProfileAttributesWithPath(profile_1_path_, &entry_1)); + ProfileAttributesEntry* entry_1 = + profile_attributes_storage_->GetProfileAttributesWithPath( + profile_1_path_); + ASSERT_NE(entry_1, nullptr); entry_1->SetAvatarIconIndex(1u); task_environment_.RunUntilIdle();
diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc index 57f7d7d9..7cb9e51 100644 --- a/chrome/browser/profiles/profile_shortcut_manager_win.cc +++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc
@@ -811,9 +811,9 @@ ProfileAttributesStorage& storage = profile_manager_->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - bool has_entry = storage.GetProfileAttributesWithPath(profile_path, &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_path); + DCHECK(entry); // The shortcut shouldn't include the profile name if there is only 1 profile. base::string16 shortcut_profile_name; @@ -925,10 +925,10 @@ BrowserThread::CurrentlyOn(BrowserThread::UI)); ProfileAttributesStorage& storage = profile_manager_->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - bool has_entry = storage.GetProfileAttributesWithPath(profile_path, &entry); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_path); - if (!has_entry) + if (!entry) return; bool remove_badging = storage.GetNumberOfProfiles() == 1u;
diff --git a/chrome/browser/profiles/profile_theme_update_service.cc b/chrome/browser/profiles/profile_theme_update_service.cc index 7437cea6..16c153f 100644 --- a/chrome/browser/profiles/profile_theme_update_service.cc +++ b/chrome/browser/profiles/profile_theme_update_service.cc
@@ -36,10 +36,10 @@ ProfileThemeUpdateService::~ProfileThemeUpdateService() = default; void ProfileThemeUpdateService::UpdateProfileThemeColors() { - ProfileAttributesEntry* entry = nullptr; - bool has_entry = profile_attributes_storage_->GetProfileAttributesWithPath( - profile_->GetPath(), &entry); - if (!has_entry) + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath( + profile_->GetPath()); + if (!entry) return; if (!theme_service_->UsingAutogeneratedTheme()) {
diff --git a/chrome/browser/profiles/profile_theme_update_service_browsertest.cc b/chrome/browser/profiles/profile_theme_update_service_browsertest.cc index 15b83934..487a0c4 100644 --- a/chrome/browser/profiles/profile_theme_update_service_browsertest.cc +++ b/chrome/browser/profiles/profile_theme_update_service_browsertest.cc
@@ -28,13 +28,13 @@ } ProfileAttributesEntry* GetProfileAttributesEntry() { - ProfileAttributesEntry* entry; CHECK(browser()); CHECK(browser()->profile()); - CHECK(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(browser()->profile()->GetPath(), - &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(browser()->profile()->GetPath()); + CHECK(entry); return entry; }
diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc index ae751d549..a8eb25c 100644 --- a/chrome/browser/profiles/profile_window.cc +++ b/chrome/browser/profiles/profile_window.cc
@@ -207,10 +207,11 @@ #if !BUILDFLAG(IS_CHROMEOS_ASH) if (!profile->IsGuestSession() && !profile->IsEphemeralGuestProfile()) { - ProfileAttributesEntry* entry; - if (g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry) && - entry->IsSigninRequired()) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (entry && entry->IsSigninRequired()) { UserManager::Show(profile->GetPath(), profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); return; @@ -313,10 +314,10 @@ void LockBrowserCloseSuccess(const base::FilePath& profile_path) { ProfileManager* profile_manager = g_browser_process->profile_manager(); - ProfileAttributesEntry* entry; - bool has_entry = profile_manager->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile_path, &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + DCHECK(entry); entry->SetIsSigninRequired(true); #if BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/profiles/profile_window_browsertest.cc b/chrome/browser/profiles/profile_window_browsertest.cc index 272a1ab..ec3686a 100644 --- a/chrome/browser/profiles/profile_window_browsertest.cc +++ b/chrome/browser/profiles/profile_window_browsertest.cc
@@ -381,10 +381,11 @@ IN_PROC_BROWSER_TEST_F(ProfileWindowBrowserTest, MAYBE_OpenBrowserWindowForProfileWithSigninRequired) { Profile* profile = browser()->profile(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); size_t num_browsers = BrowserList::GetInstance()->size(); base::RunLoop run_loop;
diff --git a/chrome/browser/profiles/profiles_state.cc b/chrome/browser/profiles/profiles_state.cc index 9032641..d1ebe94b 100644 --- a/chrome/browser/profiles/profiles_state.cc +++ b/chrome/browser/profiles/profiles_state.cc
@@ -106,8 +106,9 @@ ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - if (!storage.GetProfileAttributesWithPath(profile_path, &entry)) + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_path); + if (!entry) return l10n_util::GetStringUTF16(IDS_SINGLE_PROFILE_DISPLAY_NAME); const base::string16 profile_name_to_display = entry->GetName(); @@ -145,9 +146,11 @@ void UpdateProfileName(Profile* profile, const base::string16& new_profile_name) { - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (!entry) { return; } @@ -196,9 +199,11 @@ } bool IsProfileLocked(const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + if (!entry) { return false; } @@ -225,13 +230,13 @@ if (active_profile_path == guest_path) return true; - ProfileAttributesEntry* entry; - bool has_entry = - g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(active_profile_path, &entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(active_profile_path); - // |has_entry| may be false if a profile is specified on the command line. - if (has_entry && !entry->IsSigninRequired()) + // |entry| may be false if a profile is specified on the command line. + if (entry && !entry->IsSigninRequired()) return false; SetLastUsedProfile(guest_path.BaseName().MaybeAsASCII());
diff --git a/chrome/browser/profiles/reporting_util.cc b/chrome/browser/profiles/reporting_util.cc index 083293f7..8a18fba 100644 --- a/chrome/browser/profiles/reporting_util.cc +++ b/chrome/browser/profiles/reporting_util.cc
@@ -119,8 +119,9 @@ ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry = nullptr; - if (storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { context.SetStringPath("profile.profileName", entry->GetName()); context.SetStringPath("profile.gaiaEmail", entry->GetUserName()); }
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc index a69ed12b..b5919395 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -1267,9 +1267,9 @@ std::vector<Profile*> profiles_in_menu; for (int i = 0; i < num_profiles; ++i) { Profile* profile = CreateSecondaryProfile(i); - ProfileAttributesEntry* entry; - ASSERT_TRUE( - storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); // Open a browser window for the profile if and only if the profile is not // omitted nor needing signin. if (std::binary_search(profiles_omit.begin(), profiles_omit.end(), i)) {
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb index 8d92e2b..eb2f1e6 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_es.xtb
@@ -998,7 +998,7 @@ <translation id="8463645336674919227">Saliendo del error gramatical</translation> <translation id="847040613207937740">No hay ninguna casilla posterior</translation> <translation id="8473540203671727883">Enunciar el texto que está debajo del ratón</translation> -<translation id="8476408756881832830">Detener la reproducción cuando ChromeVox habla</translation> +<translation id="8476408756881832830">Pausar la reproducción cuando ChromeVox habla</translation> <translation id="8476508772960940536">vista general de la ventana</translation> <translation id="8480873377842220259">Ahora vas a aprender algunas combinaciones de teclas básicas para desplazarte. Para desplazarte por la pantalla, mantén pulsada la tecla de búsqueda y pulsa las teclas de flecha. Para continuar, pulsa la tecla de búsqueda + flecha hacia la derecha.</translation> <translation id="8503360654911991865">Disminuye granularidad de navegación</translation>
diff --git a/chrome/browser/resources/chromeos/login/BUILD.gn b/chrome/browser/resources/chromeos/login/BUILD.gn index f311b57..2e88a66a 100644 --- a/chrome/browser/resources/chromeos/login/BUILD.gn +++ b/chrome/browser/resources/chromeos/login/BUILD.gn
@@ -55,6 +55,7 @@ ":recommend_apps", ":saml_confirm_password", ":screen_tpm_error", + ":screen_wrong_hwid", ":sync_consent", ":update_required_card", ":user_creation", @@ -405,6 +406,15 @@ ] } +js_library("screen_wrong_hwid") { + deps = [ + "components:login_screen_behavior", + "components/oobe_adaptive_dialog:oobe_adaptive_dialog", + "components/oobe_dialog_host_behavior:oobe_dialog_host_behavior", + "components/oobe_i18n_behavior:oobe_i18n_behavior", + ] +} + js_library("sync_consent") { deps = [ "components/oobe_dialog:oobe_dialog",
diff --git a/chrome/browser/resources/chromeos/login/components/html-echo.css b/chrome/browser/resources/chromeos/login/components/html-echo.css deleted file mode 100644 index 00d841d..0000000 --- a/chrome/browser/resources/chromeos/login/components/html-echo.css +++ /dev/null
@@ -1,8 +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. */ - -:host { - color: var(--oobe-text-color); - @apply --oobe-default-font; -}
diff --git a/chrome/browser/resources/chromeos/login/components/html-echo.html b/chrome/browser/resources/chromeos/login/components/html-echo.html index adcc559e..166f537 100644 --- a/chrome/browser/resources/chromeos/login/components/html-echo.html +++ b/chrome/browser/resources/chromeos/login/components/html-echo.html
@@ -19,7 +19,6 @@ --> <dom-module id="html-echo"> <template> - <link rel="stylesheet" href="html-echo.css"> <span id="echo"></span> </template> </dom-module>
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_icons.html b/chrome/browser/resources/chromeos/login/components/oobe_icons.html index 4d74cda1..a5e2cea 100644 --- a/chrome/browser/resources/chromeos/login/components/oobe_icons.html +++ b/chrome/browser/resources/chromeos/login/components/oobe_icons.html
@@ -66,11 +66,6 @@ <path d="M-3-3h32v32H-3z"></path> <path fill="#1A73E8" fill-rule="nonzero" d="M22.52 14.248c.048-.4.08-.816.08-1.248 0-.432-.032-.848-.096-1.248l2.704-2.112a.661.661 0 0 0 .16-.816l-2.56-4.432a.65.65 0 0 0-.784-.288l-3.184 1.28a9.374 9.374 0 0 0-2.16-1.248L16.2.744A.639.639 0 0 0 15.56.2h-5.12a.623.623 0 0 0-.624.544l-.48 3.392a9.625 9.625 0 0 0-2.16 1.248l-3.184-1.28a.633.633 0 0 0-.784.288L.648 8.824a.62.62 0 0 0 .16.816l2.704 2.112c-.064.4-.112.832-.112 1.248 0 .416.032.848.096 1.248L.792 16.36a.661.661 0 0 0-.16.816l2.56 4.432a.65.65 0 0 0 .784.288l3.184-1.28a9.374 9.374 0 0 0 2.16 1.248l.48 3.392a.65.65 0 0 0 .64.544h5.12c.32 0 .592-.224.624-.544l.48-3.392a9.625 9.625 0 0 0 2.16-1.248l3.184 1.28c.288.112.624 0 .784-.288l2.56-4.432a.62.62 0 0 0-.16-.816l-2.672-2.112zM13 17.8c-2.64 0-4.8-2.16-4.8-4.8 0-2.64 2.16-4.8 4.8-4.8 2.64 0 4.8 2.16 4.8 4.8 0 2.64-2.16 4.8-4.8 4.8z"></path> </g> - <g id="computer" fill="none" fill-rule="evenodd"> - <path d="M0-4h32v32H0z"></path> - <path fill="#1A73E8" fill-rule="nonzero"d="M29 20V0H3v20H0v3h32v-3h-3zm-10.333 0h-5.334v-1.333h5.334V20zM26 16H6V3h20v13z"></path> - <path fill="#1A73E8" d="M16.97 8.129L16 5l-.97 3.129H12l2.47 1.836L13.53 13 16 11.123 18.47 13l-.94-3.035L20 8.129z"></path> - </g> <g id="chromebook"> <path style=" stroke:none;fill-rule:nonzero;fill:rgb(35.294118%,35.294118%,35.294118%);fill-opacity:1;" d="M 26.667969 22.667969 C 28.132812 22.667969 29.320312 21.464844 29.320312 20 L 29.332031 6.667969 C 29.332031 5.199219 28.132812 4 26.667969 4 L 5.332031 4 C 3.867188 4 2.667969 5.199219 2.667969 6.667969 L 2.667969 20 C 2.667969 21.464844 3.867188 22.667969 5.332031 22.667969 Z M 5.332031 6.667969 L 26.667969 6.667969 L 26.667969 20 L 5.332031 20 Z M 6.226562 24 L 1.332031 24 L 1.332031 26.667969 L 30.667969 26.667969 L 30.667969 24 L 25.773438 24 "> </path> @@ -176,11 +171,6 @@ <path d="M0 0h64v64H0z"></path> <path fill="#1A73E8" fill-rule="nonzero" d="M51.04 34.496c.096-.8.16-1.632.16-2.496 0-.864-.064-1.696-.192-2.496l5.408-4.224c.48-.384.608-1.088.32-1.632l-5.12-8.864c-.32-.576-.992-.768-1.568-.576l-6.368 2.56c-1.344-1.024-2.752-1.856-4.32-2.496l-.96-6.784A1.277 1.277 0 0 0 37.12 6.4H26.88c-.64 0-1.152.448-1.248 1.088l-.96 6.784c-1.568.64-3.008 1.504-4.32 2.496l-6.368-2.56a1.265 1.265 0 0 0-1.568.576l-5.12 8.864c-.32.576-.192 1.248.32 1.632l5.408 4.224c-.128.8-.224 1.664-.224 2.496 0 .832.064 1.696.192 2.496L7.584 38.72c-.48.384-.608 1.088-.32 1.632l5.12 8.864c.32.576.992.768 1.568.576l6.368-2.56c1.344 1.024 2.752 1.856 4.32 2.496l.96 6.784c.128.64.64 1.088 1.28 1.088h10.24c.64 0 1.184-.448 1.248-1.088l.96-6.784c1.568-.64 3.008-1.504 4.32-2.496l6.368 2.56c.576.224 1.248 0 1.568-.576l5.12-8.864c.32-.576.192-1.248-.32-1.632l-5.344-4.224zM32 41.6c-5.28 0-9.6-4.32-9.6-9.6 0-5.28 4.32-9.6 9.6-9.6 5.28 0 9.6 4.32 9.6 9.6 0 5.28-4.32 9.6-9.6 9.6z"></path> </g> - <g id="computer" fill="none" fill-rule="evenodd"> - <path d="M0 0h64v64H0z"></path> - <path fill="#1A73E8" fill-rule="nonzero" d="M58 48V8H6v40H0v6h64v-6h-6zm-20.667 0H26.667v-2.667h10.666V48zM52 40H12V14h40v26z"></path> - <path fill="#1A73E8" d="M33.94 24.258L32 18l-1.94 6.258H24l4.94 3.672L27.06 34 32 30.245 36.94 34l-1.88-6.07L40 24.258z"></path> - </g> <g id="chromebook"> <path style=" stroke:none;fill-rule:nonzero;fill:rgb(35.294118%,35.294118%,35.294118%);fill-opacity:1;" d="M 53.332031 45.332031 C 56.265625 45.332031 58.640625 42.933594 58.640625 40 L 58.667969 13.332031 C 58.667969 10.398438 56.265625 8 53.332031 8 L 10.667969 8 C 7.734375 8 5.332031 10.398438 5.332031 13.332031 L 5.332031 40 C 5.332031 42.933594 7.734375 45.332031 10.667969 45.332031 Z M 10.667969 13.332031 L 53.332031 13.332031 L 53.332031 40 L 10.667969 40 Z M 12.453125 48 L 2.667969 48 L 2.667969 53.332031 L 61.332031 53.332031 L 61.332031 48 L 51.546875 48 "> </path>
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/BUILD.gn b/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/BUILD.gn new file mode 100644 index 0000000..1150036f --- /dev/null +++ b/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/BUILD.gn
@@ -0,0 +1,17 @@ +# Copyright 2021 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("//third_party/closure_compiler/compile_js.gni") + +js_type_check("closure_compile") { + deps = [ ":oobe_loading_dialog" ] +} + +js_library("oobe_loading_dialog") { + deps = [ + "../oobe_content_dialog:oobe_content_dialog", + "../oobe_dialog_host_behavior:oobe_dialog_host_behavior", + "../oobe_i18n_behavior:oobe_i18n_behavior", + ] +}
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.html b/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.html new file mode 100644 index 0000000..a21b4acd --- /dev/null +++ b/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.html
@@ -0,0 +1,40 @@ +<!-- Copyright 2021 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. --> + +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html"> + +<link rel="import" href="/components/common_styles.html"> +<link rel="import" href="/components/oobe_i18n_behavior.html"> +<link rel="import" href="/components/oobe_content_dialog.html"> +<link rel="import" href="/components/oobe_dialog_host_behavior.html"> + +<dom-module id="oobe-loading-dialog"> + <template> + <style include="oobe-dialog-host"> + paper-spinner-lite { + height: 38px; + margin-bottom: 28px; + width: 38px; + } + + #comment { + color: #747474; + } + </style> + <oobe-content-dialog role="dialog" no-footer-padding> + <div slot="content" class="flex layout vertical center center-justified"> + <paper-spinner-lite dir="ltr" active></paper-spinner-lite> + <div id="comment" aria-live="polite" class="focus-on-show" + aria-label$="[[i18nDynamic(locale, textKey)]]"> + [[i18nDynamic(locale, textKey)]] + </div> + </div> + </oobe-content-dialog> + </template> + <script src="oobe_loading_dialog.js"></script> +</dom-module> +
diff --git a/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.js b/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.js new file mode 100644 index 0000000..d2fdce82 --- /dev/null +++ b/chrome/browser/resources/chromeos/login/components/oobe_loading_dialog/oobe_loading_dialog.js
@@ -0,0 +1,15 @@ +// Copyright 2021 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. + +Polymer({ + is: 'oobe-loading-dialog', + + behaviors: [OobeI18nBehavior, OobeDialogHostBehavior], + + properties: { + textKey: { + type: String, + }, + }, +});
diff --git a/chrome/browser/resources/chromeos/login/components/throbber_notice/throbber_notice.html b/chrome/browser/resources/chromeos/login/components/throbber_notice/throbber_notice.html index 96d570eb..9d23d26 100644 --- a/chrome/browser/resources/chromeos/login/components/throbber_notice/throbber_notice.html +++ b/chrome/browser/resources/chromeos/login/components/throbber_notice/throbber_notice.html
@@ -9,6 +9,7 @@ <link rel="import" href="/components/oobe_i18n_behavior.html"> +<!-- TODO(1172980): Delete once oobe-loading-dialog replaces throbber-notice --> <dom-module id="throbber-notice"> <template> <style>
diff --git a/chrome/browser/resources/chromeos/login/demo_setup.html b/chrome/browser/resources/chromeos/login/demo_setup.html index 8fed4a72..9a8735e 100644 --- a/chrome/browser/resources/chromeos/login/demo_setup.html +++ b/chrome/browser/resources/chromeos/login/demo_setup.html
@@ -41,15 +41,15 @@ aria-label$="[[i18nDynamic(locale, 'demoSetupErrorScreenTitle')]]" for-step="error"> <hd-iron-icon slot="icon" - icon1x="oobe-32:computer" icon2x="oobe-64:computer"> + icon1x="oobe-32:warning" icon2x="oobe-64:warning"> </hd-iron-icon> <h1 slot="title"> [[i18nDynamic(locale, 'demoSetupErrorScreenTitle')]] </h1> <div slot="subtitle" id="errorMessage">[[errorMessage_]]</div> <div slot="content" class="flex layout vertical center center-justified"> - <img srcset="images/alert-illustration_1x.svg 1x, - images/alert-illustration_2x.svg 2x"> + <img srcset="images/1x/error.svg 1x, + images/2x/error.svg 2x"> </div> <div slot="back-navigation"> <oobe-back-button inverse on-click="onCloseClicked_" id="back"
diff --git a/chrome/browser/resources/chromeos/login/enterprise_enrollment.html b/chrome/browser/resources/chromeos/login/enterprise_enrollment.html index 96520429..4003f72 100644 --- a/chrome/browser/resources/chromeos/login/enterprise_enrollment.html +++ b/chrome/browser/resources/chromeos/login/enterprise_enrollment.html
@@ -79,14 +79,14 @@ <oobe-dialog id="step-error" has-buttons role="alert" for-step="error, attribute-prompt-error, active-directory-join-error"> <hd-iron-icon slot="oobe-icon" - icon1x="oobe-32:enterprise" - icon2x="oobe-64:enterprise"></hd-iron-icon> + icon1x="oobe-32:warning" + icon2x="oobe-64:warning"></hd-iron-icon> <h1 slot="title">[[i18nDynamic(locale, 'oauthEnrollErrorTitle')]]</h1> <div id="errorMsg" slot="subtitle">[[errorText_]]</div> <div slot="footer" class="flex layout vertical center center-justified"> - <img srcset="images/1x/enrollment_error_illustration.svg 1x, - images/2x/enrollment_error_illustration.svg 2x" + <img srcset="images/1x/error.svg 1x, + images/2x/error.svg 2x" alt$="[[i18nDynamic(locale, 'enrollmentErrorIllustrationTitle')]]" class="oobe-illustration">
diff --git a/chrome/browser/resources/chromeos/login/oobe_adb_sideloading_screen.html b/chrome/browser/resources/chromeos/login/oobe_adb_sideloading_screen.html index f1de4316..828d555 100644 --- a/chrome/browser/resources/chromeos/login/oobe_adb_sideloading_screen.html +++ b/chrome/browser/resources/chromeos/login/oobe_adb_sideloading_screen.html
@@ -52,20 +52,20 @@ for-step="error" footer-shrinkable aria-label$="[[i18nDynamic(locale, 'enableAdbSideloadingSetupTitle')]]"> <hd-iron-icon slot="icon" - icon1x="oobe-32:alert" icon2x="oobe-64:alert"> + icon1x="oobe-32:warning" icon2x="oobe-64:warning"> </hd-iron-icon> + <h1 slot="title"> + [[i18nDynamic(locale, 'enableAdbSideloadingErrorTitle')]] + </h1> <p slot="subtitle"> [[i18nDynamic(locale, 'enableAdbSideloadingErrorMessage')]] <a on-click="onLearnMoreTap_" class="oobe-local-link" is="action-link"> [[i18nDynamic(locale, 'enableAdbSideloadingLearnMore')]] </a> </p> - <h1 slot="title"> - [[i18nDynamic(locale, 'enableAdbSideloadingErrorTitle')]] - </h1> <div slot="content" class="flex layout vertical center center-justified"> - <img srcset="images/1x/error_illustration.svg 1x, - images/2x/error_illustration.svg 2x" + <img srcset="images/1x/error.svg 1x, + images/2x/error.svg 2x" class="oobe-illustration" alt="[[i18nDynamic(locale, 'enableAdbSideloadingErrorIllustrationTitle')]]">
diff --git a/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html b/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html index 732bd53..6c38cb0 100644 --- a/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html +++ b/chrome/browser/resources/chromeos/login/screen_wrong_hwid.html
@@ -4,27 +4,35 @@ <link rel="import" href="/components/common_styles.html"> <link rel="import" href="/components/hd_iron_icon.html"> -<link rel="import" href="/components/oobe_dialog.html"> +<link rel="import" href="/components/oobe_adaptive_dialog.html"> <link rel="import" href="/components/oobe_i18n_behavior.html"> <link rel="import" href="/components/oobe_dialog_host_behavior.html"> <dom-module id="wrong-hwid-element"> <template> <style include="oobe-dialog-host"></style> - <oobe-dialog role="dialog" has-buttons - title-key="wrongHWIDScreenHeader"> - <hd-iron-icon slot="oobe-icon" class="warning" + <oobe-adaptive-dialog role="dialog"> + <hd-iron-icon slot="icon" class="warning" icon1x="oobe-32:warning" icon2x="oobe-64:warning"> </hd-iron-icon> - <div slot="subtitle"> - <p><html-echo content="[[formattedFirstPart_(locale)]]"></html-echo></p> - <p>[[i18nDynamic(locale, 'wrongHWIDMessageSecondPart')]]</p> + <h1 slot="title"> + [[i18nDynamic(locale, 'wrongHWIDScreenHeader')]] + </h1> + <p slot="content"> + <html-echo content="[[formattedFirstPart_(locale)]]"></html-echo> + </p> + <p slot="content"> + [[i18nDynamic(locale, 'wrongHWIDMessageSecondPart')]] + </p> + <div slot="content" class="flex layout vertical center center-justified"> + <img srcset="images/1x/error.svg 1x, images/2x/error.svg 2x" + class="oobe-illustration"> </div> - <div slot="bottom-buttons" class="layout horizontal end-justified"> + <div slot="bottom-buttons"> <oobe-text-button id="skipButton" inverse text-key="wrongHWIDScreenSkipLink" on-click="onSkip_"> </oobe-text-button> </div> - </oobe-dialog> + </oobe-adaptive-dialog> </template> </dom-module>
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html b/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html index 85117b7..5524c023 100644 --- a/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html +++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html
@@ -97,6 +97,32 @@ </settings-toggle-button> <template is="dom-if" if="[[prefs.settings.a11y.screen_magnifier.value]]"> <template is="dom-if" if="[[isMagnifierPanningImprovementsEnabled_]]"> + <div class="settings-box continuation"> + <settings-radio-group id="screenMagnifierMouseFollowingModeRadioGroup" + pref="{{prefs.settings.a11y.screen_magnifier_mouse_following_mode}}" + group-aria-label="$i18n{screenMagnifierMouseFollowingModeRadioGroupTitle}" + deep-link-focus-id$="[[Setting.kFullscreenMagnifierMouseFollowingMode]]" + class="sub-item"> + <controlled-radio-button + id="screenMagnifierMouseFollowingModeContinuous" + name="[[screenMagnifierMouseFollowingModePrefValues_.CONTINUOUS]]" + pref="[[prefs.settings.a11y.screen_magnifier_mouse_following_mode]]" + label="$i18n{screenMagnifierMouseFollowingModeContinuous}"> + </controlled-radio-button> + <controlled-radio-button + id="screenMagnifierMouseFollowingModeCentered" + name="[[screenMagnifierMouseFollowingModePrefValues_.CENTERED]]" + pref="[[prefs.settings.a11y.screen_magnifier_mouse_following_mode]]" + label="$i18n{screenMagnifierMouseFollowingModeCentered}"> + </controlled-radio-button> + <controlled-radio-button + id="screenMagnifierMouseFollowingModeEdge" + name="[[screenMagnifierMouseFollowingModePrefValues_.EDGE]]" + pref="[[prefs.settings.a11y.screen_magnifier_mouse_following_mode]]" + label="$i18n{screenMagnifierMouseFollowingModeEdge}"> + </controlled-radio-button> + </settings-radio-group> + </div> <div class="sub-item"> <settings-toggle-button class="sub-item"
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.js b/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.js index b5cebcc3..18bf9f5 100644 --- a/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.js +++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.js
@@ -29,6 +29,23 @@ notify: true, }, + /** + * Enum values for the 'settings.a11y.screen_magnifier_mouse_following_mode' + * preference. These values map to + * AccessibilityController::MagnifierMouseFollowingMode, and are written to + * prefs and metrics, so order should not be changed. + * @private {!Object<string, number>} + */ + screenMagnifierMouseFollowingModePrefValues_: { + readOnly: true, + type: Object, + value: { + CONTINUOUS: 0, + CENTERED: 1, + EDGE: 2, + }, + }, + screenMagnifierZoomOptions_: { readOnly: true, type: Array, @@ -243,6 +260,7 @@ chromeos.settings.mojom.Setting.kSelectToSpeak, chromeos.settings.mojom.Setting.kHighContrastMode, chromeos.settings.mojom.Setting.kFullscreenMagnifier, + chromeos.settings.mojom.Setting.kFullscreenMagnifierMouseFollowingMode, chromeos.settings.mojom.Setting.kFullscreenMagnifierFocusFollowing, chromeos.settings.mojom.Setting.kDockedMagnifier, chromeos.settings.mojom.Setting.kStickyKeys,
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index a5caaec..867da7e7 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc
@@ -368,10 +368,10 @@ if (g_browser_process) { ProfileManager* profile_manager = g_browser_process->profile_manager(); if (profile_manager) { - ProfileAttributesEntry* entry; - bool has_entry = profile_manager->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile()->GetPath(), &entry); - use_pending_close = has_entry && entry->IsSigninRequired(); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile()->GetPath()); + use_pending_close = entry && entry->IsSigninRequired(); } } }
diff --git a/chrome/browser/sessions/session_service_unittest.cc b/chrome/browser/sessions/session_service_unittest.cc index 2593a04..b784241 100644 --- a/chrome/browser/sessions/session_service_unittest.cc +++ b/chrome/browser/sessions/session_service_unittest.cc
@@ -496,9 +496,10 @@ ASSERT_TRUE(service()->profile()); ProfileManager* manager = g_browser_process->profile_manager(); ASSERT_TRUE(manager); - ProfileAttributesEntry* entry; - ASSERT_TRUE(manager->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(service()->profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + manager->GetProfileAttributesStorage().GetProfileAttributesWithPath( + service()->profile()->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); service()->WindowClosing(window_id);
diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc index eabbbb2..495c1fd 100644 --- a/chrome/browser/signin/chrome_signin_client.cc +++ b/chrome/browser/signin/chrome_signin_client.cc
@@ -207,11 +207,11 @@ if (!token_info->HasKey("error")) { std::string handle; if (token_info->GetString("token_handle", &handle)) { - ProfileAttributesEntry* entry = nullptr; - bool has_entry = g_browser_process->profile_manager()-> - GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile_->GetPath(), &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_->GetPath()); + DCHECK(entry); entry->SetPasswordChangeDetectionToken(handle); } } @@ -302,10 +302,10 @@ if (profiles::IsLockAvailable(profile_)) { ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_->GetPath()); // If we don't have a token for detecting a password change, create one. - if (storage.GetProfileAttributesWithPath(profile_->GetPath(), &entry) && - entry->GetPasswordChangeDetectionToken().empty() && + if (entry && entry->GetPasswordChangeDetectionToken().empty() && !access_token_fetcher_) { auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_); if (identity_manager->HasPrimaryAccount()) { @@ -372,12 +372,11 @@ void ChromeSigninClient::LockForceSigninProfile( const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - bool has_entry = + ProfileAttributesEntry* entry = g_browser_process->profile_manager() ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath(), &entry); - if (!has_entry) + .GetProfileAttributesWithPath(profile_->GetPath()); + if (!entry) return; entry->LockForceSigninProfile(true); }
diff --git a/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc b/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc index 604ef078..33b473b 100644 --- a/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc +++ b/chrome/browser/signin/dice_signed_in_profile_creator_unittest.cc
@@ -203,11 +203,10 @@ signed_in_profile()->IsEphemeralGuestProfile()); // Check the profile name and icon. - ProfileAttributesEntry* entry = nullptr; ProfileAttributesStorage& storage = profile_manager()->GetProfileAttributesStorage(); - ASSERT_TRUE(storage.GetProfileAttributesWithPath( - signed_in_profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(signed_in_profile()->GetPath()); ASSERT_TRUE(entry); ASSERT_EQ(entry->IsGuest(), use_guest_profile()); if (!use_guest_profile()) {
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc index 92b9a1c..950cb43 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -435,10 +435,10 @@ return; } - ProfileAttributesEntry* entry; - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath(), &entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_->GetPath()); SkColor profile_color = GenerateNewProfileColor(entry).color; auto guest_option_availability = GetGuestOptionAvailablity(); Delegate::BubbleParameters bubble_parameters{
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc index 0e90403b..598a1fd 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
@@ -343,11 +343,10 @@ adaptor.identity_test_env()->SetAutomaticIssueOfAccessTokens(true); // Check the profile name. - ProfileAttributesEntry* entry = nullptr; ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ASSERT_TRUE( - storage.GetProfileAttributesWithPath(new_profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(new_profile->GetPath()); ASSERT_TRUE(entry); EXPECT_EQ("givenname", base::UTF16ToUTF8(entry->GetLocalProfileName())); // Check the profile color. @@ -393,9 +392,8 @@ base::UTF8ToUTF16(account_info.email), /*is_consented_primary_account=*/false, /*icon_index=*/0, /*supervised_user_id*/ std::string(), EmptyAccountId()); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE( - profile_storage->GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + profile_storage->GetProfileAttributesWithPath(profile_path); ASSERT_TRUE(entry); ASSERT_EQ(entry->GetGAIAId(), account_info.gaia);
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc index 0c2ada8..d7bbb2fd 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc
@@ -204,9 +204,10 @@ // Add another profile with a different account. Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); std::string kOtherGaiaID = "SomeOtherGaiaID"; ASSERT_NE(kOtherGaiaID, account_info.gaia); entry->SetAuthInfo(kOtherGaiaID, base::UTF8ToUTF16("alice@gmail.com"), @@ -342,9 +343,10 @@ std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); @@ -377,9 +379,10 @@ // Setup for profile switch interception. std::string email = "bob@example.com"; Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo("dummy_gaia_id", base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); EXPECT_EQ(interceptor()->GetHeuristicOutcome( @@ -393,9 +396,10 @@ // Setup for profile switch interception. std::string email = "bob@gmail.com"; Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo("dummy_gaia_id", base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); // No domain defaults to gmail.com @@ -417,9 +421,10 @@ std::string email = "bob@gmail.com"; Profile* profile_2 = CreateTestingProfile("Profile 2"); profile()->GetPrefs()->SetBoolean(prefs::kSigninInterceptionEnabled, false); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo("dummy_gaia_id", base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); EXPECT_EQ(interceptor()->GetHeuristicOutcome( @@ -438,9 +443,10 @@ std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); @@ -548,9 +554,10 @@ std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); @@ -590,9 +597,10 @@ std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); @@ -629,9 +637,10 @@ account_info.email = "oscar@example.com"; identity_test_env()->UpdateAccountInfoForAccount(account_info); Profile* profile_3 = CreateTestingProfile("Profile 3"); - ProfileAttributesEntry* entry_2 = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_3->GetPath(), &entry_2)); + ProfileAttributesEntry* entry_2 = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_3->GetPath()); + ASSERT_NE(entry_2, nullptr); entry_2->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(account_info.email), /*is_consented_primary_account=*/false); @@ -662,9 +671,10 @@ std::string email = "bob@example.com"; AccountInfo account_info = identity_test_env()->MakeAccountAvailable(email); Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false); @@ -723,9 +733,10 @@ AccountInfo other_account_info = identity_test_env()->MakeAccountAvailable("alice@example.com"); Profile* profile_2 = CreateTestingProfile("Profile 2"); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_attributes_storage()->GetProfileAttributesWithPath( - profile_2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_attributes_storage()->GetProfileAttributesWithPath( + profile_2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(email), /*is_consented_primary_account=*/false);
diff --git a/chrome/browser/signin/local_auth.cc b/chrome/browser/signin/local_auth.cc index 43d0d56..d534b7c 100644 --- a/chrome/browser/signin/local_auth.cc +++ b/chrome/browser/signin/local_auth.cc
@@ -204,11 +204,11 @@ void LocalAuth::SetLocalAuthCredentials(const Profile* profile, const std::string& password) { DCHECK(g_browser_process->profile_manager()->IsValidProfile(profile)); - ProfileAttributesEntry* entry = nullptr; - bool has_entry = g_browser_process->profile_manager()-> - GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + DCHECK(entry); SetLocalAuthCredentials(entry, password); } @@ -256,10 +256,12 @@ bool LocalAuth::ValidateLocalAuthCredentials(const Profile* profile, const std::string& password) { DCHECK(g_browser_process->profile_manager()->IsValidProfile(profile)); - ProfileAttributesEntry* entry; + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); - if (!g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + if (!entry) { NOTREACHED(); return false; }
diff --git a/chrome/browser/signin/local_auth_unittest.cc b/chrome/browser/signin/local_auth_unittest.cc index aaf0747..4dbee9f6 100644 --- a/chrome/browser/signin/local_auth_unittest.cc +++ b/chrome/browser/signin/local_auth_unittest.cc
@@ -35,9 +35,10 @@ TestingBrowserProcess::GetGlobal()); ASSERT_TRUE(testing_profile_manager.SetUp()); Profile* prof = testing_profile_manager.CreateTestingProfile("p1"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(testing_profile_manager.profile_attributes_storage()-> - GetProfileAttributesWithPath(prof->GetPath(), &entry)); + ProfileAttributesEntry* entry = + testing_profile_manager.profile_attributes_storage() + ->GetProfileAttributesWithPath(prof->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_EQ("", entry->GetLocalAuthCredentials()); std::string password("Some Password"); @@ -73,9 +74,10 @@ Profile* prof = testing_profile_manager.CreateTestingProfile("p1"); std::string password("Some Password"); - ProfileAttributesEntry* entry; - ASSERT_TRUE(testing_profile_manager.profile_attributes_storage()-> - GetProfileAttributesWithPath(prof->GetPath(), &entry)); + ProfileAttributesEntry* entry = + testing_profile_manager.profile_attributes_storage() + ->GetProfileAttributesWithPath(prof->GetPath()); + ASSERT_NE(entry, nullptr); LocalAuth::SetLocalAuthCredentialsWithEncoding(entry, password, '1'); // Ensure we indeed persisted the correct encoding.
diff --git a/chrome/browser/signin/signin_global_error_unittest.cc b/chrome/browser/signin/signin_global_error_unittest.cc index 253d57a0..ed1d80d 100644 --- a/chrome/browser/signin/signin_global_error_unittest.cc +++ b/chrome/browser/signin/signin_global_error_unittest.cc
@@ -60,9 +60,10 @@ AccountInfo account_info = identity_test_env_profile_adaptor_->identity_test_env() ->MakePrimaryAccountAvailable(kTestEmail); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage()-> - GetProfileAttributesWithPath(profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile()->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetAuthInfo(account_info.gaia, base::UTF8ToUTF16(kTestEmail), /*is_consented_primary_account=*/true);
diff --git a/chrome/browser/signin/signin_profile_attributes_updater.cc b/chrome/browser/signin/signin_profile_attributes_updater.cc index 1a9b1d6..e4a07f0 100644 --- a/chrome/browser/signin/signin_profile_attributes_updater.cc +++ b/chrome/browser/signin/signin_profile_attributes_updater.cc
@@ -46,9 +46,9 @@ } void SigninProfileAttributesUpdater::UpdateProfileAttributes() { - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; } @@ -79,9 +79,9 @@ } void SigninProfileAttributesUpdater::OnErrorChanged() { - ProfileAttributesEntry* entry; - if (!profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_, - &entry)) { + ProfileAttributesEntry* entry = + profile_attributes_storage_->GetProfileAttributesWithPath(profile_path_); + if (!entry) { return; }
diff --git a/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc b/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc index 0349152..759af47aa 100644 --- a/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc +++ b/chrome/browser/signin/signin_profile_attributes_updater_unittest.cc
@@ -98,9 +98,10 @@ // Tests that the browser state info is updated on signin and signout. // ChromeOS does not support signout. TEST_F(SigninProfileAttributesUpdaterTest, SigninSignout) { - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); ASSERT_EQ(entry->GetSigninState(), SigninState::kNotSignedIn); EXPECT_FALSE(entry->IsSigninRequired()); @@ -119,9 +120,10 @@ // Tests that the browser state info is updated on auth error change. TEST_F(SigninProfileAttributesUpdaterTest, AuthError) { - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); CoreAccountId account_id = identity_test_env_.MakePrimaryAccountAvailable(kEmail).account_id; @@ -150,9 +152,10 @@ #if !BUILDFLAG(IS_CHROMEOS_ASH) TEST_F(SigninProfileAttributesUpdaterTest, SigninSignoutResetsProfilePrefs) { PrefService* pref_service = profile_->GetPrefs(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); // Set profile prefs. CheckProfilePrefsReset(pref_service, true); @@ -186,9 +189,10 @@ TEST_F(SigninProfileAttributesUpdaterTest, EnablingSyncWithUPAAccountShouldNotResetProfilePrefs) { PrefService* pref_service = profile_->GetPrefs(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); // Set UPA. AccountInfo account_info = identity_test_env_.MakeUnconsentedPrimaryAccountAvailable( @@ -207,9 +211,10 @@ TEST_F(SigninProfileAttributesUpdaterTest, EnablingSyncWithDifferentAccountThanUPAResetsProfilePrefs) { PrefService* pref_service = profile_->GetPrefs(); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); AccountInfo account_info = identity_test_env_.MakeUnconsentedPrimaryAccountAvailable( "email1@example.com"); @@ -237,9 +242,10 @@ }; TEST_F(SigninProfileAttributesUpdaterWithForceSigninTest, IsSigninRequired) { - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsAuthenticated()); EXPECT_TRUE(entry->IsSigninRequired());
diff --git a/chrome/browser/signin/signin_util_win_browsertest.cc b/chrome/browser/signin/signin_util_win_browsertest.cc index 179cf9989..6ecd3330 100644 --- a/chrome/browser/signin/signin_util_win_browsertest.cc +++ b/chrome/browser/signin/signin_util_win_browsertest.cc
@@ -93,9 +93,10 @@ ProfileAttributesStorage& storage = profile_manager->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); - ASSERT_TRUE(storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ASSERT_NE(entry, nullptr); ASSERT_EQ(expect_is_started, entry->IsSignedInWithCredentialProvider()); }
diff --git a/chrome/browser/supervised_user/supervised_user_service_browsertest.cc b/chrome/browser/supervised_user/supervised_user_service_browsertest.cc index 2e7248c..bd62b1d 100644 --- a/chrome/browser/supervised_user/supervised_user_service_browsertest.cc +++ b/chrome/browser/supervised_user/supervised_user_service_browsertest.cc
@@ -59,10 +59,11 @@ EXPECT_TRUE(prefs->IsUserModifiablePreference(prefs::kProfileName)); std::string original_name = prefs->GetString(prefs::kProfileName); - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager()-> - GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_EQ(original_name, base::UTF16ToUTF8(entry->GetName())); } @@ -94,10 +95,11 @@ EXPECT_FALSE(prefs->IsUserModifiablePreference(prefs::kProfileName)); EXPECT_EQ(name, prefs->GetString(prefs::kProfileName)); - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager()-> - GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_EQ(name, base::UTF16ToUTF8(entry->GetName())); // Change the name once more.
diff --git a/chrome/browser/sync/test/integration/bookmarks_helper.cc b/chrome/browser/sync/test/integration/bookmarks_helper.cc index 9eed5c4..a86fa9e2 100644 --- a/chrome/browser/sync/test/integration/bookmarks_helper.cc +++ b/chrome/browser/sync/test/integration/bookmarks_helper.cc
@@ -6,6 +6,7 @@ #include <stddef.h> +#include <algorithm> #include <functional> #include <memory> #include <set> @@ -43,6 +44,7 @@ #include "components/bookmarks/managed/managed_bookmark_service.h" #include "components/favicon/core/favicon_service.h" #include "components/favicon_base/favicon_util.h" +#include "components/sync/base/unique_position.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/test/fake_server/entity_builder_factory.h" #include "content/public/test/test_utils.h" @@ -52,12 +54,32 @@ #include "ui/gfx/favicon_size.h" #include "ui/gfx/image/image_skia.h" +using bookmarks::BookmarkModel; +using bookmarks::BookmarkNode; + namespace bookmarks_helper { namespace { -using bookmarks::BookmarkModel; -using bookmarks::BookmarkNode; +const char kBookmarkBarTag[] = "bookmark_bar"; +const char kSyncedBookmarksTag[] = "synced_bookmarks"; +const char kOtherBookmarksTag[] = "other_bookmarks"; + +const BookmarkNode* GetPermanentNodeForServerTag( + int profile_index, + const std::string& server_defined_unique_tag) { + if (server_defined_unique_tag == kBookmarkBarTag) { + return GetBookmarkBarNode(profile_index); + } + if (server_defined_unique_tag == kSyncedBookmarksTag) { + return GetSyncedBookmarksNode(profile_index); + } + if (server_defined_unique_tag == kOtherBookmarksTag) { + return GetOtherNode(profile_index); + } + + return nullptr; +} void ApplyBookmarkFavicon( const BookmarkNode* bookmark_node, @@ -328,11 +350,13 @@ // If either of the two favicons is still loading, let's return false now // because observers will get notified when the load completes. Note that even // the lack of favicon is considered a loaded favicon. - if (!favicon_data_a.has_value() || !favicon_data_b.has_value()) + if (!favicon_data_a.has_value() || !favicon_data_b.has_value()) { return false; + } - if (favicon_data_a->icon_url != favicon_data_b->icon_url) + if (favicon_data_a->icon_url != favicon_data_b->icon_url) { return false; + } gfx::Image image_a = favicon_data_a->image; gfx::Image image_b = favicon_data_b->image; @@ -340,8 +364,9 @@ if (image_a.IsEmpty() && image_b.IsEmpty()) return true; // Two empty images are equivalent. - if (image_a.IsEmpty() != image_b.IsEmpty()) + if (image_a.IsEmpty() != image_b.IsEmpty()) { return false; + } // Compare only the 1x bitmaps as only those are synced. SkBitmap bitmap_a = image_a.AsImageSkia().GetRepresentation(1.0f).GetBitmap(); @@ -380,6 +405,20 @@ << node_b->guid(); return false; } + if (node_a->parent()->is_root() != node_b->parent()->is_root() || + node_a->parent()->is_permanent_node() != + node_b->parent()->is_permanent_node()) { + LOG(ERROR) << "Permanent parent node mismatch: " + << node_a->parent()->is_permanent_node() << " vs. " + << node_b->parent()->is_permanent_node(); + return false; + } + if (!node_a->parent()->is_root() && + node_a->parent()->guid() != node_b->parent()->guid()) { + LOG(ERROR) << "Parent node mismatch: " << node_a->parent()->GetTitle() + << " vs. " << node_b->parent()->GetTitle(); + return false; + } return true; } @@ -810,11 +849,11 @@ parent) << "Node " << parent->GetTitle() << " does not belong to " << "Profile " << profile; - if (parent->children().empty()) + if (parent->children().empty()) { return; + } for (size_t i = 0; i < parent->children().size(); ++i) { - Move(profile, parent->children()[i].get(), parent, - parent->children().size() - i); + Move(profile, parent->children().back().get(), parent, i); } } @@ -1349,4 +1388,225 @@ BookmarksGUIDChecker::~BookmarksGUIDChecker() {} +BookmarkModelMatchesFakeServerChecker::BookmarkModelMatchesFakeServerChecker( + int profile, + syncer::ProfileSyncService* service, + fake_server::FakeServer* fake_server) + : SingleClientStatusChangeChecker(service), + fake_server_(fake_server), + profile_index_(profile) {} + +bool BookmarkModelMatchesFakeServerChecker::IsExitConditionSatisfied( + std::ostream* os) { + *os << "Waiting for server-side bookmarks to match bookmark model."; + + std::map<base::GUID, sync_pb::SyncEntity> server_bookmarks_by_guid; + if (!GetServerBookmarksByUniqueGUID(&server_bookmarks_by_guid)) { + *os << "The server has duplicate entities having the same GUID."; + return false; + } + + const std::map<std::string, std::vector<base::GUID>> + server_guids_by_parent_id = + GetServerGuidsGroupedByParentSyncId(server_bookmarks_by_guid); + + // |bookmarks_count| is used to check that the bookmark model doesn't have + // less nodes than the fake server. + size_t bookmarks_count = 0; + const bookmarks::BookmarkNode* root_node = + GetBookmarkModel(profile_index_)->root_node(); + ui::TreeNodeIterator<const bookmarks::BookmarkNode> iterator(root_node); + while (iterator.has_next()) { + const BookmarkNode* node = iterator.Next(); + + // Do not check permanent nodes. + if (node->is_permanent_node()) { + continue; + } + + auto iter = server_bookmarks_by_guid.find(node->guid()); + if (iter == server_bookmarks_by_guid.end()) { + *os << "Missing a node from on the server for GUID: " << node->guid(); + return false; + } + const sync_pb::SyncEntity& server_entity = iter->second; + + bookmarks_count++; + + // Check that the server node has the same parent as the local |node|. + if (!CheckParentNode(node, server_bookmarks_by_guid, os)) { + return false; + } + + // Check that the local |node| and the server entity have the same position. + auto parent_iter = + server_guids_by_parent_id.find(server_entity.parent_id_string()); + DCHECK(parent_iter != server_guids_by_parent_id.end()); + auto server_position_iter = std::find( + parent_iter->second.begin(), parent_iter->second.end(), node->guid()); + DCHECK(server_position_iter != parent_iter->second.end()); + const size_t server_position = + server_position_iter - parent_iter->second.begin(); + const size_t local_position = node->parent()->GetIndexOf(node); + if (server_position != local_position) { + *os << "Different positions on the server and in the local model for " + "node: " + << node->GetTitle() << ", server position: " << server_position + << ", local position: " << local_position; + return false; + } + + // Check titles and URLs. + if (base::UTF16ToUTF8(node->GetTitle()) != + server_entity.specifics().bookmark().full_title()) { + *os << " Title mismatch for node: " << node->GetTitle(); + return false; + } + + if (node->is_folder() != server_entity.folder()) { + *os << " Node type mismatch for node: " << node->GetTitle(); + return false; + } + + if (!node->is_folder() && + node->url() != server_entity.specifics().bookmark().url()) { + *os << " Node URL mismatch for node: " << node->GetTitle(); + return false; + } + } + + if (server_bookmarks_by_guid.size() != bookmarks_count) { + // An iteration over the local bookmark model has been finished at the + // moment. So the server can have only more entities than the local model if + // their sizes differ. + *os << " The fake server has more nodes than the bookmark model"; + return false; + } + + return true; +} + +bool BookmarkModelMatchesFakeServerChecker::CheckPermanentParentNode( + const bookmarks::BookmarkNode* node, + const sync_pb::SyncEntity& server_entity, + std::ostream* os) const { + // Parent node must be a permanent node. + const BookmarkNode* parent_node = node->parent(); + DCHECK(parent_node->is_permanent_node()); + + // Matching server entity must exist. + DCHECK_EQ(node->guid().AsLowercaseString(), + server_entity.specifics().bookmark().guid()); + + const std::map<std::string, sync_pb::SyncEntity> + permanent_nodes_by_server_id = + GetServerPermanentBookmarksGroupedBySyncId(); + + auto permanent_parent_iter = + permanent_nodes_by_server_id.find(server_entity.parent_id_string()); + if (permanent_parent_iter == permanent_nodes_by_server_id.end()) { + *os << " A permanent parent node is missing on the server for node: " + << node->GetTitle(); + return false; + } + + if (parent_node != + GetPermanentNodeForServerTag( + profile_index_, + permanent_parent_iter->second.server_defined_unique_tag())) { + *os << " Permanent parent node mismatch for node: " << node->GetTitle(); + return false; + } + return true; +} + +bool BookmarkModelMatchesFakeServerChecker::CheckParentNode( + const bookmarks::BookmarkNode* node, + const std::map<base::GUID, sync_pb::SyncEntity>& server_bookmarks_by_guid, + std::ostream* os) const { + // Only one matching server entity must exist. + DCHECK_EQ(1u, server_bookmarks_by_guid.count(node->guid())); + auto iter = server_bookmarks_by_guid.find(node->guid()); + const sync_pb::SyncEntity& server_entity = iter->second; + + const BookmarkNode* parent_node = node->parent(); + if (parent_node->is_permanent_node()) { + return CheckPermanentParentNode(node, server_entity, os); + } + + auto parent_iter = server_bookmarks_by_guid.find(parent_node->guid()); + if (parent_iter == server_bookmarks_by_guid.end()) { + *os << " Missing a parent node on the server for node: " + << node->GetTitle(); + return false; + } + + if (parent_iter->second.id_string() != iter->second.parent_id_string()) { + *os << " Parent mismatch found for node: " << node->GetTitle(); + return false; + } + return true; +} + +std::map<std::string, sync_pb::SyncEntity> +BookmarkModelMatchesFakeServerChecker:: + GetServerPermanentBookmarksGroupedBySyncId() const { + const std::vector<sync_pb::SyncEntity> server_permanent_bookmarks = + fake_server_->GetPermanentSyncEntitiesByModelType(syncer::BOOKMARKS); + std::map<std::string, sync_pb::SyncEntity> permanent_nodes_by_server_id; + for (const sync_pb::SyncEntity& entity : server_permanent_bookmarks) { + DCHECK(!entity.server_defined_unique_tag().empty()); + permanent_nodes_by_server_id[entity.id_string()] = entity; + } + return permanent_nodes_by_server_id; +} + +bool BookmarkModelMatchesFakeServerChecker::GetServerBookmarksByUniqueGUID( + std::map<base::GUID, sync_pb::SyncEntity>* server_bookmarks_by_guid) const { + const std::vector<sync_pb::SyncEntity> server_bookmarks = + fake_server_->GetSyncEntitiesByModelType(syncer::BOOKMARKS); + for (const sync_pb::SyncEntity& entity : server_bookmarks) { + // Skip permanent nodes. + if (!entity.server_defined_unique_tag().empty()) { + continue; + } + if (!server_bookmarks_by_guid + ->emplace(base::GUID::ParseLowercase( + entity.specifics().bookmark().guid()), + entity) + .second) { + return false; + } + } + return true; +} + +std::map<std::string, std::vector<base::GUID>> +BookmarkModelMatchesFakeServerChecker::GetServerGuidsGroupedByParentSyncId( + const std::map<base::GUID, sync_pb::SyncEntity>& server_bookmarks_by_guid) + const { + std::map<std::string, std::vector<base::GUID>> guids_grouped_by_parent_id; + for (const auto& guid_and_entity : server_bookmarks_by_guid) { + const sync_pb::SyncEntity& entity = guid_and_entity.second; + guids_grouped_by_parent_id[entity.parent_id_string()].push_back( + guid_and_entity.first); + } + auto sort_by_position_fn = [&server_bookmarks_by_guid]( + const base::GUID& left, + const base::GUID& right) { + const sync_pb::UniquePosition& left_position = + server_bookmarks_by_guid.at(left).unique_position(); + const sync_pb::UniquePosition& right_position = + server_bookmarks_by_guid.at(right).unique_position(); + return syncer::UniquePosition::FromProto(left_position) + .LessThan(syncer::UniquePosition::FromProto(right_position)); + }; + + for (auto& parent_id_and_children_guids : guids_grouped_by_parent_id) { + std::vector<base::GUID>& children = parent_id_and_children_guids.second; + std::sort(children.begin(), children.end(), sort_by_position_fn); + } + return guids_grouped_by_parent_id; +} + } // namespace bookmarks_helper
diff --git a/chrome/browser/sync/test/integration/bookmarks_helper.h b/chrome/browser/sync/test/integration/bookmarks_helper.h index d0712b24..0b895a5 100644 --- a/chrome/browser/sync/test/integration/bookmarks_helper.h +++ b/chrome/browser/sync/test/integration/bookmarks_helper.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_BOOKMARKS_HELPER_H_ #define CHROME_BROWSER_SYNC_TEST_INTEGRATION_BOOKMARKS_HELPER_H_ +#include <map> #include <memory> #include <set> #include <string> @@ -552,6 +553,55 @@ ~BookmarksGUIDChecker() override; }; +// Waits until the fake server has the similar structure of bookmarks like the +// bookmark model. The checker verifies that all nodes have the same GUID, +// title, URL, parent and order. It doesn't check favicons and any other fields. +// Note that this class is not enough to verify test's result as it only waits +// for the state when the bookmark model has the same structure on the server. +// It doesn't check their content and the expected number of bookmarks. The fake +// server must have entities with unique GUIDs. +class BookmarkModelMatchesFakeServerChecker + : public SingleClientStatusChangeChecker { + public: + BookmarkModelMatchesFakeServerChecker(int profile, + syncer::ProfileSyncService* service, + fake_server::FakeServer* fake_server); + + bool IsExitConditionSatisfied(std::ostream* os) override; + + private: + std::map<std::string, sync_pb::SyncEntity> + GetServerPermanentBookmarksGroupedBySyncId() const; + + // Fills in |server_bookmarks_by_guid| with all non-permanent entities stored + // on the server. All entities must have unique GUID in specifics. Returns + // false if there are duplicate entities on the server. + bool GetServerBookmarksByUniqueGUID(std::map<base::GUID, sync_pb::SyncEntity>* + server_bookmarks_by_guid) const; + + // Check that a permanent parent node of given |node| is the same as for the + // matching |server_entity|. + bool CheckPermanentParentNode(const bookmarks::BookmarkNode* node, + const sync_pb::SyncEntity& server_entity, + std::ostream* os) const; + + // Check that a regular parent node of given |node| matches to the parent of + // matching server entity. + bool CheckParentNode( + const bookmarks::BookmarkNode* node, + const std::map<base::GUID, sync_pb::SyncEntity>& server_bookmarks_by_guid, + std::ostream* os) const; + + // Return ordered GUIDs of server entities grouped by their parents. + std::map<std::string, std::vector<base::GUID>> + GetServerGuidsGroupedByParentSyncId( + const std::map<base::GUID, sync_pb::SyncEntity>& server_bookmarks_by_guid) + const; + + fake_server::FakeServer* const fake_server_; + const int profile_index_; +}; + } // namespace bookmarks_helper #endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_BOOKMARKS_HELPER_H_
diff --git a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc index db6161d3..b4a22119 100644 --- a/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_bookmarks_sync_test.cc
@@ -41,6 +41,7 @@ using bookmarks_helper::AddFolder; using bookmarks_helper::AddURL; using bookmarks_helper::BookmarkFaviconLoadedChecker; +using bookmarks_helper::BookmarkModelMatchesFakeServerChecker; using bookmarks_helper::BookmarksGUIDChecker; using bookmarks_helper::BookmarksTitleChecker; using bookmarks_helper::BookmarksUrlChecker; @@ -184,9 +185,10 @@ // Setup sync, wait for its completion, and make sure changes were synced. ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); - + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); EXPECT_THAT( other_node->children(), ElementsAre(IsFolderWithTitleAndChildrenAre( @@ -231,8 +233,10 @@ Move(kSingleProfileIndex, tier1_a, bar, 1); // Wait for the bookmark position change to sync. - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); EXPECT_THAT(bar->children(), ElementsAre(IsUrlBookmarkWithTitleAndUrl( "CNN", GURL("http://www.cnn.com")), @@ -248,8 +252,10 @@ Move(kSingleProfileIndex, tier1_a_url1, tier1_a, 2); // Wait for the rearranged hierarchy to sync. - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); EXPECT_THAT( bar->children(), ElementsAre( @@ -286,8 +292,10 @@ SetTitle(kSingleProfileIndex, porsche, "ICanHazPorsche?"); // Wait for the title change to sync. - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); EXPECT_THAT( bar->children(), ElementsAre( @@ -333,8 +341,10 @@ Move(kSingleProfileIndex, leafs, tier3_b, 0); // Wait for newly added bookmarks to sync. - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); EXPECT_THAT( bar->children(), @@ -407,8 +417,10 @@ EXPECT_TRUE(tier1_b_url0); // Setup sync, wait for its completion, and make sure changes were synced. ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + EXPECT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); EXPECT_THAT(other_node->children(), ElementsAre(IsFolderWithTitleAndChildrenAre( "top", @@ -493,8 +505,10 @@ GetBookmarkBarNode(0)->children()[0]->GetTitle()); SetTitle(kSingleProfileIndex, GetBookmarkBarNode(0)->children().front().get(), title2); - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); // Verify the GUID that was committed to the server. std::vector<sync_pb::SyncEntity> server_bookmarks = @@ -664,8 +678,11 @@ // Remove all bookmarks and wait for sync completion. RemoveAll(kSingleProfileIndex); - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); + // Verify other node has no children now. EXPECT_TRUE(GetOtherNode(kSingleProfileIndex)->children().empty()); EXPECT_TRUE(GetBookmarkBarNode(kSingleProfileIndex)->children().empty()); @@ -779,8 +796,10 @@ } // Wait till all entities are committed. - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); // Collect the titles committed on the server. std::vector<sync_pb::SyncEntity> entities = @@ -960,8 +979,10 @@ ASSERT_NE(nullptr, AddURL(kSingleProfileIndex, /*parent=*/GetOtherNode(kSingleProfileIndex), /*index=*/0, "title", GURL("http://www.url.com"))); - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); // There should have been one creation and no deletions. EXPECT_EQ( @@ -1172,8 +1193,10 @@ const std::string title = "Title"; const BookmarkNode* node = bookmark_model->AddFolder( bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16(title)); - ASSERT_TRUE( - UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker( + kSingleProfileIndex, GetSyncService(kSingleProfileIndex), + GetFakeServer()) + .Wait()); const std::vector<sync_pb::SyncEntity> server_bookmarks_before = fake_server_->GetSyncEntitiesByModelType(syncer::BOOKMARKS); ASSERT_EQ(1u, server_bookmarks_before.size()); @@ -1183,6 +1206,10 @@ BookmarkUndoService* undo_service = GetBookmarkUndoService(kSingleProfileIndex); undo_service->undo_manager()->Undo(); + + // Do not use BookmarkModelMatchesFakeServerChecker because the structure and + // bookmarks actually don't change. The only change is the version of the + // entity. ASSERT_TRUE( UpdatedProgressMarkerChecker(GetSyncService(kSingleProfileIndex)).Wait());
diff --git a/chrome/browser/sync/test/integration/status_change_checker.cc b/chrome/browser/sync/test/integration/status_change_checker.cc index ead0f6c..8952933 100644 --- a/chrome/browser/sync/test/integration/status_change_checker.cc +++ b/chrome/browser/sync/test/integration/status_change_checker.cc
@@ -20,12 +20,12 @@ base::TimeDelta GetTimeoutFromCommandLineOrDefault() { if (!base::CommandLine::ForCurrentProcess()->HasSwitch( - "sync-status-change-checker-timeout")) { + switches::kStatusChangeCheckerTimeoutInSeconds)) { return kDefaultTimeout; } std::string timeout_string( base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - "sync-status-change-checker-timeout")); + switches::kStatusChangeCheckerTimeoutInSeconds)); int timeout_in_seconds = 0; if (!base::StringToInt(timeout_string, &timeout_in_seconds)) { LOG(FATAL) << "Timeout value \"" << timeout_string << "\" was parsed as " @@ -36,6 +36,9 @@ } // namespace +const char switches::kStatusChangeCheckerTimeoutInSeconds[] = + "sync-status-change-checker-timeout"; + StatusChangeChecker::StatusChangeChecker() : timeout_(GetTimeoutFromCommandLineOrDefault()), run_loop_(base::RunLoop::Type::kNestableTasksAllowed) {}
diff --git a/chrome/browser/sync/test/integration/status_change_checker.h b/chrome/browser/sync/test/integration/status_change_checker.h index d9d620c5..55844fd 100644 --- a/chrome/browser/sync/test/integration/status_change_checker.h +++ b/chrome/browser/sync/test/integration/status_change_checker.h
@@ -10,6 +10,12 @@ #include "base/run_loop.h" #include "base/time/time.h" +namespace switches { + +extern const char kStatusChangeCheckerTimeoutInSeconds[]; + +} // namespace switches + // Interface for a helper class that can pump the message loop while waiting // for a certain state transition to take place. // @@ -18,6 +24,9 @@ // // The instances of this class are intended to be single-use. It doesn't make // sense to call StartBlockingWait() more than once. +// +// |switches::kStatusChangeCheckerTimeoutInSeconds| can be passed to the command +// line to override the timeout used by instances of this class. class StatusChangeChecker { public: StatusChangeChecker();
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc index 3b3f97c..b9b2862 100644 --- a/chrome/browser/sync/test/integration/sync_test.cc +++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -109,13 +109,8 @@ using syncer::ProfileSyncService; -namespace switches { -const char kPasswordFileForTest[] = "password-file-for-test"; -const char kSyncUserForTest[] = "sync-user-for-test"; -const char kSyncPasswordForTest[] = "sync-password-for-test"; -} // namespace switches - namespace { + // Sender ID coming from the Firebase console. const char kInvalidationGCMSenderId[] = "8181035976"; @@ -237,6 +232,10 @@ } // namespace +const char switches::kPasswordFileForTest[] = "password-file-for-test"; +const char switches::kSyncUserForTest[] = "sync-user-for-test"; +const char switches::kSyncPasswordForTest[] = "sync-password-for-test"; + SyncTest::FakeInstanceID::FakeInstanceID(const std::string& app_id, gcm::GCMDriver* gcm_driver) : instance_id::InstanceID(app_id, gcm_driver),
diff --git a/chrome/browser/sync/test/integration/sync_test.h b/chrome/browser/sync/test/integration/sync_test.h index b75435c62..cff7e7a 100644 --- a/chrome/browser/sync/test/integration/sync_test.h +++ b/chrome/browser/sync/test/integration/sync_test.h
@@ -78,9 +78,33 @@ class ProfileSyncService; } // namespace syncer +namespace switches { + +extern const char kPasswordFileForTest[]; +extern const char kSyncUserForTest[]; +extern const char kSyncPasswordForTest[]; + +} // namespace switches + // This is the base class for integration tests for all sync data types. Derived // classes must be defined for each sync data type. Individual tests are defined // using the IN_PROC_BROWSER_TEST_F macro. +// +// The list below shows some command line switches that can customize test +// behavior. It may become non-exaustive over time. +// switches::kSyncServiceURL - By default, tests use a fake_server::FakeServer +// to emulate the sync server. This switch causes them to run against an +// external server instead, pointed by the provided URL. This translates into +// the ServerType of the test being EXTERNAL_LIVE_SERVER. +// switches::kSyncUserForTest - Overrides the username of the syncing account. +// Mostly useful for EXTERNAL_LIVE_SERVER tests to use an allowlisted value. +// switches::kSyncPasswordForTest - Same as above, but for the password. +// switches::kPasswordFileForTests - Causes the username and password of the +// syncing account to be read from the passed file. The username must be on +// the first line and the password on the second. The individual switches for +// username and password are ignored if this is set. +// Other switches may modify the behavior of helper classes frequently used in +// sync integration tests, see StatusChangeChecker for example. class SyncTest : public PlatformBrowserTest { public: // The different types of live sync tests that can be implemented.
diff --git a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc index a9d60f2..92ddfa5 100644 --- a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc
@@ -69,6 +69,7 @@ using bookmarks_helper::IndexedURLTitle; using bookmarks_helper::IsFolderWithTitle; using bookmarks_helper::IsFolderWithTitleAndChildren; +using bookmarks_helper::IsFolderWithTitleAndChildrenAre; using bookmarks_helper::IsUrlBookmarkWithTitleAndUrl; using bookmarks_helper::Move; using bookmarks_helper::Remove; @@ -80,7 +81,9 @@ using bookmarks_helper::SortChildren; using testing::ElementsAre; using testing::ElementsAreArray; +using testing::IsEmpty; using testing::NotNull; +using testing::SizeIs; const char kGenericURL[] = "http://www.host.ext:1234/path/filename"; const char kGenericURLTitle[] = "URL Title"; @@ -117,7 +120,6 @@ IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, Sanity) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchChecker().Wait()); GURL google_url("http://www.google.com"); ASSERT_NE(nullptr, AddURL(0, "Google", google_url)); @@ -483,17 +485,18 @@ const BookmarkNode* folder = AddFolder(0, i, title); ASSERT_NE(nullptr, folder); std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> - folder_matchers; + matchers_in_folder; if (base::RandDouble() > 0.4) { for (size_t j = 0; j < 20; ++j) { const std::string title = IndexedURLTitle(j); const GURL url = GURL(IndexedURL(j)); ASSERT_NE(nullptr, AddURL(0, folder, j, title, url)); - folder_matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); + matchers_in_folder.push_back( + IsUrlBookmarkWithTitleAndUrl(title, url)); } } bookmark_bar_matchers.push_back(IsFolderWithTitleAndChildren( - title, ElementsAreArray(folder_matchers))); + title, ElementsAreArray(matchers_in_folder))); } } @@ -676,7 +679,8 @@ SC_RenameBMFolderWithLongHierarchy) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> folder_matchers; + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; const std::string title = IndexedFolderName(1); const BookmarkNode* folder = AddFolder(0, title); ASSERT_NE(nullptr, folder); @@ -685,17 +689,17 @@ const std::string title = IndexedURLTitle(i); const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); - folder_matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); + matchers_in_folder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { const std::string title = IndexedSubfolderName(i); ASSERT_NE(nullptr, AddFolder(0, folder, i, title)); - folder_matchers.push_back(IsFolderWithTitle(title)); + matchers_in_folder.push_back(IsFolderWithTitle(title)); } } ASSERT_TRUE(BookmarksMatchChecker().Wait()); EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAre(IsFolderWithTitleAndChildren( - title, ElementsAreArray(folder_matchers)))); + title, ElementsAreArray(matchers_in_folder)))); const std::string new_title = IndexedFolderName(2); SetTitle(0, folder, new_title); @@ -703,544 +707,924 @@ EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAre(IsFolderWithTitleAndChildren( - new_title, ElementsAreArray(folder_matchers)))); + new_title, ElementsAreArray(matchers_in_folder)))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMFolderThatHasParentAndChildren) { + const size_t kNumSubfolderUrls = 120; ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); for (size_t i = 1; i < 15; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - std::string title = IndexedSubfolderName(1); + const std::string title = IndexedSubfolderName(1); const BookmarkNode* subfolder = AddFolder(0, folder, 0, title); - for (size_t i = 0; i < 120; ++i) { + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_subfolder; + for (size_t i = 0; i < kNumSubfolderUrls; ++i) { if (base::RandDouble() > 0.15) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, subfolder, i, title, url)); + matchers_in_subfolder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedSubsubfolderName(i); + const std::string title = IndexedSubsubfolderName(i); ASSERT_NE(nullptr, AddFolder(0, subfolder, i, title)); + matchers_in_subfolder.push_back(IsFolderWithTitle(title)); } } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + // Insert a |folder| matcher with its |subfolder|. + matchers.insert( + matchers.begin(), + IsFolderWithTitleAndChildrenAre( + kGenericFolderName, + IsFolderWithTitleAndChildren( + title, ElementsAreArray(std::move(matchers_in_subfolder))))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(std::move(matchers))); - std::string new_title = IndexedSubfolderName(2); + const std::string new_title = IndexedSubfolderName(2); SetTitle(0, subfolder, new_title); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + EXPECT_THAT( + GetBookmarkBarNode(1)->children(), + Contains(IsFolderWithTitleAndChildrenAre( + kGenericFolderName, + IsFolderWithTitleAndChildren(new_title, SizeIs(kNumSubfolderUrls))))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, - SC_RenameBMNameAndURL) { +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_RenameBMNameAndURL) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); - GURL url = GURL(IndexedURL(1)); - std::string title = IndexedURLTitle(1); + const GURL url = GURL(IndexedURL(1)); + const std::string title = IndexedURLTitle(1); const BookmarkNode* bookmark = AddURL(0, title, url); ASSERT_NE(nullptr, bookmark); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsUrlBookmarkWithTitleAndUrl(title, url))); - GURL new_url = GURL(IndexedURL(2)); - std::string new_title = IndexedURLTitle(2); + const GURL new_url = GURL(IndexedURL(2)); + const std::string new_title = IndexedURLTitle(2); bookmark = SetURL(0, bookmark, new_url); ASSERT_NE(nullptr, bookmark); SetTitle(0, bookmark, new_title); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsUrlBookmarkWithTitleAndUrl(new_title, new_url))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DeleteBMEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); ASSERT_NE(nullptr, AddURL(0, kGenericURLTitle, GURL(kGenericURL))); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT( + GetBookmarkBarNode(1)->children(), + ElementsAre(IsUrlBookmarkWithTitleAndUrl(kGenericURLTitle, kGenericURL))); Remove(0, GetBookmarkBarNode(0), 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), IsEmpty()); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelBMNonEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; for (size_t i = 0; i < 20; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); Remove(0, GetBookmarkBarNode(0), 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.erase(matchers.begin()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelFirstBMUnderBMFoldNonEmptyFoldAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); Remove(0, folder, 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.erase(matchers.begin()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelLastBMUnderBMFoldNonEmptyFoldAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); Remove(0, folder, folder->children().size() - 1); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.erase(matchers.end() - 1); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelMiddleBMUnderBMFoldNonEmptyFoldAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); Remove(0, folder, 4); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.erase(matchers.begin() + 4); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelBMsUnderBMFoldEmptyFolderAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers)))); - for (size_t i = 0; i < folder->children().size(); ++i) + while (!folder->children().empty()) { Remove(0, folder, 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + } + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT( + GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren(kGenericFolderName, IsEmpty()))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelEmptyBMFoldEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); ASSERT_NE(nullptr, AddFolder(0, kGenericFolderName)); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitle(kGenericFolderName))); Remove(0, GetBookmarkBarNode(0), 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), IsEmpty()); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelEmptyBMFoldNonEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; ASSERT_NE(nullptr, AddFolder(0, kGenericFolderName)); + matchers.push_back(IsFolderWithTitle(kGenericFolderName)); for (size_t i = 1; i < 15; ++i) { if (base::RandDouble() > 0.6) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedFolderName(i); + const std::string title = IndexedFolderName(i); ASSERT_NE(nullptr, AddFolder(0, i, title)); + matchers.push_back(IsFolderWithTitle(title)); } } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); Remove(0, GetBookmarkBarNode(0), 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.erase(matchers.begin()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelBMFoldWithBMsNonEmptyAccountAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; ASSERT_NE(nullptr, AddURL(0, kGenericURLTitle, GURL(kGenericURL))); - const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); + matchers.push_back( + IsUrlBookmarkWithTitleAndUrl(kGenericURLTitle, kGenericURL)); + + const size_t kFolderIndex = 1; + const BookmarkNode* folder = AddFolder(0, kFolderIndex, kGenericFolderName); ASSERT_NE(nullptr, folder); + // |folder| will be added to matchers later when all its children will be + // added. for (size_t i = 2; i < 10; ++i) { if (base::RandDouble() > 0.6) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedFolderName(i); + const std::string title = IndexedFolderName(i); ASSERT_NE(nullptr, AddFolder(0, i, title)); + matchers.push_back(IsFolderWithTitle(title)); } } + + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; for (size_t i = 0; i < 15; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_in_folder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.insert( + matchers.begin() + kFolderIndex, + IsFolderWithTitleAndChildren(kGenericFolderName, + ElementsAreArray(matchers_in_folder))); + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); Remove(0, GetBookmarkBarNode(0), 1); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.erase(matchers.begin() + kFolderIndex); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelBMFoldWithBMsAndBMFoldsNonEmptyACAfterwards) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; ASSERT_NE(nullptr, AddURL(0, kGenericURLTitle, GURL(kGenericURL))); - const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); + matchers.push_back( + IsUrlBookmarkWithTitleAndUrl(kGenericURLTitle, kGenericURL)); + + const size_t kFolderIndex = 1; + const BookmarkNode* folder = AddFolder(0, kFolderIndex, kGenericFolderName); ASSERT_NE(nullptr, folder); + // // |folder| will be added to matchers later when all its children will be + // added. for (size_t i = 2; i < 10; ++i) { if (base::RandDouble() > 0.6) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedFolderName(i); + const std::string title = IndexedFolderName(i); ASSERT_NE(nullptr, AddFolder(0, i, title)); + matchers.push_back(IsFolderWithTitle(title)); } } + + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; for (size_t i = 0; i < 10; ++i) { if (base::RandDouble() > 0.6) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_in_folder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedSubfolderName(i); + const std::string title = IndexedSubfolderName(i); const BookmarkNode* subfolder = AddFolder(0, folder, i, title); ASSERT_NE(nullptr, subfolder); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_subfolder; if (base::RandDouble() > 0.3) { for (size_t j = 0; j < 10; ++j) { if (base::RandDouble() > 0.6) { - std::string title = IndexedURLTitle(j); - GURL url = GURL(IndexedURL(j)); + const std::string title = IndexedURLTitle(j); + const GURL url = GURL(IndexedURL(j)); ASSERT_NE(nullptr, AddURL(0, subfolder, j, title, url)); + matchers_in_subfolder.push_back( + IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedSubsubfolderName(j); + const std::string title = IndexedSubsubfolderName(j); ASSERT_NE(nullptr, AddFolder(0, subfolder, j, title)); + matchers_in_subfolder.push_back(IsFolderWithTitle(title)); } } } + matchers_in_folder.push_back(IsFolderWithTitleAndChildren( + title, ElementsAreArray(std::move(matchers_in_subfolder)))); } } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.insert( + matchers.begin() + kFolderIndex, + IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(std::move(matchers_in_folder)))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); - Remove(0, GetBookmarkBarNode(0), 1); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + Remove(0, GetBookmarkBarNode(0), kFolderIndex); + matchers.erase(matchers.begin() + kFolderIndex); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_DelBMFoldWithParentAndChildrenBMsAndBMFolds) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); + // |folder| will be added to matchers later when all its children will be + // added. for (size_t i = 1; i < 11; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } + + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_subfolder; const BookmarkNode* subfolder = AddFolder(0, folder, 0, kGenericSubfolderName); ASSERT_NE(nullptr, subfolder); for (size_t i = 0; i < 30; ++i) { if (base::RandDouble() > 0.2) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, subfolder, i, title, url)); + matchers_in_subfolder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } else { - std::string title = IndexedSubsubfolderName(i); + const std::string title = IndexedSubsubfolderName(i); ASSERT_NE(nullptr, AddFolder(0, subfolder, i, title)); + matchers_in_subfolder.push_back(IsFolderWithTitle(title)); } } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + + matchers.insert(matchers.begin(), + IsFolderWithTitleAndChildrenAre( + kGenericFolderName, + IsFolderWithTitleAndChildren( + kGenericSubfolderName, + ElementsAreArray(std::move(matchers_in_subfolder))))); + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); Remove(0, folder, 0); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.front() = + IsFolderWithTitleAndChildren(kGenericFolderName, IsEmpty()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, - SC_ReverseTheOrderOfTwoBMs) { +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_ReverseTheOrderOfTwoBMs) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); - GURL url0 = GURL(IndexedURL(0)); - GURL url1 = GURL(IndexedURL(1)); - std::string title0 = IndexedURLTitle(0); - std::string title1 = IndexedURLTitle(1); + const GURL url0 = GURL(IndexedURL(0)); + const GURL url1 = GURL(IndexedURL(1)); + const std::string title0 = IndexedURLTitle(0); + const std::string title1 = IndexedURLTitle(1); const BookmarkNode* bookmark0 = AddURL(0, 0, title0, url0); const BookmarkNode* bookmark1 = AddURL(0, 1, title1, url1); ASSERT_NE(nullptr, bookmark0); ASSERT_NE(nullptr, bookmark1); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsUrlBookmarkWithTitleAndUrl(title0, url0), + IsUrlBookmarkWithTitleAndUrl(title1, url1))); Move(0, bookmark0, GetBookmarkBarNode(0), 2); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsUrlBookmarkWithTitleAndUrl(title1, url1), + IsUrlBookmarkWithTitleAndUrl(title0, url0))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, - SC_ReverseTheOrderOf10BMs) { +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_ReverseTheOrderOf10BMs) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); ReverseChildOrder(0, GetBookmarkBarNode(0)); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers.rbegin(), matchers.rend())); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_MovingBMsFromBMBarToBMFolder) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; ASSERT_NE(nullptr, AddURL(0, kGenericURLTitle, GURL(kGenericURL))); - const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); - ASSERT_NE(nullptr, folder); - for (size_t i = 2; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); - ASSERT_NE(nullptr, AddURL(0, i, title, url)); - } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.push_back( + IsUrlBookmarkWithTitleAndUrl(kGenericURLTitle, kGenericURL)); - size_t num_bookmarks_to_move = GetBookmarkBarNode(0)->children().size() - 2; + const size_t kFolderIndex = 1; + const BookmarkNode* folder = AddFolder(0, kFolderIndex, kGenericFolderName); + ASSERT_NE(nullptr, folder); + matchers.push_back(IsFolderWithTitle(kGenericFolderName)); + for (size_t i = 2; i < 10; ++i) { + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); + ASSERT_NE(nullptr, AddURL(0, i, title, url)); + matchers.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); + } + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); + + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; + const size_t num_bookmarks_to_move = + GetBookmarkBarNode(0)->children().size() - 2; for (size_t i = 0; i < num_bookmarks_to_move; ++i) { Move(0, GetBookmarkBarNode(0)->children()[2].get(), folder, i); + matchers_in_folder.push_back(matchers[2]); + matchers.erase(matchers.begin() + 2); + ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); + ASSERT_LE(kFolderIndex, GetBookmarkBarNode(1)->children().size()); + const BookmarkNode* remote_folder = + GetBookmarkBarNode(1)->children()[kFolderIndex].get(); + EXPECT_THAT(remote_folder->children(), + ElementsAreArray(matchers_in_folder)); } } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_MovingBMsFromBMFoldToBMBar) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> matchers; ASSERT_NE(nullptr, AddURL(0, kGenericURLTitle, GURL(kGenericURL))); + matchers.push_back( + IsUrlBookmarkWithTitleAndUrl(kGenericURLTitle, kGenericURL)); + const BookmarkNode* folder = AddFolder(0, 1, kGenericFolderName); ASSERT_NE(nullptr, folder); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_in_folder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers.push_back(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers_in_folder))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); - size_t num_bookmarks_to_move = folder->children().size() - 2; + const size_t num_bookmarks_to_move = folder->children().size() - 2; for (size_t i = 0; i < num_bookmarks_to_move; ++i) { Move(0, folder->children().front().get(), GetBookmarkBarNode(0), i); + matchers.insert(matchers.begin() + i, matchers_in_folder.front()); + matchers_in_folder.erase(matchers_in_folder.begin()); + // Update matchers for the |folder|. + matchers.back() = IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers_in_folder)); + ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_MovingBMsFromParentBMFoldToChildBMFold) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); for (size_t i = 0; i < 3; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_in_folder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } + + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_subfolder; const BookmarkNode* subfolder = AddFolder(0, folder, 3, kGenericSubfolderName); ASSERT_NE(nullptr, subfolder); for (size_t i = 0; i < 10; ++i) { - std::string title = IndexedURLTitle(i + 3); - GURL url = GURL(IndexedURL(i + 3)); + const std::string title = IndexedURLTitle(i + 3); + const GURL url = GURL(IndexedURL(i + 3)); ASSERT_NE(nullptr, AddURL(0, subfolder, i, title, url)); + matchers_in_subfolder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers_in_folder.push_back(IsFolderWithTitleAndChildren( + kGenericSubfolderName, ElementsAreArray(matchers_in_subfolder))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers_in_folder)))); for (size_t i = 0; i < 3; ++i) { - GURL url = GURL(IndexedURL(i)); + const GURL url = GURL(IndexedURL(i)); Move(0, GetUniqueNodeByURL(0, url), subfolder, i + 10); + matchers_in_subfolder.push_back(matchers_in_folder[i]); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + // Do not use |matchers_in_folder| as it contains moved nodes' matchers. + EXPECT_THAT( + GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildrenAre( + kGenericFolderName, IsFolderWithTitleAndChildren( + kGenericSubfolderName, + ElementsAreArray(matchers_in_subfolder))))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_MovingBMsFromChildBMFoldToParentBMFold) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_folder; const BookmarkNode* folder = AddFolder(0, kGenericFolderName); ASSERT_NE(nullptr, folder); for (size_t i = 0; i < 3; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_in_folder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } + + std::vector<testing::Matcher<std::unique_ptr<BookmarkNode>>> + matchers_in_subfolder; const BookmarkNode* subfolder = AddFolder(0, folder, 3, kGenericSubfolderName); ASSERT_NE(nullptr, subfolder); for (size_t i = 0; i < 5; ++i) { - std::string title = IndexedURLTitle(i + 3); - GURL url = GURL(IndexedURL(i + 3)); + const std::string title = IndexedURLTitle(i + 3); + const GURL url = GURL(IndexedURL(i + 3)); ASSERT_NE(nullptr, AddURL(0, subfolder, i, title, url)); + matchers_in_subfolder.push_back(IsUrlBookmarkWithTitleAndUrl(title, url)); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + + const size_t subfolder_index = matchers_in_folder.size(); + matchers_in_folder.push_back(IsFolderWithTitleAndChildren( + kGenericSubfolderName, ElementsAreArray(matchers_in_subfolder))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers_in_folder)))); for (size_t i = 0; i < 3; ++i) { - GURL url = GURL(IndexedURL(i + 3)); + const GURL url = GURL(IndexedURL(i + 3)); Move(0, GetUniqueNodeByURL(0, url), folder, i + 4); + matchers_in_folder.push_back(matchers_in_subfolder.front()); + matchers_in_subfolder.erase(matchers_in_subfolder.begin()); } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers_in_folder[subfolder_index] = IsFolderWithTitleAndChildren( + kGenericSubfolderName, ElementsAreArray(matchers_in_subfolder)); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAre(IsFolderWithTitleAndChildren( + kGenericFolderName, ElementsAreArray(matchers_in_folder)))); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, - SC_HoistBMs10LevelUp) { +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_HoistBMs10LevelUp) { + const size_t kNumLevels = 15; + ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + + using BookmarkNodeMatcher = testing::Matcher<std::unique_ptr<BookmarkNode>>; + + // Add an extra level to represent an empty folder for the last real level. + std::vector<std::vector<BookmarkNodeMatcher>> matchers_by_level(kNumLevels + + 1); const BookmarkNode* folder = GetBookmarkBarNode(0); const BookmarkNode* folder_L0 = nullptr; const BookmarkNode* folder_L10 = nullptr; - for (size_t level = 0; level < 15; ++level) { - size_t num_bookmarks = base::RandInt(0, 9); + + for (size_t level = 0; level < kNumLevels; ++level) { + const size_t num_bookmarks = base::RandInt(0, 9); for (size_t i = 0; i < num_bookmarks; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_by_level[level].push_back( + IsUrlBookmarkWithTitleAndUrl(title, url)); } - std::string title = IndexedFolderName(level); + const std::string title = IndexedFolderName(level); folder = AddFolder(0, folder, folder->children().size(), title); ASSERT_NE(nullptr, folder); if (level == 0) folder_L0 = folder; if (level == 10) folder_L10 = folder; } - for (size_t i = 0; i < 3; ++i) { - std::string title = IndexedURLTitle(i + 10); - GURL url = GURL(IndexedURL(i + 10)); - ASSERT_NE(nullptr, AddURL(0, folder_L10, i, title, url)); - } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); - GURL url10 = GURL(IndexedURL(10)); + std::vector<BookmarkNodeMatcher>& matchers_L11 = matchers_by_level[11]; + for (size_t i = 0; i < 3; ++i) { + const std::string title = IndexedURLTitle(i + 10); + const GURL url = GURL(IndexedURL(i + 10)); + ASSERT_NE(nullptr, AddURL(0, folder_L10, i, title, url)); + + matchers_L11.insert(matchers_L11.begin() + i, + IsUrlBookmarkWithTitleAndUrl(title, url)); + } + + // Add all folders to matchers from all levels. + for (size_t i = kNumLevels; i > 0; --i) { + const size_t level = i - 1; + DCHECK_LT(i, matchers_by_level.size()); + + const std::string folder_title = IndexedFolderName(level); + matchers_by_level[level].push_back(IsFolderWithTitleAndChildren( + folder_title, ElementsAreArray(matchers_by_level[i]))); + } + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers_by_level.front())); + + // Move first 3 bookmarks from |folder_L10| to |folder_L0| which are 11 and 1 + // levels respectively. + std::vector<BookmarkNodeMatcher>& matchers_L01 = matchers_by_level[1]; + const GURL url10 = GURL(IndexedURL(10)); Move(0, GetUniqueNodeByURL(0, url10), folder_L0, folder_L0->children().size()); - GURL url11 = GURL(IndexedURL(11)); + matchers_L01.push_back(matchers_L11.front()); + matchers_L11.erase(matchers_L11.begin()); + + const GURL url11 = GURL(IndexedURL(11)); Move(0, GetUniqueNodeByURL(0, url11), folder_L0, 0); - GURL url12 = GURL(IndexedURL(12)); + matchers_L01.insert(matchers_L01.begin(), matchers_L11.front()); + matchers_L11.erase(matchers_L11.begin()); + + const GURL url12 = GURL(IndexedURL(12)); Move(0, GetUniqueNodeByURL(0, url12), folder_L0, 1); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers_L01.insert(matchers_L01.begin() + 1, matchers_L11.front()); + matchers_L11.erase(matchers_L11.begin()); + + // Update all folders to matchers for all levels. + for (size_t i = kNumLevels; i > 0; --i) { + const size_t level = i - 1; + DCHECK_LT(i, matchers_by_level.size()); + + const std::string folder_title = IndexedFolderName(level); + size_t folder_index = matchers_by_level[level].size() - 1; + // All folders were added to the end of each level. However for the + // |folder_L0| one more URL was added in the end. + if (level == 1) { + folder_index--; + } + ASSERT_LT(folder_index, matchers_by_level[level].size()); + matchers_by_level[level][folder_index] = IsFolderWithTitleAndChildren( + folder_title, ElementsAreArray(matchers_by_level[i])); + } + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers_by_level.front())); } -// Flaky. http://crbug.com/107744. -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, - SC_SinkBMs10LevelDown) { +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SinkBMs10LevelDown) { + const size_t kNumLevels = 15; ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + + using BookmarkNodeMatcher = testing::Matcher<std::unique_ptr<BookmarkNode>>; + + // Add an extra level to represent an empty folder for the last real level. + std::vector<std::vector<BookmarkNodeMatcher>> matchers_by_level(kNumLevels + + 1); const BookmarkNode* folder = GetBookmarkBarNode(0); const BookmarkNode* folder_L0 = nullptr; const BookmarkNode* folder_L10 = nullptr; - for (size_t level = 0; level < 15; ++level) { + for (size_t level = 0; level < kNumLevels; ++level) { size_t num_bookmarks = base::RandInt(0, 9); for (size_t i = 0; i < num_bookmarks; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_by_level[level].push_back( + IsUrlBookmarkWithTitleAndUrl(title, url)); } - std::string title = IndexedFolderName(level); + const std::string title = IndexedFolderName(level); folder = AddFolder(0, folder, folder->children().size(), title); ASSERT_NE(nullptr, folder); if (level == 0) folder_L0 = folder; if (level == 10) folder_L10 = folder; } - for (size_t i = 0; i < 3; ++i) { - std::string title = IndexedURLTitle(i + 10); - GURL url = GURL(IndexedURL(i + 10)); - ASSERT_NE(nullptr, AddURL(0, folder_L0, 0, title, url)); - } - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); - GURL url10 = GURL(IndexedURL(10)); + std::vector<BookmarkNodeMatcher>& matchers_L01 = matchers_by_level[1]; + for (size_t i = 0; i < 3; ++i) { + const std::string title = IndexedURLTitle(i + 10); + const GURL url = GURL(IndexedURL(i + 10)); + ASSERT_NE(nullptr, AddURL(0, folder_L0, i, title, url)); + + matchers_L01.insert(matchers_L01.begin() + i, + IsUrlBookmarkWithTitleAndUrl(title, url)); + } + + // Add all folders to matchers from all levels. + for (size_t i = kNumLevels; i > 0; --i) { + const size_t level = i - 1; + DCHECK_LT(i, matchers_by_level.size()); + + const std::string folder_title = IndexedFolderName(level); + matchers_by_level[level].push_back(IsFolderWithTitleAndChildren( + folder_title, ElementsAreArray(matchers_by_level[i]))); + } + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers_by_level.front())); + + // Move first 3 bookmarks from |folder_L0| to |folder_L10| which are 1 and 11 + // levels respectively. + std::vector<BookmarkNodeMatcher>& matchers_L11 = matchers_by_level[11]; + const GURL url10 = GURL(IndexedURL(10)); Move(0, GetUniqueNodeByURL(0, url10), folder_L10, folder_L10->children().size()); - GURL url11 = GURL(IndexedURL(11)); + matchers_L11.push_back(matchers_L01.front()); + matchers_L01.erase(matchers_L01.begin()); + + const GURL url11 = GURL(IndexedURL(11)); Move(0, GetUniqueNodeByURL(0, url11), folder_L10, 0); - GURL url12 = GURL(IndexedURL(12)); + matchers_L11.insert(matchers_L11.begin(), matchers_L01.front()); + matchers_L01.erase(matchers_L01.begin()); + + const GURL url12 = GURL(IndexedURL(12)); Move(0, GetUniqueNodeByURL(0, url12), folder_L10, 1); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers_L11.insert(matchers_L11.begin() + 1, matchers_L01.front()); + matchers_L01.erase(matchers_L01.begin()); + + // Update all folders to matchers for all levels. + for (size_t i = kNumLevels; i > 0; --i) { + const size_t level = i - 1; + DCHECK_LT(i, matchers_by_level.size()); + + const std::string folder_title = IndexedFolderName(level); + size_t folder_index = matchers_by_level[level].size() - 1; + // All folders were added to the end of each level. However for the + // |folder_L10| one more URL was added in the end. + if (level == 11) { + folder_index--; + } + ASSERT_LT(folder_index, matchers_by_level[level].size()); + matchers_by_level[level][folder_index] = IsFolderWithTitleAndChildren( + folder_title, ElementsAreArray(matchers_by_level[i])); + } + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers_by_level.front())); } -IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier, +IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_SinkEmptyBMFold5LevelsDown) { + const size_t kNumLevels = 15; ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + using BookmarkNodeMatcher = testing::Matcher<std::unique_ptr<BookmarkNode>>; + + // Add an extra level to represent an empty folder for the last real level. + std::vector<std::vector<BookmarkNodeMatcher>> matchers_by_level(kNumLevels + + 1); const BookmarkNode* folder = GetBookmarkBarNode(0); const BookmarkNode* folder_L5 = nullptr; for (size_t level = 0; level < 15; ++level) { size_t num_bookmarks = base::RandInt(0, 9); for (size_t i = 0; i < num_bookmarks; ++i) { - std::string title = IndexedURLTitle(i); - GURL url = GURL(IndexedURL(i)); + const std::string title = IndexedURLTitle(i); + const GURL url = GURL(IndexedURL(i)); ASSERT_NE(nullptr, AddURL(0, folder, i, title, url)); + matchers_by_level[level].push_back( + IsUrlBookmarkWithTitleAndUrl(title, url)); } - std::string title = IndexedFolderName(level); + const std::string title = IndexedFolderName(level); folder = AddFolder(0, folder, folder->children().size(), title); ASSERT_NE(nullptr, folder); if (level == 5) folder_L5 = folder; } + + // Add all folders to matchers from all levels. + for (size_t i = kNumLevels; i > 0; --i) { + const size_t level = i - 1; + DCHECK_LT(i, matchers_by_level.size()); + + const std::string folder_title = IndexedFolderName(level); + matchers_by_level[level].push_back(IsFolderWithTitleAndChildren( + folder_title, ElementsAreArray(matchers_by_level[i]))); + } + folder = AddFolder(0, GetBookmarkBarNode(0)->children().size(), kGenericFolderName); ASSERT_NE(nullptr, folder); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers_by_level.front().push_back(IsFolderWithTitle(kGenericFolderName)); + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers_by_level.front())); Move(0, folder, folder_L5, folder_L5->children().size()); - ASSERT_TRUE(BookmarksMatchVerifierChecker().Wait()); + matchers_by_level[6].push_back(matchers_by_level.front().back()); + matchers_by_level.front().pop_back(); + + // Update all folders to matchers for all levels. + for (size_t i = kNumLevels; i > 0; --i) { + const size_t level = i - 1; + DCHECK_LT(i, matchers_by_level.size()); + + const std::string folder_title = IndexedFolderName(level); + size_t folder_index = matchers_by_level[level].size() - 1; + // All folders were added to the end of each level. However for the + // |folder_L5| one more folder was added in the end. + if (level == 6) { + folder_index--; + } + ASSERT_LT(folder_index, matchers_by_level[level].size()); + matchers_by_level[level][folder_index] = IsFolderWithTitleAndChildren( + folder_title, ElementsAreArray(matchers_by_level[i])); + } + + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(1)->children(), + ElementsAreArray(matchers_by_level.front())); } IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTestWithVerifier,
diff --git a/chrome/browser/task_manager/providers/task.cc b/chrome/browser/task_manager/providers/task.cc index 2140cde3..ecd38d9c 100644 --- a/chrome/browser/task_manager/providers/task.cc +++ b/chrome/browser/task_manager/providers/task.cc
@@ -55,14 +55,12 @@ // static base::string16 Task::GetProfileNameFromProfile(Profile* profile) { DCHECK(profile); - ProfileAttributesEntry* entry; - if (g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(profile->GetOriginalProfile()->GetPath(), - &entry)) { - return entry->GetName(); - } - - return base::string16(); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath( + profile->GetOriginalProfile()->GetPath()); + return entry ? entry->GetName() : base::string16(); } void Task::Activate() {
diff --git a/chrome/browser/tflite_experiment/tflite_experiment_keyed_service_browsertest.cc b/chrome/browser/tflite_experiment/tflite_experiment_keyed_service_browsertest.cc index 7a6a8243..87e9d441 100644 --- a/chrome/browser/tflite_experiment/tflite_experiment_keyed_service_browsertest.cc +++ b/chrome/browser/tflite_experiment/tflite_experiment_keyed_service_browsertest.cc
@@ -95,18 +95,15 @@ ~TFLiteExperimentKeyedServiceBrowserTest() override = default; void SetUpCommandLine(base::CommandLine* cmd) override { - base::FilePath model_file_path; + // Location of test data. + base::FilePath g_test_data_directory; - EXPECT_TRUE( - base::PathService::Get(base::DIR_SOURCE_ROOT, &model_file_path)); - - model_file_path = model_file_path.Append(FILE_PATH_LITERAL("components")) - .Append(FILE_PATH_LITERAL("test")) - .Append(FILE_PATH_LITERAL("data")) - .Append(FILE_PATH_LITERAL("optimization_guide")) - .Append(FILE_PATH_LITERAL("simple_test.tflite")); + // Set TFLite model path. + base::PathService::Get(chrome::DIR_TEST_DATA, &g_test_data_directory); + g_test_data_directory = + g_test_data_directory.Append(FILE_PATH_LITERAL("simple_test.tflite")); cmd->AppendSwitchASCII(tflite_experiment::switches::kTFLiteModelPath, - model_file_path.MaybeAsASCII()); + g_test_data_directory.MaybeAsASCII()); // Set TFLite experiment log path. cmd->AppendSwitchASCII(
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 9342d752..d08f3741 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -3148,8 +3148,6 @@ "content_settings/media_authorization_wrapper_test.h", "content_settings/media_authorization_wrapper_test.mm", "find_bar/find_bar_platform_helper_mac.mm", - "startup/mac_system_infobar_delegate.cc", - "startup/mac_system_infobar_delegate.h", "views/apps/chrome_app_window_client_views_mac.mm", "views/certificate_viewer_mac_views.mm", "views/dropdown_bar_host_mac.mm",
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 b30a605..5a35121 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Gekopieer</translation> <translation id="2707726405694321444">Herlaai bladsy</translation> <translation id="2709516037105925701">Outovul</translation> +<translation id="271033894570825754">Nuut</translation> <translation id="2718352093833049315">Net met Wi-Fi</translation> <translation id="2718846868787000099">Die werwe wat jy besoek, kan jou voorkeure sien sodat dit vir jou inhoud in jou voorkeurtale kan wys</translation> <translation id="2723001399770238859">oudio</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 2ac64f1..0f02aa0 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">ተቀድቷል</translation> <translation id="2707726405694321444">ገጹን አድስ</translation> <translation id="2709516037105925701">ራስ-ሙላ</translation> +<translation id="271033894570825754">አዲስ</translation> <translation id="2718352093833049315">በWi-Fi ላይ ብቻ</translation> <translation id="2718846868787000099">በመረጡት ቋንቋዎች ውስጥ ይዘትን ለማሳየት፣ የሚጎበኟቸው ጣቢያዎች ምርጫዎችዎን ማየት ይችላሉ</translation> <translation id="2723001399770238859">ድምጽ</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 9804a662..72c8094 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">تم النسخ</translation> <translation id="2707726405694321444">إعادة تحميل الصفحة</translation> <translation id="2709516037105925701">الملء التلقائي</translation> +<translation id="271033894570825754">جديدة</translation> <translation id="2718352093833049315">باستخدام شبكة Wi-Fi فقط</translation> <translation id="2718846868787000099">يمكن للمواقع التي تزورها الاطّلاع على إعداداتك المفضّلة لتتمكن من عرض المحتوى بلغاتك المفضّلة.</translation> <translation id="2723001399770238859">الصوت</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb index f4a8d50d..132a5c9 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">প্ৰতিলিপি কৰা হ'ল</translation> <translation id="2707726405694321444">পৃষ্ঠাটো ৰিফ্ৰেশ্ব কৰক</translation> <translation id="2709516037105925701">স্বয়ংপূৰ্তি</translation> +<translation id="271033894570825754">নতুন</translation> <translation id="2718352093833049315">কেৱল ৱাই-ফাইত</translation> <translation id="2718846868787000099">আপুনি অগ্ৰাধিকাৰ দিয়া ভাষাত সমল দেখুৱাবলৈ আপুনি চোৱা ছাইটসমূহে আপোনাৰ অগ্ৰাধিকাৰসমূহ চাব পাৰে</translation> <translation id="2723001399770238859">অডিঅ’</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">সুৰক্ষিত ব্ৰাউজিং অফ কৰিবনে?</translation> <translation id="6127379762771434464">বস্তুটো আঁতৰোৱা হ’ল</translation> <translation id="6137022273846704445"><ph name="APP_NAME" />ৰ ভাষা</translation> +<translation id="6138832295072039549">ইয়াত আপোনাৰ ছাইটৰ ছেটিং সলনি কৰক</translation> <translation id="6140709049082532940">বৰ্ধিত সুৰক্ষা:</translation> <translation id="6140912465461743537">দেশ/অঞ্চল</translation> <translation id="614940544461990577">এইখিনি কৰি চাওক:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index 3c213c0..fdfd6ca 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopyalandı</translation> <translation id="2707726405694321444">Səhifəni yeniləyin</translation> <translation id="2709516037105925701">Avtomatik doldurma</translation> +<translation id="271033894570825754">Yeni</translation> <translation id="2718352093833049315">Yalnız Wi-Fi üzərindən</translation> <translation id="2718846868787000099">Tərcih etdiyiniz dillərdə məzmunu göstərmək üçün ziyarət etdiyiniz saytlar tərcihlərinizi görə bilər</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb index bea3b216..95634c6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Скапіравана</translation> <translation id="2707726405694321444">Абнавіць старонку</translation> <translation id="2709516037105925701">Аўтазапаўненне</translation> +<translation id="271033894570825754">Новае</translation> <translation id="2718352093833049315">Толькі па Wi-Fi</translation> <translation id="2718846868787000099">Каб паказваць змесціва на выбраных вамі мовах, сайты, якія вы наведваеце, могуць праглядаць зададзеныя вамі параметры</translation> <translation id="2723001399770238859">аўдыя</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb index 5ebcbe3..232f8cd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Копирано</translation> <translation id="2707726405694321444">Опресняване на страницата</translation> <translation id="2709516037105925701">Автоматично попълване</translation> +<translation id="271033894570825754">Създаване</translation> <translation id="2718352093833049315">Само при Wi-Fi</translation> <translation id="2718846868787000099">Сайтовете, които посещавате, могат да виждат предпочитанията ви, за да ви показват съдържание на предпочитаните от вас езици</translation> <translation id="2723001399770238859">звук</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 48e854b..5e58954 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">প্রতিলিপি করা হয়েছে</translation> <translation id="2707726405694321444">পৃষ্ঠা রিফ্রেশ করুন</translation> <translation id="2709516037105925701">স্বয়ংপূরণ</translation> +<translation id="271033894570825754">নতুন</translation> <translation id="2718352093833049315">শুধুমাত্র ওয়াই-ফাই এ</translation> <translation id="2718846868787000099">আপনার পছন্দের ভাষায় কন্টেন্ট দেখাতে, আপনি যেসব সাইট ভিজিট করেন সেগুলি আপনার ভাষার পছন্দ দেখতে পাবে</translation> <translation id="2723001399770238859">অডিও</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 fbb89f57..746b0c11 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopirano</translation> <translation id="2707726405694321444">Osvježavanje stranice</translation> <translation id="2709516037105925701">Automatsko popunjavanje</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Samo na WiFi mreži</translation> <translation id="2718846868787000099">U svrhu prikazivanja sadržaja na željenim jezicima, web lokacije koje posjetite će moći vidjeti vaše postavke</translation> <translation id="2723001399770238859">zvuk</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 c7ac3712..c6a2a1a 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiada</translation> <translation id="2707726405694321444">Actualitza la pàgina</translation> <translation id="2709516037105925701">Emplenament automàtic</translation> +<translation id="271033894570825754">Nou</translation> <translation id="2718352093833049315">Només amb Wi-Fi</translation> <translation id="2718846868787000099">Els llocs web que visites poden veure les teves preferències per mostrar-te contingut en els teus idiomes preferits</translation> <translation id="2723001399770238859">àudio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb index 56c4d936..9d1a56d5 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Zkopírováno</translation> <translation id="2707726405694321444">Obnovit stránku</translation> <translation id="2709516037105925701">Automatické vyplňování</translation> +<translation id="271033894570825754">Nové</translation> <translation id="2718352093833049315">Pouze v sítích Wi-Fi</translation> <translation id="2718846868787000099">Navštívené weby vidí vaše předvolby, aby vám mohly zobrazovat obsah v preferovaných jazycích</translation> <translation id="2723001399770238859">zvuk</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb index 672bc31..80b4ca7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopieret</translation> <translation id="2707726405694321444">Opdater siden</translation> <translation id="2709516037105925701">AutoFyld</translation> +<translation id="271033894570825754">Nyt</translation> <translation id="2718352093833049315">Kun på Wi-Fi</translation> <translation id="2718846868787000099">For at vise indhold på dine foretrukne sprog kan de websites, du besøger, se dine præferencer</translation> <translation id="2723001399770238859">lyd</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 71ccb956..e82c3d1 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopiert</translation> <translation id="2707726405694321444">Seite aktualisieren</translation> <translation id="2709516037105925701">Automatisches Ausfüllen</translation> +<translation id="271033894570825754">Neu</translation> <translation id="2718352093833049315">Nur bei WLAN</translation> <translation id="2718846868787000099">Zum Anzeigen von Inhalten in Ihren bevorzugten Sprachen müssen Websites, die Sie besuchen, Ihre Einstellungen abrufen können</translation> <translation id="2723001399770238859">Audio</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">Safe Browsing deaktivieren?</translation> <translation id="6127379762771434464">Eintrag entfernt</translation> <translation id="6137022273846704445">Sprache von <ph name="APP_NAME" /></translation> +<translation id="6138832295072039549">Hier können Sie Ihre Websiteeinstellungen ändern</translation> <translation id="6140709049082532940">Erweiterter Schutz</translation> <translation id="6140912465461743537">Land/Region</translation> <translation id="614940544461990577">Versuchen Sie Folgendes:</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 a4d636b0..364fe1da 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Αντιγράφ.</translation> <translation id="2707726405694321444">Ανανέωση σελίδας</translation> <translation id="2709516037105925701">Αυτόματη συμπλήρωση</translation> +<translation id="271033894570825754">Νέο</translation> <translation id="2718352093833049315">Μόνο σε Wi-Fi</translation> <translation id="2718846868787000099">Για να είναι δυνατή η εμφάνιση του περιεχομένου στις προτιμώμενες γλώσσες σας, οι ιστότοποι που επισκέπτεστε μπορούν να δουν τις προτιμήσεις σας.</translation> <translation id="2723001399770238859">ήχος</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 c7dc7bf..90007c92 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copied</translation> <translation id="2707726405694321444">Refresh page</translation> <translation id="2709516037105925701">Auto-fill</translation> +<translation id="271033894570825754">New</translation> <translation id="2718352093833049315">Only on Wi-Fi</translation> <translation id="2718846868787000099">To show content in your preferred languages, the sites that you visit can see your preferences</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb index cde448a..d3c1bc19 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiado</translation> <translation id="2707726405694321444">Actualizar página</translation> <translation id="2709516037105925701">Autocompletar</translation> +<translation id="271033894570825754">Nuevo</translation> <translation id="2718352093833049315">Solo en Wi-Fi</translation> <translation id="2718846868787000099">Para poder mostrar contenido en tus idiomas preferidos, los sitios que visitas deberán acceder a tus preferencias</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index 9e2e9683..aeaac32 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiado</translation> <translation id="2707726405694321444">Actualizar página</translation> <translation id="2709516037105925701">Autocompletar</translation> +<translation id="271033894570825754">Nuevo</translation> <translation id="2718352093833049315">Solo en Wi-Fi</translation> <translation id="2718846868787000099">Para mostrar contenido en los idiomas que has seleccionado, los sitios que visites pueden ver tus preferencias</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index 9f9270f..e982b61 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopeeritud</translation> <translation id="2707726405694321444">Lehe värskendamine</translation> <translation id="2709516037105925701">Automaatne täitmine</translation> +<translation id="271033894570825754">Uus</translation> <translation id="2718352093833049315">Ainult WiFi-ga</translation> <translation id="2718846868787000099">Sisu kuvamiseks teie eelistatud keeltes näevad teie külastatavad saidid teie eelistusi</translation> <translation id="2723001399770238859">heli</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb index 0504d168..26e8799 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopiatuta</translation> <translation id="2707726405694321444">Freskatu orria</translation> <translation id="2709516037105925701">Betetze automatikoa</translation> +<translation id="271033894570825754">Berria</translation> <translation id="2718352093833049315">Wifi bidez soilik</translation> <translation id="2718846868787000099">Edukia hobetsitako hizkuntzetan erakusteko, bisitatzen dituzun webguneek zure hobespenak ikus ditzakete</translation> <translation id="2723001399770238859">audioa</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 62d2244..831db6c 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">کپی شد</translation> <translation id="2707726405694321444">بازخوانی صفحه</translation> <translation id="2709516037105925701">تکمیل خودکار</translation> +<translation id="271033894570825754">جدید</translation> <translation id="2718352093833049315">فقط در Wi-Fi</translation> <translation id="2718846868787000099">برای نشان دادن محتوا به زبانهای دلخواهتان، سایتهایی که بازدید میکنید میتوانند اولویتهایتان را ببینند</translation> <translation id="2723001399770238859">صدا</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb index 3f297234..01a7706 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopioitu</translation> <translation id="2707726405694321444">Päivitä sivu</translation> <translation id="2709516037105925701">Automaattinen täyttö</translation> +<translation id="271033894570825754">Uusi</translation> <translation id="2718352093833049315">Vain Wi-Fillä</translation> <translation id="2718846868787000099">Avaamasi sivustot voivat nähdä asetuksesi, jotta ne voivat näyttää sisältöä haluamillasi kielillä</translation> <translation id="2723001399770238859">ääni</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb index 1c28876..9353c1dd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kinopya</translation> <translation id="2707726405694321444">I-refresh ang page</translation> <translation id="2709516037105925701">AutoFill</translation> +<translation id="271033894570825754">Bago</translation> <translation id="2718352093833049315">Sa Wi-Fi lang</translation> <translation id="2718846868787000099">Para ipakita ang content sa iyong mga gustong wika, makikita ng mga site na binibisita mo ang iyong mga kagustuhan</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb index 3bda33a..749c1fe 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copié</translation> <translation id="2707726405694321444">Actualiser la page</translation> <translation id="2709516037105925701">Remplissage automatique</translation> +<translation id="271033894570825754">Nouveau</translation> <translation id="2718352093833049315">Wi-Fi uniquement</translation> <translation id="2718846868787000099">Permet d'afficher le contenu dans vos langues favorites; les sites que vous visitez peuvent voir vos préférences</translation> <translation id="2723001399770238859">audio</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 57c1ab7..afc88ba 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copié</translation> <translation id="2707726405694321444">Actualiser la page</translation> <translation id="2709516037105925701">Saisie automatique</translation> +<translation id="271033894570825754">Nouveau</translation> <translation id="2718352093833049315">Wi-Fi uniquement</translation> <translation id="2718846868787000099">Permet d'afficher le contenu dans vos langues favorites. Les sites que vous visitez peuvent voir vos préférences</translation> <translation id="2723001399770238859">audio</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">Désactiver la navigation sécurisée ?</translation> <translation id="6127379762771434464">Élément supprimé</translation> <translation id="6137022273846704445">Langue de l'application <ph name="APP_NAME" /></translation> +<translation id="6138832295072039549">Modifiez les paramètres des sites ici</translation> <translation id="6140709049082532940">Protection renforcée :</translation> <translation id="6140912465461743537">Pays/Région</translation> <translation id="614940544461990577">Voici quelques conseils :</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 ad8f92a..7ad07bf 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiada</translation> <translation id="2707726405694321444">Actualiza páxina</translation> <translation id="2709516037105925701">Autocompletar</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Só con wifi</translation> <translation id="2718846868787000099">Se queres que che apareza o contido nos teus idiomas preferidos, os sitios que visites poderán ver as túas preferencias</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb index d4019a7..0f5ea13 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">કૉપિ કર્યું</translation> <translation id="2707726405694321444">પેજ રિફ્રેશ કરો</translation> <translation id="2709516037105925701">સ્વતઃભરો</translation> +<translation id="271033894570825754">નવું</translation> <translation id="2718352093833049315">ફક્ત વાઇ-ફાઇ પર</translation> <translation id="2718846868787000099">તમારી પસંદગીની ભાષાઓમાં કન્ટેન્ટ બતાવવા માટે, તમે મુલાકાત લો તે સાઇટ તમારી પસંદગીઓ જોઈ શકશે</translation> <translation id="2723001399770238859">ઑડિઓ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb index 89eb4147..0f7faf7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">कॉपी किया गया</translation> <translation id="2707726405694321444">पेज रीफ्रेश करें</translation> <translation id="2709516037105925701">ऑटोमैटिक भरना</translation> +<translation id="271033894570825754">नया</translation> <translation id="2718352093833049315">केवल वाई-फ़ाई पर</translation> <translation id="2718846868787000099">आपकी पसंदीदा भाषाओं में कॉन्टेंट दिखाने के लिए, आप जिन साइटों का इस्तेमाल करते हैं वे आपकी प्राथमिकताएं देख सकती हैं</translation> <translation id="2723001399770238859">ऑडियो</translation> @@ -343,7 +344,7 @@ <translation id="3384347053049321195">इमेज शेयर करें</translation> <translation id="3387650086002190359">सिस्टम त्रुटियों के कारण <ph name="FILE_NAME" /> डाउनलोड विफल रहा.</translation> <translation id="3389286852084373014">टेक्स्ट बहुत बड़ा है</translation> -<translation id="3398320232533725830">बुकमार्क प्रबंधक खोलें</translation> +<translation id="3398320232533725830">बुकमार्क मैनेजर खोलें</translation> <translation id="3414952576877147120">आकार:</translation> <translation id="3443221991560634068">वर्तमान पेज फिर से लोड करें</translation> <translation id="3478363558367712427">आप अपना सर्च इंजन चुन सकते हैं</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 e327686..b02373b 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopirano</translation> <translation id="2707726405694321444">Osvježavanje stranice</translation> <translation id="2709516037105925701">Automatsko popunjavanje</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Samo na Wi-Fiju</translation> <translation id="2718846868787000099">Da bi prikazivale sadržaj na jezicima koje preferirate, web-lokacije koje posjećujete mogu vidjeti vaše preferencije</translation> <translation id="2723001399770238859">zvuk</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 61963c2f..5d86efa 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Másolt</translation> <translation id="2707726405694321444">Oldal frissítése</translation> <translation id="2709516037105925701">Automatikus kitöltés</translation> +<translation id="271033894570825754">Új</translation> <translation id="2718352093833049315">Csak Wi-Fi-n</translation> <translation id="2718846868787000099">A felkeresett webhelyek láthatják az Ön preferenciáit, hogy a kívánt nyelveken jeleníthessék meg a tartalmakat</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb index 37a5d62..4a4acc1 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Պատճենվեց</translation> <translation id="2707726405694321444">Թարմացնել էջը</translation> <translation id="2709516037105925701">Ինքնալցում</translation> +<translation id="271033894570825754">New</translation> <translation id="2718352093833049315">Միայն Wi-Fi-ով</translation> <translation id="2718846868787000099">Ձեր նախընտրած լեզուներով բովանդակություն ցուցադրելու համար կայքերը, որոնք այցելում եք, կարող են տեսնել ձեր կարգավորումները</translation> <translation id="2723001399770238859">audio</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 b84a489..25a03976 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Disalin</translation> <translation id="2707726405694321444">Segarkan halaman</translation> <translation id="2709516037105925701">Isi-Otomatis</translation> +<translation id="271033894570825754">Baru</translation> <translation id="2718352093833049315">Hanya melalui Wi-Fi</translation> <translation id="2718846868787000099">Untuk menampilkan konten dalam bahasa pilihan Anda, situs yang dikunjungi dapat melihat preferensi Anda</translation> <translation id="2723001399770238859">audio</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 78e7293..1e457e2 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Afritað</translation> <translation id="2707726405694321444">Endurnýja síðu</translation> <translation id="2709516037105925701">Sjálfvirk útfylling</translation> +<translation id="271033894570825754">Nýtt</translation> <translation id="2718352093833049315">Aðeins um Wi-Fi</translation> <translation id="2718846868787000099">Vefsvæðin sem þú opnar geta séð kjörstillingarnar þínar til að sýna þér efni á þeim tungumálum sem þú hefur valið.</translation> <translation id="2723001399770238859">hljóð</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb index 7e2bfae..7b74d287 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiata</translation> <translation id="2707726405694321444">Aggiorna la pagina</translation> <translation id="2709516037105925701">Compilazione automatica</translation> +<translation id="271033894570825754">Nuovo</translation> <translation id="2718352093833049315">Solo su Wi-Fi</translation> <translation id="2718846868787000099">Per mostrare i contenuti nelle tue lingue preferite, i siti che visiti possono vedere le tue preferenze</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb index 9fbe21d..dd78568 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">הועתק</translation> <translation id="2707726405694321444">רענון הדף</translation> <translation id="2709516037105925701">מילוי אוטומטי</translation> +<translation id="271033894570825754">חדש</translation> <translation id="2718352093833049315">רק ב-Wi-Fi</translation> <translation id="2718846868787000099">כדי שנוכל להציג תוכן בשפות המועדפות עליך, ההעדפות שלך גלויות לאתרים שביקרת בהם</translation> <translation id="2723001399770238859">אודיו</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb index 6a63bb8..241f8467 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">コピーしました</translation> <translation id="2707726405694321444">ページを更新</translation> <translation id="2709516037105925701">自動入力</translation> +<translation id="271033894570825754">新しいファイル</translation> <translation id="2718352093833049315">Wi-Fi接続時のみ</translation> <translation id="2718846868787000099">ご希望の言語でコンテンツを表示するため、アクセス先のサイトには設定内容が伝えられます</translation> <translation id="2723001399770238859">音声</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb index f2cc113..f95df58 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">დაკოპირდა</translation> <translation id="2707726405694321444">გვერდის განახლება</translation> <translation id="2709516037105925701">ავტომატური შევსება</translation> +<translation id="271033894570825754">ახალი</translation> <translation id="2718352093833049315">მხოლოდ Wi-Fi-ით</translation> <translation id="2718846868787000099">კონტენტის თქვენთვის სასურველ ენებზე რომ გამოჩნდეს, თქვენ მიერ მონახულებული საიტებისთვის ხელმისაწვდომი იქნება თქვენი უპირატესი პარამეტრები</translation> <translation id="2723001399770238859">აუდიო</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index 401c80f..8ac9cd49 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Көшірілген</translation> <translation id="2707726405694321444">Бетті жаңарту</translation> <translation id="2709516037105925701">Автотолтыру</translation> +<translation id="271033894570825754">Жаңа</translation> <translation id="2718352093833049315">Тек Wi-Fi</translation> <translation id="2718846868787000099">Кірген сайттар жасаған таңдауыңызды көріп, мазмұнды қалаған тіліңізде ұсына алады.</translation> <translation id="2723001399770238859">аудио</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">"Қауіпсіз шолу" функциясы өшірілсін бе?</translation> <translation id="6127379762771434464">Элемент жойылған</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> қолданбасының тілі</translation> +<translation id="6138832295072039549">Сайт параметрлерін осы жерден өзгертесіз.</translation> <translation id="6140709049082532940">Жақсартылған қорғау:</translation> <translation id="6140912465461743537">Ел/аймақ</translation> <translation id="614940544461990577">Орындап көріңіз:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb index 35f1086..bb4d832 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">បានថតចម្លង</translation> <translation id="2707726405694321444">ធ្វើឲ្យទំព័រថ្មីឡើងវិញ</translation> <translation id="2709516037105925701">បំពេញស្វ័យប្រវត្តិ</translation> +<translation id="271033894570825754">ថ្មី</translation> <translation id="2718352093833049315">នៅលើ Wi-Fi តែប៉ុណ្ណោះ</translation> <translation id="2718846868787000099">ដើម្បីបង្ហាញខ្លឹមសារជាភាសាដែលអ្នកចង់បកប្រែ គេហទំព័រដែលអ្នកចូលមើលអាចមើលចំណូលចិត្តរបស់អ្នក</translation> <translation id="2723001399770238859">សម្លេង</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 abdbc5f..c0b1ef5 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
@@ -242,6 +242,7 @@ <translation id="2704606927547763573">ನಕಲಿಸಲಾಗಿದೆ</translation> <translation id="2707726405694321444">ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation> <translation id="2709516037105925701">ಸ್ವಯಂತುಂಬುವಿಕೆ</translation> +<translation id="271033894570825754">ಹೊಸತು</translation> <translation id="2718352093833049315">ಕೇವಲ ವೈ-ಫೈ ಮಾತ್ರ</translation> <translation id="2718846868787000099">ವಿಷಯವನ್ನು ನಿಮ್ಮ ಆದ್ಯತೆಯ ಭಾಷೆಗಳಲ್ಲಿ ತೋರಿಸಲು, ನೀವು ಭೇಟಿ ನೀಡುವ ಸೈಟ್ಗಳು ನಿಮ್ಮ ಆದ್ಯತೆಗಳನ್ನು ನೋಡಬಹುದು</translation> <translation id="2723001399770238859">ಆಡಿಯೋ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index 60aed85..d01675e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">복사됨</translation> <translation id="2707726405694321444">페이지 새로고침</translation> <translation id="2709516037105925701">자동 완성</translation> +<translation id="271033894570825754">새 파일</translation> <translation id="2718352093833049315">Wi-Fi 연결 시</translation> <translation id="2718846868787000099">콘텐츠를 기본 언어로 표시하기 위해 방문하는 사이트에서 기본 설정을 확인할 수 있습니다.</translation> <translation id="2723001399770238859">오디오</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 ca5576f..e902b3d2 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Көчүрүлдү</translation> <translation id="2707726405694321444">Бетти жаңылоо</translation> <translation id="2709516037105925701">Автотолтуруу</translation> +<translation id="271033894570825754">Жаңы</translation> <translation id="2718352093833049315">Wi-Fi'да гана</translation> <translation id="2718846868787000099">Мазмунду тандаган тилдериңизде көрсөтүү үчүн сиз баш баккан сайттар параметрлериңизди көрө алат</translation> <translation id="2723001399770238859">audio</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">Коопсуз серептөө өчүрүлсүнбү?</translation> <translation id="6127379762771434464">Нерсе өчүрүлдү</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> колдонмосунун тили</translation> +<translation id="6138832295072039549">Сайттын жөндөөлөрүн бул жерден өзгөртүңүз</translation> <translation id="6140709049082532940">Жакшыртылган коргоо:</translation> <translation id="6140912465461743537">Өлкө/Дубан</translation> <translation id="614940544461990577">Төмөнкүлөрдү кылып көрүңүз:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb index f4f07fef..5026df66 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">ອັດສຳເນົາແລ້ວ</translation> <translation id="2707726405694321444">ຣີເຟຣຊຫນ້າ</translation> <translation id="2709516037105925701">ຕື່ມອັດຕະໂນມັດ</translation> +<translation id="271033894570825754">ໃຫມ່</translation> <translation id="2718352093833049315">ສະເພາະ Wi-Fi ເທົ່ານັ້ນ</translation> <translation id="2718846868787000099">ເພື່ອສະແດງເນື້ອຫາເປັນພາສາທີ່ຕ້ອງການ, ເວັບໄຊທີ່ທ່ານເຂົ້າເບິ່ງສາມາດເຫັນການຕັ້ງຄ່າຂອງທ່ານໄດ້</translation> <translation id="2723001399770238859">ສຽງ</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 3fdce899..7b9df79 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Nukopij.</translation> <translation id="2707726405694321444">Atnaujinti puslapį</translation> <translation id="2709516037105925701">Automatinis pildymas</translation> +<translation id="271033894570825754">Naujiena</translation> <translation id="2718352093833049315">Tik su „Wi–Fi“</translation> <translation id="2718846868787000099">Kad turinys būtų rodomas pageidaujamomis kalbomis, svetainės, kuriose lankotės, gali matyti jūsų nuostatas</translation> <translation id="2723001399770238859">garso įrašas</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 142b6a59..dc94e9d 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Nokopēts</translation> <translation id="2707726405694321444">Atsvaidzināt lapu</translation> <translation id="2709516037105925701">Automātiskā aizpilde</translation> +<translation id="271033894570825754">Jauns</translation> <translation id="2718352093833049315">Tikai Wi-Fi</translation> <translation id="2718846868787000099">Apmeklētajām vietnēm ir atļauta piekļuve jūsu preferencēm, lai nodrošinātu satura rādīšanu jūsu izvēlētajā valodā.</translation> <translation id="2723001399770238859">audio</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 e5eab3b..1f959eb 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Копирано</translation> <translation id="2707726405694321444">Освежи ја страницата</translation> <translation id="2709516037105925701">Автоматско пополнување</translation> +<translation id="271033894570825754">Ново</translation> <translation id="2718352093833049315">Само преку Wi-Fi</translation> <translation id="2718846868787000099">За да се прикажат содржини за вашите претпочитани јазици, сајтовите што ги посетувате можат да ги видат вашите претпочитања</translation> <translation id="2723001399770238859">аудио</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 6c2f437..2dadbff 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">പകർത്തി</translation> <translation id="2707726405694321444">പേജ് പുതുക്കുക</translation> <translation id="2709516037105925701">സ്വയമേവ പൂരിപ്പിക്കൽ</translation> +<translation id="271033894570825754">പുതിയത്</translation> <translation id="2718352093833049315">Wi-Fi യിൽ മാത്രം</translation> <translation id="2718846868787000099">നിങ്ങൾ തിരഞ്ഞെടുത്ത ഭാഷകളിൽ ഉള്ളടക്കം കാണിക്കുന്നതിന്, സന്ദർശിക്കുന്ന സൈറ്റുകൾക്ക് നിങ്ങളുടെ മുൻഗണനകൾ കാണാൻ കഴിയും</translation> <translation id="2723001399770238859">ഓഡിയോ</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">സുരക്ഷിത ബ്രൗസിംഗ് ഓഫാക്കണോ?</translation> <translation id="6127379762771434464">ഇനം നീക്കംചെയ്തു</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> എന്നതിന്റെ ഭാഷ</translation> +<translation id="6138832295072039549">നിങ്ങളുടെ സൈറ്റ് ക്രമീകരണം ഇവിടെ മാറ്റുക</translation> <translation id="6140709049082532940">മെച്ചപ്പെടുത്തിയ പരിരക്ഷ:</translation> <translation id="6140912465461743537">രാജ്യം/പ്രദേശം</translation> <translation id="614940544461990577">പരീക്ഷിച്ചുനോക്കൂ:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb index ea2ea6e..4215099 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Хуулсан</translation> <translation id="2707726405694321444">Хуудсыг дахин шинэчлэх</translation> <translation id="2709516037105925701">Автоматаар бөглөх</translation> +<translation id="271033894570825754">Шинэ</translation> <translation id="2718352093833049315">Зөвхөн Wi-Fi-аар</translation> <translation id="2718846868787000099">Таны сонгосон хэлнүүдийн контентыг харуулахын тулд таны зочилдог сайтууд таны сонголтыг харах боломжтой</translation> <translation id="2723001399770238859">Дуу</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 817c657..6682f6b 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">कॉपी केले</translation> <translation id="2707726405694321444">पृष्ठ रिफ्रेश करा</translation> <translation id="2709516037105925701">ऑटोफिल</translation> +<translation id="271033894570825754">नवीन</translation> <translation id="2718352093833049315">केवळ वाय-फाय वर</translation> <translation id="2718846868787000099">तुमच्या प्राधान्यकृत भाषांमध्ये आशय दाखवण्यासाठी, तुम्ही भेट देता त्या साइट तुमची प्राधान्ये पाहू शकतात</translation> <translation id="2723001399770238859">ऑडिओ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb index e2b563e1..d4b7c3b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Disalin</translation> <translation id="2707726405694321444">Muat semula halaman</translation> <translation id="2709516037105925701">Autoisi</translation> +<translation id="271033894570825754">Baharu</translation> <translation id="2718352093833049315">Hanya pada Wi-Fi</translation> <translation id="2718846868787000099">Untuk memaparkan kandungan dalam bahasa pilihan anda, tapak yang anda lawati dapat melihat pilihan anda</translation> <translation id="2723001399770238859">audio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb index 3a0bc6b..0a22acc 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">ကူးယူပြီးပါပြီ</translation> <translation id="2707726405694321444">စာမျက်နှာကို ဆန်းသစ်ယူရန်</translation> <translation id="2709516037105925701">အလိုလျောက် ဖြည့်စွက်</translation> +<translation id="271033894570825754">အသစသ်</translation> <translation id="2718352093833049315">ဝိုင်ဖိုင်တွင်သာ</translation> <translation id="2718846868787000099">အကြောင်းအရာများကို သင်၏ဦးစားပေး ဘာသာစကားများဖြင့် ပြရန်အတွက် သင်ဝင်ကြည့်သော ဝဘ်ဆိုက်များက သင်၏ဦးစားပေးချက်များကို ကြည့်နိုင်သည်</translation> <translation id="2723001399770238859">အသံ</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 99f8ef5..cc4c2cd 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">प्रतिलिपि गरियो</translation> <translation id="2707726405694321444">पृष्ठ ताजा गर्नुहोस्</translation> <translation id="2709516037105925701">स्वत:भर्नुहोस्</translation> +<translation id="271033894570825754">नयाँ</translation> <translation id="2718352093833049315">Wi-Fi मा मात्र</translation> <translation id="2718846868787000099">तपाईंले चाहेको भाषामा सामग्री देखाउन तपाईंले प्रयोग गर्ने साइटहरूले तपाईंका प्राथमिकताहरू देख्न सक्छन्</translation> <translation id="2723001399770238859">अडियो</translation> @@ -729,6 +730,7 @@ <translation id="6122831415929794347">सुरक्षित ब्राउजिङ निष्क्रिय पार्ने हो?</translation> <translation id="6127379762771434464">वस्तुलाई हटाइयो</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> को भाषा</translation> +<translation id="6138832295072039549">यहाँ गई आफ्नो साइटसम्बन्धी सेटिङ परिवर्तन गर्नुहोस्</translation> <translation id="6140709049082532940">सुदृढ सुरक्षा:</translation> <translation id="6140912465461743537">देश/क्षेत्र</translation> <translation id="614940544461990577">यसो गरी हेर्नुहोस्:</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb index 593de15f..5624f1e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Gekopieerd</translation> <translation id="2707726405694321444">Pagina vernieuwen</translation> <translation id="2709516037105925701">Automatisch invullen</translation> +<translation id="271033894570825754">Nieuw</translation> <translation id="2718352093833049315">Alleen via wifi</translation> <translation id="2718846868787000099">De sites die je bezoekt, kunnen je voorkeuren bekijken zodat ze content in je voorkeurstalen kunnen weergeven</translation> <translation id="2723001399770238859">audio</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 b59f50e2..902feed 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopiert</translation> <translation id="2707726405694321444">Last inn siden på nytt</translation> <translation id="2709516037105925701">Autofyll</translation> +<translation id="271033894570825754">Ny</translation> <translation id="2718352093833049315">Bare når Wi-Fi er på</translation> <translation id="2718846868787000099">For å kunne vise innhold på språkene du foretrekker, kan nettstedene du besøker, se preferansene dine</translation> <translation id="2723001399770238859">lyd</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb index 1180dbf..4e0f9a4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">କପି କରାଯାଇଛି</translation> <translation id="2707726405694321444">ପୃଷ୍ଠା ରିଫ୍ରେସ୍ କରନ୍ତୁ</translation> <translation id="2709516037105925701">ସ୍ୱତଃପୂରଣ</translation> +<translation id="271033894570825754">ନୂଆ</translation> <translation id="2718352093833049315">କେବଳ ୱାଇ-ଫାଇରେ</translation> <translation id="2718846868787000099">ଆପଣଙ୍କ ପସନ୍ଦର ଭାଷାଗୁଡ଼ିକରେ ବିଷୟବସ୍ତୁ ଦେଖାଇବା ପାଇଁ, ଆପଣ ଭିଜିଟ୍ କରୁଥିବା ସାଇଟଗୁଡ଼ିକ ଆପଣଙ୍କ ପସନ୍ଦଗୁଡ଼ିକୁ ଦେଖିପାରିବ</translation> <translation id="2723001399770238859">ଅଡିଓ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb index e45fcea..a79014ac 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">ਕਾਪੀ ਕੀਤਾ</translation> <translation id="2707726405694321444">ਪੰਨੇ ਰਿਫ੍ਰੈਸ਼ ਕਰੋ</translation> <translation id="2709516037105925701">ਆਟੋਫਿਲ</translation> +<translation id="271033894570825754">ਨਵਾਂ</translation> <translation id="2718352093833049315">ਕੇਵਲ ਵਾਈ-ਫਾਈ 'ਤੇ</translation> <translation id="2718846868787000099">ਤੁਹਾਡੀਆਂ ਤਰਜੀਹੀ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਸਮੱਗਰੀ ਦਿਖਾਉਣ ਲਈ, ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਸਾਈਟਾਂ ਤੁਹਾਡੀਆਂ ਤਰਜੀਹਾਂ ਨੂੰ ਦੇਖ ਸਕਦੀਆਂ ਹਨ</translation> <translation id="2723001399770238859">ਆਡੀਓ</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">ਕੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਬੰਦ ਕਰਨਾ ਹੈ?</translation> <translation id="6127379762771434464">ਆਈਟਮ ਹਟਾਈ ਗਈ</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> ਦੀ ਭਾਸ਼ਾ</translation> +<translation id="6138832295072039549">ਆਪਣੀਆਂ ਸਾਈਟ ਸੈਟਿੰਗਾਂ ਨੂੰ ਇੱਥੇ ਬਦਲੋ</translation> <translation id="6140709049082532940">ਵਿਸਤ੍ਰਿਤ ਸੁਰੱਖਿਆ:</translation> <translation id="6140912465461743537">ਦੇਸ਼/ਖੇਤਰ</translation> <translation id="614940544461990577">ਅਜ਼ਮਾਓ:</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 1c2fffa..fd40f93 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Skopiowane</translation> <translation id="2707726405694321444">Odśwież stronę</translation> <translation id="2709516037105925701">Autouzupełnianie</translation> +<translation id="271033894570825754">Nowy</translation> <translation id="2718352093833049315">Tylko przez Wi-Fi</translation> <translation id="2718846868787000099">Odwiedzane witryny będą miały dostęp do Twoich ustawień, by mogły pokazywać zawartość w wybranym przez Ciebie języku</translation> <translation id="2723001399770238859">dźwięk</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 896871e5..816800e 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiado</translation> <translation id="2707726405694321444">Atualizar página</translation> <translation id="2709516037105925701">Preenchimento automático</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Apenas com Wi-Fi</translation> <translation id="2718846868787000099">Os sites que você visita podem ver suas preferências para exibir conteúdo nos seus idiomas preferidos</translation> <translation id="2723001399770238859">áudio</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 349cc66..febe027 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiado</translation> <translation id="2707726405694321444">Atualizar página</translation> <translation id="2709516037105925701">Preenchimento automático</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Apenas em Wi-Fi</translation> <translation id="2718846868787000099">Para apresentar conteúdo nos seus idiomas preferidos, os sites que visitar podem ver as suas preferências.</translation> <translation id="2723001399770238859">áudio</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb index 7947662..c7f2ce0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Copiat</translation> <translation id="2707726405694321444">Actualizează pagina</translation> <translation id="2709516037105925701">Completare automată</translation> +<translation id="271033894570825754">Nou</translation> <translation id="2718352093833049315">Numai prin Wi-Fi</translation> <translation id="2718846868787000099">Site-urile pe care le accesezi îți pot vedea preferințele pentru a afișa conținut în limbile tale preferate</translation> <translation id="2723001399770238859">audio</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 0689729b..ecf878a 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Скопировано</translation> <translation id="2707726405694321444">Обновить страницу</translation> <translation id="2709516037105925701">Автозаполнение</translation> +<translation id="271033894570825754">Новый</translation> <translation id="2718352093833049315">Только Wi-Fi</translation> <translation id="2718846868787000099">Сайты, которые вы посещаете, могут видеть выбранные вами настройки, чтобы показывать контент на нужном языке.</translation> <translation id="2723001399770238859">аудио</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb index a32f4b6..ea39a06 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">පිටපත් කරන ලදි</translation> <translation id="2707726405694321444">පිටුව නැවුම් කරන්න</translation> <translation id="2709516037105925701">ස්වයං පිරවීම</translation> +<translation id="271033894570825754">පුවත්</translation> <translation id="2718352093833049315">Wi-Fi මත පමනි</translation> <translation id="2718846868787000099">ඔබ කැමති භාෂාවලින් අන්තර්ගතය පෙන්වීමට, ඔබ පිවිසෙන අඩවිවලට ඔබේ මනාප දැකිය හැකිය</translation> <translation id="2723001399770238859">ශ්රව්ය</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index 650aae2..6bffd68 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Skopírované</translation> <translation id="2707726405694321444">Obnoviť stránku</translation> <translation id="2709516037105925701">Automatické dopĺňanie</translation> +<translation id="271033894570825754">Nové</translation> <translation id="2718352093833049315">Len s Wi‑Fi</translation> <translation id="2718846868787000099">Weby, ktoré navštevujete, môžu vidieť vaše predvoľby a zobrazovať tak obsah vo vašich preferovaných jazykoch.</translation> <translation id="2723001399770238859">zvuk</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 fade716..9ca2781 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopirano</translation> <translation id="2707726405694321444">Osveži stran</translation> <translation id="2709516037105925701">Samodejno izpolnjevanje</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Samo v omrežju Wi-Fi</translation> <translation id="2718846868787000099">Če želite prikazati vsebino v prednostnih jezikih, lahko spletna mesta, ki jih obiščete, vidijo vaše nastavitve.</translation> <translation id="2723001399770238859">zvok</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 9adf1466..916d312 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopjuar</translation> <translation id="2707726405694321444">Rifresko faqen</translation> <translation id="2709516037105925701">Plotëso automatikisht</translation> +<translation id="271033894570825754">E re</translation> <translation id="2718352093833049315">Vetëm me Wi-Fi</translation> <translation id="2718846868787000099">Për të shfaqur përmbajtje në gjuhët e tua të preferuara, sajtet që viziton mund të shikojnë preferencat e tua</translation> <translation id="2723001399770238859">audio</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 ea19481..5ae4b63 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopirano</translation> <translation id="2707726405694321444">Osveži stranicu</translation> <translation id="2709516037105925701">Automatsko popunjavanje</translation> +<translation id="271033894570825754">Novo</translation> <translation id="2718352093833049315">Samo na WiFi-ju</translation> <translation id="2718846868787000099">Da bi vam prikazivali sadržaj na željenim jezicima, sajtovi koje posećujete mogu da vide podešavanja</translation> <translation id="2723001399770238859">audio</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 17d73d5..ba8cf63 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Копирано</translation> <translation id="2707726405694321444">Освежи страницу</translation> <translation id="2709516037105925701">Аутоматско попуњавање</translation> +<translation id="271033894570825754">Ново</translation> <translation id="2718352093833049315">Само на WiFi-ју</translation> <translation id="2718846868787000099">Да би вам приказивали садржај на жељеним језицима, сајтови које посећујете могу да виде подешавања</translation> <translation id="2723001399770238859">аудио</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 8b1e455..fa4f352 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopierat</translation> <translation id="2707726405694321444">Uppdatera sidan</translation> <translation id="2709516037105925701">Autofyll</translation> +<translation id="271033894570825754">Ny</translation> <translation id="2718352093833049315">Endast på Wi-Fi</translation> <translation id="2718846868787000099">Webbplatserna du besöker kan se dina inställningar, så att innehållet visas på önskat språk</translation> <translation id="2723001399770238859">ljud</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb index d2e2462..a62d22e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Imenakiliwa</translation> <translation id="2707726405694321444">Onyesha upya ukurasa</translation> <translation id="2709516037105925701">Kujaza Kiotomatiki</translation> +<translation id="271033894570825754">Mpya</translation> <translation id="2718352093833049315">Kwenye Wi-Fi pekee</translation> <translation id="2718846868787000099">Tovuti unazotembelea zinaweza kuona mapendeleo yako ili zikuonyeshe maudhui katika lugha unazopendelea</translation> <translation id="2723001399770238859">sauti</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 4e8aa06..0857b746 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">நகலெடுக்கப்பட்டது</translation> <translation id="2707726405694321444">பக்கத்தைப் புதுப்பி</translation> <translation id="2709516037105925701">தானாகநிரப்பு</translation> +<translation id="271033894570825754">புதிது</translation> <translation id="2718352093833049315">வைஃபையில் மட்டும்</translation> <translation id="2718846868787000099">உங்களுக்கு விருப்பமான மொழியில் உள்ளடக்கத்தைக் காட்டுவதற்காக நீங்கள் பார்க்கும் தளங்கள் உங்கள் விருப்பத்தேர்வுகளை அணுகலாம்</translation> <translation id="2723001399770238859">ஆடியோ</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">'பாதுகாப்பு உலாவல்' அம்சத்தை முடக்கவா?</translation> <translation id="6127379762771434464">உருப்படி அகற்றப்பட்டது</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> இன் மொழி</translation> +<translation id="6138832295072039549">தளத்தின் அமைப்புகளை இங்கே மாற்றலாம்</translation> <translation id="6140709049082532940">மேம்பட்ட பாதுகாப்பு:</translation> <translation id="6140912465461743537">நாடு/மண்டலம்</translation> <translation id="614940544461990577">இவற்றைச் செய்து பார்க்கவும்:</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 815c567..66c98d1 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">కాపీ చేయబడింది</translation> <translation id="2707726405694321444">పేజీని రిఫ్రెష్ చేయండి</translation> <translation id="2709516037105925701">ఆటో-ఫిల్</translation> +<translation id="271033894570825754">కొత్తది</translation> <translation id="2718352093833049315">Wi-Fiలో మాత్రమే</translation> <translation id="2718846868787000099">కంటెంట్ను మీ ప్రాధాన్య భాషల్లో చూపించడానికి, మీరు సందర్శించే సైట్లు మీ ప్రాధాన్యతలను చూడగలవు</translation> <translation id="2723001399770238859">ఆడియో</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">సురక్షిత బ్రౌజింగ్ను ఆఫ్ చేయాలా?</translation> <translation id="6127379762771434464">అంశాన్ని తీసివేసారు</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> భాష</translation> +<translation id="6138832295072039549">ఇక్కడ మీ సైట్ సెట్టింగ్లు మార్చండి</translation> <translation id="6140709049082532940">మెరుగైన రక్షణ:</translation> <translation id="6140912465461743537">దేశం/ప్రాంతం</translation> <translation id="614940544461990577">ఇలా చేసి ప్రయత్నించండి:</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 64e2771..76f4313 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">คัดลอกแล้ว</translation> <translation id="2707726405694321444">รีเฟรชหน้า</translation> <translation id="2709516037105925701">ป้อนอัตโนมัติ</translation> +<translation id="271033894570825754">ใหม่</translation> <translation id="2718352093833049315">Wi-Fi เท่านั้น</translation> <translation id="2718846868787000099">เว็บไซต์ที่คุณเข้าชมสามารถดูค่ากำหนดเพื่อแสดงเนื้อหาในภาษาที่คุณต้องการ</translation> <translation id="2723001399770238859">เสียง</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 cd44f17..2e34a2b 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kopyalandı</translation> <translation id="2707726405694321444">Sayfayı yenile</translation> <translation id="2709516037105925701">Otomatik doldurma</translation> +<translation id="271033894570825754">Yeni</translation> <translation id="2718352093833049315">Yaln. Kablosuzda</translation> <translation id="2718846868787000099">Siteler, tercih ettiğiniz dillerde içerik göstermek için tercihlerinizi görebilir</translation> <translation id="2723001399770238859">ses</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb index 11eb5df..19307e88 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Скопійов.</translation> <translation id="2707726405694321444">Оновити сторінку</translation> <translation id="2709516037105925701">Автозаповнення</translation> +<translation id="271033894570825754">Новий</translation> <translation id="2718352093833049315">Лише у Wi-Fi</translation> <translation id="2718846868787000099">Сайти, які ви відвідуєте, можуть переглядати ваші налаштування, щоб показувати контент вибраними мовами</translation> <translation id="2723001399770238859">аудіо</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb index 11b77b1..eef86132 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">کاپی کیا</translation> <translation id="2707726405694321444">صفحہ ریفریش کریں</translation> <translation id="2709516037105925701">آٹو فل</translation> +<translation id="271033894570825754">نیا</translation> <translation id="2718352093833049315">صرف Wi-Fi پر</translation> <translation id="2718846868787000099">اپنی ترجیحی زبانوں میں مواد دکھانے کے لیے، آپ جو سائٹس ملاحظہ کرتے ہیں وہ آپ کی ترجیحات دیکھ سکتی ہیں</translation> <translation id="2723001399770238859">آڈیو</translation> @@ -730,6 +731,7 @@ <translation id="6122831415929794347">محفوظ براؤزنگ آن کریں؟</translation> <translation id="6127379762771434464">آئٹم ہٹا دیا گیا</translation> <translation id="6137022273846704445"><ph name="APP_NAME" /> کی زبان</translation> +<translation id="6138832295072039549">اپنی سائٹ کی ترتیبات کو یہاں تبدیل کریں</translation> <translation id="6140709049082532940">بہتر کردہ حفاظت:</translation> <translation id="6140912465461743537">ملک/علاقہ</translation> <translation id="614940544461990577">آزمائیں:</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 c008f5d..6b8d564 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Nusxa olindi</translation> <translation id="2707726405694321444">Sahifani yangilash</translation> <translation id="2709516037105925701">Avtoto‘ldirish</translation> +<translation id="271033894570825754">Yangi</translation> <translation id="2718352093833049315">Faqat Wi-Fi orqali</translation> <translation id="2718846868787000099">Kontent sizga mos tillarda chiqishi uchun siz ochadigan saytlar til sozlamalaringizni koʻra oladi</translation> <translation id="2723001399770238859">audio</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 b4dc2671..cc0d0ced 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Đã sao chép</translation> <translation id="2707726405694321444">Làm mới trang</translation> <translation id="2709516037105925701">Tự động điền</translation> +<translation id="271033894570825754">Mới</translation> <translation id="2718352093833049315">Chỉ trên Wi-Fi</translation> <translation id="2718846868787000099">Để hiển thị nội dung bằng ngôn ngữ bạn ưa dùng, những trang web bạn truy cập có thể thấy tùy chọn của bạn</translation> <translation id="2723001399770238859">âm thanh</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index 5ea7f8d..15652ce 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">已复制</translation> <translation id="2707726405694321444">刷新网页</translation> <translation id="2709516037105925701">自动填充</translation> +<translation id="271033894570825754">新建</translation> <translation id="2718352093833049315">仅限使用无线局域网时</translation> <translation id="2718846868787000099">您访问的网站可查看您的偏好设置,以便能够以您的首选语言显示网页内容</translation> <translation id="2723001399770238859">音频</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb index b020457..ce40ac3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">已複製</translation> <translation id="2707726405694321444">重新整理網頁</translation> <translation id="2709516037105925701">自動填入</translation> +<translation id="271033894570825754">全新</translation> <translation id="2718352093833049315">僅限 Wi-Fi 連線時</translation> <translation id="2718846868787000099">為了要以您偏好的語言顯示內容,您瀏覽的網站將能看到偏好設定</translation> <translation id="2723001399770238859">音效檔案</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb index b0347ab..6e431b2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">已複製</translation> <translation id="2707726405694321444">重新整理頁面</translation> <translation id="2709516037105925701">自動填入</translation> +<translation id="271033894570825754">新</translation> <translation id="2718352093833049315">僅限連上 Wi-Fi 網路時</translation> <translation id="2718846868787000099">如要以偏好的語言顯示內容,你所造訪的網站將可查看你的偏好設定</translation> <translation id="2723001399770238859">音訊</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 adf4747f..2400e1e 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
@@ -241,6 +241,7 @@ <translation id="2704606927547763573">Kukopishiwe</translation> <translation id="2707726405694321444">Vuselela ikhasi</translation> <translation id="2709516037105925701">Gcwalisa ngokuzenzakalela</translation> +<translation id="271033894570825754">Okusha</translation> <translation id="2718352093833049315">Ku-Wi-Fi kuphela</translation> <translation id="2718846868787000099">Ukuze abonise okuqukethwe ngezilimi ozithandayo, amasayithi owavakashelayo angabona okuncanyelwayo kwakho</translation> <translation id="2723001399770238859">umsindo</translation>
diff --git a/chrome/browser/ui/ash/media_notification_provider_impl_unittest.cc b/chrome/browser/ui/ash/media_notification_provider_impl_unittest.cc index a12fb3a5..95caa3d6a 100644 --- a/chrome/browser/ui/ash/media_notification_provider_impl_unittest.cc +++ b/chrome/browser/ui/ash/media_notification_provider_impl_unittest.cc
@@ -5,7 +5,6 @@ #include "chrome/browser/ui/ash/media_notification_provider_impl.h" #include "ash/public/cpp/media_notification_provider_observer.h" -#include "base/test/scoped_feature_list.h" #include "base/unguessable_token.h" #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" @@ -16,7 +15,6 @@ #include "chrome/test/base/testing_profile_manager.h" #include "components/session_manager/core/session_manager.h" #include "content/public/test/browser_task_environment.h" -#include "media/base/media_switches.h" #include "services/media_session/public/mojom/audio_focus.mojom.h" #include "services/media_session/public/mojom/media_session.mojom.h" #include "testing/gmock/include/gmock/gmock.h" @@ -53,11 +51,6 @@ void SetUp() override { testing::Test::SetUp(); - - // Disable a feature unrelated to the unit test. The use of cast features - // requires setting up extra dependencies. - feature_list_.InitAndDisableFeature(media::kGlobalMediaControlsForCast); - user_manager_->Initialize(); CHECK(testing_profile_manager_.SetUp()); @@ -114,7 +107,7 @@ MediaNotificationProviderImpl* provider() { return provider_.get(); } - content::BrowserTaskEnvironment browser_environment_; + content::BrowserTaskEnvironment browser_environment; private: session_manager::SessionManager session_manager_; @@ -122,8 +115,7 @@ new chromeos::FakeChromeUserManager()}; TestingProfileManager testing_profile_manager_{ TestingBrowserProcess::GetGlobal()}; - views::LayoutProvider layout_provider_; - base::test::ScopedFeatureList feature_list_; + views::LayoutProvider layout_provider; std::unique_ptr<MockMediaNotificationProviderObserver> mock_observer_; std::unique_ptr<MediaNotificationProviderImpl> provider_;
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_base.h b/chrome/browser/ui/cocoa/notifications/notification_builder_base.h index 658cc1d2..9606a45 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_base.h +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_base.h
@@ -41,6 +41,7 @@ - (void)setCreatorPid:(NSNumber*)pid; - (void)setNotificationType:(NSNumber*)notificationType; - (void)setShowSettingsButton:(BOOL)showSettingsButton; +- (void)setIcon:(NSImage*)icon; // Returns a representation of a notification that can be serialized. // Another instance of NotificationBuilder can read this directly and generate
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm index 041b380..b2a022c 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_base.mm
@@ -113,6 +113,14 @@ forKey:notification_constants::kNotificationHasSettingsButton]; } +- (void)setIcon:(NSImage*)icon { + if (!icon) + return; + + [_notificationData setObject:icon + forKey:notification_constants::kNotificationIcon]; +} + - (NSDictionary*)buildDictionary { return [[_notificationData copy] autorelease]; }
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h index 690779077..c9f350b 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.h
@@ -7,13 +7,12 @@ #import <Foundation/Foundation.h> -#include "base/mac/scoped_nsobject.h" #import "chrome/browser/ui/cocoa/notifications/notification_builder_base.h" @class NSUserNotification; // Provides a marshallable way for storing the information required to construct -// a NSUSerNotification that is to be displayed on the system. +// a NSUserNotification that is to be displayed on the system. // // A quick example: // base::scoped_nsobject<NotificationBuilder> builder( @@ -34,9 +33,6 @@ // [[NotificationBuilder alloc] initWithData:notificationData]); @interface NotificationBuilder : NotificationBuilderBase -// Sets the icon that is displayed in the notification if present -- (void)setIcon:(NSImage*)icon; - // Returns a notification ready to be displayed out of the provided // |notificationData|. - (NSUserNotification*)buildUserNotification;
diff --git a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm index 473b3bb0..085626d 100644 --- a/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm +++ b/chrome/browser/ui/cocoa/notifications/notification_builder_mac.mm
@@ -13,14 +13,6 @@ @implementation NotificationBuilder -- (void)setIcon:(NSImage*)icon { - if (!icon) - return; - - [_notificationData setObject:icon - forKey:notification_constants::kNotificationIcon]; -} - - (NSUserNotification*)buildUserNotification { base::scoped_nsobject<NSUserNotification> toast( [[NSUserNotification alloc] init]);
diff --git a/chrome/browser/ui/cocoa/profiles/profile_menu_controller.mm b/chrome/browser/ui/cocoa/profiles/profile_menu_controller.mm index 947b5516..fc94c01 100644 --- a/chrome/browser/ui/cocoa/profiles/profile_menu_controller.mm +++ b/chrome/browser/ui/cocoa/profiles/profile_menu_controller.mm
@@ -32,16 +32,6 @@ namespace { -// Used in UMA histogram macros, shouldn't be reordered or renumbered -enum ValidateMenuItemSelector { - UNKNOWN_SELECTOR = 0, - NEW_PROFILE, - EDIT_PROFILE, - SWITCH_PROFILE_MENU, - SWITCH_PROFILE_DOCK, - MAX_VALIDATE_MENU_SELECTOR, -}; - // Check Add Person pref. bool IsAddPersonEnabled() { PrefService* service = g_browser_process->local_state();
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc index 78cfcfe..3145a23 100644 --- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc +++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
@@ -7,9 +7,7 @@ #include <memory> #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_feature_list.h" #include "base/unguessable_token.h" -#include "chrome/browser/media/router/media_router_feature.h" #include "chrome/browser/ui/global_media_controls/media_dialog_delegate.h" #include "chrome/browser/ui/global_media_controls/media_notification_service.h" #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h" @@ -89,15 +87,13 @@ public: MediaToolbarButtonControllerTest() : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME, - base::test::TaskEnvironment::MainThreadType::UI) {} + base::test::TaskEnvironment::MainThreadType::UI), + service_(&profile_, false) {} ~MediaToolbarButtonControllerTest() override = default; void SetUp() override { - // Disable Media Router, which has many dependencies of its own. - feature_list_.InitAndDisableFeature(media_router::kMediaRouter); - service_ = std::make_unique<MediaNotificationService>(&profile_, false); - controller_ = std::make_unique<MediaToolbarButtonController>( - &delegate_, service_.get()); + controller_ = + std::make_unique<MediaToolbarButtonController>(&delegate_, &service_); } void TearDown() override { controller_.reset(); } @@ -128,13 +124,13 @@ void SimulateFocusGained(const base::UnguessableToken& id, bool controllable) { - service_->OnFocusGained(CreateFocusRequest(id, controllable)); + service_.OnFocusGained(CreateFocusRequest(id, controllable)); } void SimulateFocusLost(const base::UnguessableToken& id) { AudioFocusRequestStatePtr focus(AudioFocusRequestState::New()); focus->request_id = id; - service_->OnFocusLost(std::move(focus)); + service_.OnFocusLost(std::move(focus)); } void SimulateNecessaryMetadata(const base::UnguessableToken& id) { @@ -144,8 +140,8 @@ // service, but since the service doesn't run for this test, we'll manually // grab the MediaNotificationItem from the MediaNotificationService and // set the metadata. - auto item_itr = service_->sessions_.find(id.ToString()); - ASSERT_NE(service_->sessions_.end(), item_itr); + auto item_itr = service_.sessions_.find(id.ToString()); + ASSERT_NE(service_.sessions_.end(), item_itr); media_session::MediaMetadata metadata; metadata.title = base::ASCIIToUTF16("title"); @@ -154,7 +150,7 @@ } void SimulateDialogOpened(MockMediaDialogDelegate* delegate) { - delegate->Open(service_.get()); + delegate->Open(&service_); } MockMediaToolbarButtonControllerDelegate& delegate() { return delegate_; } @@ -163,9 +159,8 @@ content::BrowserTaskEnvironment task_environment_; MockMediaToolbarButtonControllerDelegate delegate_; TestingProfile profile_; - std::unique_ptr<MediaNotificationService> service_; + MediaNotificationService service_; std::unique_ptr<MediaToolbarButtonController> controller_; - base::test::ScopedFeatureList feature_list_; DISALLOW_COPY_AND_ASSIGN(MediaToolbarButtonControllerTest); };
diff --git a/chrome/browser/ui/profile_picker_unittest.cc b/chrome/browser/ui/profile_picker_unittest.cc index f26cf1f..808ef8c 100644 --- a/chrome/browser/ui/profile_picker_unittest.cc +++ b/chrome/browser/ui/profile_picker_unittest.cc
@@ -28,11 +28,9 @@ void SetUp() override { ASSERT_TRUE(testing_profile_manager_.SetUp()); } ProfileAttributesEntry* GetProfileAttributes(Profile* profile) { - ProfileAttributesEntry* entry = nullptr; - testing_profile_manager() + return testing_profile_manager() ->profile_attributes_storage() - ->GetProfileAttributesWithPath(profile->GetPath(), &entry); - return entry; + ->GetProfileAttributesWithPath(profile->GetPath()); } base::test::TaskEnvironment* task_environment() { return &task_environment_; }
diff --git a/chrome/browser/ui/signin/profile_colors_util_unittest.cc b/chrome/browser/ui/signin/profile_colors_util_unittest.cc index d0bda8df..07a9d4d4 100644 --- a/chrome/browser/ui/signin/profile_colors_util_unittest.cc +++ b/chrome/browser/ui/signin/profile_colors_util_unittest.cc
@@ -85,8 +85,9 @@ EXPECT_EQ(number_of_profiles + 1, storage()->GetNumberOfProfiles()); - ProfileAttributesEntry* entry = nullptr; - EXPECT_TRUE(storage()->GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + storage()->GetProfileAttributesWithPath(profile_path); + EXPECT_NE(entry, nullptr); if (color.has_value()) { entry->SetProfileThemeColors(
diff --git a/chrome/browser/ui/startup/mac_system_infobar_delegate.cc b/chrome/browser/ui/startup/mac_system_infobar_delegate.cc deleted file mode 100644 index b37d49c..0000000 --- a/chrome/browser/ui/startup/mac_system_infobar_delegate.cc +++ /dev/null
@@ -1,97 +0,0 @@ -// 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/ui/startup/mac_system_infobar_delegate.h" -#include "base/command_line.h" -#include "base/mac/mac_util.h" -#include "chrome/browser/infobars/infobar_service.h" -#include "chrome/grit/generated_resources.h" -#include "components/infobars/core/infobar.h" -#include "components/strings/grit/components_strings.h" -#include "ui/base/l10n/l10n_util.h" - -namespace { - -using CPUType = base::mac::CPUType; - -CPUType MaybeOverrideCPUTypeFromCommandLine(CPUType detected_type) { - // Use like: --force-mac-system-infobar={arm,rosetta,intel} to see different - // behavior by platform. - std::string forced_cpu = - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - "force-mac-system-infobar"); - if (forced_cpu == "arm") - return CPUType::kArm; - if (forced_cpu == "rosetta") - return CPUType::kTranslatedIntel; - if (forced_cpu == "intel") - return CPUType::kIntel; - return detected_type; -} - -CPUType GetEffectiveCPUType() { - return MaybeOverrideCPUTypeFromCommandLine(base::mac::GetCPUType()); -} - -} // namespace - -constexpr base::Feature MacSystemInfoBarDelegate::kMacSystemInfoBar; - -// static -bool MacSystemInfoBarDelegate::ShouldShow() { - constexpr base::FeatureParam<bool> kEnableRosetta{&kMacSystemInfoBar, - "enable_rosetta", false}; - constexpr base::FeatureParam<bool> kEnableArm{&kMacSystemInfoBar, - "enable_arm", false}; - - CPUType cpu = GetEffectiveCPUType(); - return (cpu == CPUType::kTranslatedIntel && kEnableRosetta.Get()) || - (cpu == CPUType::kArm && kEnableArm.Get()); -} - -// static -void MacSystemInfoBarDelegate::Create(InfoBarService* infobar_service) { - infobar_service->AddInfoBar(infobar_service->CreateConfirmInfoBar( - std::unique_ptr<ConfirmInfoBarDelegate>(new MacSystemInfoBarDelegate()))); -} - -MacSystemInfoBarDelegate::MacSystemInfoBarDelegate() = default; -MacSystemInfoBarDelegate::~MacSystemInfoBarDelegate() = default; - -bool MacSystemInfoBarDelegate::ShouldExpire( - const NavigationDetails& details) const { - // Don't dismiss on navigation - require an explicit dismissal. This infobar - // communicates an important thing (i.e. that the product is probably kind of - // broken). - return false; -} - -infobars::InfoBarDelegate::InfoBarIdentifier -MacSystemInfoBarDelegate::GetIdentifier() const { - return SYSTEM_INFOBAR_DELEGATE_MAC; -} - -base::string16 MacSystemInfoBarDelegate::GetLinkText() const { - return l10n_util::GetStringUTF16( - GetEffectiveCPUType() == CPUType::kArm - ? IDS_MAC_SYSTEM_INFOBAR_LINK_TEXT_ARM - : IDS_MAC_SYSTEM_INFOBAR_LINK_TEXT_ROSETTA); -} - -GURL MacSystemInfoBarDelegate::GetLinkURL() const { - return GURL( - l10n_util::GetStringUTF8(GetEffectiveCPUType() == CPUType::kArm - ? IDS_MAC_SYSTEM_INFOBAR_LINK_URL_ARM - : IDS_MAC_SYSTEM_INFOBAR_LINK_URL_ROSETTA)); -} - -base::string16 MacSystemInfoBarDelegate::GetMessageText() const { - return l10n_util::GetStringUTF16(GetEffectiveCPUType() == CPUType::kArm - ? IDS_MAC_SYSTEM_INFOBAR_TEXT_ARM - : IDS_MAC_SYSTEM_INFOBAR_TEXT_ROSETTA); -} - -int MacSystemInfoBarDelegate::GetButtons() const { - return BUTTON_NONE; -}
diff --git a/chrome/browser/ui/startup/mac_system_infobar_delegate.h b/chrome/browser/ui/startup/mac_system_infobar_delegate.h deleted file mode 100644 index 5999ca8..0000000 --- a/chrome/browser/ui/startup/mac_system_infobar_delegate.h +++ /dev/null
@@ -1,69 +0,0 @@ -// 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_UI_STARTUP_MAC_SYSTEM_INFOBAR_DELEGATE_H_ -#define CHROME_BROWSER_UI_STARTUP_MAC_SYSTEM_INFOBAR_DELEGATE_H_ - -#include "base/feature_list.h" -#include "base/strings/string16.h" -#include "components/infobars/core/confirm_infobar_delegate.h" -#include "url/gurl.h" - -class InfoBarService; - -// This infobar displays a message and link depending on the architecture of the -// Mac system. The message, link text, and link itself all come from grit, which -// allows them to be customized via field trials; placeholder values are present -// in the source grit files and marked as not translateable. -// -// In practice, this class will be used like this: -// 1. The MacSystemInfobar field trial is enabled -// 2. The "enable-arm" or "enable-rosetta" (or both) params for that trial -// are set to "1" -// 3. The IDS_MAC_SYSTEM_INFOBAR_* grit messages are overridden with -// appropriate text depending on the situation -// -// This allows the Mac-on-Arm launch process to "late bind" notification & help -// text in this infobar. -// -// The only logic in this infobar is for choosing between Arm string constants -// and Rosetta string constants. Once the field trial system becomes capable of -// qualifying study participants by architecture as well as OS version, this -// logic will go away as well, and this infobar will morph into a generic "show -// strings from a field trial whenever that field trial is active" type of -// infobar. -class MacSystemInfoBarDelegate : public ConfirmInfoBarDelegate { - public: - static constexpr base::Feature kMacSystemInfoBar{ - "MacSystemInfoBar", - base::FEATURE_DISABLED_BY_DEFAULT, - }; - - MacSystemInfoBarDelegate(const MacSystemInfoBarDelegate& other) = delete; - MacSystemInfoBarDelegate& operator=(const MacSystemInfoBarDelegate& other) = - delete; - - // Returns whether this infobar should show or not, depending on the current - // CPU architecture and state of fieldtrials/switches. - static bool ShouldShow(); - - // Creates an instance of this infobar and adds it to the provided - // InfoBarService. It is an error to call this method if !ShouldShow() outside - // tests - the correct strings are not guaranteed to be produced. - static void Create(InfoBarService* infobar_service); - - private: - MacSystemInfoBarDelegate(); - ~MacSystemInfoBarDelegate() override; - - // ConfirmInfoBarDelegate: - bool ShouldExpire(const NavigationDetails& details) const override; - infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; - base::string16 GetLinkText() const override; - GURL GetLinkURL() const override; - base::string16 GetMessageText() const override; - int GetButtons() const override; -}; - -#endif // CHROME_BROWSER_UI_STARTUP_MAC_SYSTEM_INFOBAR_DELEGATE_H_
diff --git a/chrome/browser/ui/startup/mac_system_infobar_delegate_unittest.cc b/chrome/browser/ui/startup/mac_system_infobar_delegate_unittest.cc deleted file mode 100644 index 60349f3d..0000000 --- a/chrome/browser/ui/startup/mac_system_infobar_delegate_unittest.cc +++ /dev/null
@@ -1,97 +0,0 @@ -// 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/ui/startup/mac_system_infobar_delegate.h" -#include "base/mac/mac_util.h" -#include "base/test/scoped_feature_list.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -using CPUType = base::mac::CPUType; - -void ForceArchForTest(CPUType type) { - const char kSwitch[] = "force-mac-system-infobar"; - auto* command_line = base::CommandLine::ForCurrentProcess(); - if (type == CPUType::kArm) - command_line->AppendSwitchASCII(kSwitch, "arm"); - else if (type == CPUType::kTranslatedIntel) - command_line->AppendSwitchASCII(kSwitch, "rosetta"); - else if (type == CPUType::kIntel) - command_line->AppendSwitchASCII(kSwitch, "intel"); -} - -class MacSystemInfoBarDelegateArmTest : public testing::Test { - public: - void SetUp() override { - base::FieldTrialParams params; - params["enable_arm"] = "true"; - features_.InitAndEnableFeatureWithParameters( - MacSystemInfoBarDelegate::kMacSystemInfoBar, params); - } - - private: - base::test::ScopedFeatureList features_; -}; - -class MacSystemInfoBarDelegateRosettaTest : public testing::Test { - public: - void SetUp() override { - base::FieldTrialParams params; - params["enable_rosetta"] = "true"; - features_.InitAndEnableFeatureWithParameters( - MacSystemInfoBarDelegate::kMacSystemInfoBar, params); - } - - private: - base::test::ScopedFeatureList features_; -}; - -class MacSystemInfoBarDelegateTest : public testing::Test { - public: - void SetUp() override { - features_.InitAndEnableFeature(MacSystemInfoBarDelegate::kMacSystemInfoBar); - } - - private: - base::test::ScopedFeatureList features_; -}; - -// Test that the enable/disable logic works properly on Arm. -TEST_F(MacSystemInfoBarDelegateArmTest, EnabledForArm) { - ForceArchForTest(CPUType::kArm); - ASSERT_TRUE(MacSystemInfoBarDelegate::ShouldShow()); - - ForceArchForTest(CPUType::kTranslatedIntel); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); - - ForceArchForTest(CPUType::kIntel); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); -} - -// Test that the enable/disable logic works properly on Rosetta. -TEST_F(MacSystemInfoBarDelegateRosettaTest, EnabledForRosetta) { - ForceArchForTest(CPUType::kTranslatedIntel); - ASSERT_TRUE(MacSystemInfoBarDelegate::ShouldShow()); - - ForceArchForTest(CPUType::kArm); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); - - ForceArchForTest(CPUType::kIntel); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); -} - -// Test that nothing is enabled when the feature is disabled. -TEST_F(MacSystemInfoBarDelegateTest, NotEnabledAnywhere) { - ForceArchForTest(CPUType::kTranslatedIntel); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); - - ForceArchForTest(CPUType::kArm); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); - - ForceArchForTest(CPUType::kIntel); - EXPECT_FALSE(MacSystemInfoBarDelegate::ShouldShow()); -} - -} // namespace
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc index 7f80d48..838308e 100644 --- a/chrome/browser/ui/startup/startup_browser_creator.cc +++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -261,11 +261,11 @@ return true; #else // Profiles that require signin are not available. - ProfileAttributesEntry* entry = nullptr; - if (g_browser_process->profile_manager() + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry) && - entry->IsSigninRequired()) { + .GetProfileAttributesWithPath(profile->GetPath()); + if (entry && entry->IsSigninRequired()) { return false; } @@ -597,13 +597,12 @@ // A browser starting for a profile being unlocked should always restore. if (!profile->IsGuestSession() && !profile->IsEphemeralGuestProfile()) { - ProfileAttributesEntry* entry = nullptr; - bool has_entry = + ProfileAttributesEntry* entry = g_browser_process->profile_manager() ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry); + .GetProfileAttributesWithPath(profile->GetPath()); - if (has_entry && entry->IsSigninRequired()) + if (entry && entry->IsSigninRequired()) pref.type = SessionStartupPref::LAST; } @@ -1307,9 +1306,9 @@ // manager as well. When neither of these is true, we can safely start up with // |profile|. auto* storage = &profile_manager->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - bool has_entry = storage->GetProfileAttributesWithPath(profile_path, &entry); - if (has_entry && (!entry->IsSigninRequired() || !profile)) { + ProfileAttributesEntry* entry = + storage->GetProfileAttributesWithPath(profile_path); + if (entry && (!entry->IsSigninRequired() || !profile)) { return profile; } @@ -1337,10 +1336,9 @@ auto* storage = &profile_manager->GetProfileAttributesStorage(); for (Profile* profile : ProfileManager::GetLastOpenedProfiles()) { // Return any profile that is not locked. - ProfileAttributesEntry* entry; - bool has_entry = - storage->GetProfileAttributesWithPath(profile->GetPath(), &entry); - if (!has_entry || !entry->IsSigninRequired()) + ProfileAttributesEntry* entry = + storage->GetProfileAttributesWithPath(profile->GetPath()); + if (!entry || !entry->IsSigninRequired()) return profile; }
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc index 238b188..4a970a80 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -1200,9 +1200,10 @@ SessionStartupPref pref(SessionStartupPref::URLS); pref.urls = urls; SessionStartupPref::SetStartupPref(profile2, pref); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile1->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile1->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); browser_creator.Start(command_line, profile_manager->user_data_dir(), @@ -2122,9 +2123,10 @@ for (const auto& profile_path : profile_paths) { ASSERT_TRUE(profile_manager->GetProfile(profile_path)); // Mark newly created profiles as active. - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + ASSERT_NE(entry, nullptr); entry->SetActiveTimeToNow(); } }
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index 4e62b08..981b2af 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -67,7 +67,6 @@ #if defined(OS_MAC) #include "base/mac/mac_util.h" #include "chrome/browser/ui/cocoa/keystone_infobar_delegate.h" -#include "chrome/browser/ui/startup/mac_system_infobar_delegate.h" #endif #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) @@ -608,11 +607,6 @@ ObsoleteSystemInfoBarDelegate::Create(infobar_service); } -#if defined(OS_MAC) - if (MacSystemInfoBarDelegate::ShouldShow()) - MacSystemInfoBarDelegate::Create(infobar_service); -#endif - #if !BUILDFLAG(IS_CHROMEOS_ASH) if (!command_line_.HasSwitch(switches::kNoDefaultBrowserCheck)) { // The default browser prompt should only be shown after the first run.
diff --git a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc index 380ef16..5779003 100644 --- a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc +++ b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc
@@ -82,11 +82,11 @@ // Helper function to set profile ephemeral. void SetProfileEphemeral(Profile* profile, bool val) { - ProfileAttributesEntry* entry; ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - EXPECT_TRUE( - storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsEphemeral(val); }
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_view_unittest.cc b/chrome/browser/ui/views/extensions/extensions_menu_view_unittest.cc index 0bdaee81..c01da6d 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_view_unittest.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_view_unittest.cc
@@ -553,6 +553,14 @@ EXPECT_EQ(2, user_action_tester.GetActionCount(kPinButtonUserAction)); } +TEST_F(ExtensionsMenuViewUnitTest, WindowTitle) { + AddSimpleExtension("Test Extension"); + + ExtensionsMenuView* const menu_view = extensions_menu(); + EXPECT_FALSE(menu_view->GetWindowTitle().empty()); + EXPECT_TRUE(menu_view->GetAccessibleWindowTitle().empty()); +} + TEST_F(ExtensionsMenuViewUnitTest, ContextMenuButtonUserAction) { base::UserActionTester user_action_tester; AddSimpleExtension("Test Extension");
diff --git a/chrome/browser/ui/views/file_system_access/file_system_access_icon_view.cc b/chrome/browser/ui/views/file_system_access/file_system_access_icon_view.cc index c87fe01..fe7a801 100644 --- a/chrome/browser/ui/views/file_system_access/file_system_access_icon_view.cc +++ b/chrome/browser/ui/views/file_system_access/file_system_access_icon_view.cc
@@ -63,9 +63,9 @@ const { return has_write_access_ ? l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_WRITE_USAGE_TOOLTIP) + IDS_FILE_SYSTEM_ACCESS_WRITE_USAGE_TOOLTIP) : l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_DIRECTORY_USAGE_TOOLTIP); + IDS_FILE_SYSTEM_ACCESS_DIRECTORY_USAGE_TOOLTIP); } void FileSystemAccessIconView::OnExecuting(ExecuteSource execute_source) {
diff --git a/chrome/browser/ui/views/file_system_access/file_system_access_permission_view.cc b/chrome/browser/ui/views/file_system_access/file_system_access_permission_view.cc index 966c915..f688a89 100644 --- a/chrome/browser/ui/views/file_system_access/file_system_access_permission_view.cc +++ b/chrome/browser/ui/views/file_system_access/file_system_access_permission_view.cc
@@ -29,15 +29,15 @@ switch (request.access) { case AccessType::kRead: return request.handle_type == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT - : IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT; + ? IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_DIRECTORY_TEXT + : IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_READ_PERMISSION_FILE_TEXT; case AccessType::kWrite: case AccessType::kReadWrite: // Only difference between write and read-write access dialog is in button // label and dialog title. return request.handle_type == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT - : IDS_NATIVE_FILE_SYSTEM_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT; + ? IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_DIRECTORY_TEXT + : IDS_FILE_SYSTEM_ACCESS_ORIGIN_SCOPED_WRITE_PERMISSION_FILE_TEXT; } NOTREACHED(); } @@ -46,14 +46,14 @@ switch (request.access) { case AccessType::kRead: return request.handle_type == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT - : IDS_NATIVE_FILE_SYSTEM_VIEW_FILE_PERMISSION_ALLOW_TEXT; + ? IDS_FILE_SYSTEM_ACCESS_VIEW_DIRECTORY_PERMISSION_ALLOW_TEXT + : IDS_FILE_SYSTEM_ACCESS_VIEW_FILE_PERMISSION_ALLOW_TEXT; case AccessType::kWrite: - return IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_ALLOW_TEXT; + return IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_ALLOW_TEXT; case AccessType::kReadWrite: return request.handle_type == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT - : IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_ALLOW_TEXT; + ? IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_ALLOW_TEXT + : IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_ALLOW_TEXT; } NOTREACHED(); } @@ -116,23 +116,23 @@ case AccessType::kRead: if (request_.handle_type == HandleType::kDirectory) { return l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_READ_DIRECTORY_PERMISSION_TITLE); + IDS_FILE_SYSTEM_ACCESS_READ_DIRECTORY_PERMISSION_TITLE); } else { return l10n_util::GetStringFUTF16( - IDS_NATIVE_FILE_SYSTEM_READ_FILE_PERMISSION_TITLE, + IDS_FILE_SYSTEM_ACCESS_READ_FILE_PERMISSION_TITLE, request_.path.BaseName().LossyDisplayName()); } case AccessType::kWrite: return l10n_util::GetStringFUTF16( - IDS_NATIVE_FILE_SYSTEM_WRITE_PERMISSION_TITLE, + IDS_FILE_SYSTEM_ACCESS_WRITE_PERMISSION_TITLE, request_.path.BaseName().LossyDisplayName()); case AccessType::kReadWrite: if (request_.handle_type == HandleType::kDirectory) { return l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_EDIT_DIRECTORY_PERMISSION_TITLE); + IDS_FILE_SYSTEM_ACCESS_EDIT_DIRECTORY_PERMISSION_TITLE); } else { return l10n_util::GetStringFUTF16( - IDS_NATIVE_FILE_SYSTEM_EDIT_FILE_PERMISSION_TITLE, + IDS_FILE_SYSTEM_ACCESS_EDIT_FILE_PERMISSION_TITLE, request_.path.BaseName().LossyDisplayName()); } }
diff --git a/chrome/browser/ui/views/file_system_access/file_system_access_restricted_directory_dialog_view.cc b/chrome/browser/ui/views/file_system_access/file_system_access_restricted_directory_dialog_view.cc index a3aabe6a..c7a12dde 100644 --- a/chrome/browser/ui/views/file_system_access/file_system_access_restricted_directory_dialog_view.cc +++ b/chrome/browser/ui/views/file_system_access/file_system_access_restricted_directory_dialog_view.cc
@@ -47,13 +47,13 @@ base::OnceCallback<void(SensitiveDirectoryResult)> callback) : handle_type_(handle_type), callback_(std::move(callback)) { SetTitle(handle_type_ == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TITLE - : IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TITLE); + ? IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TITLE + : IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TITLE); SetButtonLabel(ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16( handle_type_ == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_BUTTON - : IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_BUTTON)); + ? IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_BUTTON + : IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_BUTTON)); auto run_callback = [](FileSystemAccessRestrictedDirectoryDialogView* dialog, SensitiveDirectoryResult result) { @@ -75,8 +75,8 @@ AddChildView(file_system_access_ui_helper::CreateOriginLabel( handle_type_ == HandleType::kDirectory - ? IDS_NATIVE_FILE_SYSTEM_RESTRICTED_DIRECTORY_TEXT - : IDS_NATIVE_FILE_SYSTEM_RESTRICTED_FILE_TEXT, + ? IDS_FILE_SYSTEM_ACCESS_RESTRICTED_DIRECTORY_TEXT + : IDS_FILE_SYSTEM_ACCESS_RESTRICTED_FILE_TEXT, origin, views::style::CONTEXT_DIALOG_BODY_TEXT, /*show_emphasis=*/true)); }
diff --git a/chrome/browser/ui/views/file_system_access/file_system_access_usage_bubble_view.cc b/chrome/browser/ui/views/file_system_access/file_system_access_usage_bubble_view.cc index 793a7fd..72ae7d6 100644 --- a/chrome/browser/ui/views/file_system_access/file_system_access_usage_bubble_view.cc +++ b/chrome/browser/ui/views/file_system_access/file_system_access_usage_bubble_view.cc
@@ -63,9 +63,9 @@ DCHECK(!usage.writable_files.empty()); if (usage.writable_files.size() == 1) { *embedded_path = usage.writable_files.front(); - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_FILE_TEXT; } - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_TEXT; } // Only readable files. @@ -73,9 +73,9 @@ DCHECK(!usage.readable_files.empty()); if (usage.readable_files.size() == 1) { *embedded_path = usage.readable_files.front(); - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_FILE_TEXT; } - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_TEXT; } } @@ -86,9 +86,9 @@ DCHECK(!usage.writable_directories.empty()); if (usage.writable_directories.size() == 1) { *embedded_path = usage.writable_directories.front(); - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_WRITABLE_DIRECTORY_TEXT; } - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_DIRECTORIES_TEXT; } // Only readable directories. @@ -96,9 +96,9 @@ DCHECK(!usage.readable_directories.empty()); if (usage.readable_directories.size() == 1) { *embedded_path = usage.readable_directories.front(); - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SINGLE_READABLE_DIRECTORY_TEXT; } - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_DIRECTORIES_TEXT; } } @@ -106,18 +106,18 @@ if (usage.writable_files.empty() && usage.writable_directories.empty()) { DCHECK(!usage.readable_files.empty()); DCHECK(!usage.readable_directories.empty()); - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READABLE_FILES_AND_DIRECTORIES_TEXT; } // Only writable files and directories. if (usage.readable_files.empty() && usage.readable_directories.empty()) { DCHECK(!usage.writable_files.empty()); DCHECK(!usage.writable_directories.empty()); - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_WRITABLE_FILES_AND_DIRECTORIES_TEXT; } // Some combination of read and/or write access to files and/or directories. - return IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_READ_AND_WRITE; + return IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_READ_AND_WRITE; } // Displays a (one-column) table model as a one-line summary showing the @@ -158,7 +158,7 @@ label_text = base::i18n::MessageFormatter::FormatWithNumberedArgs( l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_FILES_TEXT), + IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_FILES_TEXT), model->RowCount(), first_item, second_item); } auto* label = label_container->AddChildView(std::make_unique<views::Label>( @@ -169,9 +169,9 @@ auto button = views::CreateVectorToggleImageButton(base::BindRepeating( &CollapsibleListView::ButtonPressed, base::Unretained(this))); button->SetTooltipText( - l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_EXPAND)); + l10n_util::GetStringUTF16(IDS_FILE_SYSTEM_ACCESS_USAGE_EXPAND)); button->SetToggledTooltipText( - l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_COLLAPSE)); + l10n_util::GetStringUTF16(IDS_FILE_SYSTEM_ACCESS_USAGE_COLLAPSE)); expand_collapse_button_ = label_container->AddChildView(std::move(button)); if (model->RowCount() < 3) expand_collapse_button_->SetVisible(false); @@ -355,7 +355,7 @@ SetButtonLabel(ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_DONE)); SetButtonLabel( ui::DIALOG_BUTTON_CANCEL, - l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_REMOVE_ACCESS)); + l10n_util::GetStringUTF16(IDS_FILE_SYSTEM_ACCESS_USAGE_REMOVE_ACCESS)); SetCancelCallback( base::BindOnce(&FileSystemAccessUsageBubbleView::OnDialogCancelled, base::Unretained(this))); @@ -417,7 +417,7 @@ if (readable_paths_model_.RowCount() > 0) { auto label = std::make_unique<views::Label>( l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_SAVE_CHANGES), + IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_SAVE_CHANGES), views::style::CONTEXT_DIALOG_BODY_TEXT, views::style::STYLE_PRIMARY); label->SetHorizontalAlignment(gfx::ALIGN_LEFT); @@ -431,7 +431,7 @@ if (writable_paths_model_.RowCount() > 0) { auto label = std::make_unique<views::Label>( l10n_util::GetStringUTF16( - IDS_NATIVE_FILE_SYSTEM_USAGE_BUBBLE_VIEW_CHANGES), + IDS_FILE_SYSTEM_ACCESS_USAGE_BUBBLE_VIEW_CHANGES), views::style::CONTEXT_DIALOG_BODY_TEXT, views::style::STYLE_PRIMARY); label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc index f7d84a6c..a9fd1c5 100644 --- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc +++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
@@ -576,11 +576,11 @@ if (app_icon_bitmap.isNull()) return SkBitmap(); - - ProfileAttributesEntry* entry = nullptr; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)) + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (!entry) return SkBitmap(); SkBitmap avatar_bitmap_2x = profiles::GetWin2xAvatarImage(entry);
diff --git a/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc b/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc index 91a85c6..c17f43aa 100644 --- a/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc +++ b/chrome/browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc
@@ -190,9 +190,10 @@ // The second profile's name should be part of the relaunch name. Browser* profile2_browser = CreateBrowser(profile_manager->GetProfileByPath(path_profile2)); - ProfileAttributesEntry* entry; - ASSERT_TRUE(profile_manager->GetProfileAttributesStorage(). - GetProfileAttributesWithPath(path_profile2, &entry)); + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(path_profile2); + ASSERT_NE(entry, nullptr); ValidateBrowserWindowProperties(profile2_browser, entry->GetName()); }
diff --git a/chrome/browser/ui/views/frame/test_with_browser_view.h b/chrome/browser/ui/views/frame/test_with_browser_view.h index 23d64f3e..99d2554 100644 --- a/chrome/browser/ui/views/frame/test_with_browser_view.h +++ b/chrome/browser/ui/views/frame/test_with_browser_view.h
@@ -8,8 +8,6 @@ #include <memory> #include "base/macros.h" -#include "base/test/scoped_feature_list.h" -#include "chrome/browser/media/router/media_router_feature.h" #include "chrome/test/base/browser_with_test_window_test.h" class BrowserView; @@ -20,11 +18,7 @@ class TestWithBrowserView : public BrowserWithTestWindowTest { public: template <typename... Args> - explicit TestWithBrowserView(Args... args) - : BrowserWithTestWindowTest(args...) { - // Media Router requires the IO thread, which doesn't exist in this setup. - feature_list_.InitAndDisableFeature(media_router::kMediaRouter); - } + TestWithBrowserView(Args... args) : BrowserWithTestWindowTest(args...) {} ~TestWithBrowserView() override; @@ -39,7 +33,6 @@ private: BrowserView* browser_view_; // Not owned. - base::test::ScopedFeatureList feature_list_; DISALLOW_COPY_AND_ASSIGN(TestWithBrowserView); };
diff --git a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc index 9acdcca..264d1ca 100644 --- a/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc +++ b/chrome/browser/ui/views/passwords/credential_leak_dialog_view.cc
@@ -28,6 +28,20 @@ image_view->SetImage( *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( dark_mode_enabled ? IDR_PASSWORD_CHECK_DARK : IDR_PASSWORD_CHECK)); + gfx::Size preferred_size = image_view->GetPreferredSize(); + if (!preferred_size.IsEmpty()) { + float max_width = + static_cast<float>(ChromeLayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); + // Reduce width by a pixel on each side. This enforces that the banner image + // is rescaled during the ImageView::OnPaint step. Without the rescaling, + // the image will display compression artifacts due to the size mismatch. + // TODO(crbug.com/1171763): Remove once the scaling works automatically. + max_width -= 2; + const float scale = max_width / preferred_size.width(); + preferred_size = gfx::ScaleToRoundedSize(preferred_size, scale); + image_view->SetImageSize(preferred_size); + } } // Creates the illustration which is rendered on top of the dialog.
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc index a70a8b8..72a99a3 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc
@@ -37,12 +37,8 @@ } ProfileAttributesEntry* GetProfileAttributesEntry(Profile* profile) { - ProfileAttributesEntry* entry; - if (!GetProfileAttributesStorage().GetProfileAttributesWithPath( - profile->GetPath(), &entry)) { - return nullptr; - } - return entry; + return GetProfileAttributesStorage().GetProfileAttributesWithPath( + profile->GetPath()); } bool IsGenericProfile(const ProfileAttributesEntry& entry) {
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index 9f8580c0..5958482 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -130,10 +130,11 @@ } ProfileAttributesEntry* GetProfileAttributesEntry(Profile* profile) { - ProfileAttributesEntry* entry; - CHECK(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + CHECK(entry); return entry; }
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.cc b/chrome/browser/ui/views/profiles/profile_picker_view.cc index 913d6006..a2e42d1 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view.cc
@@ -509,10 +509,11 @@ DCHECK(profile); std::move(switch_finished_callback_).Run(true); - ProfileAttributesEntry* entry = nullptr; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); + if (!entry) { NOTREACHED(); return; } @@ -963,11 +964,12 @@ bool enterprise_sync_consent_needed) { DCHECK(!name_for_signed_in_profile_.empty()); - ProfileAttributesEntry* entry = nullptr; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - signed_in_profile_being_created_->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath( + signed_in_profile_being_created_->GetPath()); + if (!entry) { NOTREACHED(); return; }
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc index 1db0dc2..1bffe7b 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view_browsertest.cc
@@ -328,11 +328,11 @@ // Check expectations when the profile creation flow is done. WaitForPickerClosed(); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_FALSE(entry->IsAuthenticated()); EXPECT_EQ(entry->GetLocalProfileName(), base::UTF8ToUTF16("Joe")); @@ -378,11 +378,11 @@ ->SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); // Check expectations when the profile creation flow is done. - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_EQ(entry->GetLocalProfileName(), base::UTF8ToUTF16("Joe")); EXPECT_EQ(ThemeServiceFactory::GetForProfile(profile_being_created) @@ -421,11 +421,11 @@ // Check expectations when the profile creation flow is done. WaitForPickerClosed(); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); // Sync is technically enabled for the profile. Without SyncService, the // difference between SYNC_WITH_DEFAULT_SETTINGS and CONFIGURE_SYNC_FIRST @@ -479,10 +479,11 @@ }), base::string16(), std::string()); run_loop.Run(); - ProfileAttributesEntry* other_entry = nullptr; ProfileAttributesStorage& storage = profile_manager->GetProfileAttributesStorage(); - ASSERT_TRUE(storage.GetProfileAttributesWithPath(new_path, &other_entry)); + ProfileAttributesEntry* other_entry = + storage.GetProfileAttributesWithPath(new_path); + ASSERT_NE(other_entry, nullptr); // Fake sync is enabled in this profile with Joe's account. other_entry->SetAuthInfo(std::string(), base::UTF8ToUTF16("joe.consumer@gmail.com"), @@ -509,9 +510,9 @@ // Check expectations when the profile creation flow is done. WaitForPickerClosed(); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(storage.GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_FALSE(entry->IsAuthenticated()); EXPECT_EQ(entry->GetLocalProfileName(), base::UTF8ToUTF16("Joe")); @@ -552,11 +553,11 @@ // Check expectations when the profile creation flow is done. WaitForPickerClosed(); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_FALSE(entry->IsAuthenticated()); // Since the given name is not provided, the email address is used instead as @@ -587,11 +588,11 @@ EXPECT_EQ(wc, new_browser->tab_strip_model()->GetActiveWebContents()); EXPECT_NE(nullptr, DiceTabHelper::FromWebContents(wc)); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_FALSE(entry->IsAuthenticated()); EXPECT_EQ(entry->GetLocalProfileName(), base::UTF8ToUTF16(kWork)); @@ -657,11 +658,11 @@ ->SyncConfirmationUIClosed(LoginUIService::ABORT_SYNC); // Check expectations when the profile creation flow is done. - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_EQ(entry->GetLocalProfileName(), base::UTF8ToUTF16("enterprise.com")); @@ -710,11 +711,11 @@ // Check expectations when the profile creation flow is done. WaitForPickerClosed(); - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_FALSE(entry->IsEphemeral()); EXPECT_EQ(entry->GetLocalProfileName(), base::UTF8ToUTF16("enterprise.com")); // The color is not applied if the user enters settings. @@ -790,11 +791,11 @@ ProfilePickerCreationFlowBrowserTest::SetUpInProcessBrowserTestFixture(); if (GetTestPreCount() == 1) { // Only called in "PRE_" tests, to set a name to the starting profile. - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - browser()->profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(browser()->profile()->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetLocalProfileName(base::UTF8ToUTF16(kOriginalProfileName), entry->IsUsingDefaultName()); } @@ -815,11 +816,11 @@ Profile* profile_being_created = StartSigninFlow(); // Check that the profile is ephemeral, regardless of the policy. - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_TRUE(entry->IsEphemeral()); EXPECT_TRUE(entry->IsOmitted()); // Add an account - simulate a successful Gaia sign-in. @@ -881,11 +882,11 @@ Profile* profile_being_created = StartSigninFlow(); // Check that the profile is ephemeral, regardless of the policy. - ProfileAttributesEntry* entry = nullptr; - ASSERT_TRUE(profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - profile_being_created->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_being_created->GetPath()); + ASSERT_NE(entry, nullptr); EXPECT_TRUE(entry->IsEphemeral()); EXPECT_TRUE(entry->IsOmitted()); // Exit Chrome while still in the signin flow.
diff --git a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc index 0cc93f0..0a8cd9f3 100644 --- a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc +++ b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc
@@ -565,10 +565,11 @@ /*is_force_sign_in_with_usermanager=*/false); EXPECT_CALL(*helper, CreateSyncStarter("refresh_token")); - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile()->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); ASSERT_EQ(0ul, BrowserList::GetInstance()->size()); @@ -723,10 +724,11 @@ /*is_force_sign_in_with_usermanager=*/true); EXPECT_CALL(*helper, CreateSyncStarter("refresh_token")); - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile()->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); ASSERT_EQ(0ul, BrowserList::GetInstance()->size());
diff --git a/chrome/browser/ui/webui/app_launcher_login_handler.cc b/chrome/browser/ui/webui/app_launcher_login_handler.cc index 2746f74c..cda19e7b 100644 --- a/chrome/browser/ui/webui/app_launcher_login_handler.cc +++ b/chrome/browser/ui/webui/app_launcher_login_handler.cc
@@ -147,8 +147,9 @@ if (!username.empty()) { ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - if (storage.GetProfileAttributesWithPath(profile->GetPath(), &entry)) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { // Only show the profile picture and full name for the single profile // case. In the multi-profile case the profile picture is visible in the // title bar and the full name can be ambiguous.
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 4ea71f9..6ad767a 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -179,6 +179,8 @@ constexpr char kOobeContentDialogJS[] = "components/oobe_content_dialog.js"; constexpr char kOobeDialogHTML[] = "components/oobe_dialog.html"; constexpr char kOobeDialogJS[] = "components/oobe_dialog.js"; +constexpr char kOobeLoadingDialogHTML[] = "components/oobe_loading_dialog.html"; +constexpr char kOobeLoadingDialogJS[] = "components/oobe_loading_dialog.js"; constexpr char kOobeCarouselHTML[] = "components/oobe_carousel.html"; constexpr char kOobeCarouselJS[] = "components/oobe_carousel.js"; constexpr char kOobeSlideHTML[] = "components/oobe_slide.html"; @@ -709,6 +711,10 @@ source->AddResourcePath(kOobeDialogHTML, IDR_OOBE_COMPONENTS_OOBE_DIALOG_HTML); source->AddResourcePath(kOobeDialogJS, IDR_OOBE_COMPONENTS_OOBE_DIALOG_JS); + source->AddResourcePath(kOobeLoadingDialogHTML, + IDR_OOBE_COMPONENTS_OOBE_LOADING_DIALOG_HTML); + source->AddResourcePath(kOobeLoadingDialogJS, + IDR_OOBE_COMPONENTS_OOBE_LOADING_DIALOG_JS); if (features::IsNewOobeLayoutEnabled()) { source->AddResourcePath(kOobeCustomVarsCssHTML,
diff --git a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc index cbcfd35..aacf880 100644 --- a/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc +++ b/chrome/browser/ui/webui/management/management_ui_handler_unittest.cc
@@ -54,7 +54,6 @@ #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/shill/shill_service_client.h"
diff --git a/chrome/browser/ui/webui/policy/policy_ui.cc b/chrome/browser/ui/webui/policy/policy_ui.cc index d487c6c..0ba5b819 100644 --- a/chrome/browser/ui/webui/policy/policy_ui.cc +++ b/chrome/browser/ui/webui/policy/policy_ui.cc
@@ -34,8 +34,6 @@ {"labelAssetId", IDS_POLICY_LABEL_ASSET_ID}, {"labelClientId", IDS_POLICY_LABEL_CLIENT_ID}, {"labelDirectoryApiId", IDS_POLICY_LABEL_DIRECTORY_API_ID}, - {"labelEnterpriseDisplayDomain", - IDS_POLICY_LABEL_ENTERPRISE_DISPLAY_DOMAIN}, {"labelEnterpriseEnrollmentDomain", IDS_POLICY_LABEL_ENTERPRISE_ENROLLMENT_DOMAIN}, {"labelGaiaId", IDS_POLICY_LABEL_GAIA_ID},
diff --git a/chrome/browser/ui/webui/policy/policy_ui_handler.cc b/chrome/browser/ui/webui/policy/policy_ui_handler.cc index 5b131707c..733f331 100644 --- a/chrome/browser/ui/webui/policy/policy_ui_handler.cc +++ b/chrome/browser/ui/webui/policy/policy_ui_handler.cc
@@ -365,7 +365,6 @@ private: std::string enterprise_enrollment_domain_; - std::string enterprise_display_domain_; DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyStatusProviderChromeOS); }; @@ -429,8 +428,7 @@ public: DeviceActiveDirectoryPolicyStatusProvider( policy::ActiveDirectoryPolicyManager* policy_manager, - const std::string& enterprise_realm, - const std::string& enterprise_display_domain); + const std::string& enterprise_realm); ~DeviceActiveDirectoryPolicyStatusProvider() override = default; @@ -439,7 +437,6 @@ private: std::string enterprise_realm_; - std::string enterprise_display_domain_; DISALLOW_COPY_AND_ASSIGN(DeviceActiveDirectoryPolicyStatusProvider); }; @@ -614,7 +611,6 @@ : CloudPolicyCoreStatusProvider( connector->GetDeviceCloudPolicyManager()->core()) { enterprise_enrollment_domain_ = connector->GetEnterpriseEnrollmentDomain(); - enterprise_display_domain_ = connector->GetEnterpriseDisplayDomain(); } DeviceCloudPolicyStatusProviderChromeOS:: @@ -624,7 +620,6 @@ base::DictionaryValue* dict) { GetStatusFromCore(core_, dict); dict->SetString("enterpriseEnrollmentDomain", enterprise_enrollment_domain_); - dict->SetString("enterpriseDisplayDomain", enterprise_display_domain_); GetOffHoursStatus(dict); } @@ -723,17 +718,14 @@ DeviceActiveDirectoryPolicyStatusProvider:: DeviceActiveDirectoryPolicyStatusProvider( policy::ActiveDirectoryPolicyManager* policy_manager, - const std::string& enterprise_realm, - const std::string& enterprise_display_domain) + const std::string& enterprise_realm) : UserActiveDirectoryPolicyStatusProvider(policy_manager, nullptr), - enterprise_realm_(enterprise_realm), - enterprise_display_domain_(enterprise_display_domain) {} + enterprise_realm_(enterprise_realm) {} void DeviceActiveDirectoryPolicyStatusProvider::GetStatus( base::DictionaryValue* dict) { UserActiveDirectoryPolicyStatusProvider::GetStatus(dict); dict->SetString("enterpriseEnrollmentDomain", enterprise_realm_); - dict->SetString("enterpriseDisplayDomain", enterprise_display_domain_); } #endif // BUILDFLAG(IS_CHROMEOS_ASH) @@ -856,7 +848,7 @@ device_status_provider_ = std::make_unique<DeviceActiveDirectoryPolicyStatusProvider>( connector->GetDeviceActiveDirectoryPolicyManager(), - connector->GetRealm(), connector->GetEnterpriseDisplayDomain()); + connector->GetRealm()); } else { device_status_provider_ = std::make_unique<DeviceCloudPolicyStatusProviderChromeOS>(connector);
diff --git a/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc b/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc index 9d57b330..77174b2e 100644 --- a/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc
@@ -9,6 +9,7 @@ #include <string> #include <vector> +#include "ash/public/cpp/accessibility_controller_enums.h" #include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/tablet_mode.h" @@ -321,6 +322,18 @@ }); return *tags; } +const std::vector<SearchConcept>& +GetA11yFullscreenMagnifierMouseFollowingModeSearchConcepts() { + static const base::NoDestructor<std::vector<SearchConcept>> tags({ + {IDS_OS_SETTINGS_TAG_A11Y_FULLSCREEN_MAGNIFIER_MOUSE_FOLLOWING_MODE, + mojom::kManageAccessibilitySubpagePath, + mojom::SearchResultIcon::kA11y, + mojom::SearchResultDefaultRank::kLow, + mojom::SearchResultType::kSetting, + {.setting = mojom::Setting::kFullscreenMagnifierMouseFollowingMode}}, + }); + return *tags; +} bool AreExperimentalA11yLabelsAllowed() { return base::FeatureList::IsEnabled( @@ -430,6 +443,14 @@ {"chromeVoxLabel", IDS_SETTINGS_CHROMEVOX_LABEL}, {"chromeVoxOptionsLabel", IDS_SETTINGS_CHROMEVOX_OPTIONS_LABEL}, {"screenMagnifierLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_LABEL}, + {"screenMagnifierMouseFollowingModeRadioGroupTitle", + IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_RADIO_GROUP_TITLE}, + {"screenMagnifierMouseFollowingModeContinuous", + IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CONTINUOUS}, + {"screenMagnifierMouseFollowingModeCentered", + IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_CENTERED}, + {"screenMagnifierMouseFollowingModeEdge", + IDS_SETTINGS_SCREEN_MANIFIER_MOUSE_FOLLOWING_MODE_EDGE}, {"screenMagnifierFocusFollowingLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_FOCUS_FOLLOWING_LABEL}, {"screenMagnifierZoomLabel", IDS_SETTINGS_SCREEN_MAGNIFIER_ZOOM_LABEL}, @@ -690,6 +711,12 @@ "ChromeOS.Settings.Accessibility.FullscreenMagnifierFocusFollowing", value.GetBool()); return true; + case mojom::Setting::kFullscreenMagnifierMouseFollowingMode: + base::UmaHistogramEnumeration( + "ChromeOS.Settings.Accessibility." + "FullscreenMagnifierMouseFollowingMode", + static_cast<ash::MagnifierMouseFollowingMode>(value.GetInt())); + return true; default: return false; @@ -714,6 +741,7 @@ mojom::Setting::kHighContrastMode, mojom::Setting::kFullscreenMagnifier, mojom::Setting::kFullscreenMagnifierFocusFollowing, + mojom::Setting::kFullscreenMagnifierMouseFollowingMode, mojom::Setting::kDockedMagnifier, mojom::Setting::kStickyKeys, mojom::Setting::kOnScreenKeyboard, @@ -835,9 +863,13 @@ ash::prefs::kAccessibilityScreenMagnifierEnabled)) { updater.AddSearchTags( GetA11yFullscreenMagnifierFocusFollowingSearchConcepts()); + updater.AddSearchTags( + GetA11yFullscreenMagnifierMouseFollowingModeSearchConcepts()); } else { updater.RemoveSearchTags( GetA11yFullscreenMagnifierFocusFollowingSearchConcepts()); + updater.RemoveSearchTags( + GetA11yFullscreenMagnifierMouseFollowingModeSearchConcepts()); } if (!pref_service_->GetBoolean(
diff --git a/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom b/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom index f28d588..d5087732 100644 --- a/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom +++ b/chrome/browser/ui/webui/settings/chromeos/constants/setting.mojom
@@ -236,6 +236,7 @@ kLiveCaptions = 1527, kEnableCursorColor = 1528, kFullscreenMagnifierFocusFollowing = 1529, + kFullscreenMagnifierMouseFollowingMode = 1530, // Reset section. kPowerwash = 1600,
diff --git a/chrome/browser/ui/webui/settings/profile_info_handler.cc b/chrome/browser/ui/webui/settings/profile_info_handler.cc index a0047996..4af1e86 100644 --- a/chrome/browser/ui/webui/settings/profile_info_handler.cc +++ b/chrome/browser/ui/webui/settings/profile_info_handler.cc
@@ -150,10 +150,11 @@ chromeos::UserImageSource::GetUserImage(user->GetAccountId()); icon_url = webui::GetPngDataUrl(image->front(), image->size()); #else // !BUILDFLAG(IS_CHROMEOS_ASH) - ProfileAttributesEntry* entry; - if (g_browser_process->profile_manager() + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath(), &entry)) { + .GetProfileAttributesWithPath(profile_->GetPath()); + if (entry) { name = base::UTF16ToUTF8(entry->GetLocalProfileName()); // TODO(crbug.com/710660): return chrome://theme/IDR_PROFILE_AVATAR_* // and update theme_source.cc to get high res avatar icons. This does less
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 1f71da5..862ff2c5 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -191,7 +191,7 @@ user_manager::UserManager::Get()->IsLoggedInAsGuest() || user_manager::UserManager::Get()->IsLoggedInAsPublicAccount()); #else - profile->IsOffTheRecord()); + profile->IsGuestSession() || profile->IsEphemeralGuestProfile()); #endif html_source->AddBoolean("isSupervised", profile->IsSupervised());
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc index 7cb1ec0..b82d7b9a 100644 --- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc +++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc
@@ -131,11 +131,12 @@ } std::unique_ptr<base::ListValue> ManageProfileHandler::GetAvailableIcons() { - ProfileAttributesEntry* entry = nullptr; + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_->GetPath()); // TODO(msalama): Convert to a DCHECK. - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath(), &entry)) { + if (!entry) { LOG(ERROR) << "No profile attributes entry found for profile with path: " << profile_->GetPath(); return std::make_unique<base::ListValue>();
diff --git a/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc b/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc index 5938a35..cd9abc1 100644 --- a/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/settings_manage_profile_handler_unittest.cc
@@ -43,9 +43,9 @@ void SetUp() override { ASSERT_TRUE(profile_manager_.SetUp()); profile_ = profile_manager_.CreateTestingProfile("Profile 1"); - ASSERT_TRUE( - profile_manager_.profile_attributes_storage() - ->GetProfileAttributesWithPath(profile_->GetPath(), &entry_)); + entry_ = profile_manager_.profile_attributes_storage() + ->GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry_, nullptr); entry_->SetAvatarIconIndex(profiles::GetPlaceholderAvatarIndex()); handler_ = std::make_unique<TestManageProfileHandler>(profile_);
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index b7623f6..bc817f7 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -222,9 +222,10 @@ if (!profile_path.empty()) { ProfileManager* profile_manager = g_browser_process->profile_manager(); if (profile_manager) { - ProfileAttributesEntry* entry; - if (profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry)) { + ProfileAttributesEntry* entry = + profile_manager->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + if (entry) { if (locked) entry->LockForceSigninProfile(true); else @@ -236,10 +237,11 @@ void SetProfileName(const base::FilePath& profile_path, const base::string16 name) { - ProfileAttributesEntry* entry = nullptr; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + if (!entry) { NOTREACHED(); return; }
diff --git a/chrome/browser/ui/webui/signin/login_ui_service.cc b/chrome/browser/ui/webui/signin/login_ui_service.cc index 7f6b57a..dc2b892 100644 --- a/chrome/browser/ui/webui/signin/login_ui_service.cc +++ b/chrome/browser/ui/webui/signin/login_ui_service.cc
@@ -67,11 +67,11 @@ if (profile_->IsGuestSession() || profile_->IsSystemProfile()) return; // Locked profile should be unlocked with UserManager only. - ProfileAttributesEntry* entry; - if (g_browser_process->profile_manager() + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath(), &entry) && - entry->IsSigninRequired()) { + .GetProfileAttributesWithPath(profile_->GetPath()); + if (entry && entry->IsSigninRequired()) { return; }
diff --git a/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc b/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc index 10f5692..479e48d 100644 --- a/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc +++ b/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc
@@ -157,10 +157,11 @@ } TEST_F(LoginUIServiceExtensionLoginPromptTest, AsLockedProfile) { - ProfileAttributesEntry* entry; - ASSERT_TRUE(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile()->GetPath(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile()->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetIsSigninRequired(true); service_->ShowExtensionLoginPrompt(/*restricted_to_primary_account=*/true, /*email_hint=*/std::string());
diff --git a/chrome/browser/ui/webui/signin/profile_customization_handler.cc b/chrome/browser/ui/webui/signin/profile_customization_handler.cc index d970479..8040893 100644 --- a/chrome/browser/ui/webui/signin/profile_customization_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_customization_handler.cc
@@ -128,10 +128,10 @@ } ProfileAttributesEntry* ProfileCustomizationHandler::GetProfileEntry() const { - ProfileAttributesEntry* entry = nullptr; - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path_, &entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path_); DCHECK(entry); return entry; }
diff --git a/chrome/browser/ui/webui/signin/profile_customization_ui.cc b/chrome/browser/ui/webui/signin/profile_customization_ui.cc index fcbe65b..98d1520 100644 --- a/chrome/browser/ui/webui/signin/profile_customization_ui.cc +++ b/chrome/browser/ui/webui/signin/profile_customization_ui.cc
@@ -57,10 +57,10 @@ // loadTimeData. Profile* profile = Profile::FromWebUI(web_ui); - ProfileAttributesEntry* entry = nullptr; - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath(), &entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); source->AddString("profileName", base::UTF16ToUTF8(entry->GetLocalProfileName()));
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index c6368911..38b94af 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -266,10 +266,11 @@ if (!profile_path) return; - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(*profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(*profile_path); + if (!entry) { NOTREACHED(); return; } @@ -493,10 +494,11 @@ base::UTF8ToUTF16(args->GetList()[1].GetString()); base::TrimWhitespace(profile_name, base::TRIM_ALL, &profile_name); CHECK(!profile_name.empty()); - ProfileAttributesEntry* entry; - CHECK(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path.value(), &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path.value()); + CHECK(entry); entry->SetLocalProfileName(profile_name, /*is_default_name=*/false); } @@ -712,10 +714,11 @@ } void ProfilePickerHandler::OnProfileAdded(const base::FilePath& profile_path) { - ProfileAttributesEntry* entry; - CHECK(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + CHECK(entry); if (entry->IsGuest() || entry->IsOmitted()) return; AddProfileToList(profile_path); @@ -734,10 +737,11 @@ const base::FilePath& profile_path) { if (profile_path == ProfileManager::GetGuestProfilePath()) return; - ProfileAttributesEntry* entry; - CHECK(g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry)); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + CHECK(entry); if (entry->IsOmitted()) { if (RemoveProfileFromList(profile_path)) PushProfilesList();
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc b/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc index 9124e0e..0525239 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc
@@ -72,10 +72,11 @@ ProfileAttributesEntry* CreateTestingProfile( const std::string& profile_name) { auto* profile = profile_manager()->CreateTestingProfile(profile_name); - ProfileAttributesEntry* entry = nullptr; - CHECK(profile_manager() - ->profile_attributes_storage() - ->GetProfileAttributesWithPath(profile->GetPath(), &entry)); + ProfileAttributesEntry* entry = + profile_manager() + ->profile_attributes_storage() + ->GetProfileAttributesWithPath(profile->GetPath()); + CHECK(entry); return entry; }
diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc index a412667c..34f23e2 100644 --- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc +++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
@@ -318,10 +318,11 @@ if (!profile_path) return; - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(*profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(*profile_path); + if (!entry) { return; } @@ -473,10 +474,11 @@ if (!profile_path) return; - ProfileAttributesEntry* entry; - if (!g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(*profile_path, &entry)) { + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(*profile_path); + if (!entry) { NOTREACHED(); return; } @@ -624,13 +626,12 @@ // Unlock the profile after browser opens so startup can read the lock bit. // Any necessary authentication must have been successful to reach this point. - ProfileAttributesEntry* entry = nullptr; if (!browser->profile()->IsGuestSession()) { - bool has_entry = g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath( - browser->profile()->GetPath(), &entry); - DCHECK(has_entry); + ProfileAttributesEntry* entry = + g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(browser->profile()->GetPath()); + DCHECK(entry); // If force sign in is enabled and profile is not signed in, do not close // UserManager and unlock profile. if (signin_util::IsForceSigninEnabled() && !entry->IsAuthenticated())
diff --git a/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc b/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc index 5659454..8316c26 100644 --- a/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc +++ b/chrome/browser/ui/webui/signin/user_manager_ui_browsertest.cc
@@ -122,10 +122,10 @@ GURL(chrome::kChromeUIMdUserManagerUrl)); web_contents_ = browser()->tab_strip_model()->GetActiveWebContents(); profile_ = browser()->profile(); - EXPECT_TRUE( - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath(), &entry_)); + entry_ = g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_->GetPath()); + ASSERT_NE(entry_, nullptr); } void LaunchAuthenticatedUser(const std::string& email) {
diff --git a/chrome/browser/ui/webui/welcome/helpers.cc b/chrome/browser/ui/webui/welcome/helpers.cc index 52e2eb38..5d3237b 100644 --- a/chrome/browser/ui/webui/welcome/helpers.cc +++ b/chrome/browser/ui/webui/welcome/helpers.cc
@@ -226,9 +226,9 @@ // Modules won't have lasting effect if profile is ephemeral, so we can skip. ProfileAttributesStorage& storage = g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry = nullptr; - if (storage.GetProfileAttributesWithPath(profile->GetPath(), &entry) && - entry->IsEphemeral()) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + if (entry && entry->IsEphemeral()) { return false; }
diff --git a/chrome/browser/updates/announcement_notification/announcement_notification_service.cc b/chrome/browser/updates/announcement_notification/announcement_notification_service.cc index dc06d1d..cde26e6 100644 --- a/chrome/browser/updates/announcement_notification/announcement_notification_service.cc +++ b/chrome/browser/updates/announcement_notification/announcement_notification_service.cc
@@ -181,11 +181,9 @@ // Can't find the profile path, assume the user is not signed in. DCHECK(profile_); - ProfileAttributesEntry* entry = nullptr; - if (!storage.GetProfileAttributesWithPath(profile_->GetPath(), &entry)) - return false; - - return entry->GetSigninState() != SigninState::kNotSignedIn; + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_->GetPath()); + return entry && entry->GetSigninState() != SigninState::kNotSignedIn; } Profile* profile_;
diff --git a/chrome/browser/upgrade_detector/directory_monitor.cc b/chrome/browser/upgrade_detector/directory_monitor.cc index 4880c38..793fca5 100644 --- a/chrome/browser/upgrade_detector/directory_monitor.cc +++ b/chrome/browser/upgrade_detector/directory_monitor.cc
@@ -76,13 +76,14 @@ &base::FilePathWatcher::Watch, base::Unretained(watcher_.get()), std::move(install_dir_), watch_type, base::BindRepeating( - [](scoped_refptr<base::SequencedTaskRunner> main_sequence, + [](base::SequencedTaskRunner* main_sequence, const Callback& on_change_callback, const base::FilePath&, bool error) { main_sequence->PostTask( FROM_HERE, base::BindOnce(on_change_callback, error)); }, - base::SequencedTaskRunnerHandle::Get(), on_change_callback)), + base::RetainedRef(base::SequencedTaskRunnerHandle::Get()), + on_change_callback)), base::BindOnce( [](const Callback& on_change_callback, bool start_result) { if (!start_result)
diff --git a/chrome/browser/upgrade_detector/installed_version_poller.cc b/chrome/browser/upgrade_detector/installed_version_poller.cc index 9d6bab99..3202016 100644 --- a/chrome/browser/upgrade_detector/installed_version_poller.cc +++ b/chrome/browser/upgrade_detector/installed_version_poller.cc
@@ -18,7 +18,6 @@ #include "base/task/post_task.h" #include "base/task/thread_pool.h" #include "base/threading/sequenced_task_runner_handle.h" -#include "build/build_config.h" #include "chrome/browser/upgrade_detector/build_state.h" #include "chrome/browser/upgrade_detector/get_installed_version.h" #include "chrome/browser/upgrade_detector/installed_version_monitor.h" @@ -91,15 +90,6 @@ return InstalledVersionPoller::kDefaultPollingInterval; } -std::unique_ptr<InstalledVersionMonitor> MakeInstalledVersionMonitor() { -// Temporarily disabled for macOS due to https://crbug.com/1156603. -#if defined(OS_MAC) - return nullptr; -#else - return InstalledVersionMonitor::Create(); -#endif -} - } // namespace // InstalledVersionPoller::ScopedDisableForTesting ---------------------------- @@ -130,7 +120,7 @@ InstalledVersionPoller::InstalledVersionPoller(BuildState* build_state) : InstalledVersionPoller(build_state, GetGetInstalledVersionCallback(), - MakeInstalledVersionMonitor(), + InstalledVersionMonitor::Create(), nullptr) {} InstalledVersionPoller::InstalledVersionPoller( @@ -159,11 +149,8 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!monitor_); monitor_ = std::move(monitor); - if (monitor_) { - monitor_->Start( - base::BindRepeating(&InstalledVersionPoller::OnMonitorResult, - weak_ptr_factory_.GetWeakPtr())); - } + monitor_->Start(base::BindRepeating(&InstalledVersionPoller::OnMonitorResult, + weak_ptr_factory_.GetWeakPtr())); } void InstalledVersionPoller::OnMonitorResult(bool error) {
diff --git a/chrome/browser/web_applications/components/web_app_file_handler_registration_win_unittest.cc b/chrome/browser/web_applications/components/web_app_file_handler_registration_win_unittest.cc index dc32029..8722064 100644 --- a/chrome/browser/web_applications/components/web_app_file_handler_registration_win_unittest.cc +++ b/chrome/browser/web_applications/components/web_app_file_handler_registration_win_unittest.cc
@@ -214,9 +214,9 @@ testing_profile_manager()->CreateTestingProfile("Profile 2"); ProfileAttributesStorage& storage = profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - ASSERT_TRUE( - storage.GetProfileAttributesWithPath(profile2->GetPath(), &entry)); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile2->GetPath()); + ASSERT_NE(entry, nullptr); entry->SetGAIAName(base::ASCIIToUTF16("gaia user")); AddAndVerifyFileAssociations(profile2, kAppName, " (Profile 2)"); }
diff --git a/chrome/browser/web_applications/components/web_app_handler_registration_utils_win.cc b/chrome/browser/web_applications/components/web_app_handler_registration_utils_win.cc index 82bf7f5..dc63e52 100644 --- a/chrome/browser/web_applications/components/web_app_handler_registration_utils_win.cc +++ b/chrome/browser/web_applications/components/web_app_handler_registration_utils_win.cc
@@ -77,9 +77,9 @@ ProfileManager* profile_manager = g_browser_process->profile_manager(); ProfileAttributesStorage& storage = profile_manager->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry; - bool has_entry = storage.GetProfileAttributesWithPath(profile_path, &entry); - if (has_entry) { + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile_path); + if (entry) { app_name_extension.append(STRING16_LITERAL(" (")); app_name_extension.append(entry->GetLocalProfileName()); app_name_extension.append(STRING16_LITERAL(")"));
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 0c722d5..1b13784 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1612310358-94735f81350f308fbd603edc8a6b7023e7f3db6a.profdata +chrome-linux-master-1612353344-f61bb2499ae4530bce57c7717174146d2dbf4ec3.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 114700f..070b9b4 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1612310358-793405077bfd502d830c72812c571a62a4538643.profdata +chrome-mac-master-1612353344-dee8798d50737e6580b23cd914634e6bfee99a2c.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index ccd64ed..f9e3f1c 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1612310358-5893ffc6b2b9694421f78a9272cb2f26bf1dfdc7.profdata +chrome-win32-master-1612320397-a99fe59794952e01096067b6a58b247861e8b048.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 32f034e3..4fd2045 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-master-1612320397-9472dd6073de32a043d6fc0c7ffefae96bb04ceb.profdata +chrome-win64-master-1612353344-511544a9a2b1a7e446b83dd50d995ff1ab945dea.profdata
diff --git a/chrome/services/machine_learning/BUILD.gn b/chrome/services/machine_learning/BUILD.gn index 22c14b49..5587c111 100644 --- a/chrome/services/machine_learning/BUILD.gn +++ b/chrome/services/machine_learning/BUILD.gn
@@ -67,7 +67,7 @@ sources += [ "in_process_tflite_predictor_unittest.cc" ] } - data = [ "//components/test/data/optimization_guide" ] + data = [ "//chrome/test/data/" ] deps = [ ":machine_learning", @@ -84,7 +84,7 @@ if (build_with_tflite_lib) { copy("tflite_simple_test") { - sources = [ "//components/test/data/optimization_guide/simple_test.tflite" ] + sources = [ "//chrome/test/data/simple_test.tflite" ] outputs = [ "$root_out_dir/test_data/simple_test.tflite" ] } }
diff --git a/chrome/services/machine_learning/README.md b/chrome/services/machine_learning/README.md index 1770b339..fa244d9 100644 --- a/chrome/services/machine_learning/README.md +++ b/chrome/services/machine_learning/README.md
@@ -4,13 +4,13 @@ ([Design doc](https://docs.google.com/document/d/1i5uSTFe3uKwHifVQ0aFs6kYfsGlCt_ZGCiOgqcYM0Tg/edit?usp=sharing)) -To build Chrome with TFLite library follow these instructions. For the unit test we use a [simple tflite model](//components/test/data/optimization_guide/simple_test.tflite). This is a simple sequential model as following: +To build Chrome with TFLite library follow these instructions. For the unit test we use a [simple tflite model](../../test/data/simple_test.tflite). This is a simple sequential model as following: ```python input_shape = (32, 32, 3) model = tf.keras.models.Sequential([ tf.keras.Input(shape=input_shape, dtype=np.float32), - tf.keras.layers.Conv2D(16, 3, strides=(1, 1), activation='relu', padding='same', + tf.keras.layers.Conv2D(16, 3, strides=(1, 1), activation='relu', padding='same', input_shape=input_shape), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), @@ -25,7 +25,7 @@ cd tensorflow for x86 architecture: - + bazel build tensorflow/lite/c:libtensorflowlite_c.so for android: @@ -37,11 +37,12 @@ link the library to a soft link in system library directory under /lib/ Copy libraries: - + c_api.h and common.h [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/c) to into third_party/tensorflow/lite/c Build TFLite in chrome: - + Set flag build_with_tflite_lib=true - + Uncomment thirdparty library in [machine learning header file](./machine_learning_tflite_predictor.h). + \ No newline at end of file
diff --git a/chrome/services/machine_learning/in_process_tflite_predictor_unittest.cc b/chrome/services/machine_learning/in_process_tflite_predictor_unittest.cc index c97c34c3..e4e2b4ff 100644 --- a/chrome/services/machine_learning/in_process_tflite_predictor_unittest.cc +++ b/chrome/services/machine_learning/in_process_tflite_predictor_unittest.cc
@@ -46,10 +46,9 @@ EXPECT_TRUE( base::PathService::Get(base::DIR_SOURCE_ROOT, &model_file_path)); - model_file_path = model_file_path.Append(FILE_PATH_LITERAL("components")) + model_file_path = model_file_path.Append(FILE_PATH_LITERAL("chrome")) .Append(FILE_PATH_LITERAL("test")) .Append(FILE_PATH_LITERAL("data")) - .Append(FILE_PATH_LITERAL("optimization_guide")) .Append(FILE_PATH_LITERAL("simple_test.tflite")); EXPECT_TRUE(base::PathExists(model_file_path)); return model_file_path.AsUTF8Unsafe();
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 7d51538..b6c0494 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -927,7 +927,6 @@ "//chrome/browser/page_load_metrics/integration_tests/data/", "//components/test/data/arc/", "//components/test/data/autofill/", - "//components/test/data/optimization_guide/", "//components/test/data/payments/", "//components/test/data/update_client/", "//content/test/data/", @@ -3956,6 +3955,7 @@ "../browser/policy/browser_dm_token_storage_mac_unittest.cc", "../browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper_unit_test.mm", "../browser/service_process/service_process_control_mac_unittest.mm", + "../browser/upgrade_detector/directory_monitor_unittest.cc", "../common/mac/mock_launchd.h", "../common/mac/mock_launchd.mm", ] @@ -4432,6 +4432,7 @@ "../browser/enterprise/connectors/connectors_manager_unittest.cc", "../browser/enterprise/connectors/connectors_service_unittest.cc", "../browser/enterprise/connectors/enterprise_connectors_policy_handler_unittest.cc", + "../browser/enterprise/connectors/file_system/service_settings_unittest.cc", "../browser/enterprise/connectors/reporting_service_settings_unittest.cc", "../browser/enterprise/connectors/service_provider_config_unittest.cc", "../browser/enterprise/reporting/browser_report_generator_unittest.cc", @@ -5550,10 +5551,6 @@ "../browser/media_galleries/win/mtp_device_object_enumerator_unittest.cc", ] } - if (is_mac) { - sources += - [ "../browser/ui/startup/mac_system_infobar_delegate_unittest.cc" ] - } if (is_chromeos_ash) { sources += [ "../browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc",
diff --git a/chrome/test/base/testing_profile_manager.cc b/chrome/test/base/testing_profile_manager.cc index 3efbb72..9b6f6f6 100644 --- a/chrome/test/base/testing_profile_manager.cc +++ b/chrome/test/base/testing_profile_manager.cc
@@ -120,10 +120,10 @@ profile_manager_->AddProfile(std::move(profile)); // Update the user metadata. - ProfileAttributesEntry* entry; - bool success = profile_manager_->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path, &entry); - DCHECK(success); + ProfileAttributesEntry* entry = + profile_manager_->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile_path); + DCHECK(entry); entry->SetAvatarIconIndex(avatar_id); entry->SetSupervisedUserId(supervised_user_id); entry->SetLocalProfileName(user_name, entry->IsUsingDefaultName());
diff --git a/chrome/test/data/extensions/api_test/automation/sites/position.html b/chrome/test/data/extensions/api_test/automation/sites/position.html index feb455d..62d08cb 100644 --- a/chrome/test/data/extensions/api_test/automation/sites/position.html +++ b/chrome/test/data/extensions/api_test/automation/sites/position.html
@@ -8,7 +8,7 @@ <title>Automation Tests - Positions</title> </head> <body> -<button aria-label="Tree Position"></button> +<button>Tree Position</button> <p>some text</p> <script> const button = document.querySelector('button');
diff --git a/components/test/data/optimization_guide/simple_test.tflite b/chrome/test/data/simple_test.tflite similarity index 100% rename from components/test/data/optimization_guide/simple_test.tflite rename to chrome/test/data/simple_test.tflite Binary files differ
diff --git a/chrome/test/v8/wasm_trap_handler_browsertest.cc b/chrome/test/v8/wasm_trap_handler_browsertest.cc index 709d8c4..dcb7424 100644 --- a/chrome/test/v8/wasm_trap_handler_browsertest.cc +++ b/chrome/test/v8/wasm_trap_handler_browsertest.cc
@@ -19,14 +19,14 @@ namespace { // |kIsTrapHandlerSupported| indicates whether the trap handler is supported // (i.e. allowed to be enabled) on the currently platform. Currently we only -// support non-Android, Linux x64, and Windows x64. In the future more platforms -// will be supported. Though this file is a browser test that is not built on -// Android. +// support non-Android, Linux x64, Windows x64 and Mac x64 and arm64. In the +// future more platforms will be supported. Though this file is a browser test +// that is not built on Android. #if (defined(OS_LINUX) || defined(OS_CHROMEOS)) && defined(ARCH_CPU_X86_64) constexpr bool kIsTrapHandlerSupported = true; #elif defined(OS_WIN) && defined(ARCH_CPU_X86_64) constexpr bool kIsTrapHandlerSupported = true; -#elif defined(OS_MAC) && defined(ARCH_CPU_X86_64) +#elif defined(OS_MAC) && (defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_ARM64)) constexpr bool kIsTrapHandlerSupported = true; #else constexpr bool kIsTrapHandlerSupported = false;
diff --git a/chromeos/attestation/BUILD.gn b/chromeos/attestation/BUILD.gn index b714e4f..ab979134 100644 --- a/chromeos/attestation/BUILD.gn +++ b/chromeos/attestation/BUILD.gn
@@ -21,8 +21,12 @@ sources = [ "attestation_flow.cc", "attestation_flow.h", + "attestation_flow_factory.cc", + "attestation_flow_factory.h", "attestation_flow_integrated.cc", "attestation_flow_integrated.h", + "attestation_flow_type_decider.cc", + "attestation_flow_type_decider.h", "attestation_flow_utils.cc", "attestation_flow_utils.h", ] @@ -62,6 +66,7 @@ ] sources = [ "attestation_flow_integrated_unittest.cc", + "attestation_flow_type_decider_unittest.cc", "attestation_flow_unittest.cc", "attestation_flow_utils_unittest.cc", ]
diff --git a/chromeos/attestation/attestation_flow.h b/chromeos/attestation/attestation_flow.h index 204bc19..e718fd0 100644 --- a/chromeos/attestation/attestation_flow.h +++ b/chromeos/attestation/attestation_flow.h
@@ -32,12 +32,22 @@ public: using DataCallback = base::OnceCallback<void(bool success, const std::string& data)>; + using ProxyPresenceCallback = + base::OnceCallback<void(bool is_any_proxy_present)>; virtual ~ServerProxy(); virtual void SendEnrollRequest(const std::string& request, DataCallback on_response) = 0; virtual void SendCertificateRequest(const std::string& request, DataCallback on_response) = 0; virtual PrivacyCAType GetType(); + + // Looks ahead and checks if `SendEnrollRequest()` or + // `SendCertificateRequest()` uses any server proxy for real. Note that the + // callback only returns a boolean value; in case of any error, it is assumed + // to have proxies. This decision is motivated by the only caller, + // `AttestationFlowAdaptive`, has to assume the presence of the proxy if the + // information is not available. + virtual void CheckIfAnyProxyPresent(ProxyPresenceCallback callback) = 0; }; // Implements the message flow for Chrome OS attestation tasks. Generally this
diff --git a/chromeos/attestation/attestation_flow_factory.cc b/chromeos/attestation/attestation_flow_factory.cc new file mode 100644 index 0000000..db5c656 --- /dev/null +++ b/chromeos/attestation/attestation_flow_factory.cc
@@ -0,0 +1,45 @@ +// Copyright 2021 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 "chromeos/attestation/attestation_flow_factory.h" + +#include <memory> +#include <utility> + +#include "chromeos/attestation/attestation_flow.h" +#include "chromeos/attestation/attestation_flow_integrated.h" + +namespace chromeos { +namespace attestation { + +AttestationFlowFactory::AttestationFlowFactory() = default; + +AttestationFlowFactory::~AttestationFlowFactory() = default; + +void AttestationFlowFactory::Initialize( + std::unique_ptr<ServerProxy> server_proxy) { + DCHECK(server_proxy.get()); + DCHECK(!server_proxy_); + + server_proxy_ = std::move(server_proxy); +} + +AttestationFlow* AttestationFlowFactory::GetDefault() { + if (!default_attestation_flow_) { + default_attestation_flow_ = std::make_unique<AttestationFlowIntegrated>(); + } + return default_attestation_flow_.get(); +} + +AttestationFlow* AttestationFlowFactory::GetFallback() { + if (!fallback_attestation_flow_) { + DCHECK(server_proxy_.get()); + fallback_attestation_flow_ = + std::make_unique<AttestationFlow>(std::move(server_proxy_)); + } + return fallback_attestation_flow_.get(); +} + +} // namespace attestation +} // namespace chromeos
diff --git a/chromeos/attestation/attestation_flow_factory.h b/chromeos/attestation/attestation_flow_factory.h new file mode 100644 index 0000000..f4b8030 --- /dev/null +++ b/chromeos/attestation/attestation_flow_factory.h
@@ -0,0 +1,53 @@ +// Copyright 2021 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_ATTESTATION_ATTESTATION_FLOW_FACTORY_H_ +#define CHROMEOS_ATTESTATION_ATTESTATION_FLOW_FACTORY_H_ + +#include <memory> + +#include "base/component_export.h" +#include "chromeos/dbus/attestation/interface.pb.h" + +namespace chromeos { +namespace attestation { + +class AttestationFlow; +class ServerProxy; + +// A factory that creates a default attestation flow we should try first and a +// fallback solution if necessary. +class COMPONENT_EXPORT(CHROMEOS_ATTESTATION) AttestationFlowFactory { + public: + AttestationFlowFactory(); + virtual ~AttestationFlowFactory(); + + // Not copyable or movable. + AttestationFlowFactory(const AttestationFlowFactory&) = delete; + AttestationFlowFactory& operator=(const AttestationFlowFactory&) = delete; + AttestationFlowFactory(AttestationFlowFactory&&) = delete; + AttestationFlowFactory& operator=(AttestationFlowFactory&&) = delete; + + // Initializes the necessary step prior to invocation of `GetDefault()` and + // `GetFallback()`. Can only be called once. + virtual void Initialize(std::unique_ptr<ServerProxy> server_proxy); + // Returns the default attestation flow. + virtual AttestationFlow* GetDefault(); + // Returns the attestation flow used as a fallback solution. + virtual AttestationFlow* GetFallback(); + + private: + // The `ServerProxy` object. This is initialized in `Initialize()`. + std::unique_ptr<ServerProxy> server_proxy_; + + // The default attestation flow. + std::unique_ptr<AttestationFlow> default_attestation_flow_; + // The fallback solution. + std::unique_ptr<AttestationFlow> fallback_attestation_flow_; +}; + +} // namespace attestation +} // namespace chromeos + +#endif // CHROMEOS_ATTESTATION_ATTESTATION_FLOW_FACTORY_H_
diff --git a/chromeos/attestation/attestation_flow_integrated_unittest.cc b/chromeos/attestation/attestation_flow_integrated_unittest.cc index f3b4176..06475ff 100644 --- a/chromeos/attestation/attestation_flow_integrated_unittest.cc +++ b/chromeos/attestation/attestation_flow_integrated_unittest.cc
@@ -16,7 +16,9 @@ #include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "base/timer/timer.h" +#include "chromeos/attestation/attestation_flow_factory.h" #include "chromeos/attestation/attestation_flow_utils.h" +#include "chromeos/attestation/mock_attestation_flow.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/dbus/attestation/attestation_client.h" #include "chromeos/dbus/attestation/interface.pb.h" @@ -34,6 +36,7 @@ using testing::_; using testing::SaveArg; +using testing::StrictMock; } // namespace @@ -127,6 +130,61 @@ EXPECT_EQ(certificate2, certificate3); } +// This is pretty much identical to `GetCertificate` while the flow under test +// is created by the factory function to make sure that the factory function +// instantiates an object of the intended type. +TEST_F(AttestationFlowIntegratedTest, GetCertificateCreatedByFactory) { + chromeos::AttestationClient::Get() + ->GetTestInterface() + ->ConfigureEnrollmentPreparations(true); + + ::attestation::GetCertificateRequest request; + request.set_certificate_profile( + ::attestation::CertificateProfile::ENTERPRISE_USER_CERTIFICATE); + request.set_username("username@email.com"); + request.set_key_label("label"); + request.set_request_origin("origin"); + + AllowlistCertificateRequest(::attestation::ACAType::DEFAULT_ACA, request); + + base::MockCallback<AttestationFlowIntegrated::CertificateCallback> callback1, + callback2, callback3; + std::string certificate1, certificate2, certificate3; + EXPECT_CALL(callback1, Run(AttestationStatus::ATTESTATION_SUCCESS, _)) + .WillOnce(SaveArg<1>(&certificate1)); + EXPECT_CALL(callback2, Run(AttestationStatus::ATTESTATION_SUCCESS, _)) + .WillOnce(SaveArg<1>(&certificate2)); + EXPECT_CALL(callback3, Run(AttestationStatus::ATTESTATION_SUCCESS, _)) + .WillOnce(SaveArg<1>(&certificate3)); + + AttestationFlowFactory attestation_flow_factory; + // `AttestationFlowIntegrated` doesn't use `ServerProxy`. Create the factory + // with a strict mock of `ServerProxy` so we can catch unexpected calls. + attestation_flow_factory.Initialize( + std::make_unique<StrictMock<MockServerProxy>>()); + AttestationFlow* flow = attestation_flow_factory.GetDefault(); + flow->GetCertificate( + static_cast<AttestationCertificateProfile>(request.certificate_profile()), + AccountId::FromUserEmail(request.username()), request.request_origin(), + /*generate_new_key=*/true, request.key_label(), callback1.Get()); + flow->GetCertificate( + static_cast<AttestationCertificateProfile>(request.certificate_profile()), + AccountId::FromUserEmail(request.username()), request.request_origin(), + /*generate_new_key=*/true, request.key_label(), callback2.Get()); + flow->GetCertificate( + static_cast<AttestationCertificateProfile>(request.certificate_profile()), + AccountId::FromUserEmail(request.username()), request.request_origin(), + /*generate_new_key=*/false, request.key_label(), + base::BindOnce( + &AttestationFlowIntegratedTest::QuitRunLoopCertificateCallback, + base::Unretained(this), callback3.Get())); + Run(); + EXPECT_FALSE(certificate1.empty()); + EXPECT_FALSE(certificate2.empty()); + EXPECT_NE(certificate1, certificate2); + EXPECT_EQ(certificate2, certificate3); +} + TEST_F(AttestationFlowIntegratedTest, GetCertificateFailed) { chromeos::AttestationClient::Get() ->GetTestInterface()
diff --git a/chromeos/attestation/attestation_flow_type_decider.cc b/chromeos/attestation/attestation_flow_type_decider.cc new file mode 100644 index 0000000..0b806ef --- /dev/null +++ b/chromeos/attestation/attestation_flow_type_decider.cc
@@ -0,0 +1,38 @@ +// Copyright 2021 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 "chromeos/attestation/attestation_flow_type_decider.h" + +#include <utility> + +#include "base/bind.h" +#include "chromeos/attestation/attestation_flow.h" + +#include "base/logging.h" + +namespace chromeos { +namespace attestation { + +AttestationFlowTypeDecider::AttestationFlowTypeDecider() = default; + +AttestationFlowTypeDecider::~AttestationFlowTypeDecider() = default; + +void AttestationFlowTypeDecider::CheckType( + ServerProxy* server_proxy, + AttestationFlowTypeCheckCallback callback) { + server_proxy->CheckIfAnyProxyPresent( + base::BindOnce(&AttestationFlowTypeDecider::OnCheckProxyPresence, + weak_factory_.GetWeakPtr(), std::move(callback))); +} + +void AttestationFlowTypeDecider::OnCheckProxyPresence( + AttestationFlowTypeCheckCallback callback, + bool is_proxy_present) { + // The integrated flow is currently only allowed if no proxy is present, until + // the system-proxy daemon is enabled by default for pca_agentd. + std::move(callback).Run(!is_proxy_present); +} + +} // namespace attestation +} // namespace chromeos
diff --git a/chromeos/attestation/attestation_flow_type_decider.h b/chromeos/attestation/attestation_flow_type_decider.h new file mode 100644 index 0000000..b70426a --- /dev/null +++ b/chromeos/attestation/attestation_flow_type_decider.h
@@ -0,0 +1,42 @@ +// Copyright 2021 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_ATTESTATION_ATTESTATION_FLOW_TYPE_DECIDER_H_ +#define CHROMEOS_ATTESTATION_ATTESTATION_FLOW_TYPE_DECIDER_H_ + +#include "base/callback_forward.h" +#include "base/component_export.h" +#include "base/memory/weak_ptr.h" + +namespace chromeos { +namespace attestation { + +class ServerProxy; + +// An object that decides if the default (platform-side integrated) flow is a +// valid option. +class COMPONENT_EXPORT(CHROMEOS_ATTESTATION) AttestationFlowTypeDecider { + public: + using AttestationFlowTypeCheckCallback = + base::OnceCallback<void(bool is_integrated_flow_valid)>; + + AttestationFlowTypeDecider(); + virtual ~AttestationFlowTypeDecider(); + + // Checks if the default attestation flow is a valid option. + virtual void CheckType(ServerProxy* server_proxy, + AttestationFlowTypeCheckCallback callback); + + private: + // Called when `proxy_server` returns the check of proxy presence. + void OnCheckProxyPresence(AttestationFlowTypeCheckCallback callback, + bool is_proxy_present); + + base::WeakPtrFactory<AttestationFlowTypeDecider> weak_factory_{this}; +}; + +} // namespace attestation +} // namespace chromeos + +#endif // CHROMEOS_ATTESTATION_ATTESTATION_FLOW_TYPE_DECIDER_H_
diff --git a/chromeos/attestation/attestation_flow_type_decider_unittest.cc b/chromeos/attestation/attestation_flow_type_decider_unittest.cc new file mode 100644 index 0000000..2f7ad41 --- /dev/null +++ b/chromeos/attestation/attestation_flow_type_decider_unittest.cc
@@ -0,0 +1,80 @@ +// Copyright 2021 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 "chromeos/attestation/attestation_flow_type_decider.h" + +#include <utility> + +#include "base/bind.h" +#include "base/location.h" +#include "base/run_loop.h" +#include "base/test/task_environment.h" +#include "base/threading/thread_task_runner_handle.h" +#include "chromeos/attestation/mock_attestation_flow.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using testing::_; +using testing::Invoke; +using testing::StrictMock; + +namespace chromeos { +namespace attestation { + +class AttestationFlowTypeDeciderTest : public testing::Test { + public: + AttestationFlowTypeDeciderTest() = default; + ~AttestationFlowTypeDeciderTest() override = default; + + protected: + base::test::SingleThreadTaskEnvironment task_environment_; + StrictMock<MockServerProxy> server_proxy_; +}; + +// The integrated flow is valid when there is no proxy. +TEST_F(AttestationFlowTypeDeciderTest, + IntegratedFlowPossibleWithNoProxyPresent) { + bool result = false; + auto callback = [](base::RunLoop* run_loop, bool* result, bool is_valid) { + *result = is_valid; + run_loop->QuitClosure().Run(); + }; + base::RunLoop run_loop; + + EXPECT_CALL(server_proxy_, CheckIfAnyProxyPresent(_)) + .WillOnce(Invoke([](ServerProxy::ProxyPresenceCallback callback) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), false)); + })); + AttestationFlowTypeDecider checker; + checker.CheckType(&server_proxy_, + base::BindOnce(callback, &run_loop, &result)); + run_loop.Run(); + EXPECT_TRUE(result); +} + +// The integrated flow is invalid when there is a proxy. +TEST_F(AttestationFlowTypeDeciderTest, + IntegratedFlowImpossibleWithProxyPresent) { + bool result = true; + auto callback = [](base::RunLoop* run_loop, bool* result, bool is_valid) { + *result = is_valid; + run_loop->QuitClosure().Run(); + }; + base::RunLoop run_loop; + + EXPECT_CALL(server_proxy_, CheckIfAnyProxyPresent(_)) + .WillOnce(Invoke([](ServerProxy::ProxyPresenceCallback callback) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), true)); + })); + AttestationFlowTypeDecider checker; + checker.CheckType(&server_proxy_, + base::BindOnce(callback, &run_loop, &result)); + run_loop.Run(); + EXPECT_FALSE(result); +} + +} // namespace attestation +} // namespace chromeos
diff --git a/chromeos/attestation/attestation_flow_unittest.cc b/chromeos/attestation/attestation_flow_unittest.cc index 57ee0f9..66e9550 100644 --- a/chromeos/attestation/attestation_flow_unittest.cc +++ b/chromeos/attestation/attestation_flow_unittest.cc
@@ -13,6 +13,8 @@ #include "base/test/task_environment.h" #include "base/time/tick_clock.h" #include "base/timer/timer.h" +#include "chromeos/attestation/attestation_flow_factory.h" +#include "chromeos/attestation/attestation_flow_integrated.h" #include "chromeos/attestation/attestation_flow_utils.h" #include "chromeos/attestation/mock_attestation_flow.h" #include "chromeos/cryptohome/cryptohome_parameters.h" @@ -145,6 +147,84 @@ ->certificate()); } +// This is pretty much identical to `GetCertificate` while the flow under test +// is created by the factory function to make sure that the factory function +// instantiates an object of the intended type. +TEST_F(AttestationFlowTest, GetCertificateCreatedByFactory) { + // Verify the order of calls in a sequence. + Sequence flow_order; + + // Set the enrollment status as `false` so the full enrollment flow is + // triggered. + chromeos::AttestationClient::Get() + ->GetTestInterface() + ->mutable_status_reply() + ->set_enrolled(false); + chromeos::AttestationClient::Get() + ->GetTestInterface() + ->ConfigureEnrollmentPreparations(true); + + // Use StrictMock when we want to verify invocation frequency. + std::unique_ptr<MockServerProxy> proxy(new StrictMock<MockServerProxy>()); + proxy->DeferToFake(true); + proxy->fake()->set_enroll_response( + AttestationClient::Get()->GetTestInterface()->GetFakePcaEnrollResponse()); + EXPECT_CALL(*proxy, GetType()).WillRepeatedly(DoDefault()); + EXPECT_CALL(*proxy, SendEnrollRequest(AttestationClient::Get() + ->GetTestInterface() + ->GetFakePcaEnrollRequest(), + _)) + .Times(1) + .InSequence(flow_order); + + const AccountId account_id = AccountId::FromUserEmail(kFakeUserEmail); + + chromeos::AttestationClient::Get() + ->GetTestInterface() + ->AllowlistLegacyCreateCertificateRequest( + kFakeUserEmail, "fake_origin", + ::attestation::ENTERPRISE_USER_CERTIFICATE, + ::attestation::KEY_TYPE_RSA); + + proxy->fake()->set_cert_response( + AttestationClient::Get()->GetTestInterface()->GetFakePcaCertResponse()); + EXPECT_CALL( + *proxy, + SendCertificateRequest( + AttestationClient::Get()->GetTestInterface()->GetFakePcaCertRequest(), + _)) + .Times(1) + .InSequence(flow_order); + + StrictMock<MockObserver> observer; + EXPECT_CALL( + observer, + MockCertificateCallback( + ATTESTATION_SUCCESS, + AttestationClient::Get()->GetTestInterface()->GetFakeCertificate())) + .Times(1) + .InSequence(flow_order); + AttestationFlow::CertificateCallback mock_callback = base::BindOnce( + &MockObserver::MockCertificateCallback, base::Unretained(&observer)); + + std::unique_ptr<ServerProxy> proxy_interface(proxy.release()); + AttestationFlowFactory attestation_flow_factory; + attestation_flow_factory.Initialize(std::move(proxy_interface)); + attestation_flow_factory.GetFallback()->GetCertificate( + PROFILE_ENTERPRISE_USER_CERTIFICATE, account_id, "fake_origin", true, + std::string() /* key_name */, std::move(mock_callback)); + RunUntilIdle(); + + EXPECT_EQ(AttestationClient::Get()->GetTestInterface()->GetFakeCertificate(), + AttestationClient::Get() + ->GetTestInterface() + ->GetMutableKeyInfoReply( + kFakeUserEmail, + GetKeyNameForProfile(PROFILE_ENTERPRISE_USER_CERTIFICATE, + "fake_origin")) + ->certificate()); +} + // This is pretty much identical to |GetCertificate| item but during // construction the ecc key type is specified. TEST_F(AttestationFlowTest, GetCertificate_Ecc) {
diff --git a/chromeos/attestation/mock_attestation_flow.cc b/chromeos/attestation/mock_attestation_flow.cc index 412f684..7de121f 100644 --- a/chromeos/attestation/mock_attestation_flow.cc +++ b/chromeos/attestation/mock_attestation_flow.cc
@@ -32,6 +32,10 @@ result_, cert_response_.empty() ? request + "_response" : cert_response_); } +void FakeServerProxy::CheckIfAnyProxyPresent(ProxyPresenceCallback callback) { + std::move(callback).Run(true); +} + MockServerProxy::MockServerProxy() { DefaultValue<PrivacyCAType>::Set(DEFAULT_PCA); }
diff --git a/chromeos/attestation/mock_attestation_flow.h b/chromeos/attestation/mock_attestation_flow.h index 7b48d377..e9d993f 100644 --- a/chromeos/attestation/mock_attestation_flow.h +++ b/chromeos/attestation/mock_attestation_flow.h
@@ -35,6 +35,8 @@ void SendCertificateRequest(const std::string& request, DataCallback callback) override; + void CheckIfAnyProxyPresent(ProxyPresenceCallback callback) override; + void set_enroll_response(const std::string& response) { enroll_response_ = response; } @@ -61,6 +63,7 @@ MOCK_METHOD2(SendEnrollRequest, void(const std::string&, DataCallback)); MOCK_METHOD2(SendCertificateRequest, void(const std::string&, DataCallback)); MOCK_METHOD0(GetType, PrivacyCAType()); + MOCK_METHOD1(CheckIfAnyProxyPresent, void(ProxyPresenceCallback)); FakeServerProxy* fake() { return &fake_; }
diff --git a/chromeos/components/camera_app_ui/resources/css/main.css b/chromeos/components/camera_app_ui/resources/css/main.css index 3d6cd21..0257a8b 100644 --- a/chromeos/components/camera_app_ui/resources/css/main.css +++ b/chromeos/components/camera_app_ui/resources/css/main.css
@@ -52,6 +52,11 @@ } button, +input { + --focus-ring-size: 3px; +} + +button, input[type=radio], input[type=checkbox], label { @@ -72,8 +77,6 @@ body.tab-navigation button:focus::after, body.tab-navigation input:focus::after { - --focus-ring-size: 3px; - border: 2px solid var(--focus-color); border-radius: 4px; bottom: calc(-1 * var(--focus-ring-size)); @@ -382,16 +385,14 @@ } button.shutter { + --focus-ring-size: 9px; + display: none; height: 60px; width: 60px; z-index: 1; /* On top of transforming switch-mode buttons. */ } -body.tab-navigation button.shutter:focus::after { - --focus-ring-size: 9px; -} - body.video #recordvideo, body:not(.taking):not(.video) #start-takephoto, body:not(.timer):not(.video) #start-takephoto, @@ -595,6 +596,8 @@ } #switch-device { + --focus-ring-size: 8px; + background-image: url(/images/camera_button_switch_device.svg); height: var(--big-icon); width: var(--big-icon); @@ -613,10 +616,6 @@ } } -body.tab-navigation #switch-device:focus::after { - --focus-ring-size: 8px; -} - #gallery-enter { background-color: rgba(24, 24, 24, 1); background-size: cover; @@ -1408,7 +1407,10 @@ right: 2px; } -.menu-header .icon { +.menu-header button.icon { + /* Icon image is small enough and won't be covered by -1px */ + --focus-ring-size: -1px; + background-image: url(/images/settings_button_back.svg); }
diff --git a/chromeos/cryptohome/BUILD.gn b/chromeos/cryptohome/BUILD.gn index 44216eb5..bf2af8b4 100644 --- a/chromeos/cryptohome/BUILD.gn +++ b/chromeos/cryptohome/BUILD.gn
@@ -20,8 +20,6 @@ "//components/user_manager", ] sources = [ - "async_method_caller.cc", - "async_method_caller.h", "cryptohome_parameters.cc", "cryptohome_parameters.h", "cryptohome_util.cc", @@ -48,8 +46,6 @@ "//testing/gtest", ] sources = [ - "mock_async_method_caller.cc", - "mock_async_method_caller.h", "mock_homedir_methods.cc", "mock_homedir_methods.h", ]
diff --git a/chromeos/cryptohome/async_method_caller.cc b/chromeos/cryptohome/async_method_caller.cc deleted file mode 100644 index f48da11..0000000 --- a/chromeos/cryptohome/async_method_caller.cc +++ /dev/null
@@ -1,185 +0,0 @@ -// Copyright (c) 2012 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 "chromeos/cryptohome/async_method_caller.h" - -#include "base/bind.h" -#include "base/location.h" -#include "base/logging.h" -#include "base/macros.h" -#include "base/optional.h" -#include "base/single_thread_task_runner.h" -#include "base/threading/thread_task_runner_handle.h" -#include "chromeos/cryptohome/cryptohome_parameters.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" - -using chromeos::CryptohomeClient; - -namespace cryptohome { - -namespace { - -AsyncMethodCaller* g_async_method_caller = NULL; - -// The implementation of AsyncMethodCaller -class AsyncMethodCallerImpl : public AsyncMethodCaller, - public chromeos::CryptohomeClient::Observer { - public: - AsyncMethodCallerImpl() { CryptohomeClient::Get()->AddObserver(this); } - - ~AsyncMethodCallerImpl() override { - CryptohomeClient::Get()->RemoveObserver(this); - } - - private: - struct CallbackElement { - CallbackElement() = default; - explicit CallbackElement(AsyncMethodCaller::Callback callback) - : callback(std::move(callback)), - task_runner(base::ThreadTaskRunnerHandle::Get()) {} - AsyncMethodCaller::Callback callback; - scoped_refptr<base::SingleThreadTaskRunner> task_runner; - }; - - struct DataCallbackElement { - DataCallbackElement() = default; - explicit DataCallbackElement(AsyncMethodCaller::DataCallback callback) - : data_callback(std::move(callback)), - task_runner(base::ThreadTaskRunnerHandle::Get()) {} - AsyncMethodCaller::DataCallback data_callback; - scoped_refptr<base::SingleThreadTaskRunner> task_runner; - }; - - using CallbackMap = std::unordered_map<int, CallbackElement>; - using DataCallbackMap = std::unordered_map<int, DataCallbackElement>; - - // Handles the response for async calls. - // Below is described how async calls work. - // 1. CryptohomeClient::AsyncXXX returns "async ID". - // 2. RegisterAsyncCallback registers the "async ID" with the user-provided - // callback. - // 3. Cryptohome will return the result asynchronously as a signal with - // "async ID" - // 4. "HandleAsyncResponse" handles the result signal and call the registered - // callback associated with the "async ID". - void AsyncCallStatus(int async_id, - bool return_status, - int return_code) override { - const CallbackMap::iterator it = callback_map_.find(async_id); - if (it == callback_map_.end()) { - LOG(ERROR) << "Received signal for unknown async_id " << async_id; - return; - } - it->second.task_runner->PostTask( - FROM_HERE, base::BindOnce(std::move(it->second.callback), return_status, - static_cast<MountError>(return_code))); - callback_map_.erase(it); - } - - // Similar to HandleAsyncResponse but for signals with a raw data payload. - void AsyncCallStatusWithData(int async_id, - bool return_status, - const std::string& return_data) override { - const DataCallbackMap::iterator it = data_callback_map_.find(async_id); - if (it == data_callback_map_.end()) { - LOG(ERROR) << "Received signal for unknown async_id " << async_id; - return; - } - it->second.task_runner->PostTask( - FROM_HERE, base::BindOnce(std::move(it->second.data_callback), - return_status, return_data)); - data_callback_map_.erase(it); - } - - // Registers a callback which is called when the result for AsyncXXX is ready. - void RegisterAsyncCallback(Callback callback, - const char* error, - base::Optional<int> async_id) { - if (!async_id.has_value()) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), - false, // return status - cryptohome::MOUNT_ERROR_FATAL)); - return; - } - - if (async_id.value() == 0) { - LOG(ERROR) << error; - return; - } - VLOG(1) << "Adding handler for " << async_id.value(); - DCHECK_EQ(callback_map_.count(async_id.value()), 0U); - DCHECK_EQ(data_callback_map_.count(async_id.value()), 0U); - callback_map_[async_id.value()] = CallbackElement(std::move(callback)); - } - - // Registers a callback which is called when the result for AsyncXXX is ready. - void RegisterAsyncDataCallback(DataCallback callback, - const char* error, - base::Optional<int> async_id) { - if (!async_id.has_value()) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), - false, // return status - std::string())); - return; - } - if (async_id.value() == 0) { - LOG(ERROR) << error; - return; - } - VLOG(1) << "Adding handler for " << async_id.value(); - DCHECK_EQ(callback_map_.count(async_id.value()), 0U); - DCHECK_EQ(data_callback_map_.count(async_id.value()), 0U); - data_callback_map_[async_id.value()] = - DataCallbackElement(std::move(callback)); - } - - CallbackMap callback_map_; - DataCallbackMap data_callback_map_; - base::WeakPtrFactory<AsyncMethodCallerImpl> weak_ptr_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(AsyncMethodCallerImpl); -}; - -} // namespace - -// static -void AsyncMethodCaller::Initialize() { - if (g_async_method_caller) { - LOG(WARNING) << "AsyncMethodCaller was already initialized"; - return; - } - g_async_method_caller = new AsyncMethodCallerImpl(); - VLOG(1) << "AsyncMethodCaller initialized"; -} - -// static -void AsyncMethodCaller::InitializeForTesting( - AsyncMethodCaller* async_method_caller) { - if (g_async_method_caller) { - LOG(WARNING) << "AsyncMethodCaller was already initialized"; - return; - } - g_async_method_caller = async_method_caller; - VLOG(1) << "AsyncMethodCaller initialized"; -} - -// static -void AsyncMethodCaller::Shutdown() { - if (!g_async_method_caller) { - LOG(WARNING) << "AsyncMethodCaller::Shutdown() called with NULL manager"; - return; - } - delete g_async_method_caller; - g_async_method_caller = NULL; - VLOG(1) << "AsyncMethodCaller Shutdown completed"; -} - -// static -AsyncMethodCaller* AsyncMethodCaller::GetInstance() { - return g_async_method_caller; -} - -} // namespace cryptohome
diff --git a/chromeos/cryptohome/async_method_caller.h b/chromeos/cryptohome/async_method_caller.h deleted file mode 100644 index c61cba49..0000000 --- a/chromeos/cryptohome/async_method_caller.h +++ /dev/null
@@ -1,54 +0,0 @@ -// Copyright (c) 2012 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_CRYPTOHOME_ASYNC_METHOD_CALLER_H_ -#define CHROMEOS_CRYPTOHOME_ASYNC_METHOD_CALLER_H_ - -#include <string> - -#include "base/callback_forward.h" -#include "base/component_export.h" -#include "chromeos/dbus/constants/attestation_constants.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" -#include "third_party/cros_system_api/dbus/service_constants.h" - -namespace cryptohome { - -// Note: This file is placed in ::cryptohome instead of ::chromeos::cryptohome -// since there is already a namespace ::cryptohome which holds the error code -// enum (MountError) and referencing ::chromeos::cryptohome and ::cryptohome -// within the same code is confusing. - -// This class manages calls to Cryptohome service's 'async' methods. -class COMPONENT_EXPORT(CHROMEOS_CRYPTOHOME) AsyncMethodCaller { - public: - // A callback type which is called back on the UI thread when the results of - // method calls are ready. - using Callback = - base::OnceCallback<void(bool success, MountError return_code)>; - using DataCallback = - base::OnceCallback<void(bool success, const std::string& data)>; - - virtual ~AsyncMethodCaller() {} - - // Creates the global AsyncMethodCaller instance. - static void Initialize(); - - // Similar to Initialize(), but can inject an alternative - // AsyncMethodCaller such as MockAsyncMethodCaller for testing. - // The injected object will be owned by the internal pointer and deleted - // by Shutdown(). - static void InitializeForTesting(AsyncMethodCaller* async_method_caller); - - // Destroys the global AsyncMethodCaller instance if it exists. - static void Shutdown(); - - // Returns a pointer to the global AsyncMethodCaller instance. - // Initialize() should already have been called. - static AsyncMethodCaller* GetInstance(); -}; - -} // namespace cryptohome - -#endif // CHROMEOS_CRYPTOHOME_ASYNC_METHOD_CALLER_H_
diff --git a/chromeos/cryptohome/mock_async_method_caller.cc b/chromeos/cryptohome/mock_async_method_caller.cc deleted file mode 100644 index 0b511ee..0000000 --- a/chromeos/cryptohome/mock_async_method_caller.cc +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright (c) 2012 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 "chromeos/cryptohome/mock_async_method_caller.h" - -using ::testing::Invoke; -using ::testing::WithArgs; -using ::testing::_; - -namespace cryptohome { - -const char MockAsyncMethodCaller::kFakeSanitizedUsername[] = "01234567890ABC"; -const char MockAsyncMethodCaller::kFakeChallengeResponse[] = - "challenge_response"; - -MockAsyncMethodCaller::MockAsyncMethodCaller() - : success_(false), return_code_(cryptohome::MOUNT_ERROR_NONE) { -} - -MockAsyncMethodCaller::~MockAsyncMethodCaller() = default; - -void MockAsyncMethodCaller::SetUp(bool success, MountError return_code) { - success_ = success; - return_code_ = return_code; -} - -void MockAsyncMethodCaller::FakeGetSanitizedUsername(DataCallback callback) { - std::move(callback).Run(success_, kFakeSanitizedUsername); -} - -void MockAsyncMethodCaller::FakeEnterpriseChallenge(DataCallback callback) { - std::move(callback).Run(success_, kFakeChallengeResponse); -} - -} // namespace cryptohome
diff --git a/chromeos/cryptohome/mock_async_method_caller.h b/chromeos/cryptohome/mock_async_method_caller.h deleted file mode 100644 index 34ef3aa..0000000 --- a/chromeos/cryptohome/mock_async_method_caller.h +++ /dev/null
@@ -1,64 +0,0 @@ -// Copyright (c) 2012 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_CRYPTOHOME_MOCK_ASYNC_METHOD_CALLER_H_ -#define CHROMEOS_CRYPTOHOME_MOCK_ASYNC_METHOD_CALLER_H_ - -#include <string> - -#include "base/callback.h" -#include "base/macros.h" -#include "chromeos/cryptohome/async_method_caller.h" -#include "chromeos/cryptohome/cryptohome_parameters.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace cryptohome { - -class MockAsyncMethodCaller : public AsyncMethodCaller { - public: - static const char kFakeAttestationEnrollRequest[]; - static const char kFakeAttestationCertRequest[]; - static const char kFakeAttestationCert[]; - static const char kFakeSanitizedUsername[]; - static const char kFakeChallengeResponse[]; - - MockAsyncMethodCaller(); - virtual ~MockAsyncMethodCaller(); - - void SetUp(bool success, MountError return_code); - - MOCK_METHOD2(AsyncTpmAttestationCreateEnrollRequest, - void(chromeos::attestation::PrivacyCAType pca_type, - DataCallback callback)); - MOCK_METHOD3(AsyncTpmAttestationEnroll, - void(chromeos::attestation::PrivacyCAType pca_type, - const std::string& pca_response, - Callback callback)); - MOCK_METHOD5( - AsyncTpmAttestationCreateCertRequest, - void(chromeos::attestation::PrivacyCAType pca_type, - chromeos::attestation::AttestationCertificateProfile profile, - const Identification& user_id, - const std::string& request_origin, - DataCallback callback)); - MOCK_METHOD5(AsyncTpmAttestationFinishCertRequest, - void(const std::string& pca_response, - chromeos::attestation::AttestationKeyType key_type, - const Identification& user_id, - const std::string& key_name, - DataCallback callback)); - - private: - bool success_; - MountError return_code_; - - void FakeGetSanitizedUsername(DataCallback callback); - void FakeEnterpriseChallenge(DataCallback callback); - - DISALLOW_COPY_AND_ASSIGN(MockAsyncMethodCaller); -}; - -} // namespace cryptohome - -#endif // CHROMEOS_CRYPTOHOME_MOCK_ASYNC_METHOD_CALLER_H_
diff --git a/chromeos/cryptohome/mock_homedir_methods.cc b/chromeos/cryptohome/mock_homedir_methods.cc index f4316cf..9764aa3 100644 --- a/chromeos/cryptohome/mock_homedir_methods.cc +++ b/chromeos/cryptohome/mock_homedir_methods.cc
@@ -7,7 +7,6 @@ #include <vector> #include "chromeos/cryptohome/cryptohome_parameters.h" -#include "chromeos/cryptohome/mock_async_method_caller.h" using ::testing::Invoke; using ::testing::WithArgs;
diff --git a/chromeos/dbus/cryptohome/cryptohome_client.cc b/chromeos/dbus/cryptohome/cryptohome_client.cc index 4c1bd3f..b9c4c3b8 100644 --- a/chromeos/dbus/cryptohome/cryptohome_client.cc +++ b/chromeos/dbus/cryptohome/cryptohome_client.cc
@@ -698,20 +698,6 @@ blocking_method_caller_.reset(new BlockingMethodCaller(bus, proxy)); proxy_->ConnectToSignal( - cryptohome::kCryptohomeInterface, cryptohome::kSignalAsyncCallStatus, - base::BindRepeating(&CryptohomeClientImpl::AsyncCallStatusReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CryptohomeClientImpl::OnSignalConnected, - weak_ptr_factory_.GetWeakPtr())); - proxy_->ConnectToSignal( - cryptohome::kCryptohomeInterface, - cryptohome::kSignalAsyncCallStatusWithData, - base::BindRepeating( - &CryptohomeClientImpl::AsyncCallStatusWithDataReceived, - weak_ptr_factory_.GetWeakPtr()), - base::BindOnce(&CryptohomeClientImpl::OnSignalConnected, - weak_ptr_factory_.GetWeakPtr())); - proxy_->ConnectToSignal( cryptohome::kCryptohomeInterface, cryptohome::kSignalLowDiskSpace, base::BindRepeating(&CryptohomeClientImpl::LowDiskSpaceReceived, weak_ptr_factory_.GetWeakPtr()), @@ -728,23 +714,6 @@ } private: - // Handles the result of AsyncXXX methods. - void OnAsyncMethodCall(AsyncMethodCallback callback, - dbus::Response* response) { - if (!response) { - std::move(callback).Run(base::nullopt); - return; - } - dbus::MessageReader reader(response); - int async_id = 0; - if (!reader.PopInt32(&async_id)) { - LOG(ERROR) << "Invalid response: " << response->ToString(); - std::move(callback).Run(base::nullopt); - return; - } - std::move(callback).Run(async_id); - } - // Handles the result of GetSystemSalt(). void OnGetSystemSalt(DBusMethodCallback<std::vector<uint8_t>> callback, dbus::Response* response) { @@ -906,39 +875,6 @@ std::move(callback).Run(std::move(token_info)); } - // Handles AsyncCallStatus signal. - void AsyncCallStatusReceived(dbus::Signal* signal) { - dbus::MessageReader reader(signal); - int async_id = 0; - bool return_status = false; - int return_code = 0; - if (!reader.PopInt32(&async_id) || !reader.PopBool(&return_status) || - !reader.PopInt32(&return_code)) { - LOG(ERROR) << "Invalid signal: " << signal->ToString(); - return; - } - for (auto& observer : observer_list_) - observer.AsyncCallStatus(async_id, return_status, return_code); - } - - // Handles AsyncCallStatusWithData signal. - void AsyncCallStatusWithDataReceived(dbus::Signal* signal) { - dbus::MessageReader reader(signal); - int async_id = 0; - bool return_status = false; - const uint8_t* return_data_buffer = NULL; - size_t return_data_length = 0; - if (!reader.PopInt32(&async_id) || !reader.PopBool(&return_status) || - !reader.PopArrayOfBytes(&return_data_buffer, &return_data_length)) { - LOG(ERROR) << "Invalid signal: " << signal->ToString(); - return; - } - std::string return_data(reinterpret_cast<const char*>(return_data_buffer), - return_data_length); - for (auto& observer : observer_list_) - observer.AsyncCallStatusWithData(async_id, return_status, return_data); - } - // Handles LowDiskSpace signal. void LowDiskSpaceReceived(dbus::Signal* signal) { dbus::MessageReader reader(signal);
diff --git a/chromeos/dbus/cryptohome/cryptohome_client.h b/chromeos/dbus/cryptohome/cryptohome_client.h index 5658898..18de88f 100644 --- a/chromeos/dbus/cryptohome/cryptohome_client.h +++ b/chromeos/dbus/cryptohome/cryptohome_client.h
@@ -56,19 +56,6 @@ public: class Observer { public: - // Called when AsyncCallStatus signal is received, when results for - // AsyncXXX methods are returned. Cryptohome service will process the - // calls in a first-in-first-out manner when they are made in parallel. - virtual void AsyncCallStatus(int async_id, - bool return_status, - int return_code) {} - - // Called when AsyncCallStatusWithData signal is received, - // similar to AsyncCallStatus, but with |data|. - virtual void AsyncCallStatusWithData(int async_id, - bool return_status, - const std::string& data) {} - // Called when LowDiskSpace signal is received, when the cryptohome // partition is running out of disk space. virtual void LowDiskSpace(uint64_t disk_free_bytes) {} @@ -85,12 +72,6 @@ virtual ~Observer() = default; }; - // Callback for the methods initiate asynchronous operations. - // On success (i.e. the asynchronous operation is started), an |async_id| - // is returned, so the user code can identify the corresponding signal - // handler invocation later. - using AsyncMethodCallback = DBusMethodCallback<int /* async_id */>; - // Represents the result to obtain the data related to TPM attestation. struct TpmAttestationDataResult { // True when it is succeeded to obtain the data.
diff --git a/chromeos/dbus/cryptohome/fake_cryptohome_client.cc b/chromeos/dbus/cryptohome/fake_cryptohome_client.cc index 7d2f05ed..95c70c55 100644 --- a/chromeos/dbus/cryptohome/fake_cryptohome_client.cc +++ b/chromeos/dbus/cryptohome/fake_cryptohome_client.cc
@@ -552,45 +552,6 @@ FROM_HERE, base::BindOnce(std::move(callback), reply)); } -void FakeCryptohomeClient::ReturnAsyncMethodResult( - AsyncMethodCallback callback) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal, - weak_ptr_factory_.GetWeakPtr(), std::move(callback))); -} - -void FakeCryptohomeClient::ReturnAsyncMethodData(AsyncMethodCallback callback, - const std::string& data) { - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&FakeCryptohomeClient::ReturnAsyncMethodDataInternal, - weak_ptr_factory_.GetWeakPtr(), std::move(callback), - data)); -} - -void FakeCryptohomeClient::ReturnAsyncMethodResultInternal( - AsyncMethodCallback callback) { - std::move(callback).Run(async_call_id_); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&FakeCryptohomeClient::NotifyAsyncCallStatus, - weak_ptr_factory_.GetWeakPtr(), async_call_id_, - true, cryptohome::MOUNT_ERROR_NONE)); - ++async_call_id_; -} - -void FakeCryptohomeClient::ReturnAsyncMethodDataInternal( - AsyncMethodCallback callback, - const std::string& data) { - std::move(callback).Run(async_call_id_); - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&FakeCryptohomeClient::NotifyAsyncCallStatusWithData, - weak_ptr_factory_.GetWeakPtr(), async_call_id_, true, - data)); - ++async_call_id_; -} - void FakeCryptohomeClient::OnDircryptoMigrationProgressUpdated() { dircrypto_migration_progress_++; @@ -607,21 +568,6 @@ kDircryptoMigrationMaxProgress); } -void FakeCryptohomeClient::NotifyAsyncCallStatus(int async_id, - bool return_status, - int return_code) { - for (auto& observer : observer_list_) - observer.AsyncCallStatus(async_id, return_status, return_code); -} - -void FakeCryptohomeClient::NotifyAsyncCallStatusWithData( - int async_id, - bool return_status, - const std::string& data) { - for (auto& observer : observer_list_) - observer.AsyncCallStatusWithData(async_id, return_status, data); -} - void FakeCryptohomeClient::NotifyDircryptoMigrationProgress( cryptohome::DircryptoMigrationStatus status, uint64_t current,
diff --git a/chromeos/dbus/cryptohome/fake_cryptohome_client.h b/chromeos/dbus/cryptohome/fake_cryptohome_client.h index 4254443ba..93b0f66 100644 --- a/chromeos/dbus/cryptohome/fake_cryptohome_client.h +++ b/chromeos/dbus/cryptohome/fake_cryptohome_client.h
@@ -272,32 +272,10 @@ const cryptohome::BaseReply& reply, DBusMethodCallback<cryptohome::BaseReply> callback); - // Posts tasks which return fake results to the UI thread. - void ReturnAsyncMethodResult(AsyncMethodCallback callback); - - // Posts tasks which return fake data to the UI thread. - void ReturnAsyncMethodData(AsyncMethodCallback callback, - const std::string& data); - - // This method is used to implement ReturnAsyncMethodResult without data. - void ReturnAsyncMethodResultInternal(AsyncMethodCallback callback); - - // This method is used to implement ReturnAsyncMethodResult with data. - void ReturnAsyncMethodDataInternal(AsyncMethodCallback callback, - const std::string& data); - // This method is used to implement MigrateToDircrypto with simulated progress // updates. void OnDircryptoMigrationProgressUpdated(); - // Notifies AsyncCallStatus() to Observer instances. - void NotifyAsyncCallStatus(int async_id, bool return_status, int return_code); - - // Notifies AsyncCallStatusWithData() to Observer instances. - void NotifyAsyncCallStatusWithData(int async_id, - bool return_status, - const std::string& data); - // Loads install attributes from the stub file. bool LoadInstallAttributes(); @@ -318,7 +296,6 @@ int remove_firmware_management_parameters_from_tpm_call_count_ = 0; - int async_call_id_ = 1; bool mount_create_required_ = false; bool unmount_result_ = true; std::vector<uint8_t> system_salt_{GetStubSystemSalt()};
diff --git a/chromeos/login/auth/cryptohome_authenticator.cc b/chromeos/login/auth/cryptohome_authenticator.cc index 89bb6895..fae26fd 100644 --- a/chromeos/login/auth/cryptohome_authenticator.cc +++ b/chromeos/login/auth/cryptohome_authenticator.cc
@@ -15,7 +15,6 @@ #include "base/memory/weak_ptr.h" #include "base/metrics/histogram_macros.h" #include "chromeos/constants/chromeos_switches.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/cryptohome/homedir_methods.h"
diff --git a/chromeos/login/auth/extended_authenticator_impl.cc b/chromeos/login/auth/extended_authenticator_impl.cc index 3d6085a..b1b57640b 100644 --- a/chromeos/login/auth/extended_authenticator_impl.cc +++ b/chromeos/login/auth/extended_authenticator_impl.cc
@@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" -#include "chromeos/cryptohome/async_method_caller.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/cryptohome/homedir_methods.h"
diff --git a/chromeos/network/device_state.cc b/chromeos/network/device_state.cc index 9cfe77a..99faaeb 100644 --- a/chromeos/network/device_state.cc +++ b/chromeos/network/device_state.cc
@@ -178,6 +178,11 @@ bool DeviceState::HasAPN(const std::string& access_point_name) const { for (const auto& apn : apn_list_.GetList()) { + // bogus empty entries in the list might have been converted to a list while + // traveling over D-Bus, skip them rather than crashing below. + if (!apn.is_dict()) + continue; + const std::string* apn_name = apn.FindStringKey(shill::kApnProperty); if (apn_name && *apn_name == access_point_name) { return true;
diff --git a/chromeos/services/assistant/platform/audio_input_host_unittest.cc b/chromeos/services/assistant/platform/audio_input_host_unittest.cc index 72a057b..9187157 100644 --- a/chromeos/services/assistant/platform/audio_input_host_unittest.cc +++ b/chromeos/services/assistant/platform/audio_input_host_unittest.cc
@@ -12,7 +12,6 @@ #include "chromeos/audio/cras_audio_handler.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/services/assistant/public/cpp/features.h" -#include "chromeos/services/assistant/test_support/scoped_assistant_client.h" #include "chromeos/services/libassistant/public/mojom/audio_input_controller.mojom.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -29,19 +28,6 @@ using ::testing::_; using ::testing::NiceMock; -class ScopedFakeAssistantClient : public ScopedAssistantClient { - public: - ScopedFakeAssistantClient() = default; - ~ScopedFakeAssistantClient() override = default; - - // ScopedAssistantClient overrides: - void RequestAudioStreamFactory( - mojo::PendingReceiver<audio::mojom::StreamFactory> receiver) override {} - - private: - DISALLOW_COPY_AND_ASSIGN(ScopedFakeAssistantClient); -}; - class AudioInputControllerMock : public MojomAudioInputController { public: AudioInputControllerMock() = default; @@ -166,7 +152,6 @@ private: base::test::TaskEnvironment task_environment_; base::test::ScopedFeatureList scoped_feature_list_; - ScopedFakeAssistantClient assistant_client_; ScopedCrasAudioHandler cras_audio_handler_; NiceMock<AudioInputControllerMock> audio_input_controller_; std::unique_ptr<AudioInputHostImpl> audio_input_host_;
diff --git a/chromeos/services/assistant/platform/audio_output_provider_impl.cc b/chromeos/services/assistant/platform/audio_output_provider_impl.cc index fb9c4f37..3d1553f5 100644 --- a/chromeos/services/assistant/platform/audio_output_provider_impl.cc +++ b/chromeos/services/assistant/platform/audio_output_provider_impl.cc
@@ -151,7 +151,7 @@ media_session_(media_session), loop_back_input_(platform_delegate_, media::AudioDeviceDescription::kLoopbackInputDeviceId), - volume_control_impl_(media_session), + volume_control_impl_(media_session, platform_delegate), main_task_runner_(base::SequencedTaskRunnerHandle::Get()), background_task_runner_(background_task_runner), device_id_(device_id) {
diff --git a/chromeos/services/assistant/platform/platform_delegate_impl.cc b/chromeos/services/assistant/platform/platform_delegate_impl.cc index 044ada2..170db485 100644 --- a/chromeos/services/assistant/platform/platform_delegate_impl.cc +++ b/chromeos/services/assistant/platform/platform_delegate_impl.cc
@@ -27,5 +27,10 @@ AssistantClient::Get()->RequestAudioDecoderFactory(std::move(receiver)); } +void PlatformDelegateImpl::BindAssistantVolumeControl( + mojo::PendingReceiver<::ash::mojom::AssistantVolumeControl> receiver) { + AssistantClient::Get()->RequestAssistantVolumeControl(std::move(receiver)); +} + } // namespace assistant } // namespace chromeos
diff --git a/chromeos/services/assistant/platform/platform_delegate_impl.h b/chromeos/services/assistant/platform/platform_delegate_impl.h index 308a46e..baa8c16 100644 --- a/chromeos/services/assistant/platform/platform_delegate_impl.h +++ b/chromeos/services/assistant/platform/platform_delegate_impl.h
@@ -29,6 +29,9 @@ mojo::PendingReceiver< ::chromeos::assistant::mojom::AssistantAudioDecoderFactory> receiver) override; + void BindAssistantVolumeControl( + mojo::PendingReceiver<::ash::mojom::AssistantVolumeControl> receiver) + override; private: mojo::Receiver<PlatformDelegate> receiver_{this};
diff --git a/chromeos/services/assistant/platform/volume_control_impl.cc b/chromeos/services/assistant/platform/volume_control_impl.cc index 2c8501da..46ba999c 100644 --- a/chromeos/services/assistant/platform/volume_control_impl.cc +++ b/chromeos/services/assistant/platform/volume_control_impl.cc
@@ -8,7 +8,7 @@ #include "ash/public/mojom/assistant_volume_control.mojom.h" #include "chromeos/services/assistant/media_session/assistant_media_session.h" -#include "chromeos/services/assistant/public/cpp/assistant_client.h" +#include "chromeos/services/libassistant/public/mojom/platform_delegate.mojom.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -16,11 +16,13 @@ namespace chromeos { namespace assistant { -VolumeControlImpl::VolumeControlImpl(AssistantMediaSession* media_session) +VolumeControlImpl::VolumeControlImpl( + AssistantMediaSession* media_session, + chromeos::libassistant::mojom::PlatformDelegate* delegate) : media_session_(media_session), main_task_runner_(base::SequencedTaskRunnerHandle::Get()), weak_factory_(this) { - AssistantClient::Get()->RequestAssistantVolumeControl( + delegate->BindAssistantVolumeControl( volume_control_.BindNewPipeAndPassReceiver()); mojo::PendingRemote<ash::mojom::VolumeObserver> observer; receiver_.Bind(observer.InitWithNewPipeAndPassReceiver());
diff --git a/chromeos/services/assistant/platform/volume_control_impl.h b/chromeos/services/assistant/platform/volume_control_impl.h index 35c92a5..0d097f9 100644 --- a/chromeos/services/assistant/platform/volume_control_impl.h +++ b/chromeos/services/assistant/platform/volume_control_impl.h
@@ -7,6 +7,7 @@ #include "ash/public/mojom/assistant_volume_control.mojom.h" #include "base/macros.h" +#include "chromeos/services/libassistant/public/mojom/platform_delegate.mojom-forward.h" #include "libassistant/shared/public/platform_audio_output.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -19,7 +20,8 @@ class VolumeControlImpl : public assistant_client::VolumeControl, public ash::mojom::VolumeObserver { public: - explicit VolumeControlImpl(AssistantMediaSession* media_session); + VolumeControlImpl(AssistantMediaSession* media_session, + chromeos::libassistant::mojom::PlatformDelegate* delegate); ~VolumeControlImpl() override; // assistant_client::VolumeControl overrides: @@ -42,7 +44,7 @@ void SetSystemVolumeOnMainThread(float new_volume, bool user_initiated); void SetSystemMutedOnMainThread(bool muted); - AssistantMediaSession* media_session_; + AssistantMediaSession* const media_session_; mojo::Remote<ash::mojom::AssistantVolumeControl> volume_control_; mojo::Receiver<ash::mojom::VolumeObserver> receiver_{this}; scoped_refptr<base::SequencedTaskRunner> main_task_runner_;
diff --git a/chromeos/services/libassistant/DEPS b/chromeos/services/libassistant/DEPS index 943a6e1..930c13eb 100644 --- a/chromeos/services/libassistant/DEPS +++ b/chromeos/services/libassistant/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+ash/public/mojom", "+chromeos/services/assistant/public", "+libassistant", "+media/audio",
diff --git a/chromeos/services/libassistant/audio_input_controller_unittest.cc b/chromeos/services/libassistant/audio_input_controller_unittest.cc index 523e2f8..dabdeb8 100644 --- a/chromeos/services/libassistant/audio_input_controller_unittest.cc +++ b/chromeos/services/libassistant/audio_input_controller_unittest.cc
@@ -52,6 +52,9 @@ mojo::PendingReceiver< ::chromeos::assistant::mojom::AssistantAudioDecoderFactory> receiver) override {} + void BindAssistantVolumeControl( + mojo::PendingReceiver<::ash::mojom::AssistantVolumeControl> receiver) + override {} // Return the pending receiver passed to the last BindAudioStreamFactory call. mojo::PendingReceiver<::audio::mojom::StreamFactory>
diff --git a/chromeos/services/libassistant/public/mojom/BUILD.gn b/chromeos/services/libassistant/public/mojom/BUILD.gn index de031bb..c8779abd 100644 --- a/chromeos/services/libassistant/public/mojom/BUILD.gn +++ b/chromeos/services/libassistant/public/mojom/BUILD.gn
@@ -20,6 +20,7 @@ ] deps = [ + "//ash/public/mojom", "//chromeos/services/assistant/public/mojom", "//services/audio/public/mojom", "//services/network/public/mojom",
diff --git a/chromeos/services/libassistant/public/mojom/platform_delegate.mojom b/chromeos/services/libassistant/public/mojom/platform_delegate.mojom index 22ea75a..f2c8f86 100644 --- a/chromeos/services/libassistant/public/mojom/platform_delegate.mojom +++ b/chromeos/services/libassistant/public/mojom/platform_delegate.mojom
@@ -4,6 +4,7 @@ module chromeos.libassistant.mojom; +import "ash/public/mojom/assistant_volume_control.mojom"; import "chromeos/services/assistant/public/mojom/assistant_audio_decoder.mojom"; import "services/audio/public/mojom/stream_factory.mojom"; @@ -19,6 +20,10 @@ pending_receiver<chromeos.assistant.mojom.AssistantAudioDecoderFactory> receiver); + // Requests Ash's AssistantVolumeControl interface from the browser. + BindAssistantVolumeControl(pending_receiver<ash.mojom.AssistantVolumeControl> + receiver); + // Requests a connection to the CrosNetworkConfig service interface via the // browser. // BindNetworkConfig(pending_receiver<chromeos.network_config.mojom.CrosNetworkConfig> receiver); @@ -26,7 +31,4 @@ // // Requests a connection to the Device service's WakeLockProvider interface // // from the browser. // BindWakeLockProvider(pending_receiver<device.mojom.WakeLockProvider> receiver); - - // // Requests Ash's AssistantVolumeControl interface from the browser. - // RequestAssistantVolumeControl(pending_receiver<ash.mojom.AssistantVolumeControl> receiver); };
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb index 72130713..6a237b0 100644 --- a/chromeos/strings/chromeos_strings_as.xtb +++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">ওচৰ-পাজৰৰ ডিভাইচসমূহ চাবলৈ ব্লুটুথ অন কৰক</translation> <translation id="2364498172489649528">পাছ কৰিছে</translation> <translation id="2391082728065870591">মতামত বিষয়ক ৰিপ’ৰ্টটো পঠিয়াওক</translation> +<translation id="2418150275289244458">ছেটিঙত খোলক</translation> <translation id="2446553403094072641">ওপঙি থকা বিন্দুৰ সঠিকতা</translation> <translation id="2448312741937722512">প্রকাৰ</translation> <translation id="2461822463642141190">বৰ্তমান</translation> @@ -273,6 +274,7 @@ <translation id="7177485034254901881">এই <ph name="DEVICE_TYPE" />টো <ph name="MANAGER" />এ পৰিচালনা কৰে। প্ৰশাসকে দূৰৰ পৰাই ডিভাইচটো কনফিগাৰ কৰিব পাৰে।</translation> <translation id="7216409898977639127">চেলুলাৰ প্ৰদানকাৰী</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">নেটৱৰ্ক ডিভাইচ</translation> <translation id="7359657277149375382">ফাইলৰ প্রকাৰ</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -282,6 +284,7 @@ <translation id="7490813197707563893">MAC ঠিকনা</translation> <translation id="7497215489070763236">ছার্ভাৰ CA প্ৰমাণপত্ৰ</translation> <translation id="7502658306369382406">IPv6 ঠিকনা</translation> +<translation id="7550715992156305117">ডায়গন’ষ্টিক ৰুটিন</translation> <translation id="7561454561030345039">এই কাৰ্যটো আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> বাকী</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb index b17b580..4692e55 100644 --- a/chromeos/strings/chromeos_strings_de.xtb +++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">Aktivieren Sie Bluetooth, damit Geräte in der Nähe gefunden werden</translation> <translation id="2364498172489649528">Bestanden</translation> <translation id="2391082728065870591">Feedbackbericht senden</translation> +<translation id="2418150275289244458">In den Einstellungen öffnen</translation> <translation id="2446553403094072641">Gleitkommagenauigkeit</translation> <translation id="2448312741937722512">Art</translation> <translation id="2461822463642141190">Aktuell</translation> @@ -273,6 +274,7 @@ <translation id="7177485034254901881">Dieses <ph name="DEVICE_TYPE" /> wird von <ph name="MANAGER" /> verwaltet. Administratoren können das Gerät per Remotezugriff konfigurieren.</translation> <translation id="7216409898977639127">Mobilfunkanbieter</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">Netzwerkgeräte</translation> <translation id="7359657277149375382">Dateityp</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -282,6 +284,7 @@ <translation id="7490813197707563893">MAC-Adresse</translation> <translation id="7497215489070763236">CA-Serverzertifikat</translation> <translation id="7502658306369382406">IPv6-Adresse</translation> +<translation id="7550715992156305117">Diagnoseroutinen</translation> <translation id="7561454561030345039">Diese Aktion wird von Ihrem Administrator verwaltet</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331">Noch <ph name="TIME_VALUE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb index c3248bf..0ad71b1 100644 --- a/chromeos/strings/chromeos_strings_eu.xtb +++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -266,7 +266,7 @@ <translation id="6977381486153291903">Firmwarearen berrikuspena</translation> <translation id="7028979494427204405"><ph name="MANAGER" /> domeinuak kudeatzen du gailu hau, eta erabiltzaileen jarduera guztiak atzi ditzake; besteak beste, bisitatutako webguneak, erabilitako pasahitzak eta posta elektronikoa.</translation> <translation id="7040230719604914234">Operadorea</translation> -<translation id="7059230779847288458">Kargatzen; <ph name="TIME_VALUE" /> falta zaizkio guztiz kargatzeko</translation> +<translation id="7059230779847288458">Kargatzen; <ph name="TIME_VALUE" /> geratzen dira guztiz kargatu arte</translation> <translation id="708426984172631313">GELDITUTA</translation> <translation id="7143207342074048698">Konektatzen</translation> <translation id="714876143603641390">LAN sarearen konexioa</translation> @@ -287,7 +287,7 @@ <translation id="7550715992156305117">Diagnostiko-errutinak</translation> <translation id="7561454561030345039">Administratzaileak kudeatzen du ekintza hau</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> -<translation id="7595982850646262331"><ph name="TIME_VALUE" /> falta zaizkio</translation> +<translation id="7595982850646262331"><ph name="TIME_VALUE" /> geratzen dira</translation> <translation id="7620771111601174153">Lortu informazio gehiago laguntza-zentroan</translation> <translation id="7648838807254605802">HTTPS eskaeren itxarote-denbora luzea</translation> <translation id="7658239707568436148">Utzi</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb index 2c1288701..7d6a567 100644 --- a/chromeos/strings/chromeos_strings_fr.xtb +++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">Activer le Bluetooth pour découvrir les appareils à proximité</translation> <translation id="2364498172489649528">Réussi</translation> <translation id="2391082728065870591">Envoyer un rapport de commentaires</translation> +<translation id="2418150275289244458">Ouvrir dans les paramètres</translation> <translation id="2446553403094072641">Précision en virgule flottante</translation> <translation id="2448312741937722512">Type</translation> <translation id="2461822463642141190">Consommation actuelle</translation> @@ -273,6 +274,7 @@ <translation id="7177485034254901881">Votre <ph name="DEVICE_TYPE" /> est géré par <ph name="MANAGER" />. Les administrateurs peuvent le configurer à distance.</translation> <translation id="7216409898977639127">Opérateur de téléphonie mobile</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">Appareils sur le réseau</translation> <translation id="7359657277149375382">Type de fichier</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -282,6 +284,7 @@ <translation id="7490813197707563893">Adresse MAC</translation> <translation id="7497215489070763236">Certificat de l'autorité de certification du serveur</translation> <translation id="7502658306369382406">Adresse IPv6</translation> +<translation id="7550715992156305117">Routines de diagnostics</translation> <translation id="7561454561030345039">Cette action est gérée par votre administrateur</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331">Il reste <ph name="TIME_VALUE" /></translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb index a8f68c2..ee03198 100644 --- a/chromeos/strings/chromeos_strings_kk.xtb +++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">Маңайдағы құрылғыларды табу үшін Bluetooth функциясын қосыңыз</translation> <translation id="2364498172489649528">Сынақтан өтті</translation> <translation id="2391082728065870591">Пікірлер есебін жіберу</translation> +<translation id="2418150275289244458">Параметрлер бөлімінен ашу</translation> <translation id="2446553403094072641">Жылжымалы үтір дәлдігі</translation> <translation id="2448312741937722512">Түрі</translation> <translation id="2461822463642141190">Қазіргі</translation> @@ -272,6 +273,7 @@ <translation id="7177485034254901881"><ph name="DEVICE_TYPE" /> құрылғысын <ph name="MANAGER" /> басқарады. Әкімшілер құрылғыны қашықтан конфигурациялай алады.</translation> <translation id="7216409898977639127">Ұялы байланыс провайдері</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">Желілік құрылғылар</translation> <translation id="7359657277149375382">Файл түрі</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -281,6 +283,7 @@ <translation id="7490813197707563893">MAC мекенжайы</translation> <translation id="7497215489070763236">Сервер CA сертификаты</translation> <translation id="7502658306369382406">IPv6 мекенжайы</translation> +<translation id="7550715992156305117">Диагностикалық режим</translation> <translation id="7561454561030345039">Бұл әрекетті әкімшіңіз басқарады.</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> қалды</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb index 7cd4867..d164512e 100644 --- a/chromeos/strings/chromeos_strings_ky.xtb +++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">Жакын жердеги түзмөктөрдү табуу үчүн Bluetooth'ду күйгүзүңүз</translation> <translation id="2364498172489649528">Текшерүүдөн өттү</translation> <translation id="2391082728065870591">Жооп пикир баяндамасын жөнөтүү</translation> +<translation id="2418150275289244458">Жөндөөлөрдө ачуу</translation> <translation id="2446553403094072641">Калкыма чекиттин тактыгы</translation> <translation id="2448312741937722512">Түрү</translation> <translation id="2461822463642141190">Учурда</translation> @@ -273,6 +274,7 @@ <translation id="7177485034254901881"><ph name="DEVICE_TYPE" /> түзмөгүн <ph name="MANAGER" /> башкарат. Администраторлор түзмөктү алыстан конфигурациялай алышат.</translation> <translation id="7216409898977639127">Интернет провайдери</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">Тармак түзмөктөрү</translation> <translation id="7359657277149375382">Файлдын түрү</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -282,6 +284,7 @@ <translation id="7490813197707563893">MAC дареги</translation> <translation id="7497215489070763236">Сервердин CA тастыктамасы</translation> <translation id="7502658306369382406">IPv6 дареги</translation> +<translation id="7550715992156305117">Мүчүлүштүктөрдү аныктоо программалары</translation> <translation id="7561454561030345039">Бул аракетти администраторуңуз башкарат</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> калды</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb index e24b751..084aa1b 100644 --- a/chromeos/strings/chromeos_strings_ml.xtb +++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">സമീപത്തുള്ള ഉപകരണങ്ങൾ കണ്ടെത്താൻ Bluetooth ഓണാക്കുക</translation> <translation id="2364498172489649528">വിജയിച്ചു</translation> <translation id="2391082728065870591">ഫീഡ്ബാക്ക് റിപ്പോർട്ട് അയയ്ക്കുക</translation> +<translation id="2418150275289244458">ക്രമീകരണത്തിൽ തുറക്കുക</translation> <translation id="2446553403094072641">ഫ്ലോട്ടിംഗ് പോയിന്റ് കൃത്യത</translation> <translation id="2448312741937722512">തരം</translation> <translation id="2461822463642141190">നിലവിൽ</translation> @@ -272,6 +273,7 @@ <translation id="7177485034254901881">ഈ <ph name="DEVICE_TYPE" /> മാനേജ് ചെയ്യുന്നത് <ph name="MANAGER" /> ആണ്. അഡ്മിൻമാർ ഉപകരണം വിദൂരമായി കോൺഫിഗർ ചെയ്തേക്കാം.</translation> <translation id="7216409898977639127">സെല്ലുലാര് സേവനദാതാവ്</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">നെറ്റ്വർക്ക് ഉപകരണങ്ങൾ</translation> <translation id="7359657277149375382">ഫയല് തരം</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -281,6 +283,7 @@ <translation id="7490813197707563893">MAC വിലാസം</translation> <translation id="7497215489070763236">സെർവർ CA സർട്ടിഫിക്കറ്റ്</translation> <translation id="7502658306369382406">IPv6 വിലാസം</translation> +<translation id="7550715992156305117">പ്രശ്നനിർണ്ണയ ദിനചര്യകൾ</translation> <translation id="7561454561030345039">ഈ പ്രവർത്തനം മാനേജ് ചെയ്യുന്നത് നിങ്ങളുടെ അഡ്മിനാണ്</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> ശേഷിക്കുന്നു</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb index 4e3b663..bb77bc1b 100644 --- a/chromeos/strings/chromeos_strings_ne.xtb +++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">नजिकैका यन्त्रहरू पत्ता लगाउन ब्लुटुथ सक्रिय गर्नुहोस्</translation> <translation id="2364498172489649528">सुरक्षा जाँचमा पास भयो</translation> <translation id="2391082728065870591">फिडब्याक रिपोर्ट पठाउनुहोस्</translation> +<translation id="2418150275289244458">सेटिङमा गई खोल्नुहोस्</translation> <translation id="2446553403094072641">फ्लोटिङ पोइन्टको सटीकता</translation> <translation id="2448312741937722512">प्रकार</translation> <translation id="2461822463642141190">हालको</translation> @@ -272,6 +273,7 @@ <translation id="7177485034254901881"><ph name="MANAGER" /> ले यो <ph name="DEVICE_TYPE" /> व्यवस्थापन गर्छ। एड्मिनहरू टाढैबाट यो यन्त्र कन्फिगर गर्न सक्छन्।</translation> <translation id="7216409898977639127">सेलुलर प्रदायक</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">नेटवर्कसम्बन्धी यन्त्रहरू</translation> <translation id="7359657277149375382">फाइलको प्रकार</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -281,6 +283,7 @@ <translation id="7490813197707563893">MAC ठेगाना</translation> <translation id="7497215489070763236">सर्भरको CA को प्रमाणपत्र</translation> <translation id="7502658306369382406">IPv6 ठेगाना</translation> +<translation id="7550715992156305117">डायग्नोस्टिक रुटिनहरू</translation> <translation id="7561454561030345039">यो कार्य तपाईंका एड्मिनले व्यवस्थापन गर्नुभएको छ</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> बाँकी</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index ebcc4fe..f865323 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">ਨੇੜਲੇ ਡਿਵਾਈਸਾਂ ਨੂੰ ਲੱਭਣ ਲਈ ਬਲੂਟੁੱਥ ਚਾਲੂ ਕਰੋ</translation> <translation id="2364498172489649528">ਪਾਸ ਕੀਤਾ</translation> <translation id="2391082728065870591">ਵਿਚਾਰ ਸੰਬੰਧੀ ਰਿਪੋਰਟ ਭੇਜੋ</translation> +<translation id="2418150275289244458">ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਖੋਲ੍ਹੋ</translation> <translation id="2446553403094072641">ਫ਼ਲੋਟਿੰਗ ਪੁਆਇੰਟ ਸਟੀਕਤਾ</translation> <translation id="2448312741937722512">ਟਾਈਪ ਕਰੋ</translation> <translation id="2461822463642141190">ਮੌਜੂਦਾ</translation> @@ -272,6 +273,7 @@ <translation id="7177485034254901881"><ph name="MANAGER" /> ਵੱਲੋਂ ਇਸ <ph name="DEVICE_TYPE" /> ਦਾ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਸ਼ਾਇਦ ਪ੍ਰਸ਼ਾਸਕ ਰਿਮੋਟਲੀ ਡੀਵਾਈਸ ਦਾ ਸੰਰੂਪਣ ਕਰ ਸਕਦੇ ਹਨ।</translation> <translation id="7216409898977639127">ਸੈਲਿਊਲਰ ਪ੍ਰਦਾਨਕ</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">ਨੈੱਟਵਰਕ ਡੀਵਾਈਸ</translation> <translation id="7359657277149375382">ਫ਼ਾਈਲ ਦੀ ਕਿਸਮ</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -281,6 +283,7 @@ <translation id="7490813197707563893">MAC ਪਤਾ</translation> <translation id="7497215489070763236">ਸਰਵਰ CA ਪ੍ਰਮਾਣ-ਪੱਤਰ</translation> <translation id="7502658306369382406">IPv6 ਪਤਾ</translation> +<translation id="7550715992156305117">ਤਸ਼ਖੀਸ ਸੰਬੰਧੀ ਨਿਯਮਬੱਧ ਕੰਮ</translation> <translation id="7561454561030345039">ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਇਸ ਕਾਰਵਾਈ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> ਬਾਕੀ</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb index d79297b..7b7ef049 100644 --- a/chromeos/strings/chromeos_strings_ta.xtb +++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">அருகிலுள்ள சாதனங்களைக் கண்டறிய, புளூடூத்தை இயக்கவும்</translation> <translation id="2364498172489649528">வெற்றி</translation> <translation id="2391082728065870591">கருத்து அறிக்கையை அனுப்பு</translation> +<translation id="2418150275289244458">அமைப்புகளில் திற</translation> <translation id="2446553403094072641">ஃப்லோட்டிங் பாயிண்ட் துல்லியத்தன்மை</translation> <translation id="2448312741937722512">வகை</translation> <translation id="2461822463642141190">தற்போதைய மின் உபயோகம்</translation> @@ -273,6 +274,7 @@ <translation id="7177485034254901881">இந்த <ph name="DEVICE_TYPE" /> சாதனத்தை <ph name="MANAGER" /> நிர்வகிக்கிறது. நிர்வாகிகள் இந்தச் சாதனத்தைத் தொலைநிலையிலிருந்து உள்ளமைக்கக்கூடும்.</translation> <translation id="7216409898977639127">செல்லுலார் வழங்குநர்</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">நெட்வொர்க் சாதனங்கள்</translation> <translation id="7359657277149375382">கோப்பு வகை</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -282,6 +284,7 @@ <translation id="7490813197707563893">MAC முகவரி</translation> <translation id="7497215489070763236">சேவையக CA சான்றிதழ்</translation> <translation id="7502658306369382406">IPv6 முகவரி</translation> +<translation id="7550715992156305117">பிழை கண்டறிதலுக்கான வழக்கங்கள்</translation> <translation id="7561454561030345039">இந்தச் செயல் உங்கள் நிர்வாகியால் நிர்வகிக்கப்படுகிறது</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> மீதமுள்ளது</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb index 65bc4cf..e5ef38b 100644 --- a/chromeos/strings/chromeos_strings_te.xtb +++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">సమీప పరికరాలను కనుగొనడానికి బ్లూటూత్ను ఆన్ చేయండి</translation> <translation id="2364498172489649528">ఆమోదించినవి</translation> <translation id="2391082728065870591">ఫీడ్బ్యాక్ రిపోర్ట్ను పంపు</translation> +<translation id="2418150275289244458">సెట్టింగ్లలో తెరువు</translation> <translation id="2446553403094072641">ఫ్లోటింగ్ పాయింట్ ఖచ్చితత్వం</translation> <translation id="2448312741937722512">రకం</translation> <translation id="2461822463642141190">ప్రస్తుత</translation> @@ -272,6 +273,7 @@ <translation id="7177485034254901881"><ph name="MANAGER" />, ఈ <ph name="DEVICE_TYPE" />ను మేనేజ్ చేస్తోంది. అడ్మినిస్ట్రేటర్లు పరికరాన్ని రిమోట్గా కాన్ఫిగర్ చేయవచ్చు.</translation> <translation id="7216409898977639127">సెల్యులార్ ప్రదాత</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">నెట్వర్క్ పరికరాలు</translation> <translation id="7359657277149375382">ఫైల్ రకం</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -281,6 +283,7 @@ <translation id="7490813197707563893">MAC చిరునామా</translation> <translation id="7497215489070763236">సర్వర్ CA సర్టిఫికేట్</translation> <translation id="7502658306369382406">IPv6 చిరునామా</translation> +<translation id="7550715992156305117">సమస్య విశ్లేషణ రొటీన్లు</translation> <translation id="7561454561030345039">ఈ చర్య మీ అడ్మినిస్ట్రేటర్ ద్వారా మేనేజ్ చేయబడుతుంది</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> మిగిలి ఉంది</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb index 2f35174c..18a286c 100644 --- a/chromeos/strings/chromeos_strings_ur.xtb +++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -62,6 +62,7 @@ <translation id="2338501278241028356">قریبی آلات دریافت کرنے کیلئے بلوٹوتھ آن کریں</translation> <translation id="2364498172489649528">پاس ہو گیا</translation> <translation id="2391082728065870591">تاثرات کی رپورٹ بھیجیں</translation> +<translation id="2418150275289244458">ترتیبات میں کھولیں</translation> <translation id="2446553403094072641">فلوٹنگ پوائنٹ کی درستگی</translation> <translation id="2448312741937722512">قسم</translation> <translation id="2461822463642141190">حالیہ</translation> @@ -272,6 +273,7 @@ <translation id="7177485034254901881">یہ <ph name="DEVICE_TYPE" /> <ph name="MANAGER" /> کے زیر انتظام ہے۔ منتظمین دور سے آلے کو کنفیگر کر سکتے ہیں۔</translation> <translation id="7216409898977639127">سیلولر فراہم کنندہ</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7343649194310845056">نیٹ ورک کے آلات</translation> <translation id="7359657277149375382">فائل کی قسم</translation> <translation id="7375053625150546623">EAP</translation> <translation id="7427315641433634153">MSCHAP</translation> @@ -281,6 +283,7 @@ <translation id="7490813197707563893">MAC پتہ</translation> <translation id="7497215489070763236">سرور CA سرٹیفکیٹ</translation> <translation id="7502658306369382406">IPv6 پتہ</translation> +<translation id="7550715992156305117">ڈائیگناسٹک روٹینز</translation> <translation id="7561454561030345039">یہ کارروائی آپ کے منتظم کے زیر انتظام ہے</translation> <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation> <translation id="7595982850646262331"><ph name="TIME_VALUE" /> باقی</translation>
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h index 3e44d473..3cb6929b 100644 --- a/components/autofill/content/renderer/password_autofill_agent.h +++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -319,16 +319,17 @@ DISALLOW_COPY_AND_ASSIGN(FocusStateNotifier); }; - // This class keeps track of autofilled password input elements and makes sure - // the autofilled password value is not accessible to JavaScript code until - // the user interacts with the page. + // This class keeps track of autofilled username and password input elements + // and ensures that the autofilled values are not accessible to JavaScript + // code until the user interacts with the page. This restriction improves + // privacy (crbug.com/798492) and reduces attack surface (crbug.com/777272). class PasswordValueGatekeeper { public: PasswordValueGatekeeper(); ~PasswordValueGatekeeper(); - // Call this for every autofilled password field, so that the gatekeeper - // protects the value accordingly. + // Call this for every autofilled username and password field, so that + // the gatekeeper protects the value accordingly. void RegisterElement(blink::WebInputElement* element); // Call this to notify the gatekeeper that the user interacted with the
diff --git a/components/autofill_assistant/browser/protocol_utils.cc b/components/autofill_assistant/browser/protocol_utils.cc index 085c20ed..088a863c 100644 --- a/components/autofill_assistant/browser/protocol_utils.cc +++ b/components/autofill_assistant/browser/protocol_utils.cc
@@ -44,6 +44,7 @@ #include "components/autofill_assistant/browser/actions/wait_for_navigation_action.h" #include "components/autofill_assistant/browser/service.pb.h" #include "components/autofill_assistant/browser/web/web_controller.h" +#include "third_party/re2/src/re2/re2.h" #include "url/gurl.h" namespace autofill_assistant { @@ -426,6 +427,12 @@ return false; } + for (const auto& trigger_script_proto : response_proto.trigger_scripts()) { + if (!ValidateTriggerCondition(trigger_script_proto.trigger_condition())) { + return false; + } + } + for (auto& trigger_script_proto : *response_proto.mutable_trigger_scripts()) { if (trigger_script_proto.user_interface().scroll_to_hide()) { // Turn off viewport resizing when scroll to hide is on as it causes @@ -450,4 +457,66 @@ return true; } +// static +bool ProtocolUtils::ValidateTriggerCondition( + const TriggerScriptConditionProto& trigger_condition) { + switch (trigger_condition.type_case()) { + case TriggerScriptConditionProto::kAllOf: + for (const auto& condition : trigger_condition.all_of().conditions()) { + if (!ValidateTriggerCondition(condition)) { + return false; + } + } + return true; + case TriggerScriptConditionProto::kAnyOf: + for (const auto& condition : trigger_condition.any_of().conditions()) { + if (!ValidateTriggerCondition(condition)) { + return false; + } + } + return true; + case TriggerScriptConditionProto::kNoneOf: + for (const auto& condition : trigger_condition.none_of().conditions()) { + if (!ValidateTriggerCondition(condition)) { + return false; + } + } + return true; + case TriggerScriptConditionProto::kPathPattern: { + const re2::RE2 re(trigger_condition.path_pattern()); + if (!re.ok()) { +#ifdef NDEBUG + VLOG(1) << "Invalid regexp in trigger condition"; +#else + VLOG(1) << "Invalid regexp in trigger condition " + << trigger_condition.path_pattern(); +#endif + return false; + } + return true; + } + case TriggerScriptConditionProto::kDomainWithScheme: { + const GURL domain(trigger_condition.domain_with_scheme()); + if (!domain.is_valid()) { +#ifdef NDEBUG + VLOG(1) << "Invalid domain format in trigger condition"; +#else + VLOG(1) << "Invalid domain format in trigger condition " + << trigger_condition.domain_with_scheme(); +#endif + return false; + } + return true; + } + case TriggerScriptConditionProto::kStoredLoginCredentials: + case TriggerScriptConditionProto::kIsFirstTimeUser: + case TriggerScriptConditionProto::kExperimentId: + case TriggerScriptConditionProto::kKeyboardHidden: + case TriggerScriptConditionProto::kScriptParameterMatch: + case TriggerScriptConditionProto::kSelector: + case TriggerScriptConditionProto::TYPE_NOT_SET: + return true; + } +} + } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/protocol_utils.h b/components/autofill_assistant/browser/protocol_utils.h index 231ae8c..ddff526 100644 --- a/components/autofill_assistant/browser/protocol_utils.h +++ b/components/autofill_assistant/browser/protocol_utils.h
@@ -84,7 +84,8 @@ bool* should_update_scripts); // Parse trigger scripts from the given |response| and insert them into - // |trigger_scripts|. Returns false if parsing failed, else true. + // |trigger_scripts|. Returns false if parsing failed or the proto contained + // invalid values. static bool ParseTriggerScripts( const std::string& response, std::vector<std::unique_ptr<TriggerScript>>* trigger_scripts, @@ -93,6 +94,15 @@ base::Optional<int>* timeout_ms); private: + // Checks that the |trigger_condition| is well-formed (e.g. does not contain + // regexes that cannot be compiled). + static bool ValidateTriggerCondition( + const TriggerScriptConditionProto& trigger_condition); + FRIEND_TEST_ALL_PREFIXES(ProtocolUtilsTest, + ValidateTriggerConditionsSimpleConditions); + FRIEND_TEST_ALL_PREFIXES(ProtocolUtilsTest, + ValidateTriggerConditionsComplexConditions); + // To avoid instantiate this class by accident. ProtocolUtils() = delete; ~ProtocolUtils() = delete;
diff --git a/components/autofill_assistant/browser/protocol_utils_unittest.cc b/components/autofill_assistant/browser/protocol_utils_unittest.cc index 54bc341..662e915 100644 --- a/components/autofill_assistant/browser/protocol_utils_unittest.cc +++ b/components/autofill_assistant/browser/protocol_utils_unittest.cc
@@ -13,7 +13,6 @@ #include "url/gurl.h" namespace autofill_assistant { -namespace { using ::testing::ElementsAre; using ::testing::Eq; @@ -411,6 +410,7 @@ std::vector<std::string> additional_allowed_domains; int interval_ms; base::Optional<int> timeout_ms; + EXPECT_TRUE(ProtocolUtils::ParseTriggerScripts(proto_str, &trigger_scripts, &additional_allowed_domains, &interval_ms, &timeout_ms)); @@ -425,5 +425,86 @@ trigger_scripts[1]->AsProto().user_interface().resize_visual_viewport()); } -} // namespace +TEST_F(ProtocolUtilsTest, ParseTriggerScriptsFailsOnInvalidConditions) { + GetTriggerScriptsResponseProto proto; + + TriggerScriptProto trigger_script_1; + TriggerScriptProto trigger_script_2; + trigger_script_2.mutable_trigger_condition()->set_domain_with_scheme( + "invalid"); + + *proto.add_trigger_scripts() = trigger_script_1; + *proto.add_trigger_scripts() = trigger_script_2; + + std::string proto_str; + proto.SerializeToString(&proto_str); + + std::vector<std::unique_ptr<TriggerScript>> trigger_scripts; + std::vector<std::string> additional_allowed_domains; + int interval_ms; + base::Optional<int> timeout_ms; + + EXPECT_FALSE(ProtocolUtils::ParseTriggerScripts(proto_str, &trigger_scripts, + &additional_allowed_domains, + &interval_ms, &timeout_ms)); + EXPECT_THAT(trigger_scripts, IsEmpty()); +} + +TEST_F(ProtocolUtilsTest, ValidateTriggerConditionsSimpleConditions) { + TriggerScriptConditionProto condition; + + condition.set_path_pattern("(blahblah)*[A-Z]"); + EXPECT_TRUE(ProtocolUtils::ValidateTriggerCondition(condition)); + + condition.set_path_pattern(""); + EXPECT_TRUE(ProtocolUtils::ValidateTriggerCondition(condition)); + + condition.set_path_pattern("[invalid"); + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); + + condition.set_domain_with_scheme("https://www.example.com"); + EXPECT_TRUE(ProtocolUtils::ValidateTriggerCondition(condition)); + + condition.set_domain_with_scheme(""); + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); + + condition.set_domain_with_scheme("www.example.com"); + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); + + condition.set_domain_with_scheme("https"); + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); +} + +TEST_F(ProtocolUtilsTest, ValidateTriggerConditionsComplexConditions) { + TriggerScriptConditionProto valid_condition_1; + valid_condition_1.set_path_pattern("pattern1"); + TriggerScriptConditionProto valid_condition_2; + valid_condition_2.set_path_pattern("pattern.*"); + TriggerScriptConditionProto invalid_condition; + invalid_condition.set_path_pattern("[invalid"); + + TriggerScriptConditionProto condition; + + TriggerScriptConditionsProto valid_conditions; + *valid_conditions.add_conditions() = valid_condition_1; + *valid_conditions.add_conditions() = valid_condition_2; + + *condition.mutable_all_of() = valid_conditions; + EXPECT_TRUE(ProtocolUtils::ValidateTriggerCondition(condition)); + *condition.mutable_any_of() = valid_conditions; + EXPECT_TRUE(ProtocolUtils::ValidateTriggerCondition(condition)); + *condition.mutable_none_of() = valid_conditions; + EXPECT_TRUE(ProtocolUtils::ValidateTriggerCondition(condition)); + + TriggerScriptConditionsProto invalid_conditions = valid_conditions; + *invalid_conditions.add_conditions() = invalid_condition; + + *condition.mutable_all_of() = invalid_conditions; + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); + *condition.mutable_any_of() = invalid_conditions; + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); + *condition.mutable_none_of() = invalid_conditions; + EXPECT_FALSE(ProtocolUtils::ValidateTriggerCondition(condition)); +} + } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto index 213afeb..bb4cbc2 100644 --- a/components/autofill_assistant/browser/service.proto +++ b/components/autofill_assistant/browser/service.proto
@@ -597,6 +597,11 @@ Empty keyboard_hidden = 9; // The condition describes a parameter value that must be set to trigger. ScriptParameterMatchProto script_parameter_match = 10; + // Pattern of the path parts of the URL, including query and '#'. + string path_pattern = 11; + // Domain (exact match), including the scheme (e.g. + // "https://www.example.com"). + string domain_with_scheme = 12; } reserved 4;
diff --git a/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.cc b/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.cc index 20f7dab86..0f78eb54 100644 --- a/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.cc +++ b/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.cc
@@ -6,6 +6,7 @@ #include "base/callback.h" #include "base/callback_helpers.h" +#include "third_party/re2/src/re2/re2.h" namespace autofill_assistant { @@ -36,6 +37,8 @@ case TriggerScriptConditionProto::kExperimentId: case TriggerScriptConditionProto::kKeyboardHidden: case TriggerScriptConditionProto::kScriptParameterMatch: + case TriggerScriptConditionProto::kPathPattern: + case TriggerScriptConditionProto::kDomainWithScheme: case TriggerScriptConditionProto::TYPE_NOT_SET: return; case TriggerScriptConditionProto::kSelector: @@ -75,6 +78,40 @@ return keyboard_visible_; } +void DynamicTriggerConditions::SetURL(const GURL& url) { + url_ = url; +} + +bool DynamicTriggerConditions::GetPathPatternMatches( + const std::string& path_pattern) const { + const re2::RE2 re(path_pattern); + if (!re.ok()) { + DCHECK(false) + << "Should never happen, regexp validity is checked in protocol_utils."; + return false; + } + + const std::string url_path = + url_.has_ref() ? base::StrCat({url_.PathForRequest(), "#", url_.ref()}) + : url_.PathForRequest(); + return re.Match(url_path, 0, url_path.size(), re2::RE2::ANCHOR_BOTH, nullptr, + 0); +} + +bool DynamicTriggerConditions::GetDomainAndSchemeMatches( + const GURL& domain_with_scheme) const { + if (!domain_with_scheme.is_valid()) { + DCHECK(false) + << "Should never happen, domain format is checked in protocol_utils."; + return false; + } + + // We require the scheme and host parts to match. + // TODO(crbug.com/806868): Consider using Origin::IsSameOriginWith here. + return domain_with_scheme.scheme() == url_.scheme() && + domain_with_scheme.host() == url_.host(); +} + void DynamicTriggerConditions::Update(WebController* web_controller, base::OnceCallback<void(void)> callback) { DCHECK(!callback_) << "Update called while already in progress";
diff --git a/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.h b/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.h index ecab235..b9ffd64 100644 --- a/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.h +++ b/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions.h
@@ -43,6 +43,15 @@ // Returns whether the keyboard is currently visible. virtual bool GetKeyboardVisible() const; + // Updates the current URL of the page. + virtual void SetURL(const GURL& url); + + // Returns whether the current URL matches the given path pattern. + virtual bool GetPathPatternMatches(const std::string& path_pattern) const; + + // Returns whether the current URL belongs to the given domain. + virtual bool GetDomainAndSchemeMatches(const GURL& domain_with_scheme) const; + // Matches all previously added selectors with the current DOM tree and caches // the results to be available via |GetSelectorMatches|. Invokes |callback| // when done. @@ -69,6 +78,8 @@ // Whether the keyboard is currently visible. bool keyboard_visible_ = false; + // The current URL of the page. + GURL url_; // Lookup cache for selector matches. Must be updated by invoking |Update|. std::map<Selector, bool> selector_matches_; // Temporary store for selector matches, used during |Update| as results
diff --git a/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions_unittest.cc b/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions_unittest.cc index 57af5b5..b21f2de 100644 --- a/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions_unittest.cc +++ b/components/autofill_assistant/browser/trigger_scripts/dynamic_trigger_conditions_unittest.cc
@@ -161,4 +161,36 @@ base::make_optional(false)); } +TEST_F(DynamicTriggerConditionsTest, GetPathPatternMatches) { + dynamic_trigger_conditions_.SetURL(GURL("http://example.com/match?q=m#a")); + EXPECT_TRUE(dynamic_trigger_conditions_.GetPathPatternMatches("/match.*")); + EXPECT_TRUE( + dynamic_trigger_conditions_.GetPathPatternMatches("/match.*m.*a")); + EXPECT_FALSE(dynamic_trigger_conditions_.GetPathPatternMatches("/match1")); + EXPECT_FALSE(dynamic_trigger_conditions_.GetPathPatternMatches("match")); + EXPECT_FALSE(dynamic_trigger_conditions_.GetPathPatternMatches("")); +} + +TEST_F(DynamicTriggerConditionsTest, GetDomainAndSchemeMatches) { + dynamic_trigger_conditions_.SetURL(GURL("http://example.com/match")); + EXPECT_TRUE(dynamic_trigger_conditions_.GetDomainAndSchemeMatches( + GURL("http://example.com"))); + + dynamic_trigger_conditions_.SetURL(GURL("http://example.com/match?q=m#a")); + EXPECT_TRUE(dynamic_trigger_conditions_.GetDomainAndSchemeMatches( + GURL("http://example.com"))); + + dynamic_trigger_conditions_.SetURL(GURL("http://example.com:8080")); + EXPECT_TRUE(dynamic_trigger_conditions_.GetDomainAndSchemeMatches( + GURL("http://example.com"))); + + dynamic_trigger_conditions_.SetURL(GURL("http://example.com")); + EXPECT_FALSE(dynamic_trigger_conditions_.GetDomainAndSchemeMatches( + GURL("http://nomatch.com"))); + + dynamic_trigger_conditions_.SetURL(GURL("http://example.com")); + EXPECT_FALSE(dynamic_trigger_conditions_.GetDomainAndSchemeMatches( + GURL("https://example.com"))); +} + } // namespace autofill_assistant
diff --git a/components/autofill_assistant/browser/trigger_scripts/mock_dynamic_trigger_conditions.h b/components/autofill_assistant/browser/trigger_scripts/mock_dynamic_trigger_conditions.h index 79ecb817..48fb3f6c 100644 --- a/components/autofill_assistant/browser/trigger_scripts/mock_dynamic_trigger_conditions.h +++ b/components/autofill_assistant/browser/trigger_scripts/mock_dynamic_trigger_conditions.h
@@ -18,6 +18,14 @@ MOCK_CONST_METHOD1(GetSelectorMatches, base::Optional<bool>(const Selector& selector)); + MOCK_METHOD1(SetURL, void(const GURL& url)); + + MOCK_CONST_METHOD1(GetPathPatternMatches, + bool(const std::string& path_pattern)); + + MOCK_CONST_METHOD1(GetDomainAndSchemeMatches, + bool(const GURL& domain_with_scheme)); + void Update(WebController* web_controller, base::OnceCallback<void(void)> callback) override { OnUpdate(web_controller, callback);
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script.cc index bf512ea..8f316f7 100644 --- a/components/autofill_assistant/browser/trigger_scripts/trigger_script.cc +++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script.cc
@@ -57,6 +57,12 @@ case TriggerScriptConditionProto::kScriptParameterMatch: return static_trigger_conditions.script_parameter_matches( proto.script_parameter_match()); + case TriggerScriptConditionProto::kPathPattern: + return dynamic_trigger_conditions.GetPathPatternMatches( + proto.path_pattern()); + case TriggerScriptConditionProto::kDomainWithScheme: + return dynamic_trigger_conditions.GetDomainAndSchemeMatches( + GURL(proto.domain_with_scheme())); case TriggerScriptConditionProto::TYPE_NOT_SET: return true; }
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc index 9b2d273d..6a2c10ad 100644 --- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc +++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
@@ -320,6 +320,9 @@ Stop(Metrics::LiteScriptFinishedState::LITE_SCRIPT_PROMPT_FAILED_NAVIGATE); return; } + + dynamic_trigger_conditions_->SetURL(GetCurrentURL()); + RunOutOfScheduleTriggerConditionCheck(); } void TriggerScriptCoordinator::OnVisibilityChanged( @@ -390,6 +393,7 @@ } void TriggerScriptCoordinator::CheckDynamicTriggerConditions() { + dynamic_trigger_conditions_->SetURL(GetCurrentURL()); dynamic_trigger_conditions_->Update( web_controller_.get(), base::BindOnce(
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc index b7c43e4..b409862 100644 --- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc +++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
@@ -507,7 +507,7 @@ ON_CALL(*mock_dynamic_trigger_conditions_, OnUpdate(mock_web_controller_, _)) .WillByDefault(RunOnceCallback<1>()); EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetSelectorMatches) - .WillOnce(Return(true)); + .WillRepeatedly(Return(true)); EXPECT_CALL(mock_observer_, OnTriggerScriptShown).Times(1); coordinator_->Start(GURL(kFakeDeepLink), std::make_unique<TriggerContextImpl>()); @@ -761,6 +761,99 @@ Metrics::LiteScriptFinishedState::LITE_SCRIPT_TRIGGER_CONDITION_TIMEOUT); } +TEST_F(TriggerScriptCoordinatorTest, UrlChangeOutOfScheduleCheckPathMatch) { + GetTriggerScriptsResponseProto response; + response.add_trigger_scripts()->mutable_trigger_condition()->set_path_pattern( + ".*trigger_page.*"); + std::string serialized_response; + response.SerializeToString(&serialized_response); + + EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _)) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response)); + EXPECT_CALL(*mock_static_trigger_conditions_, Init) + .WillOnce(RunOnceCallback<4>()); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + OnUpdate(mock_web_controller_, _)) + .WillOnce(RunOnceCallback<1>()); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, SetURL).Times(1); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetPathPatternMatches) + .WillOnce(Return(false)); + coordinator_->Start(GURL(kFakeDeepLink), + std::make_unique<TriggerContextImpl>()); + + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + SetURL(GURL("http://example.com/trigger_page"))) + .Times(1); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + GetPathPatternMatches(".*trigger_page.*")) + .WillOnce(Return(true)); + EXPECT_CALL(mock_observer_, OnTriggerScriptShown).Times(1); + SimulateNavigateToUrl(GURL("http://example.com/trigger_page")); +} + +TEST_F(TriggerScriptCoordinatorTest, UrlChangeOutOfScheduleCheckDomainMatch) { + GetTriggerScriptsResponseProto response; + response.add_trigger_scripts() + ->mutable_trigger_condition() + ->set_domain_with_scheme("http://example.com"); + std::string serialized_response; + response.SerializeToString(&serialized_response); + + EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _)) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response)); + EXPECT_CALL(*mock_static_trigger_conditions_, Init) + .WillOnce(RunOnceCallback<4>()); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + OnUpdate(mock_web_controller_, _)) + .WillOnce(RunOnceCallback<1>()); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, SetURL).Times(1); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetDomainAndSchemeMatches) + .WillOnce(Return(false)); + coordinator_->Start(GURL(kFakeDeepLink), + std::make_unique<TriggerContextImpl>()); + + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + SetURL(GURL("http://example.com/trigger_page"))) + .Times(1); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + GetDomainAndSchemeMatches(GURL("http://example.com"))) + .WillOnce(Return(true)); + EXPECT_CALL(mock_observer_, OnTriggerScriptShown).Times(1); + SimulateNavigateToUrl(GURL("http://example.com/trigger_page")); +} + +TEST_F(TriggerScriptCoordinatorTest, + UrlChangeToAnUnsupportedDomainDoesNotUpdateUrl) { + GetTriggerScriptsResponseProto response; + response.add_trigger_scripts()->mutable_trigger_condition()->set_path_pattern( + ".*trigger_page.*"); + std::string serialized_response; + response.SerializeToString(&serialized_response); + + EXPECT_CALL(*mock_request_sender_, OnSendRequest(GURL(kFakeServerUrl), _, _)) + .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response)); + EXPECT_CALL(*mock_static_trigger_conditions_, Init) + .WillOnce(RunOnceCallback<4>()); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, + OnUpdate(mock_web_controller_, _)) + .WillOnce(RunOnceCallback<1>()); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, SetURL).Times(1); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetPathPatternMatches) + .WillOnce(Return(false)); + coordinator_->Start(GURL(kFakeDeepLink), + std::make_unique<TriggerContextImpl>()); + + EXPECT_CALL(*mock_dynamic_trigger_conditions_, SetURL).Times(0); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, GetPathPatternMatches) + .Times(0); + EXPECT_CALL( + mock_observer_, + OnTriggerScriptFinished( + Metrics::LiteScriptFinishedState::LITE_SCRIPT_PROMPT_FAILED_NAVIGATE)) + .Times(1); + SimulateNavigateToUrl(GURL("http://example.different.com/page")); +} + TEST_F(TriggerScriptCoordinatorTest, OnTriggerScriptFailedToShow) { GetTriggerScriptsResponseProto response; response.add_trigger_scripts(); @@ -860,6 +953,7 @@ .WillOnce(Return(true)); EXPECT_CALL(mock_observer_, OnTriggerScriptShown).Times(1); EXPECT_CALL(mock_observer_, OnVisibilityChanged(true)).Times(1); + EXPECT_CALL(*mock_dynamic_trigger_conditions_, SetURL).Times(1); SimulateWebContentsInteractabilityChanged(/* interactable = */ true); }
diff --git a/components/infobars/core/infobar_delegate.h b/components/infobars/core/infobar_delegate.h index 912272d..63bc308c 100644 --- a/components/infobars/core/infobar_delegate.h +++ b/components/infobars/core/infobar_delegate.h
@@ -168,7 +168,7 @@ MIXED_CONTENT_DOWNLOAD_INFOBAR_DELEGATE_ANDROID = 98, CONDITIONAL_TAB_STRIP_INFOBAR_ANDROID = 99, LITE_MODE_HTTPS_IMAGE_COMPRESSION_INFOBAR_ANDROID = 100, - SYSTEM_INFOBAR_DELEGATE_MAC = 101, + // Removed: SYSTEM_INFOBAR_DELEGATE_MAC = 101, EXPERIMENTAL_INFOBAR_DELEGATE_LACROS = 102, ROSETTA_REQUIRED_INFOBAR_DELEGATE = 103, WEBID_PERMISSION_INFOBAR_DELEGATE = 104,
diff --git a/components/no_state_prefetch/browser/BUILD.gn b/components/no_state_prefetch/browser/BUILD.gn index f0686db..73cad9f 100644 --- a/components/no_state_prefetch/browser/BUILD.gn +++ b/components/no_state_prefetch/browser/BUILD.gn
@@ -8,6 +8,8 @@ "no_state_prefetch_contents.h", "no_state_prefetch_contents_delegate.cc", "no_state_prefetch_contents_delegate.h", + "no_state_prefetch_field_trial.cc", + "no_state_prefetch_field_trial.h", "no_state_prefetch_handle.cc", "no_state_prefetch_handle.h", "no_state_prefetch_manager.cc", @@ -16,8 +18,6 @@ "no_state_prefetch_manager_delegate.h", "prerender_config.cc", "prerender_config.h", - "prerender_field_trial.cc", - "prerender_field_trial.h", "prerender_histograms.cc", "prerender_histograms.h", "prerender_history.cc",
diff --git a/components/no_state_prefetch/browser/prerender_field_trial.cc b/components/no_state_prefetch/browser/no_state_prefetch_field_trial.cc similarity index 88% rename from components/no_state_prefetch/browser/prerender_field_trial.cc rename to components/no_state_prefetch/browser/no_state_prefetch_field_trial.cc index 2748ac9..16809ce 100644 --- a/components/no_state_prefetch/browser/prerender_field_trial.cc +++ b/components/no_state_prefetch/browser/no_state_prefetch_field_trial.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 "components/no_state_prefetch/browser/prerender_field_trial.h" +#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h" #include <string>
diff --git a/components/no_state_prefetch/browser/prerender_field_trial.h b/components/no_state_prefetch/browser/no_state_prefetch_field_trial.h similarity index 67% rename from components/no_state_prefetch/browser/prerender_field_trial.h rename to components/no_state_prefetch/browser/no_state_prefetch_field_trial.h index baffc14..dff34fe 100644 --- a/components/no_state_prefetch/browser/prerender_field_trial.h +++ b/components/no_state_prefetch/browser/no_state_prefetch_field_trial.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 COMPONENTS_NO_STATE_PREFETCH_BROWSER_PRERENDER_FIELD_TRIAL_H_ -#define COMPONENTS_NO_STATE_PREFETCH_BROWSER_PRERENDER_FIELD_TRIAL_H_ +#ifndef COMPONENTS_NO_STATE_PREFETCH_BROWSER_NO_STATE_PREFETCH_FIELD_TRIAL_H_ +#define COMPONENTS_NO_STATE_PREFETCH_BROWSER_NO_STATE_PREFETCH_FIELD_TRIAL_H_ #include "base/feature_list.h" @@ -17,4 +17,4 @@ } // namespace prerender -#endif // COMPONENTS_NO_STATE_PREFETCH_BROWSER_PRERENDER_FIELD_TRIAL_H_ +#endif // COMPONENTS_NO_STATE_PREFETCH_BROWSER_NO_STATE_PREFETCH_FIELD_TRIAL_H_
diff --git a/components/no_state_prefetch/browser/no_state_prefetch_manager.cc b/components/no_state_prefetch/browser/no_state_prefetch_manager.cc index 93173e18..d01b131 100644 --- a/components/no_state_prefetch/browser/no_state_prefetch_manager.cc +++ b/components/no_state_prefetch/browser/no_state_prefetch_manager.cc
@@ -34,9 +34,9 @@ #include "base/values.h" #include "components/content_settings/core/browser/cookie_settings.h" #include "components/no_state_prefetch/browser/no_state_prefetch_contents.h" +#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h" #include "components/no_state_prefetch/browser/no_state_prefetch_handle.h" #include "components/no_state_prefetch/browser/no_state_prefetch_manager_delegate.h" -#include "components/no_state_prefetch/browser/prerender_field_trial.h" #include "components/no_state_prefetch/browser/prerender_histograms.h" #include "components/no_state_prefetch/browser/prerender_history.h" #include "components/no_state_prefetch/browser/prerender_util.h"
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index dcc2969..c5d95ef 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -2413,11 +2413,11 @@ 'items': [ { 'value': True, - 'caption': 'Managed Guest Session users can store device-wide display settings.', + 'caption': 'Managed Guest Session users can store device-wide display settings', }, { 'value': False, - 'caption': 'Managed Guest Session users cannot store device-wide display settings.', + 'caption': 'Managed Guest Session users cannot store device-wide display settings', }, ], 'default': False,
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 0783285..b815a12 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -384,6 +384,11 @@ Ist die Richtlinie deaktiviert oder nicht konfiguriert, sind die Einstellungen für Kerberos-Konten deaktiviert. In diesem Fall können keine Kerberos-Konten hinzugefügt werden und die Nutzung der Kerberos-Authentifizierung ist nicht möglich. Alle vorhandenen Kerberos-Konten werden gelöscht, ebenso wie alle gespeicherten Passwörter.</translation> <translation id="1561424797596341174">Überschreiben von Richtlinien für Fehlerbehebungs-Builds des Hosts für den Remotezugriff</translation> <translation id="1561967320164410511">U2F plus Erweiterungen zur individuellen Bestätigung</translation> +<translation id="1567718448549957373">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, sind <ph name="BASIC_AUTH" />-Authentifizierungsherausforderungen zulässig, die über nicht sicheres HTTP empfangen wurden. + + Ist diese Richtlinie deaktiviert, dürfen nicht sichere HTTP-Anfragen das <ph name="BASIC_AUTH" />-Authentifizierungsschema nicht verwenden; nur HTTPS ist zulässig. + + Diese Richtlinieneinstellung wird ignoriert (und <ph name="BASIC_AUTH" /> ist immer verboten), wenn die Richtlinie <ph name="AUTH_SCHEMES_POLICY_NAME" /> konfiguriert ist und das <ph name="BASIC_AUTH" />-Schema nicht enthält.</translation> <translation id="1575015449587326319">Konfigurationsrichtlinie für den Chrome Enterprise-Connector "OnFileDownloaded"</translation> <translation id="1583248206450240930">Standardmäßig <ph name="PRODUCT_FRAME_NAME" /> verwenden</translation> <translation id="1588240398285670601">Browsereinstellungen</translation> @@ -1130,23 +1135,6 @@ Wenn die Richtlinie auf „UserOnly“ (Nur Nutzer) (Wert 1) gesetzt ist, können Nutzer Nutzerzertifikate, aber keine Zertifikate für das gesamte Gerät verwalten.</translation> <translation id="2593762551209145088">Safe Browsing ist nie aktiv.</translation> -<translation id="2600410857944104685">Liste der Einstellungen für Chrome Enterprise Connectors-Services für den Enterprise Connector „<ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />“. Dieser wird ausgelöst, wenn eine Datei an Chrome angehängt wird. - - Mit den Feldern „<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />“ und „<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />“ wird festgelegt, ob der Connector eine Datei zur Analyse senden soll, wenn sie an eine bestimmte Seite angehängt wird, und welche Tags für die Analyseanfrage verwendet werden sollen. Ein Tag, das einem „enable“-Muster entspricht, wird der Anfrage hinzugefügt, wenn die Seiten-URL mit einem für das jeweilige Tag passenden Muster übereinstimmt – jedoch nur, wenn kein „disable“-Muster mit demselben Tag mit der Seiten-URL übereinstimmt. Die Analyse wird durchgeführt, wenn die Anfrage mindestens ein Tag enthält. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />“ wird festgelegt, für welchen Analyseanbieter die Einstellungen gelten. - - Wenn das Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />“ auf 1 gesetzt ist, wartet Chrome auf eine Antwort des Analyseanbieters, bevor der Seite Zugriff auf die Datei gewährt wird. Wenn es auf einen anderen Ganzzahlwert gesetzt ist, gewährt Chrome der Seite sofort Zugriff auf die Datei. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" />“ wird festgelegt, ob Chrome den Zugriff auf Dateien blockiert, die durch ein Passwort geschützt sind. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" />“ wird festgelegt, ob Chrome den Zugriff auf Dateien blockiert, die zu groß für die Analyse sind (50 MB oder größer). - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" />“ wird festgelegt, für welche Tags der Connector vom Nutzer eine Begründung anfordert, um einen Scan zu umgehen, für den es eine umgehbare Warnung gibt. Wenn das Feld nicht festgelegt ist, wird angenommen, dass keine Begründung erforderlich ist. - - Mit den Feldern „<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />“ und „<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />“ wird festgelegt, welche Meldung der Nutzer sieht, wenn eine Warnung angezeigt wird, nachdem beim Scan ein potenzielles Problem gefunden wurde. Das Nachrichtenfeld enthält den Text, den der Nutzer sieht (maximal 200 Zeichen). Das Feld „learn_more_url“ enthält eine vom Administrator festgelegte URL, die der Nutzer anklicken kann, um weitere benutzerdefinierte Informationen darüber zu erhalten, warum die Aktion blockiert wurde. Das Feld für die Sprache ist optional und enthält die Sprache der Meldung. Wenn das Feld leer oder auf „default“ festgelegt ist, wird die entsprechende Nachricht angezeigt, wenn es für die Sprache des Nutzers keine eigene Meldung gibt. Das Tag-Feld gibt an, für welche Arten von Scans die Meldung angezeigt wird. Die Liste „custom_messages“ kann keine oder mehrere Einträge haben – das Nachrichten- und das Tag-Feld der einzelnen Einträge dürfen dabei nicht leer sein. - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="26023406105317310">Kerberos-Konten konfigurieren</translation> <translation id="2604182581880595781">Richtlinien für Netzwerkfreigaben konfigurieren.</translation> <translation id="2615240493030733717">Informationen zur Zeitzone ausgeben</translation> @@ -1358,7 +1346,6 @@ Wenn Sie diese Richtlinie konfigurieren, kann sie von Nutzern nicht geändert werden. Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen die Richtlinie <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">Wenn die Richtlinie konfiguriert ist, wird eine Liste mit Hostnamen angegeben, die vom HSTS-Richtliniencheck ausgenommen sind. Dieser Richtliniencheck kann Anfragen von http auf https upgraden. Für diese Richtlinie sind nur Single-Label-Hostnamen zulässig. Hostnamen müssen kanonisiert werden: Alle IDNs müssen in ihr A-Label-Format konvertiert und alle ASCII-Buchstaben kleingeschrieben werden. Diese Richtlinie gilt nur für die angegebenen Hostnamen, aber nicht für Subdomains der angegebenen Namen.</translation> <translation id="2952347049958405264">Einschränkungen:</translation> <translation id="2957047180944828740">Gibt an, ob unsichere Websites Anfragen an eher private Netzwerk-Endpunkte senden dürfen</translation> <translation id="2957506574938329824">Keine Website darf Zugriff auf Bluetooth-Geräte über die Web Bluetooth API anfordern</translation> @@ -1379,7 +1366,6 @@ Genaue Informationen zu gültigen URL-Mustern finden Sie unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Einstellungen für das Verhalten des alten „<ph name="ATTRIBUTE_SAMESITE_NAME" />“-Cookies</translation> -<translation id="2981998788751314539">Fortfahren von SSL-Warnseiten auf bestimmten Websites erlauben</translation> <translation id="2985927503455169394">Standardmodus für das Einrichten von Assistant verwenden</translation> <translation id="2987155890997901449">ARC aktivieren</translation> <translation id="2987227569419001736">Verwendung der Web Bluetooth API steuern</translation> @@ -1429,13 +1415,6 @@ Für reguläre Profile ist die passive Authentifizierung immer zulässig. Wenn diese Richtlinie in <ph name="PRODUCT_NAME" /> (Version 81 oder neuer) nicht konfiguriert ist, wird die passive Authentifizierung nur für reguläre Sitzungen aktiviert.</translation> -<translation id="3021288356473993647">Diese Richtlinie steuert die Überprüfung von URLs in Echtzeit, um unsichere URLs zu erkennen. - - Wenn sie deaktiviert oder nicht konfiguriert ist, wird die standardmäßige Safe Browsing-Überprüfung verwendet. Dabei werden abhängig von der Einstellung "Suchanfragen und das Surfen verbessern" und vom Wert der Richtlinie "UrlKeyedAnonymizedDataCollectionEnabled" unter Umständen weiterhin Echtzeitsuchen durchgeführt. - - Wenn diese Richtlinie aktiviert ist, werden URLs zur Echtzeitüberprüfung gemäß den Chrome Enterprise-Nutzungsbedingungen versandt. Chrome sendet dann URLs zur Echtzeitüberprüfung an Google Cloud oder Drittanbieter Ihrer Wahl. Die standardmäßige Version der Safe Browsing-Echtzeitüberprüfung wird deaktiviert. - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="3021562480854470924">Rollback bei erreichter Anzahl von Meilensteinen ist erlaubt</translation> <translation id="3023572080620427845">URL einer XML-Datei, die URLs enthält, mit denen ein alternativer Browser geladen werden kann.</translation> <translation id="302528139996622624">Bildeinstellungen</translation> @@ -1465,6 +1444,7 @@ Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen die Richtlinie <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation> <translation id="3030000825273123558">Messdatenberichte aktivieren</translation> +<translation id="3032322294267258117">Legt die Einstellungen für Nutzer fest, die über GAIA ohne SAML authentifiziert werden.</translation> <translation id="3038323923255997294">Apps weiter im Hintergrund ausführen, wenn <ph name="PRODUCT_NAME" /> geschlossen ist</translation> <translation id="3041707370546071653">Gibt an, ob das Kerberos-Passwort gespeichert werden soll. Wenn die Richtlinie nicht konfiguriert oder auf „false“ gesetzt ist, wird das Passwort nicht gespeichert. Ist kein Passwort festgelegt, wird die Richtlinie ignoriert.</translation> <translation id="3041887182529293512">Wenn die Richtlinie auf "True" gesetzt oder nicht konfiguriert ist, werden auf der Seite "Neuer Tab" automatisch generierte Inhaltsvorschläge auf Basis des Browserverlaufs, der Interessen oder des Standorts des Nutzers angezeigt. @@ -1502,23 +1482,6 @@ <translation id="3096595567015595053">Liste der aktivierten Plug-ins</translation> <translation id="3101501961102569744">Auswählen, wie Proxyserver-Einstellungen angegeben werden</translation> <translation id="3101709781009526431">Datum und Uhrzeit</translation> -<translation id="3102177185340515316">Liste der Einstellungen für Chrome Enterprise Connectors-Services für den Enterprise-Connector „<ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />“ – dieser wird ausgelöst, wenn eine Datei in Chrome heruntergeladen wird. - - Mit den Feldern „<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />“ und „<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />“ wird festgelegt, ob der Connector eine Datei zur Analyse senden soll, wenn sie von einer bestimmten Seite heruntergeladen wird, und welche Tags für die Analyseanfrage verwendet werden sollen. Ein Tag, das einem „enable“-Muster entspricht, wird der Anfrage hinzugefügt, wenn die Seiten-URL mit einem für das jeweilige Tag passenden Muster übereinstimmt – jedoch nur, wenn kein „disable“-Muster mit demselben Tag mit der Seiten-URL übereinstimmt. Die Analyse wird durchgeführt, wenn die Anfrage mindestens ein Tag enthält. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />“ wird festgelegt, für welchen Analyseanbieter die Einstellungen gelten. - - Wenn das Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />“ auf 1 gesetzt ist, wartet Chrome auf eine Antwort des Analyseanbieters, bevor dem Nutzer Zugriff auf die heruntergeladene Datei gewährt wird. Wenn es auf einen anderen Ganzzahlwert gesetzt ist, gewährt Chrome dem Nutzer sofort Zugriff auf die Datei. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" />“ wird festgelegt, ob Chrome den Zugriff auf Dateien blockiert, die durch ein Passwort geschützt sind. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" />“ wird festgelegt, ob Chrome den Zugriff auf Dateien blockiert, die zu groß für die Analyse sind (50 MB oder größer). - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" />“ wird festgelegt, für welche Tags der Connector vom Nutzer eine Begründung anfordert, um einen Scan zu umgehen, für den es eine umgehbare Warnung gibt. Wenn das Feld nicht festgelegt ist, wird angenommen, dass keine Begründung erforderlich ist. - - Mit den Feldern „<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />“ und „<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />“ wird festgelegt, welche Meldung der Nutzer sieht, wenn eine Warnung angezeigt wird, nachdem beim Scan ein potenzielles Problem gefunden wurde. Das Nachrichtenfeld enthält den Text, den der Nutzer sieht (maximal 200 Zeichen). Das Feld „learn_more_url“ enthält eine vom Administrator festgelegte URL, die der Nutzer anklicken kann, um weitere benutzerdefinierte Informationen darüber zu erhalten, warum die Aktion blockiert wurde. Das Feld für die Sprache ist optional und enthält die Sprache der Meldung. Wenn das Feld leer oder auf „default“ festgelegt ist, wird die entsprechende Nachricht angezeigt, wenn es für die Sprache des Nutzers keine eigene Meldung gibt. Das Tag-Feld gibt an, für welche Arten von Scans die Meldung angezeigt wird. Die Liste „custom_messages“ kann keine oder mehrere Einträge haben – das Nachrichten- und das Tag-Feld der einzelnen Einträge dürfen dabei nicht leer sein. - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="3110248563985502478">Diese Richtlinie wurde in M88 eingestellt. Flash wird von Chrome nicht mehr unterstützt. Wenn diese Richtlinie aktiviert ist, werden veraltete Plug-ins als normale Plug-ins verwendet. Ist diese Einstellung deaktiviert, werden veraltete Plug-ins nicht verwendet. Ist diese Richtlinie nicht konfiguriert, müssen die Nutzer der Ausführung von veralteten Plug-ins zustimmen.</translation> @@ -1607,21 +1570,6 @@ Ist die Richtlinie nicht konfiguriert, ist kein <ph name="TPM_FIRMWARE_UPDATE_TPM" />-Firmwareupdate verfügbar.</translation> <translation id="3232691106293445015">Nicht sichere HTTP-Verbindungen dürfen keine <ph name="BASIC_AUTH" />-Authentifizierungen verwenden; HTTPS ist erforderlich</translation> -<translation id="3234647080363107863">Liste der Einstellungen für Chrome Enterprise Connectors-Services für den Enterprise Connector „<ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />“. Dieser wird ausgelöst, wenn Daten aus der Zwischenablage oder durch Drag-and-drop von Webinhalten in Chrome eingegeben werden. - - Mit den Feldern „<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />“ und „<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />“ wird festgelegt, ob der Connector Daten zur Analyse senden soll, wenn sie auf einer bestimmten Seite eingegeben werden, und welche Tags für die Analyseanfrage verwendet werden sollen. Ein Tag, das einem „enable“-Muster entspricht, wird der Anfrage hinzugefügt, wenn die Seiten-URL mit einem für das jeweilige Tag passenden Muster übereinstimmt – jedoch nur, wenn kein „disable“-Muster mit demselben Tag mit der Seiten-URL übereinstimmt. Die Analyse wird durchgeführt, wenn die Anfrage mindestens ein Tag enthält. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />“ wird festgelegt, für welchen Analyseanbieter die Einstellungen gelten. - - Wenn das Feld „<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />“ auf 1 gesetzt ist, wartet Chrome auf eine Antwort des Analyseanbieters, bevor der Seite Zugriff auf die Daten gewährt wird. Wenn es auf einen anderen Ganzzahlwert gesetzt ist, gewährt Chrome der Seite sofort Zugriff auf die Daten. - - Das Feld „<ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" />“ gibt die für eine Prüfung erforderliche Mindestgröße (in Byte) für in Chrome eingegebene Daten an. Wenn der Wert nicht festgelegt ist, gilt der Standardwert von 100 Byte. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" />“ wird festgelegt, für welche Tags der Connector vom Nutzer eine Begründung anfordert, um einen Scan zu umgehen, für den es eine umgehbare Warnung gibt. Wenn das Feld nicht festgelegt ist, wird angenommen, dass keine Begründung erforderlich ist. - - Mit den Feldern „<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />“, „<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />“ und „<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />“ wird festgelegt, welche Meldung der Nutzer sieht, wenn eine Warnung angezeigt wird, nachdem beim Scan ein potenzielles Problem gefunden wurde. Das Nachrichtenfeld enthält den Text, den der Nutzer sieht (maximal 200 Zeichen). Das Feld „learn_more_url“ enthält eine vom Administrator festgelegte URL, die der Nutzer anklicken kann, um weitere benutzerdefinierte Informationen darüber zu erhalten, warum die Aktion blockiert wurde. Das Feld für die Sprache ist optional und enthält die Sprache der Meldung. Wenn das Feld leer oder auf „default“ festgelegt ist, wird die entsprechende Nachricht angezeigt, wenn es für die Sprache des Nutzers keine eigene Meldung gibt. Das Tag-Feld gibt an, für welche Arten von Scans die Meldung angezeigt wird. Die Liste „custom_messages“ kann keine oder mehrere Einträge haben – das Nachrichten- und das Tag-Feld der einzelnen Einträge dürfen dabei nicht leer sein. - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="3236046242843493070">URL-Muster für die Installation von Erweiterungen, Apps und Nutzerskripten von</translation> <translation id="3240609035816615922">Richtlinie für den Zugriff auf die Konfiguration von Druckern.</translation> <translation id="324062325008698789">Hiermit wird eine Liste von Druckern konfiguriert</translation> @@ -2465,6 +2413,15 @@ <translation id="4510923771103268849">Nutzer hat Root-Zugriff auf Crostini-Container</translation> <translation id="4515404363392014383">Safe Browsing für vertrauenswürdige Quellen aktivieren</translation> <translation id="4518251772179446575">Nachfragen, wenn eine Website den physischen Standort der Nutzer verfolgen möchte</translation> +<translation id="4521193243799782295">Bei der Anmeldung kann <ph name="PRODUCT_OS_NAME" /> die Authentifizierung über einen Server (online) oder über ein Passwort im Cache (offline) ausführen. + + Wenn diese Richtlinie auf den Wert -1 festgelegt ist, erzwingt sie keine Onlineauthentifizierung und erlaubt dem Nutzer, die Offlineauthentifizierung zu verwenden, bis die Onlineanmeldung durch etwas anderes als diese Richtlinie erzwungen wird. Ist die Richtlinie auf den Wert 0 festgelegt, ist eine Onlineanmeldung immer erforderlich. Wenn die Richtlinie auf einen beliebigen anderen Wert festgelegt ist, wird damit die Zeit seit der letzten Onlineauthentifizierung angegeben, nach der der Nutzer für die nächste Anmeldung wieder eine Onlineauthentifizierung verwenden muss. + + Wenn diese Richtlinie nicht konfiguriert ist, verwendet <ph name="PRODUCT_OS_NAME" /> die Offlineanmeldung. + + Diese Richtlinie betrifft nur Nutzer, die sich über GAIA ohne SAML authentifizieren. + + Der Wert der Richtlinie muss in Tagen angegeben werden.</translation> <translation id="4528929591840709501">Zeitpunkt, an dem der Ladevorgang endet, angegeben in der lokalen Zeit des Geräts.</translation> <translation id="4529868888205510667">Wenn diese Richtlinie auf "True" festgelegt ist oder keine Einstellung gewählt wird, können Nutzer ARC verwenden, es sei denn die Funktion wurde an anderer Stelle deaktiviert. Wenn die Richtlinie auf "False" festgelegt ist, können nicht verknüpfte Nutzer ARC nicht verwenden. @@ -2609,11 +2566,6 @@ Wenn diese Richtlinie nicht konfiguriert oder aktiviert ist, werden die DNS-Abfangprüfungen durchgeführt. Nur wenn sie ausdrücklich deaktiviert ist, finden sie nicht statt.</translation> <translation id="4700190441681139987">Keiner Website erlauben, auf Sensoren zuzugreifen</translation> <translation id="4703402283970867140">Intelligentem Dimmmodell erlauben, den Zeitraum bis zum Dimmen des Bildschirms zu verlängern</translation> -<translation id="4715026656747891013">Liste der Einstellungen für Chrome Enterprise Connectors-Dienste für den Enterprise Connector „<ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />“. Dieser wird ausgelöst, wenn in Chrome ein Sicherheitshinweis auftritt. Hierzu gehören negative Analyseergebnisse von Enterprise Connectors, die Wiederverwendung eines Passworts, das Aufrufen unsicherer Seiten und andere sicherheitsrelevante Nutzeraktionen. - - Mit dem Feld „<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />“ wird festgelegt, für welchen Berichterstellungsanbieter die Einstellungen gelten, und mit „<ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" />“, welche Ereignisse für diesen Anbieter aktiviert sind. - - Diese Richtlinie kann nur über die Google Admin-Konsole konfiguriert werden.</translation> <translation id="4722122254122249791">Website-Isolierung für angegebene Ursprünge aktivieren</translation> <translation id="4723122879352880315">Mit dieser Richtlinie können sich Nutzer bei einem verwalteten Proxy, der durch eine NTLM-Authentifizierung gesichert ist, mit <ph name="PRODUCT_OS_NAME" />-Anmeldedaten authentifizieren. @@ -3576,6 +3528,7 @@ <translation id="6155936611791017817">Standardstatus für den großen Cursor auf der Anmeldeseite festlegen</translation> <translation id="6157537876488211233">Kommagetrennte Liste der Proxy-Umgehungsregeln</translation> <translation id="6158324314836466367">Unternehmens-Web-Store-Name (veraltet)</translation> +<translation id="6169768162756928771">GAIA-Einstellungen zur Verwaltung der Nutzeridentität</translation> <translation id="6172896675583897796">Wenn die Richtlinie aktiviert ist, erhält Google Assistant die Berechtigung, auf den Bildschirmkontext zuzugreifen und Daten an einen Server zu senden. Ist die Richtlinie deaktiviert, darf Google Assistant nicht auf den Bildschirmkontext zugreifen. Ist die Richtlinie nicht konfiguriert, können Nutzer diese Funktion aktivieren oder deaktivieren.</translation> @@ -4106,13 +4059,6 @@ Hiermit werden die Parameter angegeben, die beim Starten von <ph name="PRODUCT_NAME" /> angewendet werden sollen. Sie gelten nur auf dem Anmeldebildschirm. Über diese Richtlinie festgelegte Parameter haben keine Auswirkungen auf Nutzersitzungen.</translation> <translation id="685769593149966548">Strikt eingeschränkten Modus auf YouTube erzwingen</translation> <translation id="686079137349561371">Microsoft Windows 7 oder höher</translation> -<translation id="6877233375929006871">Wenn diese Richtlinie konfiguriert ist, können Sie eine Liste mit URL-Mustern erstellen, die angeben, auf welchen Seiten Nutzer Warnseiten schließen können, die in <ph name="PRODUCT_NAME" /> angezeigt werden, wenn Nutzer Websites mit SSL-Fehlern aufrufen. Auf Websites mit SSL-Fehlern, die nicht auf dieser Liste stehen, können Nutzer keine Warnseiten schließen. - - Falls <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> deaktiviert ist, wird diese Richtlinie ignoriert. - - Wenn die Richtlinie nicht konfiguriert ist, gilt <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> für alle Websites. - - Genaue Informationen zu gültigen <ph name="URL_LABEL" />-Mustern finden Sie unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> ist kein akzeptierter Wert für diese Richtlinie.</translation> <translation id="68818134518270542">Mit der Konfiguration der Richtlinie werden die Apps festgelegt, die Nutzer als Notizen-App auf dem Sperrbildschirm von <ph name="PRODUCT_OS_NAME" /> aktivieren können. Wenn die bevorzugte App für den Sperrbildschirm konfiguriert ist, erscheint ein UI-Element zum Starten der bevorzugten Notizen-App auf dem Bildschirm. Nach dem Starten der App wird über dem Sperrbildschirm ein Fenster eingeblendet, in das Notizen eingegeben werden können. Die App kann nach dem Entsperren Notizen in die Hauptsitzung importieren. Nur <ph name="PRODUCT_NAME" />-Notizen-Apps werden auf dem Sperrbildschirm unterstützt. @@ -4611,11 +4557,6 @@ Wurde "false" festgelegt, sind Komponentenupdates deaktiviert. Für einige Komponenten gelten diese Richtlinien aber nicht: Updates von Komponenten, die keinen ausführbaren Code enthalten, das Browserverhalten nicht maßgeblich verändern oder die Sicherheit nicht gefährden, werden nicht deaktiviert. Beispiele für solche Komponenten sind die Zertifikatssperrlisten sowie Safe Browsing-Daten. Weitere Informationen zu Safe Browsing finden Sie unter https://developers.google.com/safe-browsing.</translation> -<translation id="7563608136659080810">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />. - - Wenn diese Richtlinie konfiguriert ist, werden Server zugewiesen, an die <ph name="PRODUCT_NAME" /> Anmeldedaten von Nutzern weiterleiten kann. Trennen Sie mehrere Servernamen durch Kommas. Platzhalter wie <ph name="WILDCARD_VALUE" /> sind zulässig. - - Wenn die Richtlinie nicht konfiguriert ist, leitet <ph name="PRODUCT_NAME" /> keine Anmeldedaten von Nutzern weiter, auch nicht an Server innerhalb eines Intranets.</translation> <translation id="7566878661979235378">SAML-Anmeldungsauthentifizierungstyp</translation> <translation id="7567373982693549834">Diese Richtlinie kontrolliert für einzelne Nutzer die Nutzung von Android-Apps, die aus anderen Quellen als Google Play heruntergeladen wurden. @@ -5516,6 +5457,7 @@ <translation id="8890438048579188548">Warnungen zu veralteten Funktionen für <ph name="CLOUD_PRINT_NAME" /> ausblenden</translation> <translation id="8892286064305622118">Erforderlicher freier Speicherplatz für <ph name="PLUGIN_VM_NAME" /></translation> <translation id="8892783613915541293">Verzögerungen und Aktionen, die ausgeführt werden sollen, wenn das Gerät im Netzbetrieb inaktiv ist</translation> +<translation id="8897796778265450949">Zeit beschränken, während der sich ein über GAIA ohne SAML authentifizierter Nutzer offline anmelden kann</translation> <translation id="8903283771634816230">Wenn die Richtlinie aktiviert ist, verwendet <ph name="PRODUCT_NAME" /> den Standarddrucker des Betriebssystems als Standardziel für die Druckvorschau. Ist die Richtlinie deaktiviert oder nicht konfiguriert, verwendet <ph name="PRODUCT_NAME" /> den zuletzt genutzten Drucker als Standardziel für die Druckvorschau.</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 6b8dcb03..72033d6 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -390,6 +390,11 @@ Si se inhabilita o no se establece, no se permitirá la configuración de las cuentas de Kerberos. No se podrán agregar cuentas de Kerberos ni usar la autenticación Kerberos. Se borrarán todas las cuentas de Kerberos existentes y todas las contraseñas almacenadas.</translation> <translation id="1561424797596341174">Anulaciones de políticas en compilaciones de depuración del host de acceso remoto</translation> <translation id="1561967320164410511">U2F más extensiones para atestación individual</translation> +<translation id="1567718448549957373">Si habilitas esta política o no la estableces, se podrán recibir desafíos de autenticación <ph name="BASIC_AUTH" /> en las solicitudes HTTP no seguras. + + Si inhabilitas la política, se prohíbe que las solicitudes HTTP no seguras usen el esquema de autenticación <ph name="BASIC_AUTH" />; solo se permitirán las solicitudes HTTPS seguras. + + Si se establece la política de <ph name="AUTH_SCHEMES_POLICY_NAME" /> y no incluye <ph name="BASIC_AUTH" />, se ignora esta política y se prohíbe siempre <ph name="BASIC_AUTH" />.</translation> <translation id="1575015449587326319">Política de configuración para el Conector de Chrome Enterprise OnFileDownloaded</translation> <translation id="1583248206450240930">Utilizar <ph name="PRODUCT_FRAME_NAME" /> de manera predeterminada</translation> <translation id="1588240398285670601">Configuración del navegador</translation> @@ -1153,23 +1158,6 @@ Si la estableces en "UserOnly" (valor 1), los usuarios podrán administrar sus certificados de usuario, pero no certificados para todo el dispositivo.</translation> <translation id="2593762551209145088">La Navegación segura nunca está activa.</translation> -<translation id="2600410857944104685">Lista de configuraciones para los servicios de Chrome Enterprise Connectors que se aplicarán al Enterprise Connector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se adjunta un archivo a Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para que se analice cuando se adjunta a una página específica o qué etiquetas deben incluirse en la solicitud de análisis del archivo. La solicitud de análisis incluirá la etiqueta correspondiente al patrón "enable" si la URL de la página coincide con un patrón asociado a esa etiqueta siempre y cuando no exista coincidencia entre un patrón "disable" con esa misma etiqueta y la URL de la página. Si la solicitud incluye al menos 1 etiqueta, se realizará el análisis. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> especifica el proveedor de servicios de análisis al que corresponde la configuración. - - Si se establece el valor "1" en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará a recibir una respuesta del servicio de análisis para permitir que la página acceda al archivo. Si se indica cualquier otro valor entero, Chrome permitirá que la página acceda al archivo de inmediato. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos demasiado grandes para ser analizados (más de 50 MB). - - El campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> se utiliza para determinar en qué etiquetas el conector requerirá que el usuario ingrese una justificación para evitar un escaneo que derive en una advertencia evitable. Si no estableces el campo, se asumirá que no se requiere una justificación. - - Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se utilizan para configurar un mensaje que verá el usuario cuando se muestra una advertencia después de que un escaneo presente errores. El campo del mensaje incluye el texto que se le mostrará al usuario. Este puede tener un máximo de 200 caracteres. El campo learn_more_url incluye una URL proporcionada por el administrador en la cual el usuario podrá hacer clic para obtener más información proporcionada por el cliente sobre los motivos por los que se bloqueó la acción. El campo del idioma es opcional. Indica el idioma del mensaje. Si el campo se deja vacío o con el valor "default", se utilizará el mensaje correspondiente cuando no haya ningún mensaje en el idioma del usuario. El campo de la etiqueta especifica para qué tipo de escaneos se mostrará el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada deberá tener completos los campos del mensaje y de la etiqueta. - - Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="26023406105317310">Configura las cuentas de Kerberos</translation> <translation id="2604182581880595781">Configura las políticas relacionadas con la función "Network File Shares".</translation> <translation id="2615240493030733717">Envía información sobre la zona horaria</translation> @@ -1379,7 +1367,6 @@ Si estableces la política, los usuarios no podrán cambiarla. Esta política es obsoleta; usa la política <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> en su lugar.</translation> -<translation id="2949765875529121431">Si estableces la política, se especificará una lista de nombres de host que están exentos de la verificación de la política de HSTS, que podría cambiar las solicitudes de HTTP a HTTPS. En esta política, solo se permiten nombres de host con una sola etiqueta. Los nombres de host deben estar canonicalizados: debe convertirse cualquier IDN a su formato de etiqueta A y todas las letras en formato ASCII deben estar en minúscula. Esta política solo se aplica a los nombres de host específicos de la lista; no se aplica a los subdominios de estos nombres.</translation> <translation id="2952347049958405264">Restricciones:</translation> <translation id="2957047180944828740">Especifica si se permite que los sitios web no seguros envíen solicitudes a extremos de red más privados</translation> <translation id="2957506574938329824">No permitir que ningún sitio solicite acceso a dispositivos Bluetooth mediante la API de Bluetooth web</translation> @@ -1400,7 +1387,6 @@ Para obtener información detallada sobre los patrones de URL válidos, consulta: https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Configuración del comportamiento de las cookies <ph name="ATTRIBUTE_SAMESITE_NAME" /> heredadas</translation> -<translation id="2981998788751314539">Permite continuar desde la página de advertencia SSL en páginas específicas</translation> <translation id="2985927503455169394">Usa el modo predeterminado de la experiencia de integración del Asistente</translation> <translation id="2987155890997901449">Habilitar ARC</translation> <translation id="2987227569419001736">Controlar el uso de la API de Bluetooth web</translation> @@ -1450,13 +1436,6 @@ Ten en cuenta que siempre se permite la autenticación ambiental en los perfiles comunes. En <ph name="PRODUCT_NAME" /> 81 y versiones posteriores, si no se establece la política, solo se habilitará la autenticación ambiental para las sesiones comunes.</translation> -<translation id="3021288356473993647">Esta política controla la verificación de URL en tiempo real para identificar URL no seguras. - -Si no estableces esta política o la inhabilitas, se aplicarán las verificaciones predeterminadas de la Navegación segura para los usuarios comunes. No obstante, aún se podrán incluir en las búsquedas en tiempo real conforme al valor de configuración "Mejorar las búsquedas y la navegación" y el valor de la política UrlKeyedAnonymizedDataCollectionEnabled. - - Si habilitas esta política, se enviarán las URL para su análisis en tiempo real conforme a las Condiciones del Servicio de Chrome Enterprise. Como resultado, Chrome enviará las URL a Google Cloud o a los terceros que elijas para verificarlas en tiempo real. Se desactivarán las búsquedas en tiempo real de la versión predeterminada de la Navegación segura. - -Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="3021562480854470924">Cantidad de hitos que se permiten en la reversión</translation> <translation id="3023572080620427845">URL de un archivo XML que contiene URL para cargarlas en un navegador alternativo</translation> <translation id="302528139996622624">Configuración de imágenes</translation> @@ -1486,6 +1465,7 @@ Esta política es obsoleta; usa la política <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> en su lugar.</translation> <translation id="3030000825273123558">Activar los informes estadísticos</translation> +<translation id="3032322294267258117">Controla la configuración para los usuarios autenticados mediante GAIA sin SAML.</translation> <translation id="3038323923255997294">Continuar ejecutando aplicaciones en segundo plano cuando <ph name="PRODUCT_NAME" /> esté cerrado</translation> <translation id="3041707370546071653">Recordar o no la contraseña de Kerberos. Si no se establece o se establece como falsa, no se recordará la contraseña. Se ignorará si la contraseña no se especifica.</translation> <translation id="3041887182529293512">Si estableces la política como verdadera o no la estableces, se mostrarán las sugerencias de contenido autogenerado en la página Nueva pestaña, según el historial de navegación del usuario, sus intereses y su ubicación. @@ -1523,23 +1503,6 @@ <translation id="3096595567015595053">Lista de complementos habilitados</translation> <translation id="3101501961102569744">Elegir cómo especificar la configuración del servidor proxy</translation> <translation id="3101709781009526431">Fecha y hora</translation> -<translation id="3102177185340515316">Lista de configuraciones para los servicios de Chrome Enterprise Connectors que se aplicarán al Enterprise Connector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se descarga un archivo en Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para que se analice cuando se descarga de una página específica y qué etiquetas deben incluirse en la solicitud de análisis del archivo. La solicitud de análisis incluirá la etiqueta correspondiente al patrón "enable" si la URL de la página coincide con un patrón asociado a esa etiqueta siempre y cuando no exista coincidencia entre un patrón "disable" con esa misma etiqueta y la URL de la página. Si la solicitud incluye al menos 1 etiqueta, se realizará el análisis. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> especifica el proveedor de servicios de análisis al que corresponde la configuración. - - Si se establece el valor "1" en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará a recibir una respuesta del servicio de análisis para permitir que el usuario acceda al archivo descargado. Si se indica cualquier otro valor entero, Chrome permitirá que el usuario acceda al archivo de inmediato. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite el acceso a archivos demasiado grandes para ser analizados (más de 50 MB). - - El campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> se utiliza para determinar en qué etiquetas el conector requerirá que el usuario ingrese una justificación para evitar un escaneo que derive en una advertencia evitable. Si no estableces el campo, se asumirá que no se requiere una justificación. - - Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se utilizan para configurar un mensaje que verá el usuario cuando se muestra una advertencia después de que un escaneo presente errores. El campo del mensaje incluye el texto que se le mostrará al usuario. Este puede tener un máximo de 200 caracteres. El campo learn_more_url incluye una URL proporcionada por el administrador en la cual el usuario podrá hacer clic para obtener más información proporcionada por el cliente sobre los motivos por los que se bloqueó la acción. El campo del idioma es opcional. Indica el idioma del mensaje. Si el campo se deja vacío o con el valor "default", se utilizará el mensaje correspondiente cuando no haya ningún mensaje en el idioma del usuario. El campo de la etiqueta especifica para qué tipo de escaneos se mostrará el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada deberá tener completos los campos del mensaje y de la etiqueta. - - Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="3110248563985502478">Esta política dejó de estar disponible en M88; Chrome ya no admite Flash. Si habilitas la política, se usarán normalmente los complementos desactualizados. Si la inhabilitas, no se usarán los complementos desactualizados. Si no la estableces, se solicitará permiso a los usuarios para ejecutar complementos desactualizados.</translation> @@ -1629,21 +1592,6 @@ Si no estableces la política, no estará disponible la actualización del firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" />.</translation> <translation id="3232691106293445015">Las conexiones HTTP no seguras no pueden usar la autenticación <ph name="BASIC_AUTH" />; se requiere una conexión HTTPS</translation> -<translation id="3234647080363107863">Lista de configuraciones para los servicios de Chrome Enterprise Connectors que se aplicarán al Enterprise Connector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se ingresan datos a Chrome desde el portapapeles o se arrastra y se suelta contenido web. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar datos para que se analicen cuando se descargan de una página específica y qué etiquetas deben incluirse en la solicitud de análisis de los datos. La solicitud de análisis incluirá la etiqueta correspondiente al patrón "enable" si la URL de la página coincide con un patrón asociado a esa etiqueta siempre y cuando no exista coincidencia entre un patrón "disable" con esa misma etiqueta y la URL de la página. Si la solicitud incluye al menos 1 etiqueta, se realizará el análisis. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> especifica el proveedor de servicios de análisis al que corresponde la configuración. - - Si estableces el valor "1" en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará a recibir una respuesta del servicio de análisis para permitir que la página acceda a los datos. Si indicas cualquier otro valor entero, Chrome permitirá que la página acceda a los datos de inmediato. - - El campo <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indica que el tamaño mínimo (expresado en bytes) de datos que se ingresen en Chrome debe ser mayor o igual para que se puedan analizar. Si no estableces el campo, el valor predeterminado es 100 bytes. - - El campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> se utiliza para determinar en qué etiquetas el conector requerirá que el usuario ingrese una justificación para evitar un escaneo que derive en una advertencia evitable. Si no estableces el campo, se asumirá que no se requiere una justificación. - - Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se utilizan para configurar un mensaje que verá el usuario cuando se muestra una advertencia después de que un escaneo presente errores. El campo del mensaje incluye el texto que se le mostrará al usuario. Este puede tener un máximo de 200 caracteres. El campo learn_more_url incluye una URL proporcionada por el administrador en la cual el usuario podrá hacer clic para obtener más información proporcionada por el cliente sobre los motivos por los que se bloqueó la acción. El campo del idioma es opcional. Indica el idioma del mensaje. Si el campo se deja vacío o con el valor "default", se utilizará el mensaje correspondiente cuando no haya ningún mensaje en el idioma del usuario. El campo de la etiqueta especifica para qué tipo de escaneos se mostrará el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada deberá tener completos los campos del mensaje y de la etiqueta. - - Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="3236046242843493070">Patrones de URL desde los que se pueden instalar secuencias de comandos de usuario, aplicaciones y extensiones</translation> <translation id="3240609035816615922">Política de acceso para la configuración de las impresoras</translation> <translation id="324062325008698789">Configura una lista de impresoras</translation> @@ -2484,6 +2432,15 @@ <translation id="4510923771103268849">El usuario tiene acceso con permisos de administrador a los contenedores de Crostini</translation> <translation id="4515404363392014383">Habilita la Navegación segura para las fuentes de confianza</translation> <translation id="4518251772179446575">Preguntar siempre si un sitio quiere rastrear la ubicación física de los usuarios.</translation> +<translation id="4521193243799782295">Durante el acceso, <ph name="PRODUCT_OS_NAME" /> podrá realizar la autenticación a través de un servidor (en línea) o con una contraseña en caché (sin conexión). + + Si se establece esta política con un valor de -1, no se aplicará la autenticación en línea y se permitirá que el usuario utilice la autenticación sin conexión hasta que un motivo distinto a esta política exija el acceso en línea. Si se establece la política con un valor de 0, siempre se requerirá el acceso en línea. Si se establece la política en cualquier otro valor, especificará el tiempo que debe transcurrir desde la autenticación en línea más reciente para que el usuario vuelva a estar obligado a usar la autenticación en línea la próxima vez que acceda. + + Si no se configura esta política, <ph name="PRODUCT_OS_NAME" /> deberá usar el acceso sin conexión. + + Esta política solo afecta a los usuarios autenticados mediante GAIA sin SAML. + + El valor de la política deberá especificarse en días.</translation> <translation id="4528929591840709501">La hora a la que el dispositivo dejará de cargarse (según la zona horaria local del dispositivo).</translation> <translation id="4529868888205510667">Si estableces el valor "True" para la política, los usuarios podrán usar ARC, a menos que esta tecnología esté desactivada por otros motivos. Si estableces el valor "False", los usuarios no afiliados no podrán usar ARC. @@ -2628,11 +2585,6 @@ Si no se establece esta política, o está habilitada, se llevarán a cabo las revisiones de intercepción de DNS. Si se inhabilita explícitamente, no se llevarán a cabo.</translation> <translation id="4700190441681139987">No permite que ningún sitio acceda a los sensores</translation> <translation id="4703402283970867140">Habilitar un modelo de atenuación inteligente para extender el tiempo de atenuación de la pantalla</translation> -<translation id="4715026656747891013">Lista de configuraciones para los servicios de Chrome Enterprise Connectors que se aplicarán al conector empresarial <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />, el cual se activa cuando se produce un evento de seguridad en Chrome. Esto incluye los veredictos negativos de los análisis de Enterprise Connectors, la reutilización de contraseñas, la navegación en páginas no seguras y otras actividades del usuario que afectan la seguridad. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de informes le corresponden las configuraciones, y el campo <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> identifica qué eventos están habilitados para este proveedor. - - Esta política solo se puede establecer en la Consola del administrador de Google.</translation> <translation id="4722122254122249791">Permite el aislamiento de sitios específicos</translation> <translation id="4723122879352880315">Esta configuración les permite a los usuarios utilizar las credenciales de acceso de <ph name="PRODUCT_OS_NAME" /> para autenticarse en un proxy administrado y protegido con la autenticación NTLM. @@ -3593,6 +3545,7 @@ <translation id="6155936611791017817">Establece el estado predeterminado del cursor grande en la pantalla de acceso.</translation> <translation id="6157537876488211233">Lista separada por comas de las normas de omisión de proxy</translation> <translation id="6158324314836466367">Indica el nombre de la tienda web de la empresa (en desuso).</translation> +<translation id="6169768162756928771">Configuración de administración de identidad de usuarios de GAIA</translation> <translation id="6172896675583897796">Si habilitas la política, el Asistente de Google podrá acceder al contexto de pantalla y enviar esa información a un servidor. Si la inhabilitas, el Asistente de Google no podrá acceder a ese contexto. Si no la estableces, los usuarios podrán activar o desactivar esta función.</translation> @@ -4122,13 +4075,6 @@ Especifica las marcas que se deben aplicar a <ph name="PRODUCT_NAME" /> cuando se inicia. Las marcas especificadas se aplican solo en la pantalla de acceso. Las marcas establecidas mediante esta política no se propagan a las sesiones de usuario.</translation> <translation id="685769593149966548">Aplicar el modo restringido estricto para YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 o versiones posteriores</translation> -<translation id="6877233375929006871">Si estableces la política, podrás especificar una lista de patrones de URL que indiquen los sitios en los que los usuarios podrán hacer clic para omitir las páginas de advertencia que se muestran en <ph name="PRODUCT_NAME" /> cuando navegan a sitios que tienen errores de SSL. Los usuarios no podrán hacer clic para omitir páginas de advertencia SSL en sitios que no se encuentren en esta lista. - - Si inhabilitas <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" />, esta política no realizará ninguna acción. - - Si no estableces la política, se aplicará <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> para todos los sitios. - - Para obtener información detallada sobre los patrones de <ph name="URL_LABEL" /> válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> no es un valor aceptado para esta política.</translation> <translation id="68818134518270542">Si estableces la política, se especificarán las apps que los usuarios pueden activar para tomar notas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" />. Si la app preferida se habilita en la pantalla de bloqueo, aparecerá un elemento de IU para ejecutar la app preferida para tomar notas. Cuando se ejecute, la app podrá crear una ventana en la parte superior de la pantalla de bloqueo para tomar notas en este contexto. La app podrá importar las notas creadas a la sesión del usuario principal cuando la sesión se desbloquee. La pantalla de bloqueo solo admite apps para tomar notas de <ph name="PRODUCT_NAME" />. @@ -4627,11 +4573,6 @@ Si se establece como falsa, se inhabilitarán las actualizaciones de los componentes. Sin embargo, algunos componentes están exceptuados de esta política: no se inhabilitarán las actualizaciones de componentes que no contengan código ejecutable, no alteren significativamente el comportamiento del navegador ni sean fundamentales para su funcionamiento. Los ejemplos de dichos componentes incluyen las listas de revocación de certificados y los datos de Navegación segura. Consulta https://developers.google.com/safe-browsing para obtener más información sobre la Navegación segura.</translation> -<translation id="7563608136659080810">Esta política dejó de estar disponible. Utiliza la política "<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />" en su lugar. - - Si estableces la política, se asignarán los servidores a los que <ph name="PRODUCT_NAME" /> puede delegar. Los nombres de los servidores se separan con comas. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />). - - Si no estableces la política, <ph name="PRODUCT_NAME" /> no delegará credenciales de usuario, incluso si se detecta un servidor como intranet.</translation> <translation id="7566878661979235378">Tipo de autenticación del acceso SAML</translation> <translation id="7567373982693549834">Esta política controla la forma en que cada usuario usa las apps para Android de fuentes no seguras (que no provienen de Google Play Store). @@ -5554,6 +5495,7 @@ <translation id="8890438048579188548">Oculta las advertencias de baja de <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="8892286064305622118">Espacio libre en disco que se requiere para <ph name="PLUGIN_VM_NAME" /></translation> <translation id="8892783613915541293">Retrasos y acciones que se deben tomar cuando el dispositivo esté inactivo y funcionando con CA.</translation> +<translation id="8897796778265450949">Limita el tiempo durante el cual puede acceder sin conexión un usuario que se autenticó mediante GAIA sin SAML</translation> <translation id="8903283771634816230">Si habilitas la política, <ph name="PRODUCT_NAME" /> utilizará la impresora por defecto del SO como el destino predeterminado para la vista previa de impresión. Si la inhabilitas o no la estableces, <ph name="PRODUCT_NAME" /> utilizará la impresora que se usó por última vez como el destino predeterminado para la vista previa de impresión.</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index aa1a072a..5af671cbb 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -1162,23 +1162,6 @@ Si se le asigna el valor 1 ("UserOnly"), los usuarios podrán gestionar los certificados de usuario, pero no todos los certificados del dispositivo.</translation> <translation id="2593762551209145088">Navegación segura nunca está activa.</translation> -<translation id="2600410857944104685">Lista con los ajustes de los servicios de Chrome Enterprise Connectors que van a aplicarse al conector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se adjunta un archivo a Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para su análisis cuando se adjunte a una página específica y qué etiquetas se van a incluir en la solicitud de análisis del archivo. Se incluirá en la solicitud de análisis una etiqueta correspondiente a un patrón "enable" si la URL de la página coincide con un patrón asociado a esta etiqueta, siempre y cuando no se encuentre una misma etiqueta que coincida con la URL de la página con el patrón "disable". El análisis se realiza si se debe incluir al menos 1 etiqueta en la solicitud. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de análisis corresponde la configuración. - - Si se establece el valor 1 en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará hasta obtener una respuesta del servicio de análisis antes de permitir a la página acceder al archivo. Si se establece cualquier otro valor entero, Chrome permitirá a la página acceder de forma inmediata al archivo. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite archivos demasiado grandes para ser analizados (más de 50 MB). - - El campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> determina para qué etiquetas deberá solicitar el conector al usuario que proporcione una justificación para evitar un análisis que provoque una advertencia que se pueda evitar. Si no se define este campo, se considera que no es necesaria una justificación. - - Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se utilizan para configurar un mensaje que se muestra al usuario cuando aparece una advertencia después de que un análisis arroje un resultado no limpio. El campo del mensaje contiene el texto que se va a mostrar al usuario y debe tener una longitud máxima de 200 caracteres. El campo learn_more_url contiene una URL proporcionada por el administrador a la que podrá acceder el usuario para consultar más información del cliente sobre las razones por las que se ha bloqueado la acción. El campo del idioma es opcional y contiene el idioma del mensaje. Si el campo del idioma está vacío o tiene el valor predeterminado, indica que el mensaje se usará cuando no exista un mensaje en el idioma del usuario. El campo de etiqueta especifica para qué tipo de análisis se muestra el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada debe tener un mensaje que no esté vacío y campos de etiquetas. - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="26023406105317310">Configurar las cuentas de Kerberos</translation> <translation id="2604182581880595781">Configura las políticas relacionadas con el uso compartido de archivos del sistema.</translation> <translation id="2615240493030733717">Informar sobre la zona horaria</translation> @@ -1390,7 +1373,6 @@ Si se le asigna un valor a esta política, los usuarios no podrán cambiarlo. Esta política está obsoleta. Usa la política <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> en su lugar.</translation> -<translation id="2949765875529121431">Al establecer la política, se define una lista de nombres de host que quedarán exentos de la comprobación de la política de HSTS, que podría cambiar las solicitudes de http a https. Esta política solo admite nombres de host de una sola etiqueta. Los nombres de host deben canonicalizarse, es decir, cada IDN debe convertirse a su formato de etiqueta A, y todas las letras ASCII deben ser minúsculas. Esta política solo se aplica a los nombres de host incluidos en la lista, no a sus subdominios.</translation> <translation id="2952347049958405264">Restricciones:</translation> <translation id="2957047180944828740">Especifica si se permite que los sitios web no seguros envíen peticiones a puntos finales de la red con una privacidad más estricta.</translation> <translation id="2957506574938329824">No permitir que los sitios soliciten acceso a los dispositivos Bluetooth a través de la API Bluetooth web</translation> @@ -1411,7 +1393,6 @@ Para obtener información detallada sobre los patrones de URL válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Configuración antigua de comportamiento de cookies de <ph name="ATTRIBUTE_SAMESITE_NAME" /></translation> -<translation id="2981998788751314539">Permitir seguir navegando desde la página de advertencia de SSL en páginas concretas</translation> <translation id="2985927503455169394">Usa el modo predeterminado de la experiencia de incorporación del Asistente</translation> <translation id="2987155890997901449">Habilitar ARC</translation> <translation id="2987227569419001736">Controlar el uso de la API Bluetooth web</translation> @@ -1461,13 +1442,6 @@ Ten en cuenta que la autenticación pasiva siempre está permitida en los perfiles normales. En la versión 81 y versiones posteriores de <ph name="PRODUCT_NAME" />, si no se establece la política, la autenticación pasiva se habilitará únicamente en las sesiones normales.</translation> -<translation id="3021288356473993647">Esta política controla la comprobación de URLs en tiempo real para identificar URL no seguras. - - Si se inhabilita o no se le asigna ningún valor, se aplicarán las comprobaciones predeterminadas de Navegación segura para usuarios particulares. Las comprobaciones de Navegación segura para usuarios particulares podrán seguir incluyendo consultas en tiempo real en función del valor del ajuste "Mejorar las búsquedas y la navegación" y del valor de la política UrlKeyedAnonymizedDataCollectionEnabled. - - Si se habilita esta política, las URL se enviarán para que se analicen en tiempo real de acuerdo con los Términos del Servicio de Chrome Enterprise. Chrome enviará las URL a Google Cloud o a terceros de tu elección para que se analicen en tiempo real. Se desactivará la versión para usuarios particulares de la búsqueda en tiempo real de Navegación segura. - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="3021562480854470924">Se permite restaurar el número de eventos clave</translation> <translation id="3023572080620427845">URL de un archivo XML que contiene las URL que se cargarán en un navegador alternativo.</translation> <translation id="302528139996622624">Configuración de imagen</translation> @@ -1535,23 +1509,6 @@ <translation id="3096595567015595053">Lista de complementos habilitados</translation> <translation id="3101501961102569744">Seleccionar la forma de especificar la configuración del servidor proxy</translation> <translation id="3101709781009526431">Fecha y hora</translation> -<translation id="3102177185340515316">Lista con los ajustes de los servicios de conectores de Chrome Enterprise que se van a aplicar al conector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se descarga un archivo en Chrome. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar un archivo para su análisis cuando se descargue de una página específica y qué etiquetas se van a incluir en la solicitud de análisis del archivo. Se incluirá en la solicitud de análisis una etiqueta correspondiente a un patrón "enable" si la URL de la página coincide con un patrón asociado a esta etiqueta, siempre y cuando no se encuentre una misma etiqueta que coincida con la URL de la página con el patrón "disable". El análisis se realiza si se debe incluir al menos 1 etiqueta en la solicitud. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de análisis corresponde la configuración. - - Si se establece el valor 1 en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará hasta obtener una respuesta del servicio de análisis antes de permitir al usuario acceder al archivo descargado. Si se establece cualquier otro valor entero, Chrome permitirá al usuario acceder de forma inmediata al archivo. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla si Chrome bloquea o permite archivos protegidos con contraseña. - - El campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla si Chrome bloquea o permite archivos demasiado grandes para ser analizados (más de 50 MB). - - El campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> determina para qué etiquetas deberá solicitar el conector al usuario que proporcione una justificación para evitar un análisis que provoque una advertencia que se pueda evitar. Si no se define este campo, se considera que no es necesaria una justificación. - - Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se utilizan para configurar un mensaje que se muestra al usuario cuando aparece una advertencia después de que un análisis arroje un resultado no limpio. El campo del mensaje contiene el texto que se va a mostrar al usuario y debe tener una longitud máxima de 200 caracteres. El campo learn_more_url contiene una URL proporcionada por el administrador a la que podrá acceder el usuario para consultar más información del cliente sobre las razones por las que se ha bloqueado la acción. El campo del idioma es opcional y contiene el idioma del mensaje. Si el campo del idioma está vacío o tiene el valor predeterminado, indica que el mensaje se usará cuando no exista un mensaje en el idioma del usuario. El campo de etiqueta especifica para qué tipo de análisis se muestra el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada debe tener un mensaje que no esté vacío y campos de etiquetas. - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="3110248563985502478">Esta política está obsoleta en M88. Chrome ya no es compatible con Flash. Si la política se habilita, los complementos obsoletos se utilizarán como complementos normales. Si la política se inhabilita, los complementos obsoletos no se utilizarán. Si no se le asigna ningún valor, se pedirá permiso a los usuarios para ejecutar los complementos obsoletos.</translation> @@ -1640,21 +1597,6 @@ Si no se define esta política, la actualización de firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" /> no estará disponible.</translation> <translation id="3232691106293445015">El uso de la autenticación <ph name="BASIC_AUTH" /> no está permitido para conexiones HTTP no seguras; se necesita una conexión HTTPS</translation> -<translation id="3234647080363107863">Lista con los ajustes de los servicios de Chrome Enterprise Connectors que se van a aplicar al conector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se introducen datos en Chrome desde el portapapeles o arrastrando y soltando contenido web. - - Los campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> se usan para determinar si el conector debe enviar datos para su análisis cuando se introduzcan en una página específica y qué etiquetas se van a incluir en la solicitud de análisis de esos datos. Se incluirá en la solicitud de análisis una etiqueta correspondiente a un patrón "enable" si la URL de la página coincide con un patrón asociado a esta etiqueta, siempre y cuando no se encuentre una misma etiqueta que coincida con la URL de la página con el patrón "disable". El análisis se realiza si se debe incluir al menos 1 etiqueta en la solicitud. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de análisis corresponde la configuración. - - Si se establece el valor 1 en el campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />, Chrome esperará hasta obtener una respuesta del servicio de análisis antes de permitir a la página acceder a los datos. Si se establece cualquier otro valor entero, Chrome permitirá a la página acceder de forma inmediata a los datos. - - El campo <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indica el tamaño mínimo (en bytes) que los datos introducidos en Chrome deben igualar o superar para analizarse. El valor predeterminado es 100 bytes si el campo se deja sin establecer. - - El campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> determina para qué etiquetas deberá solicitar el conector al usuario que proporcione una justificación para evitar un análisis que provoque una advertencia que se pueda evitar. Si no se define este campo, se considera que no es necesaria una justificación. - - Los campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> y <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> se utilizan para configurar un mensaje que se muestra al usuario cuando aparece una advertencia después de que un análisis arroje un resultado no limpio. El campo del mensaje contiene el texto que se va a mostrar al usuario y debe tener una longitud máxima de 200 caracteres. El campo learn_more_url contiene una URL proporcionada por el administrador a la que podrá acceder el usuario para consultar más información del cliente sobre las razones por las que se ha bloqueado la acción. El campo del idioma es opcional y contiene el idioma del mensaje. Si el campo del idioma está vacío o tiene el valor predeterminado, indica que el mensaje se usará cuando no exista un mensaje en el idioma del usuario. El campo de etiqueta especifica para qué tipo de análisis se muestra el mensaje. La lista custom_messages puede tener cero o más entradas, y cada entrada debe tener un mensaje que no esté vacío y campos de etiquetas. - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="3236046242843493070">Patrones de URL desde los que se puede instalar secuencias de comandos de usuario, aplicaciones y extensiones</translation> <translation id="3240609035816615922">Política de acceso a la configuración de impresoras.</translation> <translation id="324062325008698789">Configura una lista de impresoras.</translation> @@ -2652,11 +2594,6 @@ Si esta política se habilita o no se establece, se realizarán las comprobaciones de interceptación de DNS. Si se inhabilita, no se realizarán las comprobaciones.</translation> <translation id="4700190441681139987">No permitir a ningún sitio web acceder a los sensores</translation> <translation id="4703402283970867140">Habilitar el modelo de atenuación inteligente para alargar el tiempo que pasa hasta que la pantalla se atenúe.</translation> -<translation id="4715026656747891013">Lista con los ajustes de los servicios de Chrome Enterprise Connectors que se van a aplicar al conector <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> de Enterprise, que se activa cuando se produce una actividad relacionada con la seguridad en Chrome. Esto incluye resultados negativos del análisis de Enterprise Connectors, reutilización de contraseñas, acceso a páginas no seguras y otras acciones del usuario relacionadas con la seguridad. - - El campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica a qué proveedor de servicios de informes corresponde la configuración y el campo <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> identifica qué eventos están habilitados para este proveedor. - - Esta política solo se puede establecer desde la consola de administración de Google.</translation> <translation id="4722122254122249791">Habilitar el aislamiento de sitios web específicos</translation> <translation id="4723122879352880315">Esta opción permite que los usuarios se autentiquen en un proxy administrado y protegido con autenticación NTLM usando las credenciales de inicio de sesión de <ph name="PRODUCT_OS_NAME" />. @@ -4150,13 +4087,6 @@ Especifica las opciones que se deben aplicar a <ph name="PRODUCT_NAME" /> cuando se inicia. Las opciones especificadas solo se aplican en la pantalla de inicio de sesión. Las opciones establecidas a través de esta política no se propagan a las sesiones del usuario.</translation> <translation id="685769593149966548">Aplicar el modo restringido estricto en YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 o versiones posteriores</translation> -<translation id="6877233375929006871">Si se asigna un valor a esta política, podrás establecer una lista de patrones de URL donde se especifiquen los sitios web en los que los usuarios podrán hacer clic para ignorar las páginas de advertencia que mostrará <ph name="PRODUCT_NAME" /> cuando intenten acceder a sitios que tengan errores SSL. Los usuarios no podrán hacer clic para ignorar las páginas de advertencia de SSL en los sitios que no estén incluidos en esa lista. - - Si <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> está inhabilitada, esta política no tendrá ningún efecto. - - Si no se asigna ningún valor a esta política, <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> se aplicará a todos los sitios. - - Para obtener información detallada sobre los patrones de <ph name="URL_LABEL" /> válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> no es un valor aceptado para esta política.</translation> <translation id="68818134518270542">Si se establece esta política, se especificarán las aplicaciones que pueden activar los usuarios para tomar notas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" />. Si la aplicación preferida está habilitada en la pantalla de bloqueo, aparecerá en la pantalla un elemento de interfaz de usuario para iniciar la aplicación para tomar notas. Una vez iniciada, la aplicación podrá abrir una ventana sobre la pantalla de bloqueo y crear notas en este contexto. La aplicación puede importar las notas creadas a la sesión del usuario principal cuando se desbloquee la sesión. En la pantalla de bloqueo, solo se admiten las aplicaciones para tomar notas de <ph name="PRODUCT_NAME" />. @@ -4660,11 +4590,6 @@ Si se le asigna el valor "False", se inhabilitan las actualizaciones de los componentes. Sin embargo, algunos componentes quedan exentos de esta política: no se inhabilitarán las actualizaciones de cualquier componente que no contenga ningún código ejecutable, que no influya en el funcionamiento del navegador de forma significativa o que sea esencial para su seguridad. Entre los ejemplos de estos componentes se incluyen las listas de revocación de certificados y los datos de navegación segura. Consulta la página https://developers.google.com/safe-browsing para obtener más información sobre la función Navegación segura.</translation> -<translation id="7563608136659080810">Esta política está obsoleta. Usa la política <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> en su lugar. - - Si se define esta política, asignará los servidores en los que puede delegar <ph name="PRODUCT_NAME" />. Si hay varios nombres de servidores, se deben separar con comas. Se permite el uso de caracteres comodín (<ph name="WILDCARD_VALUE" />). - - Si no se define esta política, <ph name="PRODUCT_NAME" /> no delegará las credenciales de usuario aunque se detecte una intranet como servidor.</translation> <translation id="7566878661979235378">Tipo de autenticación de inicio de sesión con SAML</translation> <translation id="7567373982693549834">Esta política controla el uso de aplicaciones Android de fuentes que no son de confianza (distintas a Google Play Store) por parte de cada usuario.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 64f7558a..aecf6598 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -390,6 +390,11 @@ Si cette règle est désactivée ou si elle n'est pas définie, les paramètres de comptes Kerberos sont désactivés. Aucun compte Kerberos ne peut être ajouté et l'authentification Kerberos ne peut pas être utilisée. Les comptes Kerberos déjà créés et les mots de passe enregistrés sont tous supprimés.</translation> <translation id="1561424797596341174">Remplacements de règle pour les versions de débogage de l'hôte distant</translation> <translation id="1561967320164410511">U2F plus extensions pour chaque attestation</translation> +<translation id="1567718448549957373">Si cette règle est activée ou si elle n'est pas définie, l'authentification <ph name="BASIC_AUTH" /> sera autorisée sur les connexions HTTP non sécurisées. + + Si cette règle est désactivée, l'authentification <ph name="BASIC_AUTH" /> ne sera pas autorisée sur les connexions HTTP non sécurisées (elle le sera uniquement sur les connexions HTTPS sécurisées). + + Cette règle est ignorée (et l'authentification <ph name="BASIC_AUTH" /> est toujours interdite) si la règle <ph name="AUTH_SCHEMES_POLICY_NAME" /> est définie et n'inclut pas l'authentification <ph name="BASIC_AUTH" />.</translation> <translation id="1575015449587326319">Règle de configuration du connecteur Chrome Enterprise OnFileDownloaded</translation> <translation id="1583248206450240930">Utiliser <ph name="PRODUCT_FRAME_NAME" /> par défaut</translation> <translation id="1588240398285670601">Paramètres du navigateur</translation> @@ -1154,23 +1159,6 @@ Si cette règle est définie sur "UserOnly" (valeur 1), les utilisateurs peuvent gérer les certificats utilisateur, mais pas ceux au niveau de l'appareil.</translation> <translation id="2593762551209145088">La navigation sécurisée n'est jamais active.</translation> -<translation id="2600410857944104685">Liste des paramètres des services des connecteurs Chrome Enterprise à appliquer au connecteur Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, qui se déclenche lorsqu'un fichier est joint à Chrome. - - Les champs "<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />" permettent de déterminer si le connecteur doit envoyer un fichier en vue d'une analyse lorsqu'il est joint à une page spécifique, ainsi que les tags à inclure dans la demande d'analyse de ce fichier. Un tag correspondant à un format "enable" sera inclus dans la demande d'analyse si l'URL de la page suit un format associé à ce tag, à condition qu'aucun format "disable" associé à ce même tag ne corresponde à l'URL de la page. L'analyse a lieu si au moins un tag doit être inclus dans la demande. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" permet de savoir à quel fournisseur de services d'analyse correspondent les paramètres. - - Si la valeur du champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />" est 1, Chrome attend de recevoir une réponse du service d'analyse avant de laisser la page accéder au fichier. Pour toute autre valeur entière, Chrome laisse la page accéder immédiatement au fichier. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" />" permet de définir si Chrome doit bloquer ou autoriser l'accès aux fichiers protégés par un mot de passe. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" />" permet de spécifier si Chrome doit bloquer ou autoriser l'accès aux fichiers trop volumineux pour être analysés (plus de 50 Mo). - - Le champ "<ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" />" permet d'indiquer les tags pour lesquels le connecteur doit demander à l'utilisateur d'expliquer pourquoi une analyse entraînant l'affichage d'un avertissement est ignorée. Si ce champ n'est pas renseigné, nous partons du principe qu'aucune justification n'est requise. - - Les champs "<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />" permettent de configurer le message à montrer à l'utilisateur lorsqu'un avertissement s'affiche après une analyse dont le résultat révèle un problème. Le message saisi dans le champ ne doit pas comporter plus de 200 caractères. Le champ "learn_more_url" contient une URL fournie par l'administrateur sur laquelle l'utilisateur peut cliquer pour obtenir des informations indiquées par le client et savoir pourquoi l'action a été bloquée. Le champ "language" est facultatif. Il indique la langue dans laquelle est saisi le message. Si ce champ est vide ou contient la valeur "par défaut", un message est proposé par défaut. Le champ "tag" spécifie pour quel type d'analyses le message est affiché. Le champ "custom_messages" peut être vide ou contenir plusieurs entrées (les champs "message" et "tag" devant être renseignés pour chacune d'elles). - - Cette règle ne peut être configurée que dans la Console d'administration Google.</translation> <translation id="26023406105317310">Configurer les comptes Kerberos</translation> <translation id="2604182581880595781">Configurer les règles associées à la fonctionnalité Partages de fichiers en réseau.</translation> <translation id="2615240493030733717">Transmettre le fuseau horaire</translation> @@ -1382,7 +1370,6 @@ Si vous définissez cette règle, les utilisateurs ne peuvent pas la modifier. Cette règle étant obsolète, veuillez utiliser la règle <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> à la place.</translation> -<translation id="2949765875529121431">Cette règle permet de spécifier une liste de noms d'hôte exemptés de la vérification de la règle HSTS susceptible de remplacer les requêtes HTTP par des requêtes HTTPS. Seuls les noms d'hôte sans extension sont autorisés dans cette règle. Les noms d'hôte doivent être indiqués sous forme canonique : tous les noms de domaine internationalisés (IDN) doivent être convertis dans leur format d'étiquette A, et toutes les lettres ASCII doivent être en minuscules. Cette règle ne s'applique qu'aux noms d'hôte spécifiques indiqués. Elle ne s'applique pas à leurs sous-domaines.</translation> <translation id="2952347049958405264">Restrictions :</translation> <translation id="2957047180944828740">Permet de spécifier si les sites Web non sécurisés sont autorisés à envoyer des requêtes à des points de terminaison plus privés du réseau</translation> <translation id="2957506574938329824">Interdire à tous les sites de demander l'accès à des appareils Bluetooth via l'API Web Bluetooth</translation> @@ -1403,7 +1390,6 @@ Pour en savoir plus sur les formats d'URL valides, consultez cette page : https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Paramètres du comportement vis-à-vis des anciens cookies <ph name="ATTRIBUTE_SAMESITE_NAME" /></translation> -<translation id="2981998788751314539">Autoriser l'accès au site malgré l'affichage d'une page d'avertissement SSL</translation> <translation id="2985927503455169394">Utiliser le mode par défaut du processus de prise en main de l'Assistant</translation> <translation id="2987155890997901449">Activer ARC</translation> <translation id="2987227569419001736">Contrôler l'utilisation de l'API Web Bluetooth</translation> @@ -1453,13 +1439,6 @@ Notez que l'authentification ambiante est toujours activée pour les profils standards. Dans <ph name="PRODUCT_NAME" /> 81 et les versions ultérieures, si la règle n'est pas définie, l'authentification ambiante sera activée pour les sessions standards uniquement.</translation> -<translation id="3021288356473993647">Cette règle permet de gérer la détection en temps réel des URL non sécurisées. - - Lorsqu'elle est désactivée ou n'est pas définie, seules les vérifications courantes de la navigation sécurisée sont effectuées. Les vérifications courantes de la navigation sécurisée peuvent tout de même inclure des recherches en temps réel, selon la valeur du paramètre "Améliorer les recherches et la navigation" et la valeur de la règle UrlKeyedAnonymizedDataCollectionEnabled. - - Si cette règle est activée, les URL sont analysées en temps réel conformément aux conditions d'utilisation de l'entreprise. Chrome envoie alors les URL à Google Cloud ou à des tiers de votre choix pour une vérification en temps réel. Les vérifications courantes en temps réel de la navigation sécurisée seront désactivées. - - Cette règle ne peut être définie que dans la Console d'administration Google.</translation> <translation id="3021562480854470924">Nombre de versions intermédiaires autorisées pour le rollback</translation> <translation id="3023572080620427845">URL d'un fichier XML qui contient des URL à charger dans un navigateur secondaire.</translation> <translation id="302528139996622624">Paramètres des images</translation> @@ -1489,6 +1468,7 @@ Cette règle étant obsolète, veuillez utiliser la règle <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> à la place.</translation> <translation id="3030000825273123558">Activer la génération de rapports sur les statistiques</translation> +<translation id="3032322294267258117">Permet de contrôler les paramètres des utilisateurs authentifiés via GAIA sans SAML.</translation> <translation id="3038323923255997294">Poursuivre l'exécution des applications en arrière-plan après la fermeture de <ph name="PRODUCT_NAME" /></translation> <translation id="3041707370546071653">Cette règle permet de spécifier si le mot de passe Kerberos doit être mémorisé ou non. Si cette règle n'est pas configurée ou qu'elle est définie sur "False", le mot de passe n'est pas mémorisé. Si le mot de passe n'est pas spécifié, cette règle est ignorée.</translation> <translation id="3041887182529293512">Si cette règle est définie sur "True" ou qu'elle n'est pas configurée, des recommandations de contenus générées automatiquement sont proposées sur la page "Nouvel onglet", en fonction de l'historique de navigation, des centres d'intérêt ou de la position de l'utilisateur. @@ -1526,23 +1506,6 @@ <translation id="3096595567015595053">Liste des plug-ins activés</translation> <translation id="3101501961102569744">Sélectionner le mode de spécification des paramètres de serveur proxy</translation> <translation id="3101709781009526431">Date et heure</translation> -<translation id="3102177185340515316">Liste des paramètres des services des connecteurs Chrome Enterprise à appliquer au connecteur Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, qui se déclenche lorsqu'un fichier est téléchargé dans Chrome. - - Les champs "<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />" permettent de déterminer si le connecteur doit envoyer un fichier en vue d'une analyse lorsque celui-ci est téléchargé à partir d'une page spécifique, ainsi que les tags à inclure dans la demande d'analyse de ce fichier. Un tag correspondant à un format "enable" sera inclus dans la demande d'analyse si l'URL de la page suit un format associé à ce tag, à condition qu'aucun format "disable" associé à ce même tag ne corresponde à l'URL de la page. L'analyse a lieu si au moins un tag doit être inclus dans la demande. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" permet de savoir à quel fournisseur de services d'analyse correspondent les paramètres. - - Si la valeur du champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />" est 1, Chrome attend de recevoir une réponse du service d'analyse avant de laisser l'utilisateur accéder au fichier téléchargé. Pour toute autre valeur entière, Chrome laisse l'utilisateur accéder immédiatement au fichier. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" />" permet de définir si Chrome doit bloquer ou autoriser l'accès aux fichiers protégés par un mot de passe. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" />" permet de spécifier si Chrome doit bloquer ou autoriser l'accès aux fichiers trop volumineux pour être analysés (plus de 50 Mo). - - Le champ "<ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" />" permet d'indiquer les tags pour lesquels le connecteur doit demander à l'utilisateur d'expliquer pourquoi une analyse entraînant l'affichage d'un avertissement est ignorée. Si ce champ n'est pas renseigné, nous partons du principe qu'aucune justification n'est requise. - - Les champs "<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />" permettent de configurer le message à montrer à l'utilisateur lorsqu'un avertissement s'affiche après une analyse dont le résultat révèle un problème. Le message saisi dans le champ ne doit pas comporter plus de 200 caractères. Le champ "learn_more_url" contient une URL fournie par l'administrateur sur laquelle l'utilisateur peut cliquer pour obtenir des informations indiquées par le client et savoir pourquoi l'action a été bloquée. Le champ "language" est facultatif. Il indique la langue dans laquelle est saisi le message. Si ce champ est vide ou contient la valeur "par défaut", un message est proposé par défaut. Le champ "tag" spécifie pour quel type d'analyses le message est affiché. Le champ "custom_messages" peut être vide ou contenir plusieurs entrées (les champs "message" et "tag" devant être renseignés pour chacune d'elles). - - Cette règle ne peut être configurée que dans la Console d'administration Google.</translation> <translation id="3110248563985502478">Cette règle étant obsolète dans la version M88, Flash n'est plus accepté dans Chrome. Si cette règle est activée, les plug-ins obsolètes sont utilisés comme des plug-ins normaux. Si cette règle est désactivée, aucun plug-in obsolète n'est utilisé. Si cette règle n'est pas configurée, les plug-ins obsolètes ne peuvent être exécutés que sur autorisation des utilisateurs.</translation> @@ -1631,21 +1594,6 @@ Si cette règle n'est pas configurée, la mise à jour du micrologiciel <ph name="TPM_FIRMWARE_UPDATE_TPM" /> n'est pas disponible.</translation> <translation id="3232691106293445015">L'authentification <ph name="BASIC_AUTH" /> n'est pas autorisée sur les connexions HTTP non sécurisées (HTTPS requis)</translation> -<translation id="3234647080363107863">Liste des paramètres des services des connecteurs Chrome Enterprise à appliquer au connecteur Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, qui se déclenche lorsque des données sont collées dans Chrome depuis le presse-papiers ou lorsque du contenu Web est ajouté par glisser-déposer. - - Les champs "<ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" />" permettent de déterminer si le connecteur doit envoyer des données en vue d'une analyse lorsque celles-ci sont saisies dans une page spécifique, ainsi que les tags à inclure dans la demande d'analyse de ces données. Un tag correspondant à un format "enable" sera inclus dans la demande d'analyse si l'URL de la page suit un format associé à ce tag, à condition qu'aucun format "disable" associé à ce même tag ne corresponde à l'URL de la page. L'analyse a lieu si au moins un tag doit être inclus dans la demande. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" permet de savoir à quel fournisseur de services d'analyse correspondent les paramètres. - - Si la valeur du champ "<ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" />" est 1, Chrome attend de recevoir une réponse du service d'analyse avant de laisser la page accéder aux données. Pour toute autre valeur entière, Chrome laisse la page accéder immédiatement aux données. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" />" indique la taille minimale (en octets) que les données saisies dans Chrome doivent atteindre ou dépasser pour être analysées. Si ce champ n'est pas renseigné, la valeur par défaut est de 100 octets. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" />" permet d'indiquer les tags pour lesquels le connecteur doit demander à l'utilisateur d'expliquer pourquoi une analyse entraînant l'affichage d'un avertissement est ignorée. Si ce champ n'est pas renseigné, nous partons du principe qu'aucune justification n'est requise. - - Les champs "<ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />", "<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />" et "<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" />" permettent de configurer le message à montrer à l'utilisateur lorsqu'un avertissement s'affiche après une analyse dont le résultat révèle un problème. Le message saisi dans le champ ne doit pas comporter plus de 200 caractères. Le champ "learn_more_url" contient une URL fournie par l'administrateur sur laquelle l'utilisateur peut cliquer pour obtenir des informations indiquées par le client et savoir pourquoi l'action a été bloquée. Le champ "language" est facultatif. Il indique la langue dans laquelle est saisi le message. Si ce champ est vide ou contient la valeur "par défaut", un message est proposé par défaut. Le champ "tag" spécifie pour quel type d'analyses le message est affiché. Le champ "custom_messages" peut être vide ou contenir plusieurs entrées (les champs "message" et "tag" devant être renseignés pour chacune d'elles). - - Cette règle ne peut être configurée que dans la Console d'administration Google.</translation> <translation id="3236046242843493070">Formats d'URL à partir desquelles autoriser les sources d'installation des extensions, des applications et des scripts d'utilisateur</translation> <translation id="3240609035816615922">Règle d'accès à la configuration des imprimantes.</translation> <translation id="324062325008698789">Configurer une liste d'imprimantes</translation> @@ -2484,6 +2432,15 @@ <translation id="4510923771103268849">L'utilisateur est autorisé à accéder à la racine des conteneurs Crostini</translation> <translation id="4515404363392014383">Activer la navigation sécurisée pour les sources fiables</translation> <translation id="4518251772179446575">Demander chaque fois qu'un site veut suivre la position géographique des utilisateurs</translation> +<translation id="4521193243799782295">Lors de la connexion, l'authentification dans <ph name="PRODUCT_OS_NAME" /> peut être effectuée sur un serveur (en ligne) ou à l'aide d'un mot de passe en cache (hors connexion). + + Lorsque la valeur de cette règle est définie sur -1, cela signifie que l'authentification en ligne ne sera pas appliquée. L'utilisateur pourra ainsi utiliser l'authentification hors connexion jusqu'à ce qu'un motif différent indique le contraire. Si cette règle est définie sur 0, cela signifie qu'une connexion en ligne sera toujours demandée. Toute autre valeur définie pour cette règle indique le délai écoulé depuis la dernière authentification en ligne au terme duquel l'utilisateur devra à nouveau s'identifier en ligne lors de sa prochaine connexion. + + Si cette règle n'est pas définie, <ph name="PRODUCT_OS_NAME" /> utilisera le mode hors connexion. + + Cette règle ne concerne que les utilisateurs authentifiés via GAIA sans SAML. + + La valeur de cette règle doit être indiquée en jours.</translation> <translation id="4528929591840709501">Heure (interprétée dans le fuseau horaire local de l'appareil) à laquelle l'appareil arrêtera de se recharger.</translation> <translation id="4529868888205510667">Si cette règle est définie sur "True" ou n'est pas définie, les utilisateurs peuvent utiliser ARC, sauf si celui-ci est désactivé par un autre moyen. Si elle est définie sur "False", les utilisateurs non affiliés ne peuvent pas utiliser ARC. @@ -2628,11 +2585,6 @@ Si cette règle n'est pas configurée ou qu'elle est activée, les contrôles d'interception des requêtes DNS ont lieu. Si elle est explicitement désactivée, les contrôles n'ont pas lieu.</translation> <translation id="4700190441681139987">Interdire à tous les sites d'accéder aux capteurs</translation> <translation id="4703402283970867140">Activer le modèle de réduction intelligente de la luminosité pour augmenter le délai d'assombrissement de l'écran</translation> -<translation id="4715026656747891013">Liste des services des connecteurs Chrome Enterprise à appliquer au connecteur Enterprise <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />, qui se déclenche lorsqu'un événement lié à la sécurité se produit dans Chrome. Cela inclut les verdicts négatifs lors de l'analyse par les connecteurs Enterprise, la réutilisation de mots de passe, la navigation sur des pages non sécurisées et d'autres activités des utilisateurs susceptibles d'affecter la sécurité. - - Le champ "<ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" />" indique le fournisseur de services de création de rapport auquel s'appliquent les paramètres. Le champ "<ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" />" identifie les événements activés pour ce fournisseur de services. - - Cette règle ne peut être configurée que dans la Console d'administration Google.</translation> <translation id="4722122254122249791">Activer l'isolation des sites pour des origines définies</translation> <translation id="4723122879352880315">Ce paramètre permet d'utiliser les identifiants de connexion <ph name="PRODUCT_OS_NAME" /> pour s'authentifier auprès d'un proxy géré dont l'accès est protégé par l'authentification NTLM. @@ -3597,6 +3549,7 @@ <translation id="6155936611791017817">Définir l'état par défaut du grand curseur sur l'écran de connexion</translation> <translation id="6157537876488211233">Liste de règles de contournement de proxy séparées par des virgules</translation> <translation id="6158324314836466367">Nom de boutique en ligne d'entreprise (abandonné)</translation> +<translation id="6169768162756928771">Paramètres de gestion de l'identité des utilisateurs GAIA</translation> <translation id="6172896675583897796">Si cette règle est activée, l'Assistant Google peut accéder au contexte de l'écran et transmettre ces données au serveur. Si cette règle est désactivée, l'Assistant Google n'a pas accès au contexte de l'écran. Si cette règle n'est pas configurée, les utilisateurs peuvent choisir d'activer ou de désactiver la fonctionnalité.</translation> @@ -4123,13 +4076,6 @@ Spécifie les indicateurs à appliquer à <ph name="PRODUCT_NAME" /> au démarrage. Ceux-ci ne sont appliqués que sur l'écran de connexion. Les indicateurs définis par cette règle ne sont pas répercutés dans les sessions utilisateur.</translation> <translation id="685769593149966548">Appliquer le mode restreint strict sur YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 ou version ultérieure</translation> -<translation id="6877233375929006871">Cette règle permet de dresser une liste de formats d'URL afin d'autoriser les utilisateurs qui arrivent sur les sites concernés à passer les pages d'avertissement affichées par <ph name="PRODUCT_NAME" /> en cas d'erreur SSL. Les utilisateurs ne pourront pas passer les pages d'avertissement SSL des sites qui ne figurent pas dans cette liste. - - Si la règle <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> est désactivée, cette règle n'a aucun effet. - - Si cette règle n'est pas configurée, la règle <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> s'applique pour tous les sites. - - Pour en savoir plus sur les formats <ph name="URL_LABEL" /> valides, consultez la page https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. La valeur <ph name="WILDCARD_VALUE" /> n'est pas acceptée pour cette règle.</translation> <translation id="68818134518270542">Permet de spécifier les applications que les utilisateurs peuvent activer comme applications de prise de notes sur l'écran de verrouillage <ph name="PRODUCT_OS_NAME" />. Si l'application de prise de notes préférée est activée sur l'écran de verrouillage, un élément d'interface utilisateur destiné à la lancer s'affiche à l'écran. Une fois démarrée, l'application peut ouvrir une fenêtre au-dessus de l'écran de verrouillage et créer des notes dans ce contexte. L'application peut importer les notes créées dans la session de l'utilisateur principal (lorsque la session est déverrouillée). Seules les applications de prise de notes <ph name="PRODUCT_NAME" /> sont acceptées sur l'écran de verrouillage. @@ -4632,11 +4578,6 @@ Si cette règle est définie sur "False", la mise à jour des composants est désactivée. Toutefois, certains composants échappent à cette règle : les mises à jour des composants sans code exécutable, qui n'affectent pas de façon significative le comportement du navigateur ou qui sont essentiels à la sécurité du navigateur ne seront pas désactivées. Ces composants peuvent inclure les listes de révocation de certificats et les données de navigation sécurisée. Pour en savoir plus sur la navigation sécurisée, consultez la page https://developers.google.com/safe-browsing.</translation> -<translation id="7563608136659080810">Cette règle étant obsolète, veuillez utiliser la règle <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> à la place. - - Celle-ci permet de spécifier les serveurs que <ph name="PRODUCT_NAME" /> est susceptible d'utiliser. S'il y a plusieurs serveurs, séparez leur nom par une virgule. Les caractères génériques (<ph name="WILDCARD_VALUE" />) sont autorisés. - - Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> ne délègue pas les identifiants de l'utilisateur, même si le serveur est identifié comme faisant partie de l'intranet.</translation> <translation id="7566878661979235378">Type d'authentification pour les connexions SAML</translation> <translation id="7567373982693549834">Cette règle permet de contrôler l'utilisation des applications Android provenant de sources non approuvées (autres que le Google Play Store) au niveau de chaque utilisateur. @@ -5545,6 +5486,7 @@ <translation id="8890438048579188548">Masquer les avertissements liés à l'abandon de <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="8892286064305622118">Espace disque libre requis pour <ph name="PLUGIN_VM_NAME" /></translation> <translation id="8892783613915541293">Délais et actions à effectuer en cas d'inactivité de l'utilisateur quand l'appareil fonctionne sur secteur.</translation> +<translation id="8897796778265450949">Limiter la durée pendant laquelle un utilisateur authentifié via GAIA sans SAML peut se connecter hors connexion</translation> <translation id="8903283771634816230">Si vous activez cette règle, cela signifie que <ph name="PRODUCT_NAME" /> utilise l'imprimante par défaut du système d'exploitation en tant que destination par défaut pour l'aperçu avant impression. Si vous la désactivez, ou si vous ne la configurez pas, <ph name="PRODUCT_NAME" /> définira la dernière imprimante utilisée en tant que destination par défaut pour l'aperçu avant impression.</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index df4d179dd..82fabfd5 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -1162,23 +1162,6 @@ Jika kebijakan disetel ke 'UserOnly' (nilai 1), pengguna akan dapat mengelola sertifikat pengguna, tetapi bukan sertifikat di seluruh perangkat.</translation> <translation id="2593762551209145088">Safe Browsing selalu tidak aktif.</translation> -<translation id="2600410857944104685">Daftar setelan layanan Chrome Enterprise Connectors yang akan diterapkan ke <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise Connector, yang aktif saat file dilampirkan ke Chrome. - - Kolom <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> dan <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> digunakan untuk menentukan apakah konektor perlu mengirimkan file untuk dianalisis saat dilampirkan ke halaman tertentu, dan jenis tag yang perlu disertakan dalam permintaan analisis untuk file tersebut. Tag yang sesuai dengan pola 'aktifkan' akan disertakan dalam permintaan analisis jika URL halaman cocok dengan pola yang terkait dengan tag tersebut, selama tidak ada pola 'nonaktifkan' ber-tag sama yang cocok dengan URL halaman. Analisis dilakukan jika terdapat minimal 1 tag yang disertakan dalam permintaan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan analisis yang sesuai dengan setelan. - - Jika kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> disetel ke 1, Chrome akan menunggu untuk mendapatkan respons dari layanan analisis sebelum memberikan akses halaman ke file tersebut. Jika nilai berupa bilangan bulat lainnya, Chrome akan langsung memberikan akses halaman ke file. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang dilindungi sandi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang berukuran terlalu besar untuk dianalisis (lebih dari 50 MB). - - Kolom <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> digunakan untuk menentukan tag mana yang diperlukan saat konektor mewajibkan pengguna memasukkan justifikasi agar dapat mengabaikan pemindaian yang menghasilkan peringatan yang dapat diabaikan. Jika kolom tidak disetel, tidak perlu justifikasi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />, dan <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> digunakan untuk mengonfigurasi pesan yang akan ditampilkan kepada pengguna, saat muncul peringatan ketika hasil pemindaian masih menunjukkan ada masalah. Kolom pesan berisi teks yang akan ditampilkan kepada pengguna dan tidak boleh melebihi 200 karakter. Kolom learn_more_url berisi URL yang disediakan oleh admin. Pengguna dapat mengklik URL untuk mengetahui lebih lanjut penyebab diblokirnya tindakan tersebut. Kolom bahasa bersifat opsional dan berisi bahasa pesan. Kolom bahasa yang kosong atau nilai 'default' menunjukkan pesan yang akan digunakan saat bahasa pengguna tidak memiliki pesan. Kolom tag menentukan jenis pemindaian yang akan menampilkan pesan. Daftar custom_messages dapat memiliki nol atau beberapa entri, dengan tiap entri perlu memiliki pesan yang bukan kosong dan kolom tag. - - Kebijakan ini hanya dapat disetel dari konsol Google Admin.</translation> <translation id="26023406105317310">Konfigurasikan akun Kerberos</translation> <translation id="2604182581880595781">Mengonfigurasi kebijakan terkait fitur Berbagi File Jaringan.</translation> <translation id="2615240493030733717">Melaporkan Info Zona waktu</translation> @@ -1390,7 +1373,6 @@ Jika kebijakan disetel, pengguna tidak dapat mengubahnya. Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">Menyetel kebijakan akan menentukan daftar hostname yang dikecualikan dari pemeriksaan kebijakan HSTS yang dapat mengupgrade permintaan dari HTTP ke HTTPS. Hanya hostname berlabel tunggal yang diizinkan dalam kebijakan ini. Hostname harus dikanonikalisasi: Semua IDN harus dikonversi ke format berlabel A, dan semua huruf ASCII harus berupa huruf kecil. Kebijakan ini hanya berlaku untuk hostname spesifik yang telah ditentukan, bukan subdomain dari hostname tersebut.</translation> <translation id="2952347049958405264">Pembatasan:</translation> <translation id="2957047180944828740">Menentukan apakah akan mengizinkan situs yang tidak aman untuk membuat permintaan ke endpoint jaringan yang lebih pribadi</translation> <translation id="2957506574938329824">Jangan izinkan situs apa pun meminta akses ke perangkat Bluetooth melalui API Bluetooth Web</translation> @@ -1411,7 +1393,6 @@ Untuk informasi mendetail tentang pola URL yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Setelan perilaku cookie <ph name="ATTRIBUTE_SAMESITE_NAME" /> lama</translation> -<translation id="2981998788751314539">Mengizinkan untuk melanjutkan dari halaman peringatan SSL di halaman tertentu</translation> <translation id="2985927503455169394">Gunakan mode default pengalaman aktivasi Asisten</translation> <translation id="2987155890997901449">Aktifkan ARC</translation> <translation id="2987227569419001736">Mengontrol penggunaan API Bluetooth Web</translation> @@ -1461,13 +1442,6 @@ Perlu diketahui, autentikasi pasif selalu diizinkan pada profil reguler. Dalam <ph name="PRODUCT_NAME" /> versi 81 dan setelahnya, jika kebijakan tidak ditetapkan, autentikasi pasif hanya akan diaktifkan di sesi reguler.</translation> -<translation id="3021288356473993647">Kebijakan ini mengontrol pemeriksaan URL secara real time untuk mengidentifikasi URL tidak aman. - - Jika kebijakan ini tidak disetel atau disetel ke ‘Nonaktif’, pemeriksaan Safe Browsing pelanggan akan diterapkan. Pemeriksaan Safe Browsing pelanggan tetap dapat disertai pencarian real-time, bergantung pada preferensi "Jadikan penelusuran dan penjelajahan lebih baik" dan nilai kebijakan UrlKeyedAnonymizedDataCollectionEnabled. - - Jika kebijakan ini disetel ke ‘Aktif’, URL akan dikirimkan untuk dipindai secara real-time sesuai Persyaratan Layanan perusahaan. Ini akan membuat Chrome mengirimkan URL ke Google Cloud atau pihak ketiga pilihan Anda untuk memeriksa URL secara real-time. Pencarian real-time Safe Browsing versi pelanggan akan dinonaktifkan. - - Kebijakan ini hanya dapat disetel dari konsol Google Admin.</translation> <translation id="3021562480854470924">Jumlah rollback milestone diizinkan</translation> <translation id="3023572080620427845">URL file XML yang berisi URL yang akan dimuat di browser alternatif.</translation> <translation id="302528139996622624">Setelan gambar</translation> @@ -1535,23 +1509,6 @@ <translation id="3096595567015595053">Daftar plugin yang diaktifkan</translation> <translation id="3101501961102569744">Pilih cara menentukan setelan server proxy</translation> <translation id="3101709781009526431">Tanggal dan waktu</translation> -<translation id="3102177185340515316">Daftar setelan layanan Chrome Enterprise Connectors yang akan diterapkan ke <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise Connector, yang aktif saat file didownload di Chrome. - - Kolom <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> dan <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> digunakan untuk menentukan apakah konektor perlu mengirimkan file untuk dianalisis saat didownload dari halaman tertentu, dan jenis tag yang perlu disertakan dalam permintaan analisis untuk file tersebut. Tag yang sesuai dengan pola 'aktifkan' akan disertakan dalam permintaan analisis jika URL halaman cocok dengan pola yang terkait dengan tag tersebut, selama tidak ada pola 'nonaktifkan' ber-tag sama yang cocok dengan URL halaman. Analisis dilakukan jika terdapat minimal 1 tag yang disertakan dalam permintaan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan analisis yang sesuai dengan setelan. - - Jika kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> disetel ke 1, Chrome akan menunggu untuk mendapatkan respons dari layanan analisis sebelum memberikan akses pengguna ke file yang didownload. Jika nilai berupa bilangan bulat lainnya, Chrome akan langsung memberikan akses pengguna ke file. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang dilindungi sandi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> mengontrol apakah Chrome akan memblokir atau mengizinkan file yang berukuran terlalu besar untuk dianalisis (lebih dari 50 MB). - - Kolom <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> digunakan untuk menentukan tag mana yang diperlukan saat konektor mewajibkan pengguna memasukkan justifikasi agar dapat mengabaikan pemindaian yang menghasilkan peringatan yang dapat diabaikan. Jika kolom tidak disetel, tidak perlu justifikasi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />, dan <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> digunakan untuk mengonfigurasi pesan yang akan ditampilkan kepada pengguna, saat muncul peringatan ketika hasil pemindaian masih menunjukkan ada masalah. Kolom pesan berisi teks yang akan ditampilkan kepada pengguna dan tidak boleh melebihi 200 karakter. Kolom learn_more_url berisi URL yang disediakan oleh admin. Pengguna dapat mengklik URL untuk mengetahui lebih lanjut penyebab diblokirnya tindakan tersebut. Kolom bahasa bersifat opsional dan berisi bahasa pesan. Kolom bahasa yang kosong atau nilai 'default' menunjukkan pesan yang akan digunakan saat bahasa pengguna tidak memiliki pesan. Kolom tag menentukan jenis pemindaian yang akan menampilkan pesan. Daftar custom_messages dapat memiliki nol atau beberapa entri, dengan tiap entri perlu memiliki pesan yang bukan kosong dan kolom tag. - - Kebijakan ini hanya dapat disetel dari konsol Google Admin.</translation> <translation id="3110248563985502478">Kebijakan ini tidak digunakan lagi di M88, Flash tidak lagi didukung oleh Chrome. Jika kebijakan disetel ke Aktif, plugin yang sudah tidak berlaku akan digunakan seperti plugin normal. Jika kebijakan disetel ke Nonaktif, plugin yang sudah tidak berlaku tidak akan digunakan. Jika kebijakan tidak disetel, pengguna akan dimintai izin untuk menjalankan plugin yang sudah tidak berlaku.</translation> @@ -1640,21 +1597,6 @@ Jika kebijakan tidak disetel, update firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" /> tidak akan tersedia.</translation> <translation id="3232691106293445015">Koneksi HTTP yang tidak aman dilarang menggunakan autentikasi <ph name="BASIC_AUTH" />; HTTPS diwajibkan</translation> -<translation id="3234647080363107863">Daftar setelan layanan Chrome Enterprise Connectors yang akan diterapkan ke <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise Connector, yang aktif saat data dimasukkan ke Chrome dari papan klip atau dengan menarik lalu melepas konten web. - - Kolom <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, dan <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> digunakan untuk menentukan apakah konektor perlu mengirimkan data untuk dianalisis saat dimasukkan ke halaman tertentu, dan jenis tag yang perlu disertakan dalam permintaan analisis untuk data tersebut. Tag yang sesuai dengan pola 'aktifkan' akan disertakan dalam permintaan analisis jika URL halaman cocok dengan pola yang terkait dengan tag tersebut, selama tidak ada pola 'nonaktifkan' ber-tag sama yang cocok dengan URL halaman. Analisis dilakukan jika terdapat minimal 1 tag yang disertakan dalam permintaan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan analisis yang sesuai dengan setelan. - - Jika kolom <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> disetel ke 1, Chrome akan menunggu untuk mendapatkan respons dari layanan analisis sebelum memberikan akses halaman ke data tersebut. Jika nilai berupa bilangan bulat lainnya, Chrome akan langsung memberikan akses halaman ke data. - - Kolom <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> menunjukkan bahwa ukuran minimum data (dalam byte) yang dimasukkan di Chrome harus sama atau lebih besar agar dapat dipindai. Nilai defaultnya adalah 100 byte jika kolom tidak disetel. - - Kolom <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> digunakan untuk menentukan tag mana yang diperlukan saat konektor mewajibkan pengguna memasukkan justifikasi agar dapat mengabaikan pemindaian yang menghasilkan peringatan yang dapat diabaikan. Jika kolom tidak disetel, tidak perlu justifikasi. - - Kolom <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />, dan <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> digunakan untuk mengonfigurasi pesan yang akan ditampilkan kepada pengguna, saat muncul peringatan ketika hasil pemindaian masih menunjukkan ada masalah. Kolom pesan berisi teks yang akan ditampilkan kepada pengguna dan tidak boleh melebihi 200 karakter. Kolom learn_more_url berisi URL yang disediakan oleh admin. Pengguna dapat mengklik URL untuk mengetahui lebih lanjut penyebab diblokirnya tindakan tersebut. Kolom bahasa bersifat opsional dan berisi bahasa pesan. Kolom bahasa yang kosong atau nilai 'default' menunjukkan pesan yang akan digunakan saat bahasa pengguna tidak memiliki pesan. Kolom tag menentukan jenis pemindaian yang akan menampilkan pesan. Daftar custom_messages dapat memiliki nol atau beberapa entri, dengan tiap entri perlu memiliki pesan yang bukan kosong dan kolom tag. - - Kebijakan ini hanya dapat disetel dari konsol Google Admin.</translation> <translation id="3236046242843493070">Pola URL untuk memungkinkan pemasangan skrip pengguna, aplikasi, dan ekstensi dari</translation> <translation id="3240609035816615922">Kebijakan akses konfigurasi untuk printer.</translation> <translation id="324062325008698789">Mengonfigurasi daftar printer</translation> @@ -2652,11 +2594,6 @@ Saat kebijakan ini tidak ditetapkan, atau diaktifkan, pemeriksaan intersepsi DNS akan dilakukan. Pemeriksaan tidak dilakukan ketika kebijakan dinonaktifkan secara eksplisit.</translation> <translation id="4700190441681139987">Jangan izinkan situs apa pun mengakses sensor</translation> <translation id="4703402283970867140">Aktifkan model redup smart untuk memperpanjang waktu hingga layar diredupkan</translation> -<translation id="4715026656747891013">Daftar setelan layanan Chrome Enterprise Connectors yang akan diterapkan ke <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> Enterprise Connector, yang aktif saat terjadi peristiwa keamanan di Chrome. Ini termasuk keputusan negatif dari analisis Enterprise Connector, penggunaan ulang sandi, navigasi ke halaman yang tidak aman, dan tindakan pengguna lainnya yang sensitif terhadap keamanan. - - Kolom <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> akan mengidentifikasi penyedia layanan laporan yang sesuai dengan setelan dan kolom <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> akan mengidentifikasi peristiwa yang diaktifkan untuk penyedia ini. - - Kebijakan ini hanya dapat disetel dari konsol Google Admin.</translation> <translation id="4722122254122249791">Aktifkan Isolasi Situs untuk asal yang ditetapkan</translation> <translation id="4723122879352880315">Setelan ini memungkinkan pengguna melakukan autentikasi ke proxy terkelola yang diamankan dengan autentikasi NTLM menggunakan kredensial login <ph name="PRODUCT_OS_NAME" />. @@ -4150,13 +4087,6 @@ Menentukan tanda yang harus diterapkan ke <ph name="PRODUCT_NAME" /> saat dimulai. Tanda yang ditentukan hanya diterapkan di layar login. Tanda yang disetel melalui kebijakan ini tidak diterapkan ke dalam sesi pengguna.</translation> <translation id="685769593149966548">Terapkan Mode Terbatas Ketat untuk YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 atau lebih baru</translation> -<translation id="6877233375929006871">Jika kebijakan disetel, Anda dapat menetapkan daftar pola URL yang menentukan situs tempat pengguna dapat mengklik semua halaman peringatan yang ditampilkan <ph name="PRODUCT_NAME" /> saat pengguna membuka situs yang menampilkan error SSL. Pengguna tidak akan dapat mengklik halaman peringatan SSL di situs yang tidak ada di daftar ini. - - Jika <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> disetel ke Nonaktif, kebijakan ini tidak akan berpengaruh. - - Jika kebijakan tidak disetel, <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> akan berlaku untuk semua situs. - - Untuk informasi selengkapnya tentang pola <ph name="URL_LABEL" /> yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> bukanlah nilai yang diterima untuk kebijakan ini.</translation> <translation id="68818134518270542">Menyetel kebijakan akan menentukan aplikasi yang dapat diaktifkan pengguna sebagai aplikasi pencatat di layar kunci <ph name="PRODUCT_OS_NAME" />. Jika aplikasi pilihan berada di layar kunci, elemen UI untuk meluncurkan aplikasi pencatat pilihan akan muncul di layar. Saat diluncurkan, aplikasi dapat membuat jendela di atas layar kunci dan membuat catatan dalam konteks ini. Saat sesi dibuka, aplikasi dapat mengimpor catatan yang dibuat ke sesi pengguna utama. Hanya aplikasi pencatat <ph name="PRODUCT_NAME" /> yang didukung di layar kunci. @@ -4657,11 +4587,6 @@ Jika disetel ke False, update komponen akan dinonaktifkan. Namun, sebagian komponen akan dikecualikan dari kebijakan ini: update komponen apa pun yang tidak berisi kode yang dapat dijalankan, atau tidak mengubah perilaku browser secara signifikan, atau demi alasan keamanan, tidak akan dinonaktifkan. Contoh komponen tersebut meliputi daftar pembatalan sertifikat dan data Safe Browsing. Lihat https://developers.google.com/safe-browsing untuk mendapatkan informasi selengkapnya terkait Safe Browsing.</translation> -<translation id="7563608136659080810">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan kebijakan '<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />'. - - Menyetel kebijakan akan menetapkan server mana yang menjadi tujuan delegasi <ph name="PRODUCT_NAME" />. Pisahkan beberapa nama server dengan koma. Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan. - - Jika kebijakan tidak disetel, <ph name="PRODUCT_NAME" /> tidak akan mendelegasikan kredensial pengguna, meskipun server terdeteksi sebagai intranet.</translation> <translation id="7566878661979235378">Jenis autentikasi login SAML</translation> <translation id="7567373982693549834">Kebijakan ini mengontrol penggunaan aplikasi Android dari sumber yang tidak tepercaya (selain Google Play Store) untuk setiap pengguna.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 07ab9d1..5c73f50 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -1154,23 +1154,6 @@ Se il criterio viene impostato su "UserOnly" (valore 1), gli utenti possono gestire i certificati a livello di utente, ma non quelli a livello di dispositivo.</translation> <translation id="2593762551209145088">Navigazione sicura non è mai attiva.</translation> -<translation id="2600410857944104685">Elenco di impostazioni per i servizi di Chrome Enterprise Connectors da applicare al connettore di Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, che si attiva quando un file viene allegato a Chrome. - - I campi <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> vengono utilizzati per stabilire se il connettore deve inviare un file per l'analisi quando viene allegato a una pagina specifica e quali tag includere nella richiesta di analisi di tale file. Un tag che corrisponde a un pattern "enable" verrà incluso nella richiesta di analisi se l'URL della pagina corrisponde a un pattern associato a tale tag, purché nessun pattern "disable" con lo stesso tag corrisponda all'URL della pagina. L'analisi viene eseguita se almeno un tag deve essere incluso nella richiesta. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica il fornitore di servizi di analisi a cui corrispondono le impostazioni. - - Se il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> viene impostato su 1, Chrome attende di ricevere una risposta dal servizio di analisi prima di concedere alla pagina l'accesso al file. Con qualsiasi altro valore intero, Chrome concede immediatamente l'accesso al file. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controlla se Chrome blocca o autorizza i file protetti tramite password. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controlla se Chrome blocca o autorizza i file troppo grandi per essere analizzati (oltre i 50 MB). - - Il campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> viene utilizzato per determinare per quali tag il connettore deve richiedere all'utente di inserire una giustificazione per ignorare una scansione che risulti in un avviso ignorabile. Se il campo non viene configurato, si presume che non sia richiesta alcuna giustificazione. - - I campi <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> vengono utilizzati per configurare un messaggio da mostrare all'utente quando viene visualizzato un avviso dopo una scansione che ha rilevato dei problemi. Il campo del messaggio contiene il testo da mostrare all'utente e può includere al massimo 200 caratteri. Il campo learn_more_url contiene un URL fornito dall'amministratore su cui l'utente potrà fare clic per ricevere maggiori informazioni fornite dal cliente sul motivo per cui l'azione è stata bloccata. Il campo della lingua è facoltativo e contiene la lingua in cui è scritto il messaggio. Il campo della lingua vuoto o con il valore "default" indica il messaggio da utilizzare se la lingua dell'utente non ne ha uno. Il campo dei tag consente di specificare per quale tipo di scansioni viene visualizzato il messaggio. L'elenco custom_messages può avere alcune voci o nessuna, dove per ognuna di queste i campi del messaggio e dei tag non devono essere vuoti. - - Questo criterio può essere impostato solo dalla Console di amministrazione Google.</translation> <translation id="26023406105317310">Configura account Kerberos</translation> <translation id="2604182581880595781">Configura le norme relative alla funzione Condivisioni file di rete</translation> <translation id="2615240493030733717">Segnala informazioni sul fuso orario</translation> @@ -1382,7 +1365,6 @@ Se il criterio viene configurato, gli utenti non possono modificarlo. Questo criterio è deprecato. Usa il criterio <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">La configurazione del criterio consente di specificare un elenco di nomi host che sono esenti dalla verifica dei criteri HSTS che potrebbero eseguire l'upgrade delle richieste da HTTP a HTTPS. Solo i nomi host con etichetta singola sono consentiti in questo criterio. I nomi host devono essere canonicalizzati: ogni IDN deve essere convertito nel relativo formato A-label e tutte le lettere ASCII devono essere minuscole. Questo criterio viene applicato soltanto ai nomi host specificati e non ai relativi sottodomini.</translation> <translation id="2952347049958405264">Limitazioni:</translation> <translation id="2957047180944828740">Consente di specificare se consentire ai siti web non sicuri di effettuare richieste agli endpoint di rete con un livello di protezione più alto</translation> <translation id="2957506574938329824">Non consentire ad alcun sito di richiedere l'accesso ai dispositivi Bluetooth tramite l'API Web Bluetooth</translation> @@ -1403,7 +1385,6 @@ Per informazioni dettagliate sui pattern URL validi, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Impostazioni del comportamento per i cookie <ph name="ATTRIBUTE_SAMESITE_NAME" /> precedenti</translation> -<translation id="2981998788751314539">Consenti di proseguire dalla pagina di avviso SSL su pagine specifiche</translation> <translation id="2985927503455169394">Usa la modalità predefinita dell'esperienza di onboarding dell'assistente</translation> <translation id="2987155890997901449">Attiva ARC</translation> <translation id="2987227569419001736">Controlla l'utilizzo dell'API Web Bluetooth</translation> @@ -1453,13 +1434,6 @@ Tieni presente che l'autenticazione ambientale è sempre consentita per i profili standard. Se nella versione 81 e nelle versioni successive di <ph name="PRODUCT_NAME" /> questo criterio non viene impostato, l'autenticazione ambientale sarà consentita soltanto nelle sessioni standard.</translation> -<translation id="3021288356473993647">Questo criterio consente di stabilire il controllo degli URL in tempo reale per identificare gli URL non sicuri. - - Se questo criterio non viene impostato o viene impostato su "Disattivato", verranno applicati i controlli predefiniti di Navigazione sicura. I controlli predefiniti di Navigazione sicura possono comunque includere ricerche in tempo reale, a seconda del valore dell'impostazione "Migliora le ricerche e le attività di navigazione" e del valore del criterio UrlKeyedAnonymizedDataCollectionEnabled. - - Se questo criterio viene impostato su "Attivo", gli URL verranno inviati per l'analisi in tempo reale in base ai TdS di Chrome Enterprise. Chrome invierà gli URL a Google Cloud o alle terze parti scelte da te per controllarli in tempo reale. La versione consumer della ricerca in tempo reale di Navigazione sicura verrà disattivata. - - Questo criterio può essere impostato soltanto dalla Console di amministrazione Google.</translation> <translation id="3021562480854470924">Numero di obiettivi consentiti per il rollback</translation> <translation id="3023572080620427845">URL di un file XML che contiene gli URL da caricare su un browser alternativo.</translation> <translation id="302528139996622624">Impostazioni immagini</translation> @@ -1527,23 +1501,6 @@ <translation id="3096595567015595053">Elenco dei plug-in attivati</translation> <translation id="3101501961102569744">Scegli come specificare le impostazioni del server proxy</translation> <translation id="3101709781009526431">Data e ora</translation> -<translation id="3102177185340515316">Elenco di impostazioni per i servizi di Chrome Enterprise Connectors da applicare al connettore di Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, che si attiva quando un file viene scaricato in Chrome. - - I campi <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> vengono utilizzati per stabilire se il connettore deve inviare un file per l'analisi quando viene scaricato da una pagina specifica e quali tag includere nella richiesta di analisi di tale file. Un tag che corrisponde a un pattern "enable" verrà incluso nella richiesta di analisi se l'URL della pagina corrisponde a un pattern associato a tale tag, purché nessun pattern "disable" con lo stesso tag corrisponda all'URL della pagina. L'analisi viene eseguita se almeno un tag deve essere incluso nella richiesta. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica il fornitore di servizi di analisi a cui corrispondono le impostazioni. - - Se il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> viene impostato su 1, Chrome attende di ricevere una risposta dal servizio di analisi prima di concedere l'accesso all'utente al file scaricato. Con qualsiasi altro valore intero, Chrome concede all'utente l'accesso al file immediatamente. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controlla se Chrome blocca o autorizza i file protetti tramite password. - - Il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controlla se Chrome blocca o autorizza i file troppo grandi per essere analizzati (oltre i 50 MB). - - Il campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> viene utilizzato per determinare per quali tag il connettore deve richiedere all'utente di inserire una giustificazione per ignorare una scansione che risulti in un avviso ignorabile. Se il campo non viene configurato, si presume che non sia richiesta alcuna giustificazione. - - I campi <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> vengono utilizzati per configurare un messaggio da mostrare all'utente quando viene visualizzato un avviso dopo una scansione che ha rilevato dei problemi. Il campo del messaggio contiene il testo da mostrare all'utente e può includere al massimo 200 caratteri. Il campo learn_more_url contiene un URL fornito dall'amministratore su cui l'utente potrà fare clic per ricevere maggiori informazioni fornite dal cliente sul motivo per cui l'azione è stata bloccata. Il campo della lingua è facoltativo e contiene la lingua in cui è scritto il messaggio. Il campo della lingua vuoto o con il valore "default" indica il messaggio da utilizzare se la lingua dell'utente non ne ha uno. Il campo dei tag consente di specificare per quale tipo di scansioni viene visualizzato il messaggio. L'elenco custom_messages può avere alcune voci o nessuna, dove per ognuna di queste i campi del messaggio e dei tag non devono essere vuoti. - - Questo criterio può essere impostato solo dalla Console di amministrazione Google.</translation> <translation id="3110248563985502478">Questo criterio è deprecato in M88 e Flash non è più supportato da Chrome. Se il criterio viene impostato su Attivato, i plug-in obsoleti vengono utilizzati come normali plug-in. Se viene impostato su Disattivato, i plug-in obsoleti non vengono utilizzati. Se non viene configurato, agli utenti viene richiesta l'autorizzazione per eseguire i plug-in obsoleti.</translation> @@ -1632,21 +1589,6 @@ Se il criterio non viene configurato, la visualizzazione dell'aggiornamento del firmware <ph name="TPM_FIRMWARE_UPDATE_TPM" /> non è disponibile.</translation> <translation id="3232691106293445015">Per le connessioni HTTP non sicure non è possibile usare l'autenticazione <ph name="BASIC_AUTH" />; sono richieste connessioni HTTPS</translation> -<translation id="3234647080363107863">Elenco di impostazioni per i servizi di Chrome Enterprise Connectors da applicare al connettore di Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, che si attiva quando vengono inseriti dati in Chrome dagli appunti o tramite trascinamento di contenuti web. - - I campi <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> vengono utilizzati per stabilire se il connettore deve inviare dati per l'analisi quando viene inserito in una pagina specifica e quali tag includere nella richiesta di analisi di tali dati. Un tag che corrisponde a un pattern "enable" verrà incluso nella richiesta di analisi se l'URL della pagina corrisponde a un pattern associato a tale tag, purché nessun pattern "disable" con lo stesso tag corrisponda all'URL della pagina. L'analisi viene eseguita se almeno un tag deve essere incluso nella richiesta. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica il fornitore di servizi di analisi a cui corrispondono le impostazioni. - - Se il campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> viene impostato su 1, Chrome attende di ricevere una risposta dal servizio di analisi prima di concedere alla pagina l'accesso ai dati. Con qualsiasi altro valore intero, Chrome concede immediatamente alla pagina l'accesso ai dati. - - Il campo <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> indica le dimensioni minime (in byte) che devono avere i dati inseriti in Chrome per poter essere analizzati. Se il campo non viene impostato, il valore predefinito è 100 byte. - - Il campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> viene utilizzato per determinare per quali tag il connettore deve richiedere all'utente di inserire una giustificazione per ignorare una scansione che risulti in un avviso ignorabile. Se il campo non viene configurato, si presume che non sia richiesta alcuna giustificazione. - - I campi <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> vengono utilizzati per configurare un messaggio da mostrare all'utente quando viene visualizzato un avviso dopo una scansione che ha rilevato dei problemi. Il campo del messaggio contiene il testo da mostrare all'utente e può includere al massimo 200 caratteri. Il campo learn_more_url contiene un URL fornito dall'amministratore su cui l'utente potrà fare clic per ricevere maggiori informazioni fornite dal cliente sul motivo per cui l'azione è stata bloccata. Il campo della lingua è facoltativo e contiene la lingua in cui è scritto il messaggio. Il campo della lingua vuoto o con il valore "default" indica il messaggio da utilizzare se la lingua dell'utente non ne ha uno. Il campo dei tag consente di specificare per quale tipo di scansioni viene visualizzato il messaggio. L'elenco custom_messages può avere alcune voci o nessuna, dove per ognuna di queste i campi del messaggio e dei tag non devono essere vuoti. - - Questo criterio può essere impostato solo dalla Console di amministrazione Google.</translation> <translation id="3236046242843493070">Pattern URL per consentire installazioni di estensioni, applicazioni e script utente da</translation> <translation id="3240609035816615922">Norma di accesso alla configurazione delle stampanti.</translation> <translation id="324062325008698789">Consente di configurare un elenco di stampanti</translation> @@ -2641,11 +2583,6 @@ Se questo criterio non viene impostato o viene attivato, i controlli dell'intercettazione DNS vengono eseguiti. Se viene disattivato, i controlli non vengono eseguiti.</translation> <translation id="4700190441681139987">Non consentire a nessun sito di accedere ai sensori</translation> <translation id="4703402283970867140">Attiva il modello di oscuramento smart per ritardare l'oscuramento dello schermo</translation> -<translation id="4715026656747891013">Elenco di impostazioni per i servizi di Chrome Enterprise Connectors da applicare al connettore di Enterprise <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />, che si attiva quando si verifica un evento di sicurezza in Chrome. Sono inclusi risultati negativi dei connettori di Enterprise di analisi, riutilizzo delle password, visite di pagine non sicure e altre azioni dell'utente critiche dal punto di vista della sicurezza. - - Il campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica il fornitore di servizi di rapporto a cui corrispondono le impostazioni, mentre il campo <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> identifica quali eventi sono attivati per questo fornitore. - - Questo criterio può essere impostato solo dalla Console di amministrazione Google.</translation> <translation id="4722122254122249791">Attiva isolamento dei siti per origini specificate </translation> <translation id="4723122879352880315">Questa impostazione consente agli utenti di eseguire l'autenticazione su un proxy gestito protetto tramite l'autenticazione NTLM usando le credenziali di accesso di <ph name="PRODUCT_OS_NAME" />. @@ -4139,13 +4076,6 @@ Consente di specificare i flag da applicare all'avvio di <ph name="PRODUCT_NAME" />. I flag specificati vengono applicati soltanto alla schermata di accesso. I flag impostati tramite questa norma non vengono applicati anche alle sessioni utente.</translation> <translation id="685769593149966548">Imponi il livello massimo della Modalità con restrizioni per YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 o versioni successive</translation> -<translation id="6877233375929006871">Se il criterio viene configurato, puoi impostare un elenco di pattern URL che specificano i siti in cui gli utenti possono fare clic nelle pagine di avviso mostrate in <ph name="PRODUCT_NAME" /> quando visitano siti che presentano errori SSL. Gli utenti non potranno fare clic nelle pagine di avviso SSL su siti non presenti in questo elenco. - - Se <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> è impostato su Disattivato, questo criterio non ha effetto. - - Se il criterio non viene configurato, <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> si applica per tutti i siti. - - Per informazioni dettagliate sui pattern <ph name="URL_LABEL" /> validi, visita la pagina https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> non è un valore accettato per questo criterio.</translation> <translation id="68818134518270542">La configurazione del criterio consente di specificare le app che gli utenti possono attivare come app per scrivere note nella schermata di blocco di <ph name="PRODUCT_OS_NAME" />. Se l'app preferita si trova nella schermata di blocco, sullo schermo viene visualizzato un elemento UI per l'avvio di tale app. Quando viene avviata, l'app può creare una finestra sopra la schermata di blocco e creare note in questo contesto. L'app può importare le note create nella sessione dell'utente principale quando la sessione è sbloccata. Nella schermata di blocco sono supportate solo le app per scrivere note di <ph name="PRODUCT_NAME" />. @@ -4647,11 +4577,6 @@ Se viene impostata su False, gli aggiornamenti dei componenti vengono disattivati. Tuttavia, alcuni componenti sono esclusi da questa norma: gli aggiornamenti dei componenti che non contengono codice eseguibile, che non alterano in modo significativo il comportamento del browser o che sono fondamentali per la sicurezza non vengono disattivati. Esempi di tali componenti sono gli elenchi di revoche di certificati e i dati di Navigazione sicura. Visita il sito https://developers.google.com/safe-browsing per avere ulteriori informazioni sulla funzione Navigazione sicura.</translation> -<translation id="7563608136659080810">Questo criterio è deprecato. Usa il criterio "<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />". - - La configurazione del criterio consente di assegnare i server a cui <ph name="PRODUCT_NAME" /> può delegare le credenziali utente. Se ci sono più server, separane i nomi utilizzando virgole. I caratteri jolly (<ph name="WILDCARD_VALUE" />) sono consentiti. - - Se il criterio non viene configurato, <ph name="PRODUCT_NAME" /> non delega le credenziali utente, anche se un server viene rilevato come Intranet.</translation> <translation id="7566878661979235378">Tipo di autenticazione per gli accessi SAML</translation> <translation id="7567373982693549834">Questo criterio consente di controllare l'utilizzo delle app Android di fonti non attendibili (diverse dal Google Play Store) per ogni utente.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index bc51d48..e7fa466 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -1132,23 +1132,6 @@ このポリシーを「UserOnly」(値 1)に設定した場合、ユーザーはユーザー証明書を管理できますが、デバイス全体の証明書を管理することはできません。</translation> <translation id="2593762551209145088">セーフ ブラウジングを常に無効にする。</translation> -<translation id="2600410857944104685"><ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise コネクタ サービス設定のリストで、Chrome にファイルが添付されている場合に呼び出されます。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> フィールドは、特定のページに添付されているファイルを分析のためコネクタが送信すべきかどうかと、そのファイルの分析リクエストにどのタグを含めるかをコネクタで判別する際に使用されます。「有効」パターンに該当するタグは、ページの URL がそのタグに関連付けられているパターンと一致し、同じタグの「無効」パターンとは一致しない場合に分析リクエストに含められます。分析は、リクエストにタグが少なくとも 1 つ含まれる場合に行われます。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> フィールドでは、この設定が対応している分析サービス プロバイダを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> フィールドを 1 に設定した場合、Chrome は分析サービスからの応答を待ってから、ページにファイルへのアクセスを許可します。その他の整数値を設定した場合、Chrome はページにファイルへのアクセスをただちに許可します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> フィールドでは、パスワードで保護されているファイルをブロックするか許可するかを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> フィールドでは、分析可能なサイズより大きいファイル(50 MB 以上)をブロックするか許可するかを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> フィールドでは、どのタグについて、コネクタでスキャン(結果として生じる警告がバイパス可能なもの)をバイパスする理由の入力をユーザーに要求するかを指定します。このフィールドを設定しない場合、理由は不要とみなされます。 - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> フィールドでは、スキャンの結果に問題がある場合に、ユーザーに表示する警告メッセージを設定します。message フィールドでは、ユーザーに表示するテキストを半角 200 文字以内で指定します。learn_more_url フィールドでは、管理者が提供する URL を指定します。ユーザーはこの URL をクリックして、操作がブロックされた理由について、お客様から提供された情報を確認できます。language フィールドでは、メッセージの言語を指定します(省略可)。このフィールドを空白にするか、「default」の値を指定した場合、ユーザーの言語のメッセージがないときは、デフォルトのメッセージが使用されます。tag フィールドでは、メッセージを表示するスキャンの種類を指定します。custom_messages リストには、0 以上のエントリを指定できます。各エントリには、空白以外のメッセージと tag フィールドを含める必要があります。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="26023406105317310">Kerberos アカウントを設定する</translation> <translation id="2604182581880595781">ネットワーク ファイル共有に関連するポリシーを設定します。</translation> <translation id="2615240493030733717">タイムゾーン情報を報告する</translation> @@ -1360,7 +1343,6 @@ このポリシーを設定した場合、ユーザーはこの設定を変更できません。 このポリシーはサポートが終了しています。代わりに <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> を使用してください。</translation> -<translation id="2949765875529121431">このポリシーでは、HTTP から HTTPS にリクエストがアップグレードされる可能性がある HSTS ポリシー チェックから除外するホスト名のリストを指定できます。このポリシーでは、単一ラベルのホスト名のみが許可されます。ホスト名は正規化する必要があります。IDN はすべて A ラベル形式に変換し、ASCII 文字列はすべて小文字にする必要があります。ポリシーは指定したホスト名にのみ適用され、これらのホスト名のサブドメインには適用されません。</translation> <translation id="2952347049958405264">制限事項:</translation> <translation id="2957047180944828740">より限定されたプライベート ネットワークのエンドポイントに対して、安全でないウェブサイトからのリクエスト実行を許可するかどうかを指定します</translation> <translation id="2957506574938329824">すべてのサイトに対して Web Bluetooth API による Bluetooth デバイスへのアクセスを許可しない</translation> @@ -1381,7 +1363,6 @@ 有効な URL パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。</translation> <translation id="2976429807269247880">Cookie に関する以前の <ph name="ATTRIBUTE_SAMESITE_NAME" /> 動作の設定</translation> -<translation id="2981998788751314539">特定のページで SSL 警告ページのクリックスルーを許可します</translation> <translation id="2985927503455169394">アシスタントのオンボーディング エクスペリエンスでデフォルトのモードを使用する</translation> <translation id="2987155890997901449">ARC を有効にする</translation> <translation id="2987227569419001736">Web Bluetooth API の使用を管理する</translation> @@ -1431,11 +1412,6 @@ なお、標準のプロフィールでは常にアンビエント認証が許可されます。 <ph name="PRODUCT_NAME" /> のバージョン 81 以降では、ポリシーを未設定のままにした場合、通常のセッションでのみアンビエント認証が有効になります。</translation> -<translation id="3021288356473993647">このポリシーでは、安全でない URL を検出するリアルタイムの URL チェックを管理します。 - - このポリシーを未設定のままにするか [無効] に設定した場合は、一般ユーザー向けのセーフ ブラウジング チェックが行われます。一般ユーザー向けのセーフ ブラウジングでも、[検索とブラウジングを改善する] の設定の値と UrlKeyedAnonymizedDataCollectionEnabled ポリシーの値に基づいて、リアルタイムのチェックが行われる可能性があります。このポリシーを [有効] に設定した場合、URL は企業の利用規約に基づき、リアルタイムのチェックを行うため送信されます。URL は Google Cloud または指定された第三者に送信され、リアルタイムのチェックが行われます。一般ユーザー向けのセーフ ブラウジングによるリアルタイムのチェックはオフになります。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="3021562480854470924">ロールバックできるマイルストーンの数</translation> <translation id="3023572080620427845">代替ブラウザで読み込む URL のリストを含む XML ファイルの URL です。</translation> <translation id="302528139996622624">画像設定</translation> @@ -1503,23 +1479,6 @@ <translation id="3096595567015595053">有効なプラグインのリスト</translation> <translation id="3101501961102569744">プロキシ サーバー設定の指定方法を選択する</translation> <translation id="3101709781009526431">日時</translation> -<translation id="3102177185340515316"><ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise コネクタ サービス設定のリストで、Chrome でファイルがダウンロードされた場合に呼び出されます。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> フィールドは、特定のページからダウンロードされたファイルを分析のためコネクタが送信すべきかどうかと、そのファイルの分析リクエストにどのタグを含めるかをコネクタで判別する際に使用されます。「有効」パターンに該当するタグは、ページの URL がそのタグに関連付けられているパターンと一致し、同じタグの「無効」パターンとは一致しない場合に分析リクエストに含められます。分析は、リクエストにタグが少なくとも 1 つ含まれる場合に行われます。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> フィールドでは、この設定が対応している分析サービス プロバイダを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> フィールドを 1 に設定した場合、Chrome は分析サービスからの応答を待ってから、ダウンロードされたファイルへのユーザーのアクセスを許可します。その他の整数値を設定した場合、Chrome はユーザーにファイルへのアクセスを直ちに許可します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> フィールドでは、パスワードで保護されているファイルをブロックするか許可するかを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> フィールドでは、分析可能なサイズより大きいファイル(50 MB 以上)をブロックするか許可するかを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> フィールドでは、どのタグについて、コネクタでスキャン(結果として生じる警告がバイパス可能なもの)をバイパスする理由の入力をユーザーに要求するかを指定します。このフィールドを設定しない場合、理由は不要とみなされます。 - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> フィールドでは、スキャンの結果に問題がある場合に、ユーザーに表示する警告メッセージを設定します。message フィールドでは、ユーザーに表示するテキストを半角 200 文字以内で指定します。learn_more_url フィールドでは、管理者が提供する URL を指定します。ユーザーはこの URL をクリックして、操作がブロックされた理由について、お客様から提供された情報を確認できます。language フィールドでは、メッセージの言語を指定します(省略可)。このフィールドを空白にするか、「default」の値を指定した場合、ユーザーの言語のメッセージがないときは、デフォルトのメッセージが使用されます。tag フィールドでは、メッセージを表示するスキャンの種類を指定します。custom_messages リストには、0 以上のエントリを指定できます。各エントリには、空白以外のメッセージと tag フィールドを含める必要があります。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="3110248563985502478">このポリシーは M88 でサポートが終了しています。Flash は Chrome でご利用いただけなくなりました。このポリシーを有効に設定した場合、古いプラグインが通常のプラグインとして使用されます。このポリシーを無効に設定した場合、古いプラグインは使用されません。 このポリシーを未設定のままにした場合、古いプラグインの実行の許可を確認するメッセージがユーザーに表示されます。</translation> @@ -1606,21 +1565,6 @@ このポリシーを未設定のままにした場合、<ph name="TPM_FIRMWARE_UPDATE_TPM" /> ファームウェアの更新は行われません。</translation> <translation id="3232691106293445015">保護されていない HTTP 接続で <ph name="BASIC_AUTH" /> 認証の使用を禁止し、HTTPS を必須とする</translation> -<translation id="3234647080363107863"><ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise Connectors サービス設定のリストで、Chrome でクリップボードからデータが入力された場合、またはウェブ コンテンツがドラッグ&ドロップされた場合に呼び出されます。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> フィールドは、特定のページに入力されたデータをコネクタで分析のため送信すべきかどうかと、そのデータの分析リクエストにどのタグを含めるかを判別する際に使用されます。「有効」パターンに該当するタグは、ページの URL がそのタグに関連付けられているパターンと一致し、同じタグの「無効」パターンとは一致しない場合に分析リクエストに含められます。分析は、リクエストにタグが少なくとも 1 つ含まれる場合に行われます。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> フィールドでは、この設定が対応している分析サービス プロバイダを指定します。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> フィールドを 1 に設定した場合、Chrome は分析サービスからの応答を待ってから、ページにデータへのアクセスを許可します。その他の整数値を設定した場合、Chrome はページにデータへのアクセスをただちに許可します。 - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> フィールドは、Chrome に入力されたデータの最小サイズ(バイト数)がこの値以上でないとスキャンできないことを示します。このフィールドを未設定のままにした場合は、デフォルト値の 100 バイトが使用されます。 - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> フィールドでは、どのタグについて、コネクタでスキャン(結果として生じる警告がバイパス可能なもの)をバイパスする理由の入力をユーザーに要求するかを指定します。このフィールドを設定しない場合、理由は不要とみなされます。 - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> フィールドでは、スキャンの結果に問題がある場合に、ユーザーに表示する警告メッセージを設定します。message フィールドでは、ユーザーに表示するテキストを半角 200 文字以内で指定します。learn_more_url フィールドでは、管理者が提供する URL を指定します。ユーザーはこの URL をクリックして、操作がブロックされた理由について、お客様から提供された情報を確認できます。language フィールドでは、メッセージの言語を指定します(省略可)。このフィールドを空白にするか、「default」の値を指定した場合、ユーザーの言語のメッセージがないときは、デフォルトのメッセージが使用されます。tag フィールドでは、メッセージを表示するスキャンの種類を指定します。custom_messages リストには、0 以上のエントリを指定できます。各エントリには、空白以外のメッセージと tag フィールドを含める必要があります。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="3236046242843493070">拡張機能、アプリ、ユーザー スクリプトのインストールを許可する URL パターン</translation> <translation id="3240609035816615922">プリンタの設定へのアクセス ポリシー</translation> <translation id="324062325008698789">プリンタのリストを設定します</translation> @@ -2608,11 +2552,6 @@ このポリシーを設定しないか有効に設定した場合は、DNS 傍受チェックが実行されます。明示的に無効に設定した場合、DNS 傍受チェックは実行されません。</translation> <translation id="4700190441681139987">どのサイトにもセンサーへのアクセスを許可しない</translation> <translation id="4703402283970867140">スマート消灯モデルを有効にして、画面が暗くなるまでの時間を延長する</translation> -<translation id="4715026656747891013"><ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> Enterprise コネクタに適用する Chrome Enterprise コネクタ サービス設定のリストで、Chrome でセキュリティ イベントが発生した場合に呼び出されます。たとえば、Enterprise コネクタの分析により安全でないと判定された場合や、パスワードの再使用、安全でないページへの移動、その他セキュリティに関わるユーザー操作が検出された場合などです。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> では、この設定が対応しているレポート サービス プロバイダを指定します。<ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> では、そのプロバイダに対して有効にするイベントを指定します。 - - このポリシーは Google 管理コンソールからのみ設定できます。</translation> <translation id="4722122254122249791">指定した発行元に対してサイト分離を有効にする</translation> <translation id="4723122879352880315">NTLM 認証で保護されている管理対象プロキシに対して、ユーザーが <ph name="PRODUCT_OS_NAME" /> のログイン認証情報を使って認証を行うことを許可します。 @@ -4060,13 +3999,6 @@ <ph name="PRODUCT_NAME" /> の起動時に適用するフラグを指定します。指定したフラグはログイン画面にのみ適用されます。このポリシーで設定したフラグはユーザーのセッションには影響しません。</translation> <translation id="685769593149966548">YouTube で制限付きモード「強」を強制する</translation> <translation id="686079137349561371">Microsoft Windows 7 以降</translation> -<translation id="6877233375929006871">このポリシーでは、ユーザーが SSL エラーのあるサイトに移動したとき、<ph name="PRODUCT_NAME" /> に表示される警告ページをクリックスルーできるサイトの URL パターンリストを指定できます。指定した場合、このリストにないサイトでは、SSL 警告ページをクリックスルーできなくなります。 - - <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> が無効な場合、このポリシーは効力を持ちません。 - - このポリシーを未設定のままにした場合、<ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> がすべてのサイトに適用されます。 - - 有効な <ph name="URL_LABEL" /> パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。このポリシーの値に「<ph name="WILDCARD_VALUE" />」は使用できません。</translation> <translation id="68818134518270542">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> のロック画面でメモアプリとして有効にできるアプリを指定できます。任意のメモアプリをロック画面に設定すると、そのアプリを起動するための UI 要素が画面に表示されます。アプリを起動すると、ロック画面の上部にウィンドウが表示され、このコンテキストにメモを作成できます。アプリを使用して、作成したメモをメインのユーザー セッションに読み込むことができます(セッションがロックされていない場合)。ロック画面でサポートされているのは <ph name="PRODUCT_NAME" /> のメモアプリのみです。このポリシーを設定すると、アプリの拡張機能 ID がポリシーのリスト値に含まれている場合に、ユーザーはロック画面でアプリを有効にできます。このため、このポリシーを空のリストに設定すると、メモアプリはロック画面で無効になります。ポリシーでアプリ ID を指定しても、ユーザーがロック画面でそのアプリをメモアプリとして有効にできるとは限りません。たとえば、<ph name="PRODUCT_NAME" /> 61 では、使用できる一連のアプリに関して、さらにプラットフォームによる制限が適用されます。このポリシーを未設定のままにした場合、ユーザーがロック画面で有効にできる一連のアプリに関して、ポリシーを通じて適用される制限はありません。</translation> <translation id="6889123056995503704">ユーザーがチャンネル ダウングレードの動作を決定する</translation> <translation id="6894178810167845842">新しいタブページ URL</translation> @@ -4553,11 +4485,6 @@ このポリシーが false に設定されている場合、コンポーネントの更新は無効になります。ただし、一部のコンポーネント(実行可能コードを含まないコンポーネント、ブラウザの動作を著しく変更しないコンポーネント、セキュリティ上重要なコンポーネント)はこのポリシーの適用外で、これらのコンポーネントの更新は無効にはなりません。 適用外のコンポーネントの具体的な例としては、証明書失効リストやセーフ ブラウジング データが挙げられます。 セーフ ブラウジングについて詳しくは、https://developers.google.com/safe-browsing をご覧ください。</translation> -<translation id="7563608136659080810">このポリシーはサポートが終了しています。代わりに <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> ポリシーを使用してください。 - - このポリシーでは、<ph name="PRODUCT_NAME" /> が委任できるサーバーを割り当てることができます。複数のサーバー名を入力するときはカンマで区切ります。ワイルドカード(<ph name="WILDCARD_VALUE" />)を使用できます。 - - このポリシーを未設定のままにした場合、サーバーがイントラネット上で検出されたとしても、<ph name="PRODUCT_NAME" /> はユーザーの認証情報を委任しません。</translation> <translation id="7566878661979235378">SAML ログイン認証タイプ</translation> <translation id="7567373982693549834">このポリシーでは、信頼できない提供元(Google Play ストア以外の提供元)の Android アプリの使用をユーザー単位で管理します。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 7d91507..fd252c2 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -390,6 +390,11 @@ 이 정책이 사용 중지되거나 설정되지 않으면 Kerberos 계정 설정이 사용 중지됩니다. Kerberos 계정을 추가할 수 없으며 Kerberos 인증도 사용할 수 없습니다. 기존의 모든 Kerberos 계정은 삭제되며 저장된 모든 비밀번호도 삭제됩니다.</translation> <translation id="1561424797596341174">정책은 원격 액세스 호스트의 디버그 빌드를 무시합니다.</translation> <translation id="1561967320164410511">개별 인증을 위한 U2F 및 확장 프로그램</translation> +<translation id="1567718448549957373">정책을 사용 설정하거나 설정하지 않으면 비보안 HTTP를 통해 수신된 <ph name="BASIC_AUTH" /> 인증 시도가 허용됩니다. + + 사용 중지하면 <ph name="BASIC_AUTH" /> 인증 스키마를 사용한 비보안 HTTP 요청이 금지되고 보안 HTTPS만 허용됩니다. + + <ph name="AUTH_SCHEMES_POLICY_NAME" /> 정책이 설정되어 있고 <ph name="BASIC_AUTH" />을 포함하지 않으면 이 정책이 무시되며 <ph name="BASIC_AUTH" />이 항상 금지됩니다.</translation> <translation id="1575015449587326319">OnFileDownloaded Chrome Enterprise Connector 설정 정책</translation> <translation id="1583248206450240930">기본으로 <ph name="PRODUCT_FRAME_NAME" /> 사용</translation> <translation id="1588240398285670601">브라우저 설정</translation> @@ -1154,23 +1159,6 @@ 정책을 'UserOnly'(값 1)로 설정하면 사용자가 사용자 인증서를 관리할 수 있지만 기기 수준 인증서는 관리할 수 없습니다.</translation> <translation id="2593762551209145088">세이프 브라우징이 활성화되지 않습니다.</translation> -<translation id="2600410857944104685"><ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise 커넥터에 적용할 Chrome Enterprise 커넥터 서비스 설정의 목록으로, 파일이 Chrome에 첨부될 때 실행됩니다. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 필드는 파일이 특정 페이지에 첨부되었을 때 커넥터가 분석을 위해 파일을 전송할지와 파일 분석 요청에 어떤 태그를 포함할지 결정하는 데 사용됩니다. 페이지 URL이 특정 태그와 연결된 패턴과 일치하면 'enable' 패턴에 해당하는 태그가 분석 요청에 포함되지만, 이 태그의 'disable' 패턴 중에서 페이지 URL과 일치하는 것이 없어야 합니다. 하나 이상의 태그가 요청에 포함되면 분석이 실시됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정이 해당하는 분석 서비스 제공업체를 나타냅니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 필드가 1로 설정되면 Chrome에서 페이지에 파일 액세스 권한을 부여하기 전에 분석 서비스의 응답을 받을 때까지 대기합니다. 다른 정수 값으로 설정되면 Chrome에서 페이지에 파일 액세스 권한을 즉시 부여합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 필드는 Chrome에서 비밀번호로 보호된 파일을 차단 또는 허용할지 결정합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 필드는 Chrome에서 크기가 커서 분석하기 어려운 파일(50MB 이상)을 차단 또는 허용할지 결정합니다. - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 필드는 사용자가 우회 가능 경고가 표시되는 스캔을 우회하려면 커넥터에서 근거를 입력해야 하는 태그를 결정하는 데 사용됩니다. 필드를 설정하지 않으면 근거가 필요하지 않은 것으로 간주합니다. - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 및 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 필드는 스캔에 깔끔하지 않은 수직선이 나타난 후 경고가 표시될 경우 사용자에게 표시할 메시지를 구성하는 데 사용됩니다. message 필드에는 사용자를 표시하는 텍스트가 포함되며 최대 200자까지 포함할 수 있습니다. learn_more_url 필드에는 관리자가 제공한 URL이 포함되며 이 URL은 작업이 차단된 이유에 관해 고객이 제공한 정보를 추가로 가져오기 위해 사용자가 클릭할 수 있습니다. language 필드는 선택사항이며 여기에는 메시지의 언어가 포함됩니다. language 필드가 비어 있거나 값이 'default'이면 사용자의 언어로는 메시지가 없는 경우에 사용될 메시지를 나타냅니다. tag 필드는 메시지가 표시될 스캔 유형을 지정합니다. custom_messages 목록에는 0개 이상의 항목이 포함될 수 있으며, 각 항목에는 비어 있지 않은 message와 tag 필드가 있어야 합니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="26023406105317310">Kerberos 계정 구성</translation> <translation id="2604182581880595781">네트워크 파일 공유 관련 정책을 구성합니다.</translation> <translation id="2615240493030733717">시간대 정보 보고</translation> @@ -1382,7 +1370,6 @@ 정책을 설정하면 사용자가 변경할 수 없습니다. 이 정책은 지원 중단되었으므로 <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> 정책을 대신 사용하세요.</translation> -<translation id="2949765875529121431">정책을 설정하면 http에서 https로 요청을 업그레이드할 수 있는 HSTS 정책 검사에서 제외되는 호스트 이름의 목록이 지정됩니다. 정책에는 단일 라벨 호스트 이름만 허용됩니다. 호스트 이름은 표준화되어야 합니다. 모든 IDN은 A 라벨 형식으로 변환되어야 하며 모든 ASCII 문자는 소문자여야 합니다. 정책은 지정된 특정 호스트 이름에만 적용되며 지정된 이름의 하위 도메인에는 적용되지 않습니다.</translation> <translation id="2952347049958405264">제한사항:</translation> <translation id="2957047180944828740">안전하지 않은 웹사이트가 더 높은 수준의 비공개 네트워크 엔드포인트에 요청할 수 있도록 허용할지 지정</translation> <translation id="2957506574938329824">어떤 사이트든지 Web Bluetooth API를 통해 블루투스 기기에 대한 액세스를 요청하도록 허용하지 않습니다.</translation> @@ -1403,7 +1390,6 @@ 올바른 URL 패턴을 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참조하세요.</translation> <translation id="2976429807269247880">레거시 <ph name="ATTRIBUTE_SAMESITE_NAME" /> 쿠키 동작 설정</translation> -<translation id="2981998788751314539">특정 페이지에서 SSL 경고 페이지로부터 진행을 허용</translation> <translation id="2985927503455169394">어시스턴트 온보딩 환경의 기본 모드 사용</translation> <translation id="2987155890997901449">ARC 사용</translation> <translation id="2987227569419001736">Web Bluetooth API 사용 조정</translation> @@ -1453,13 +1439,6 @@ 일반 프로필에서는 앰비언트 인증을 항상 사용할 수 있습니다. <ph name="PRODUCT_NAME" /> 버전 81 이상에서는 정책을 설정하지 않으면 일반 세션에서만 앰비언트 인증이 허용됩니다.</translation> -<translation id="3021288356473993647">이 정책은 안전하지 않은 URL을 파악하기 위해 실시간 URL 확인을 제어합니다. - - 정책을 설정하지 않거나 '사용 중지됨'으로 설정하면 일반 세이프 브라우징 확인이 적용됩니다. '검색 및 탐색 기능 개선' 설정값과 UrlKeyedAnonymizedDataCollectionEnabled 정책값에 따라 일반 세이프 브라우징 확인에는 실시간 검색이 계속해서 포함될 수 있습니다. - - 정책을 '사용 설정됨'으로 설정하면 URL이 전송되어 기업 서비스 약관에 따라 실시간으로 검사됩니다. 결국 실시간 확인을 위해 Chrome에서 URL을 Google Cloud 또는 선택한 타사로 전송하게 됩니다. 일반 버전의 세이프 브라우징 실시간 검색이 꺼집니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="3021562480854470924">허용된 주요 롤백의 수</translation> <translation id="3023572080620427845">대체 브라우저에서 로드할 URL이 포함된 XML 파일의 URL입니다.</translation> <translation id="302528139996622624">이미지 설정</translation> @@ -1489,6 +1468,7 @@ 이 정책은 지원 중단되었으므로 <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> 정책을 대신 사용하세요.</translation> <translation id="3030000825273123558">통계 보고 사용</translation> +<translation id="3032322294267258117">SAML 없이 GAIA를 통해 인증된 사용자 설정을 제어합니다.</translation> <translation id="3038323923255997294"><ph name="PRODUCT_NAME" /> 종료 후에도 백그라운드 앱을 계속 실행</translation> <translation id="3041707370546071653">Kerberos 비밀번호를 기억할지를 나타냅니다. 설정하지 않거나 False로 설정할 경우 비밀번호는 기억되지 않습니다. 비밀번호가 지정되지 않은 경우 무시됩니다.</translation> <translation id="3041887182529293512">정책을 True로 설정하거나 설정하지 않으면 사용자의 방문 기록, 관심분야 또는 위치를 기반으로 자동 생성된 콘텐츠 추천이 새 탭 페이지에 표시됩니다. @@ -1526,23 +1506,6 @@ <translation id="3096595567015595053">사용 가능한 플러그인 목록</translation> <translation id="3101501961102569744">프록시 서버 설정을 지정하는 방법 선택</translation> <translation id="3101709781009526431">날짜 및 시간</translation> -<translation id="3102177185340515316"><ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise 커넥터에 적용할 Chrome Enterprise 커넥터 서비스 설정의 목록으로, 파일이 Chrome에서 다운로드될 때 실행됩니다. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 필드는 파일이 특정 페이지에서 다운로드되었을 때 커넥터가 분석을 위해 파일을 전송할지와 파일 분석 요청에 어떤 태그를 포함할지 결정하는 데 사용됩니다. 페이지 URL이 특정 태그와 연결된 패턴과 일치하면 'enable' 패턴에 해당하는 태그가 분석 요청에 포함되지만, 이 태그의 'disable' 패턴 중에서 페이지 URL과 일치하는 것이 없어야 합니다. 하나 이상의 태그가 요청에 포함되면 분석이 실시됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정이 해당하는 분석 서비스 제공업체를 나타냅니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 필드가 1로 설정되면 Chrome에서 사용자에게 다운로드된 파일 액세스 권한을 부여하기 전에 분석 서비스의 응답을 받을 때까지 대기합니다. 다른 정수 값으로 설정되면 Chrome에서 사용자에게 파일 액세스 권한을 즉시 부여합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 필드는 Chrome에서 비밀번호로 보호된 파일을 차단 또는 허용할지 결정합니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 필드는 Chrome에서 크기가 커서 분석하기 어려운 파일(50MB 이상)을 차단 또는 허용할지 결정합니다. - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 필드는 사용자가 우회 가능 경고가 표시되는 스캔을 우회하려면 커넥터에서 근거를 입력해야 하는 태그를 결정하는 데 사용됩니다. 필드를 설정하지 않으면 근거가 필요하지 않은 것으로 간주합니다. - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 및 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 필드는 스캔에 깔끔하지 않은 수직선이 나타난 후 경고가 표시될 경우 사용자에게 표시할 메시지를 구성하는 데 사용됩니다. message 필드에는 사용자를 표시하는 텍스트가 포함되며 최대 200자까지 포함할 수 있습니다. learn_more_url 필드에는 관리자가 제공한 URL이 포함되며 이 URL은 작업이 차단된 이유에 관해 고객이 제공한 정보를 추가로 가져오기 위해 사용자가 클릭할 수 있습니다. language 필드는 선택사항이며 여기에는 메시지의 언어가 포함됩니다. language 필드가 비어 있거나 값이 'default'이면 사용자의 언어로는 메시지가 없는 경우에 사용될 메시지를 나타냅니다. tag 필드는 메시지가 표시될 스캔 유형을 지정합니다. custom_messages 목록에는 0개 이상의 항목이 포함될 수 있으며, 각 항목에는 비어 있지 않은 message와 tag 필드가 있어야 합니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="3110248563985502478">이 정책은 M88부터 지원 중단되며 Chrome에서는 플래시가 더 이상 지원되지 않습니다. 정책을 사용으로 설정하면 오래된 버전의 플러그인이 표준 플러그인으로 사용됩니다. 사용 안함으로 설정하면 오래된 버전의 플러그인이 사용되지 않습니다. 설정하지 않으면 오래된 버전의 플러그인을 실행하도록 허용할지 묻는 메시지가 사용자에게 표시됩니다.</translation> @@ -1631,21 +1594,6 @@ 정책을 설정하지 않으면 <ph name="TPM_FIRMWARE_UPDATE_TPM" /> 펌웨어 업데이트가 제공되지 않습니다.</translation> <translation id="3232691106293445015">비보안 HTTP 연결에는 <ph name="BASIC_AUTH" /> 인증 사용이 허용되지 않고 HTTPS 연결이 요구됨</translation> -<translation id="3234647080363107863"><ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise 커넥터에 적용할 Chrome Enterprise 커넥터 서비스 설정의 목록으로, 클립보드에서 Chrome으로 데이터가 입력되거나 웹 콘텐츠가 드래그 앤 드롭으로 Chrome에 입력될 때 실행됩니다. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 필드는 데이터가 특정 페이지에서 입력되었을 때 커넥터가 분석을 위해 데이터를 전송할지와 데이터 분석 요청에 어떤 태그를 포함할지 결정하는 데 사용됩니다. 페이지 URL이 특정 태그와 연결된 패턴과 일치하면 'enable' 패턴에 해당하는 태그가 분석 요청에 포함되지만, 이 태그의 'disable' 패턴 중에서 페이지 URL과 일치하는 것이 없어야 합니다. 하나 이상의 태그가 요청에 포함되면 분석이 실시됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정이 해당하는 분석 서비스 제공업체를 나타냅니다. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 필드가 1로 설정되면 Chrome에서 페이지에 데이터 액세스 권한을 부여하기 전에 분석 서비스의 응답을 받을 때까지 대기합니다. 다른 정수 값으로 설정되면 Chrome에서 페이지에 데이터 액세스 권한을 즉시 부여합니다. - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> 필드는 Chrome에 입력된 데이터를 스캔하기 위해 같거나 초과해야 하는 최소 크기(바이트)를 나타냅니다. 필드가 설정되지 않을 경우 기본값은 100바이트입니다. - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 필드는 사용자가 우회 가능 경고가 표시되는 스캔을 우회하려면 커넥터에서 근거를 입력해야 하는 태그를 결정하는 데 사용됩니다. 필드를 설정하지 않으면 근거가 필요하지 않은 것으로 간주합니다. - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 및 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 필드는 스캔에 깔끔하지 않은 수직선이 나타난 후 경고가 표시될 경우 사용자에게 표시할 메시지를 구성하는 데 사용됩니다. message 필드에는 사용자를 표시하는 텍스트가 포함되며 최대 200자까지 포함할 수 있습니다. learn_more_url 필드에는 관리자가 제공한 URL이 포함되며 이 URL은 작업이 차단된 이유에 관해 고객이 제공한 정보를 추가로 가져오기 위해 사용자가 클릭할 수 있습니다. language 필드는 선택사항이며 여기에는 메시지의 언어가 포함됩니다. language 필드가 비어 있거나 값이 'default'이면 사용자의 언어로는 메시지가 없는 경우에 사용될 메시지를 나타냅니다. tag 필드는 메시지가 표시될 스캔 유형을 지정합니다. custom_messages 목록에는 0개 이상의 항목이 포함될 수 있으며, 각 항목에는 비어 있지 않은 message와 tag 필드가 있어야 합니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="3236046242843493070">확장 프로그램, 앱, 사용자 스크립트 설치 등을 허용하는 URL 패턴</translation> <translation id="3240609035816615922">프린터 설정 액세스 정책</translation> <translation id="324062325008698789">프린터 목록 구성</translation> @@ -2487,6 +2435,15 @@ <translation id="4510923771103268849">사용자는 Crostini 컨테이너에 대한 루트 액세스 권한을 가질 수 있음</translation> <translation id="4515404363392014383">신뢰할 수 있는 소스에서 세이프 브라우징을 사용할 수 있도록 허용</translation> <translation id="4518251772179446575">사이트에서 사용자의 실제 위치를 추적할 때마다 확인</translation> +<translation id="4521193243799782295">로그인하는 동안 <ph name="PRODUCT_OS_NAME" />는 서버(온라인) 또는 캐시된 비밀번호(오프라인)를 사용하여 인증할 수 있습니다. + + 이 정책 값을 -1로 설정하면 정책에서는 온라인 인증을 시행하지 않으며, 정책이 아닌 다른 이유로 온라인 로그인이 시행될 때까지 사용자가 오프라인 인증을 사용하도록 허용합니다. 정책 값을 0으로 설정하면 항상 온라인으로 로그인해야 합니다. 정책을 다른 값으로 설정하면 마지막 온라인 인증 후 얼마만큼의 기간이 지난 후 사용자가 다음번 로그인에서 다시 온라인 인증을 사용해야 하는지 지정됩니다. + + 설정하지 않으면 <ph name="PRODUCT_OS_NAME" />에서 오프라인 로그인을 사용합니다. + + 정책은 SAML 없이 GAIA를 사용해 인증된 사용자에게만 적용됩니다. + + 정책 값은 일 단위로 지정해야 합니다.</translation> <translation id="4528929591840709501">기기 충전을 중지할 시간으로, 기기의 현지 시간대로 변환됩니다.</translation> <translation id="4529868888205510667">ARC가 다른 방법으로 사용 중지되지 않은 이상, 정책을 True로 설정하거나 설정하지 않으면 사용자가 ARC를 사용할 수 있습니다. False로 설정하면 제휴되지 않은 사용자가 ARC를 사용할 수 없습니다. @@ -2631,11 +2588,6 @@ 정책이 설정되어 있지 않거나 사용 설정되어 있으면 DNS 가로채기 검사가 실행됩니다. 명시적으로 사용 중지되면 검사가 실행되지 않습니다.</translation> <translation id="4700190441681139987">모든 사이트에서 센서에 액세스하도록 허용 안함</translation> <translation id="4703402283970867140">스마트 밝기 낮추기 모델을 사용하여 화면이 어두워질 때까지의 시간 연장</translation> -<translation id="4715026656747891013"><ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> Enterprise 커넥터에 적용할 Chrome Enterprise 커넥터 서비스 설정의 목록으로, Chrome에서 보안 관련 활동이 발생할 때 실행됩니다. 보안 관련 활동에는 분석 유형의 Enterprise 커넥터에 의한 부정적인 평가, 비밀번호 재사용, 안전하지 않은 페이지 탐색 및 보안에 민감한 다른 사용자 작업이 포함됩니다. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 필드는 설정이 해당하는 보고 서비스 제공업체를 나타내며 <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> 필드는 이 제공업체를 대상으로 사용 설정되는 이벤트를 지정합니다. - - 이 정책은 Google 관리 콘솔에서만 설정할 수 있습니다.</translation> <translation id="4722122254122249791">지정된 출처의 사이트 격리 사용 설정</translation> <translation id="4723122879352880315">이 설정은 사용자가 <ph name="PRODUCT_OS_NAME" /> 로그인 사용자 인증 정보를 사용하여 NTLM 인증으로 보호되는 관리 프록시를 인증하도록 허용합니다. @@ -3601,6 +3553,7 @@ <translation id="6155936611791017817">로그인 화면에서 큰 커서의 기본 상태를 설정</translation> <translation id="6157537876488211233">쉼표로 구분된 프록시 우회 규칙 목록</translation> <translation id="6158324314836466367">엔터프라이즈 웹 스토어 이름(지원 중단됨)</translation> +<translation id="6169768162756928771">GAIA 사용자 ID 관리 설정</translation> <translation id="6172896675583897796">정책을 '사용'으로 설정하면 Google 어시스턴트가 화면 컨텍스트에 액세스하고 이 데이터를 서버에 전송할 수 있습니다. 정책을 '사용 안함'으로 설정하면 Google 어시스턴트가 화면 컨텍스트에 액세스할 수 없습니다. 정책을 설정하지 않으면 사용자가 이 기능을 사용 또는 사용 중지할 수 있습니다.</translation> @@ -4130,13 +4083,6 @@ <ph name="PRODUCT_NAME" />을(를) 시작할 때 적용할 플래그를 지정합니다. 지정된 플래그는 로그인 화면에만 적용됩니다. 이 정책에서 설정된 플래그는 사용자 세션에 반영되지 않습니다.</translation> <translation id="685769593149966548">YouTube에 강력 제한 모드 사용</translation> <translation id="686079137349561371">Microsoft Windows 7 이상</translation> -<translation id="6877233375929006871">정책을 설정하면 사용자가 SSL 오류가 있는 사이트로 이동할 때 <ph name="PRODUCT_NAME" />에서 보여주는 경고 페이지를 클릭하여 연결할 수 있는 사이트를 지정하는 URL 목록을 설정할 수 있습니다. 이 목록에 없는 사이트의 SSL 경고 페이지는 사용자가 클릭하여 연결할 수 없습니다. - - <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 정책을 사용 중지하면 이 정책은 무시됩니다. - - 정책을 설정하지 않았을 때 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" />이 모든 사이트에 적용됩니다. - - 유효한 <ph name="URL_LABEL" /> 패턴에 관해 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요. <ph name="WILDCARD_VALUE" />는 이 정책에 허용되는 값이 아닙니다.</translation> <translation id="68818134518270542">정책을 설정하면 사용자가 <ph name="PRODUCT_OS_NAME" /> 잠금 화면에서 메모 앱으로 사용 설정할 수 있는 앱이 지정됩니다. 선호하는 앱이 잠금 화면에 있는 경우 해당 메모 앱을 실행하기 위한 UI 요소가 화면에 표시됩니다. 앱을 실행하면 잠금 화면 상단에 앱 창이 표시되고 이러한 상황에서 메모가 생성됩니다. 세션이 잠금 해제되면 앱에서 생성된 메모를 기본 사용자 세션으로 가져올 수 있습니다. 잠금 화면에서는 <ph name="PRODUCT_NAME" /> 메모 앱만 지원됩니다. @@ -4640,11 +4586,6 @@ False로 설정하면 구성요소 업데이트가 사용 중지됩니다. 하지만 일부 구성요소는 이 정책에서 제외됩니다. 예를 들어 실행 코드가 포함되지 않거나, 브라우저 작동 방식을 심각하게 변경하지 않거나, 보안에 중요한 구성요소 업데이트는 사용 중지되지 않습니다. 이와 같은 구성요소의 예로는 인증서 해지 목록 및 세이프 브라우징 데이터가 있습니다. 세이프 브라우징에 관해 자세히 알아보려면 https://developers.google.com/safe-browsing 페이지를 참조하세요.</translation> -<translation id="7563608136659080810">이 정책은 지원 중단되었으므로 '<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />' 정책을 대신 사용하세요. - - 정책을 설정하면 <ph name="PRODUCT_NAME" />에서 위임할 수 있는 서버가 할당됩니다. 서로 다른 서버 이름은 쉼표로 구분합니다. 와일드 카드(<ph name="WILDCARD_VALUE" />)를 사용할 수 있습니다. - - 정책을 설정하지 않으면 서버가 인트라넷으로 감지되더라도 <ph name="PRODUCT_NAME" />에서 사용자 인증 정보를 위임하지 않습니다.</translation> <translation id="7566878661979235378">SAML 로그인 인증 유형</translation> <translation id="7567373982693549834">이 정책은 Google Play 스토어 외의 신뢰할 수 없는 출처에서 다운로드한 Android 앱의 사용을 사용자별로 제어합니다. @@ -5559,6 +5500,7 @@ <translation id="8890438048579188548"><ph name="CLOUD_PRINT_NAME" /> 지원 중단 경고 숨기기</translation> <translation id="8892286064305622118"><ph name="PLUGIN_VM_NAME" />에 필요한 디스크 여유 공간</translation> <translation id="8892783613915541293">기기가 유휴 상태에서 AC 전원으로 구동되는 경우 취할 지연과 작업입니다.</translation> +<translation id="8897796778265450949">SAML 없이 GAIA를 통해 인증된 사용자가 오프라인으로 로그인할 수 있는 기간 제한</translation> <translation id="8903283771634816230">정책을 사용 설정하면 <ph name="PRODUCT_NAME" />에서 OS 기본 프린터를 인쇄 미리보기의 기본 대상으로 사용합니다. 정책을 사용 중지하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 가장 최근에 사용한 프린터를 인쇄 미리보기의 기본 대상으로 사용합니다.</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index f229d9c..6744946 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -353,6 +353,15 @@ Opmerking: Gebruik bij meerdere servernamen een komma als scheidingsteken. Jokertekens (<ph name="WILDCARD_VALUE" />) zijn toegestaan.</translation> <translation id="1502843533062797703">Blokkering van injectie van software van derden inschakelen</translation> <translation id="1506017854924185821">Beschikbaarheid van profielkiezer bij opstarten</translation> +<translation id="150857982247452081">Hiermee kun je een lijst met protocollen instellen (en voor elk protocol een gekoppelde lijst met toegestane herkomstpatronen) die een externe app kunnen starten zonder prompt aan de gebruiker. Het scheidingsteken achteraan moet niet worden opgenomen bij de vermelding van het protocol. Vermeld bijvoorbeeld 'skype' in plaats van 'skype:' of 'skype://'. + + Als dit beleid is ingesteld, kan een protocol volgens het beleid een externe app alleen starten zonder prompt aan de gebruiker als het protocol in de lijst wordt vermeld en de herkomst van de site die probeert het protocol te starten, overeenkomt met een van de herkomstpatronen in de lijst allowed_origins van dat protocol. Als een van de voorwaarden False is, wordt de prompt voor starten via een extern protocol volgens het beleid niet overgeslagen. + + Als dit beleid niet is ingesteld, kunnen protocollen standaard niet worden gestart zonder prompt. Gebruikers kunnen zich voor specifieke protocollen/sites afmelden voor prompts, tenzij het beleid <ph name="EXTERNAL_PROTOCOL_DIALOG_SHOW_ALWAYS_OPEN_CHECKBOX_POLICY_NAME" /> is uitgeschakeld. Dit beleid heeft geen invloed op promptuitzonderingen voor specifieke protocollen/sites die zijn ingesteld door gebruikers. + + De patronen voor overeenkomende herkomst gebruiken een vergelijkbare indeling als die voor het beleid <ph name="URL_BLOCKLIST_POLICY_NAME" /> (deze worden gedocumenteerd op http://www.chromium.org/administrators/url-blocklist-filter-format). + + Patronen voor overeenkomende herkomst voor dit beleid mogen geen '/path' or '@query'-elementen bevatten. Patronen die een '/path'- of '@query'-element bevatten, worden genegeerd.</translation> <translation id="1509377996969000672">Als je dit beleid instelt, worden configuraties geboden voor bedrijfsprinters die aan apparaten zijn gekoppeld. De indeling komt overeen met de dictionary <ph name="NATIVE_PRINTERS_POLICY_NAME" />, waarbij voor elke printer ook een veld 'id' of 'guid' verplicht is voor de toelatingslijst of weigeringslijst. Bestanden moeten een json-indeling hebben en mogen maximaal 5 MB zijn. In een bestand van 5 MB kunnen ongeveer 21.000 printers staan. De cryptografische hash wordt gebruikt om de integriteit van de download te verifiëren. Het bestand wordt gedownload, opgeslagen in het cachegeheugen en opnieuw gedownload als de URL of de hash wordt gewijzigd. <ph name="PRODUCT_OS_NAME" /> downloadt het bestand voor printerconfiguraties en maakt printers beschikbaar in overeenstemming met <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />, <ph name="DEVICE_PRINTERS_ALLOWLIST_POLICY_NAME" /> en <ph name="DEVICE_PRINTERS_BLOCKLIST_POLICY_NAME" />. Dit beleid: @@ -891,6 +900,9 @@ Dit beleid is alleen van kracht als de machine is ingeschreven met <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> voor <ph name="PRODUCT_NAME" />. Dit beleid is altijd van kracht voor <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="2289688405312849186">Hoofdaccount van gebruiker: 'user@realm'. De tijdelijke aanduiding <ph name="LOGIN_ID_PLACEHOLDER" /> wordt vervangen door de gebruikersnaam 'user'. De tijdelijke aanduiding <ph name="LOGIN_EMAIL_PLACEHOLDER" /> wordt vervangen door het volledige hoofdaccount 'user@realm'.</translation> +<translation id="2290270645214705008">Als dit beleid is uitgeschakeld, kan de hostservice voor externe toegang niet worden gestart of ingesteld om inkomende verbindingen te accepteren. Dit beleid heeft geen effect op scenario's voor support op afstand. + + Dit beleid is niet geldig als het is ingesteld op Enabled (Ingeschakeld), leeg wordt gelaten of niet wordt ingesteld.</translation> <translation id="229322770310505679">Hiermee wordt het concept van atomische beleidsgroepen ingeschakeld</translation> <translation id="22941467117331786">Als je het beleid instelt op 'True', wordt er tijdens actieve sessies waarbij het scherm niet is vergrendeld een grote, rode knop voor uitloggen weergegeven in het systeemvak. @@ -995,6 +1007,13 @@ Als je het beleid niet instelt, kunnen gebruikers kiezen of ze de service voor spellingcontrole willen gebruiken. Voor de spellingcontrole kan altijd een lokaal gedownload woordenboek worden gebruikt, tenzij de functie is uitgezet op basis van <ph name="SPELLCHECK_ENABLED_POLICY_NAME" />. In dat geval heeft dit beleid geen effect.</translation> +<translation id="2433256976163104361">Lijst met URL's waarin wordt aangegeven op welke URL's <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> van toepassing is. Dit beleid is niet van invloed op waarden voor automatisch openen die zijn ingesteld door gebruikers. + + Als dit beleid is ingesteld, worden bestanden alleen geopend op basis van het beleid als de URL onderdeel is van deze set en het bestandstype wordt vermeld in <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Als een van de voorwaarden False is, wordt de download niet automatisch geopend op basis van het beleid. + + Als dit beleid niet is ingesteld, worden alle downloads waarvan het bestandstype in <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> staat automatisch geopend. + + Een URL-patroon moet worden ingedeeld volgens https://www.chromium.org/administrators/url-blocklist-filter-format.</translation> <translation id="2433516903565257847">Het percentage van de apparaten dat na het opgegeven aantal dagen moet worden geüpdatet.</translation> <translation id="2435052056904485763">Toelatingslijst voor Kerberos-delegatieserver</translation> <translation id="2448315169529769573">Als je het beleid inschakelt, rapporteert <ph name="PRODUCT_OS_NAME" /> gebruiksstatistieken en diagnostische gegevens, waaronder crashrapporten, aan Google. Als je het beleid uitschakelt, worden er geen statistieken en diagnostische gegevens gerapporteerd. @@ -1145,23 +1164,6 @@ Als je het beleid instelt op AlleenGebruiker (waarde 1), kunnen gebruikers gebruikerscertificaten beheren, maar niet alle certificaten op het apparaat.</translation> <translation id="2593762551209145088">Safe Browsing is nooit actief.</translation> -<translation id="2600410857944104685">Lijst met instellingen voor Chrome Enterprise Connectors-services die moeten worden toegepast op de Enterprise Connector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als een bestand wordt bijgevoegd in Chrome. - - De velden <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> worden gebruikt om te bepalen of de connector een bestand voor analyse moet sturen als het is bijgevoegd bij een specifieke pagina en welke tags moeten worden opgenomen in het analyseverzoek voor dat bestand. Een tag die overeenkomt met een 'enable'-patroon, wordt opgenomen in het analyseverzoek als de pagina-URL overeenkomt met een patroon dat is gekoppeld aan die tag, op voorwaarde dat er geen 'disable'-patroon met dezelfde tag overeenkomt met de pagina-URL. De analyse vindt plaats als er ten minste 1 tag moet worden opgenomen in het verzoek. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke analyseserviceprovider de instellingen horen. - - Als je het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> instelt op 1, betekent dit dat Chrome wacht op een reactie van de analyseservice voordat Chrome de pagina toegang tot het bestand geeft. Elke andere waarde met een geheel getal betekent dat Chrome de pagina onmiddellijk toegang tot het bestand geeft. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> bepaalt of Chrome bestanden die zijn beveiligd met een wachtwoord blokkeert of toestaat. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> bepaalt of Chrome bestanden die te groot zijn om te worden geanalyseerd (meer dan 50 MB) blokkeert of toestaat. - - Het veld <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> wordt gebruikt om te bepalen voor welke tags de connector moet vereisen dat de gebruiker een verantwoording opgeeft om een scan over te slaan die resulteert in een waarschuwing die kan worden overgeslagen. Als je het veld niet instelt, wordt aangenomen dat er geen verantwoording is vereist. - - De velden <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> worden gebruikt om een bericht te configureren dat de gebruiker te zien krijgt wanneer een waarschuwing wordt getoond nadat een scan problemen heeft gevonden. Het veld 'message' bevat de tekst die de gebruiker te zien krijgt en mag maximaal 200 tekens bevatten. Het veld 'learn_more_url' bevat een door de beheerder geleverde URL waarop de gebruiker kan klikken voor meer door de klant geleverde informatie over waarom de actie is geblokkeerd. Het veld 'language' is optioneel en bevat de taal van het bericht. Met een leeg veld 'language' of de waarde 'default' wordt een bericht aangegeven dat moet worden gebruikt als er geen bericht is in de taal van de gebruiker. Het veld 'tag' geeft aan voor welk type scans het bericht wordt getoond. De lijst 'custom_messages' kan nul of meer items bevatten. Voor elk item moeten de velden 'message' en 'tag' zijn ingevuld. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="26023406105317310">Kerberos-accounts configureren</translation> <translation id="2604182581880595781">Beleid met betrekking tot Network File Shares configureren.</translation> <translation id="2615240493030733717">Informatie over tijdzone rapporteren</translation> @@ -1373,7 +1375,6 @@ Als je het beleid instelt, kunnen gebruikers het niet wijzigen. Dit beleid is verouderd. Gebruik in plaats daarvan <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">Als je het beleid instelt, geef je een lijst met hostnamen op die worden overgeslagen als het HSTS-beleid wordt gecontroleerd dat verzoeken kan upgraden van HTTP naar HTTPS. In dit beleid zijn alleen hostnamen met 1 label toegestaan. Hostnamen moeten een canonieke URL hebben. Eventuele IDN's moeten worden omgezet naar de A-labelindeling en alle ASCII-letters moeten kleine letters zijn. Dit beleid is alleen van toepassing op de vermelde specifieke hostnamen en niet op de subdomeinen van die namen.</translation> <translation id="2952347049958405264">Beperkingen:</translation> <translation id="2957047180944828740">Hiermee geef je aan of niet-beveiligde websites verzoeken mogen sturen naar meer-privé netwerkeindpunten</translation> <translation id="2957506574938329824">Niet toestaan dat sites toegang tot Bluetooth-apparaten vragen via de Web Bluetooth API</translation> @@ -1394,7 +1395,6 @@ Ga naar https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns voor gedetailleerde informatie over geldige URL-patronen.</translation> <translation id="2976429807269247880">Instellingen voor gedrag van verouderde cookies van <ph name="ATTRIBUTE_SAMESITE_NAME" /></translation> -<translation id="2981998788751314539">Doorgaan vanaf de SSL-waarschuwingspagina toestaan op specifieke pagina's</translation> <translation id="2985927503455169394">De standaard modus voor introductie van de Assistent gebruiken</translation> <translation id="2987155890997901449">ARC inschakelen</translation> <translation id="2987227569419001736">Gebruik van de Web Bluetooth API beheren</translation> @@ -1444,13 +1444,6 @@ Ambient-verificatie is altijd toegestaan voor normale profielen. Als het beleid niet is ingesteld in versie 81 en hoger van <ph name="PRODUCT_NAME" />, wordt Ambient-verificatie alleen ingeschakeld in normale sessies.</translation> -<translation id="3021288356473993647">Dit beleid beheert realtime checks om niet-beveiligde URL's te identificeren. - - Als dit beleid niet is ingesteld of is uitgeschakeld, worden de Safe Browsing-checks van de consument toegepast. Safe Browsing-checks van de consument kunnen nog steeds realtime lookups bevatten, afhankelijk van de waarde van de instelling 'Zoekopdrachten en browsefunctionaliteit verbeteren' en de waarde van het beleid 'UrlKeyedAnonymizedDataCollectionEnabled'. - - Als dit beleid is ingeschakeld, worden URL's verstuurd om in realtime te worden gescand op basis van de servicevoorwaarden van het bedrijf. Dit leidt ertoe dat Chrome URL's stuurt naar Google Cloud of derden die je zelf kiest om ze in realtime te checken. De consumentenversie van realtime lookups met Safe Browsing wordt uitgeschakeld. - -Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="3021562480854470924">Aantal mijlpalen dat rollback kan terugzetten</translation> <translation id="3023572080620427845">URL van een XML-bestand dat URL's bevat voor laden in een alternatieve browser.</translation> <translation id="302528139996622624">Instellingen voor afbeeldingen</translation> @@ -1518,23 +1511,6 @@ <translation id="3096595567015595053">Lijst met ingeschakelde plug-ins</translation> <translation id="3101501961102569744">Kies hoe je proxyserverinstellingen wilt specificeren</translation> <translation id="3101709781009526431">Datum en tijd</translation> -<translation id="3102177185340515316">Lijst met instellingen voor Chrome Enterprise Connectors-services die moeten worden toegepast op de Enterprise Connector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als een bestand wordt gedownload in Chrome. - - De velden <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> worden gebruikt om te bepalen of de connector een bestand voor analyse moet sturen als het wordt gedownload vanaf een specifieke pagina en welke tags moeten worden opgenomen in het analyseverzoek voor dat bestand. Een tag die overeenkomt met een 'enable'-patroon, wordt opgenomen in het analyseverzoek als de pagina-URL overeenkomt met een patroon dat is gekoppeld aan die tag, op voorwaarde dat er geen 'disable'-patroon met dezelfde tag overeenkomt met de pagina-URL. De analyse vindt plaats als er ten minste 1 tag moet worden opgenomen in het verzoek. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke analyseserviceprovider de instellingen horen. - - Als je het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> instelt op 1, betekent dit dat Chrome wacht op een reactie van de analyseservice voordat Chrome de gebruiker toegang tot het gedownloade bestand geeft. Elke andere waarde met een geheel getal betekent dat Chrome de gebruiker onmiddellijk toegang tot het bestand geeft. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> bepaalt of Chrome bestanden die zijn beveiligd met een wachtwoord blokkeert of toestaat. - - Het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> bepaalt of Chrome bestanden die te groot zijn om te worden geanalyseerd (meer dan 50 MB) blokkeert of toestaat. - - Het veld <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> wordt gebruikt om te bepalen voor welke tags de connector moet vereisen dat de gebruiker een verantwoording opgeeft om een scan over te slaan die resulteert in een waarschuwing die kan worden overgeslagen. Als je het veld niet instelt, wordt aangenomen dat er geen verantwoording is vereist. - - De velden <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> worden gebruikt om een bericht te configureren dat de gebruiker te zien krijgt wanneer een waarschuwing wordt getoond nadat een scan problemen heeft gevonden. Het veld 'message' bevat de tekst die de gebruiker te zien krijgt en mag maximaal 200 tekens bevatten. Het veld 'learn_more_url' bevat een door de beheerder geleverde URL waarop de gebruiker kan klikken voor meer door de klant geleverde informatie over waarom de actie is geblokkeerd. Het veld 'language' is optioneel en bevat de taal van het bericht. Met een leeg veld 'language' of de waarde 'default' wordt een bericht aangegeven dat moet worden gebruikt als er geen bericht is in de taal van de gebruiker. Het veld 'tag' geeft aan voor welk type scans het bericht wordt getoond. De lijst 'custom_messages' kan nul of meer items bevatten. Voor elk item moeten de velden 'message' en 'tag' zijn ingevuld. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="3110248563985502478">Dit beleid is beëindigd in M88. Flash wordt niet meer ondersteund door Chrome. Als je het beleid inschakelt, worden verouderde plug-ins gebruikt als normale plug-ins. Als je het beleid uitschakelt, worden verouderde plug-ins niet gebruikt. Als je het beleid niet instelt, wordt de gebruikers toestemming gevraagd om verouderde plug-ins uit te voeren.</translation> @@ -1623,21 +1599,6 @@ Als je het beleid niet instelt, zijn <ph name="TPM_FIRMWARE_UPDATE_TPM" />-firmware-updates niet beschikbaar.</translation> <translation id="3232691106293445015">Niet-beveiligde HTTP-verbindingen mogen <ph name="BASIC_AUTH" />-verificatie niet gebruiken. HTTPS is vereist.</translation> -<translation id="3234647080363107863">Lijst met instellingen voor Chrome Enterprise Connectors-services die moeten worden toegepast op de Enterprise Connector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als gegevens in Chrome worden ingevoerd vanaf het klembord of door slepen en neerzetten van webcontent. - - De velden <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> worden gebruikt om te bepalen of de connector gegevens voor analyse moet sturen als ze worden ingevoerd op een specifieke pagina en welke tags moeten worden opgenomen in het analyseverzoek voor die gegevens. Een tag die overeenkomt met een 'enable'-patroon, wordt opgenomen in het analyseverzoek als de pagina-URL overeenkomt met een patroon dat is gekoppeld aan die tag, op voorwaarde dat er geen 'disable'-patroon met dezelfde tag overeenkomt met de pagina-URL. De analyse vindt plaats als er ten minste 1 tag moet worden opgenomen in het verzoek. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke analyseserviceprovider de instellingen horen. - - Als je het veld <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> instelt op 1, betekent dit dat Chrome wacht op een reactie van de analyseservice voordat Chrome de pagina toegang tot de gegevens geeft. Elke andere waarde met een geheel getal betekent dat Chrome de pagina onmiddellijk toegang tot de gegevens geeft. - - Het veld <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> geeft de minimum grootte (in bytes) aan die in Chrome ingevoerde gegevens ten minste moeten hebben om te worden gescand. De standaard waarde is 100 bytes als het veld niet is ingesteld. - - Het veld <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> wordt gebruikt om te bepalen voor welke tags de connector moet vereisen dat de gebruiker een verantwoording opgeeft om een scan over te slaan die resulteert in een waarschuwing die kan worden overgeslagen. Als je het veld niet instelt, wordt aangenomen dat er geen verantwoording is vereist. - - De velden <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> en <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> worden gebruikt om een bericht te configureren dat de gebruiker te zien krijgt wanneer een waarschuwing wordt getoond nadat een scan problemen heeft gevonden. Het veld 'message' bevat de tekst die de gebruiker te zien krijgt en mag maximaal 200 tekens bevatten. Het veld 'learn_more_url' bevat een door de beheerder geleverde URL waarop de gebruiker kan klikken voor meer door de klant geleverde informatie over waarom de actie is geblokkeerd. Het veld 'language' is optioneel en bevat de taal van het bericht. Met een leeg veld 'language' of de waarde 'default' wordt een bericht aangegeven dat moet worden gebruikt als er geen bericht is in de taal van de gebruiker. Het veld 'tag' geeft aan voor welk type scans het bericht wordt getoond. De lijst 'custom_messages' kan nul of meer items bevatten. Voor elk item moeten de velden 'message' en 'tag' zijn ingevuld. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="3236046242843493070">URL-patronen om de installatie van extensies, apps en gebruikersscripts toe te staan vanaf</translation> <translation id="3240609035816615922">Toegangsbeleid voor printerconfiguratie.</translation> <translation id="324062325008698789">Hiermee wordt een lijst met printers geconfigureerd</translation> @@ -2369,6 +2330,15 @@ Als je het beleid niet instelt, vragen websites om toegang maar kunnen gebruikers deze instelling wijzigen.</translation> <translation id="4285674129118156176">Toestaan dat niet-gelieerde gebruikers ARC gebruiken</translation> <translation id="4290231183305601970">Tekst die de gebruiker te zien krijgt in de Chrome Web Store als de installatie wordt geblokkeerd.</translation> +<translation id="4293187705196369087">Hiermee kun je meldingen bij weinig schijfruimte in- of uitschakelen. Dit is van toepassing op alle gebruikers op het apparaat. + + Als je het beleid inschakelt, wordt er een melding getoond als er weinig schijfruimte over is. + + Als je het beleid uitschakelt of niet instelt, wordt er geen melding over weinig schijfruimte getoond. + + Dit beleid wordt genegeerd en de melding wordt altijd getoond als het apparaat onbeheerd is of er slechts één gebruiker is. + + Als er meerdere gebruikersaccounts zijn op een beheerd apparaat, wordt de melding alleen getoond als dit beleid is ingeschakeld.</translation> <translation id="4311195029067684288">Full</translation> <translation id="4313767483634435271">Toegewezen MAC-adres van dock van apparaat</translation> <translation id="4320592646346933548">Wifi</translation> @@ -2628,11 +2598,6 @@ Als dit beleid niet is ingesteld of als het is ingeschakeld, worden de controles voor DNS-onderschepping uitgevoerd. Als het beleid expliciet is uitgeschakeld, is dit niet het geval.</translation> <translation id="4700190441681139987">Geen sites toegang geven tot sensoren</translation> <translation id="4703402283970867140">Slim dimmodel inschakelen, zodat het langer duurt tot het scherm wordt gedimd</translation> -<translation id="4715026656747891013">Lijst met instellingen voor Chrome Enterprise Connectors-services die moeten worden toegepast op de Enterprise Connector <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />. De lijst wordt geactiveerd als een beveiligingsgebeurtenis plaatsvindt in Chrome. Dit omvat onder meer negatieve analyseresultaten van Enterprise Connectors, hergebruik van wachtwoorden, navigatie naar onveilige pagina's en andere beveiligingsgevoelige gebruikersacties. - - Het veld <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> geeft aan bij welke rapportageserviceprovider de instellingen horen en het veld <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> geeft aan welke gebeurtenissen zijn aangezet voor deze provider. - - Dit beleid kan alleen worden ingesteld via de Google Beheerdersconsole.</translation> <translation id="4722122254122249791">Site-isolatie inschakelen voor gespecificeerde herkomsten</translation> <translation id="4723122879352880315">Met deze instelling kunnen gebruikers de inloggegevens van <ph name="PRODUCT_OS_NAME" /> gebruiken om een beheerde proxy die is beveiligd met NTLM-verificatie te verifiëren. @@ -2701,6 +2666,20 @@ <translation id="487460824085252184">Automatisch migreren, niet om toestemming van de gebruiker vragen.</translation> <translation id="4874982543810021567">WebUSB blokkeren op deze sites</translation> <translation id="4876805738539874299">Maximale SSL-versie ingeschakeld</translation> +<translation id="4877402532842958110">Dit beleid is beëindigd. Gebruik in plaats daarvan het beleid <ph name="URL_ALLOWLIST_POLICY_NAME" />. + + Als je het beleid instelt, wordt toegang tot de vermelde URL's toegestaan, als uitzonderingen op de blokkeringslijst voor URL's. Bekijk de beschrijving van dit beleid voor de indeling van items in deze lijst. Als je <ph name="URL_BLOCKLIST_POLICY_NAME" /> bijvoorbeeld instelt op *, worden alle verzoeken geblokkeerd en kun je dit beleid gebruiken om toegang tot een beperkte lijst met URL's toe te staan. Je kunt dit beleid gebruiken om uitzonderingen voor bepaalde schema's, subdomeinen van andere domeinen, poorten of specifieke paden op te geven met de indeling die wordt gespecificeerd op (https://www.chromium.org/administrators/url-blocklist-filter-format). Het meest specifieke filter bepaalt of een URL geblokkeerd of toegestaan wordt. De toelatingslijst krijgt voorrang op de blokkeringslijst. Dit beleid is beperkt tot 1000 items. + + Met dit beleid kan ook de automatische aanroep door de browser van een externe app worden ingeschakeld die is geregistreerd als protocolhandler voor de vermelde protocollen, zoals tel: of ssh:. + + Als je het beleid niet instelt, zijn er geen uitzonderingen toegestaan. + + In <ph name="MS_WIN_NAME" /> is deze functionaliteit alleen beschikbaar voor instanties die zijn gekoppeld aan een <ph name="MS_AD_NAME" />-domein, worden uitgevoerd in Windows 10 Pro of zijn ingeschreven voor <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. In <ph name="MAC_OS_NAME" /> is deze functionaliteit alleen beschikbaar voor instanties die via MDM worden beheerd of via MCX aan een domein zijn gekoppeld.</translation> +<translation id="4882406948002286350">Als je het beleid instelt, wordt voorkomen dat webpagina's met verboden URL's worden geladen. Het beleid biedt een lijst met URL-patronen die verboden URL's definiëren. Als je het beleid niet instelt, worden er geen URL's verboden in de browser. Gebruik een notatie voor het URL-patroon volgens deze indeling (https://www.chromium.org/administrators/url-blocklist-filter-format). Er kunnen maximaal 1000 uitzonderingen worden gedefinieerd in <ph name="URL_ALLOWLIST_POLICY_NAME" />. + + Vanaf <ph name="PRODUCT_NAME" /> versie 73 kun je javascript://* URL's blokkeren. Maar dit heeft alleen gevolgen voor JavaScript die wordt ingevoerd in de adresbalk (of bijvoorbeeld bookmarklets). In-page JavaScript-URL's met dynamisch geladen gegevens vallen niet onder dit beleid. Als je bijvoorbeeld 'example.com/abc' blokkeert, kan de pagina 'example.com' nog steeds 'example.com/abc' laden via XMLHTTPRequest. + + Opmerking: Als je interne URL's met chrome://* blokkeert, kan dit tot onverwachte fouten leiden.</translation> <translation id="4886783562285047261">Als je dit beleid inschakelt, wordt <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> verplicht ingeschreven en wordt het startproces van <ph name="PRODUCT_NAME" /> geblokkeerd als dit mislukt. Als je het beleid uitschakelt, of niet instelt, is <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> optioneel en wordt het startproces van <ph name="PRODUCT_NAME" /> niet geblokkeerd als het mislukt. @@ -3213,6 +3192,7 @@ <translation id="5530347722229944744">Potentieel gevaarlijke downloads blokkeren</translation> <translation id="5535973522252703021">Witte lijst voor Kerberos-delegatieserver</translation> <translation id="553806128266843748">Een Booleaanse markering die aangeeft of throttling aanstaat.</translation> +<translation id="5540885720415375851">Toestaan dat lokale apparaten worden gevonden</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="555022085242359084">Hoog contrast op het inlogscherm inschakelen</translation> <translation id="555077880566103058">Alle sites toestaan om de <ph name="FLASH_PLUGIN_NAME" />-plug-in automatisch uit te voeren</translation> @@ -3350,6 +3330,16 @@ Als je het beleid uitschakelt of niet instelt, gaan de perioden voor stroombeheer en voor de maximale sessielengte meteen in zodra de sessie begint.</translation> <translation id="5735915264686983150">De uitgeschakelde functies verbergen en blokkeren</translation> +<translation id="5737394734996319911">Met de toegankelijkheidsfunctie <ph name="PRODUCT_NAME" /> kunnen slechtziende gebruikers van een schermlezer beschrijvingen van niet-gelabelde afbeeldingen op internet krijgen. Gebruikers die de functie inschakelen, kunnen een anonieme Google-service gebruiken voor automatische beschrijvingen van niet-gelabelde afbeeldingen die ze tegenkomen op internet. + + Als deze functie is ingeschakeld, wordt de content van afbeeldingen naar de servers van Google gestuurd om een beschrijving te genereren. Er worden geen cookies of andere gebruikersgegevens gestuurd en Google bewaart of registreert de content van afbeeldingen niet. + + Als dit beleid is ingesteld op Enabled (Ingeschakeld), wordt de functie <ph name="PRODUCT_NAME" /> ingeschakeld, maar is deze alleen van toepassing op gebruikers die een schermlezer of andere vergelijkbare ondersteunende technologie gebruiken. + + Als dit beleid is ingesteld op Disabled (Uitgeschakeld), kunnen gebruikers de functie niet inschakelen. + + Als het beleid niet is ingesteld, kunnen gebruikers kiezen of ze deze functie willen gebruiken. + </translation> <translation id="5738766588683307797">Als <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> is uitgeschakeld, stel je met <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> het percentage in waarmee de dimperiode van het scherm wordt geschaald als er gebruikersactiviteit is terwijl het scherm gedimd is of vlak nadat het scherm uitgaat. Als de dimperiode wordt geschaald, blijven de perioden tot het scherm uitgaat, het scherm wordt vergrendeld en inactiviteit wordt geactiveerd, gelijk aan de periode voor het dimmen van het scherm die je oorspronkelijk had ingesteld. Als je het beleid niet instelt, wordt een standaard schaalfactor gebruikt. @@ -4121,13 +4111,6 @@ Hiermee worden de markeringen gespecificeerd die bij het starten moeten worden toegepast op <ph name="PRODUCT_NAME" />. De opgegeven markeringen worden alleen toegepast op het inlogscherm. Markeringen die worden ingesteld via dit beleid, worden niet doorgevoerd in gebruikerssessies.</translation> <translation id="685769593149966548">Strenge 'Beperkte modus' voor YouTube afdwingen</translation> <translation id="686079137349561371">Microsoft Windows 7 of later</translation> -<translation id="6877233375929006871">Als je het beleid instelt, kun je een lijst met URL-patronen opgeven van de sites waar gebruikers kunnen doorklikken op de waarschuwingspagina's die <ph name="PRODUCT_NAME" /> laat zien als gebruikers naar sites met SSL-fouten gaan. Gebruikers kunnen niet doorklikken op SSL-waarschuwingspagina's voor sites die niet op deze lijst staan. - - Als <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> niet is toegepast, heeft dit beleid geen effect. - - Als je het beleid niet instelt, wordt <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> toegepast op alle sites. - - Ga naar https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns voor gedetailleerde informatie over geldige <ph name="URL_LABEL" />-patronen. <ph name="WILDCARD_VALUE" /> is geen geaccepteerde waarde voor dit beleid.</translation> <translation id="68818134518270542">Als je het beleid instelt, geef je de apps op die gebruikers kunnen inschakelen als notitie-app op het vergrendelscherm van <ph name="PRODUCT_OS_NAME" />. Als de voorkeurs-app op het vergrendelscherm staat, wordt er een UI-element voor het starten van de gewenste notitie-app op het scherm weergegeven. Als de app wordt gestart, kan deze een venster bovenop het vergrendelscherm maken en notities maken in deze context. De app kan gemaakte notities importeren naar de primaire gebruikerssessie als de sessie ontgrendeld is. Alleen notitie-apps voor <ph name="PRODUCT_NAME" /> worden ondersteund op het vergrendelscherm. @@ -4213,6 +4196,11 @@ Als je dit beleid niet instelt (of instelt op een ongeldige URL), gebruikt <ph name="PRODUCT_NAME" /> dit beleid niet als een bron van regels die het niet overschakelen naar een andere browser regelen. Opmerking: Dit beleid verwijst naar een XML-bestand met dezelfde indeling als het beleid <ph name="IEEM_SITELIST_POLICY" /> van <ph name="IE_PRODUCT_NAME" />. Hiermee worden regels vanuit een XML-bestand geladen, zonder dat deze regels worden gedeeld met <ph name="IE_PRODUCT_NAME" />. Bekijk meer informatie over het beleid <ph name="IEEM_SITELIST_POLICY" /> van <ph name="IE_PRODUCT_NAME" /> (https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode)</translation> +<translation id="6969131408525928234">Als je het beleid instelt, wordt de handhaving van vereisten voor openbaarmaking via Certificaattransparantie uitgeschakeld voor de hostnamen in de opgegeven URL's. Hoewel het moeilijker wordt om misbruik van certificaten vast te stellen, kunnen hosts certificaten blijven gebruiken die anders niet zouden worden vertrouwd (omdat deze niet op de juiste manier openbaar zijn gemaakt). + + Als je het beleid niet instelt, betekent dit dat als certificaten die openbaar moeten worden gemaakt via Certificaattransparantie niet openbaar worden gemaakt, de betreffende certificaten niet door <ph name="PRODUCT_NAME" /> worden vertrouwd. + + Voor een URL-patroon wordt deze indeling gehanteerd (https://www.chromium.org/administrators/url-blocklist-filter-format). Aangezien de certificaten geldig zijn voor een bepaalde hostnaam (los van het schema, de poort of het pad), houdt <ph name="PRODUCT_NAME" /> alleen rekening met het hostnaamgedeelte van de URL. Hosts met jokertekens worden niet ondersteund.</translation> <translation id="6972540544240464302">Geselecteerde taakplannerconfiguratie</translation> <translation id="6973754855639335783">Als je dit beleid inschakelt, wordt elk van de benoemde herkomsten (origins) in een door komma's gescheiden lijst uitgevoerd in een eigen proces. Hiermee worden ook herkomsten geïsoleerd die worden benoemd door subdomeinen. Als je bijvoorbeeld https://example.com/ opgeeft, wordt ook https://foo.example.com/ geïsoleerd als onderdeel van de site https://example.com/. @@ -4377,6 +4365,12 @@ <translation id="7146198347561863646">Als je het beleid inschakelt of niet instelt, zijn wake locks voor stroombeheer toegestaan. Extensies kunnen wake locks aanvragen via de API voor de stroombeheerextensie en via ARC-apps. Als je het beleid uitschakelt, worden wake lock-verzoeken genegeerd.</translation> +<translation id="7147888508887603697">Hiermee wordt een pagina op chrome://password-change actief waar SAML-gebruikers hun SAML-wachtwoorden kunnen wijzigen tijdens een sessie. Dit zorgt ervoor dat het SAML-wachtwoord en het wachtwoord voor schermvergrendeling van het apparaat gesynchroniseerd blijven. + + Met dit beleid worden er ook meldingen gegenereerd voor SAML-gebruikers van wie het SAML-wachtwoord bijna verloopt. Ze kunnen dit dan meteen verhelpen door tijdens de sessie het wachtwoord te wijzigen. + Deze meldingen worden alleen weergegeven als de SAML-identiteitsprovider tijdens de SAML-inlogprocedure informatie over het verlopen van het wachtwoord naar het apparaat stuurt. + + Als je dit beleid uitschakelt of niet instelt, kan het SAML-wachtwoord niet worden gewijzigd op chrome://password-change. Er wordt ook geen melding getoond als SAML-wachtwoorden bijna verlopen.</translation> <translation id="7149042336307555519"> De typen verbindingen die mogen worden gebruikt voor OS-updates. Grote OS-updates kunnen belastend zijn voor de verbinding, wat kan leiden tot extra kosten. Daarom zijn ze standaard uitgeschakeld voor verbindingstypen die als duur worden beschouwd (momenteel alleen verbindingen van het type 'mobiel'). De herkende ID's voor verbindingstypen zijn <ph name="CONNECTION_TYPE_ETHERNET_NAME" />, <ph name="CONNECTION_TYPE_WIFI_NAME" /> en <ph name="CONNECTION_TYPE_CELLULAR_NAME" />.</translation> @@ -4392,6 +4386,12 @@ Als dit beleid niet is ingesteld, kan de browser DNS-over-HTTPS-verzoeken verzenden naar een resolver die is gekoppeld aan de geconfigureerde systeemresolver van de gebruiker.</translation> <translation id="7158358621906236999">Standaardinstelling voor sensoren</translation> +<translation id="7165882688932913315">Dit beleid beheert de toegang tot bedienbare functies in de UI voor lokale vindbaarheid (<ph name="CHROME_DEVICES_LINK" />) waarin vindbare apparaten in de buurt van de gebruiker en door de gebruiker geregistreerde cloudapparaten worden getoond. Op alle besturingssystemen (met uitzondering van <ph name="PRODUCT_OS_NAME" />) kunnen gebruikers via de UI voor lokale vindbaarheid ook klassieke printers die aan hun computers zijn gekoppeld, toevoegen aan <ph name="CLOUD_PRINT_NAME" />. + + Als je het beleid inschakelt of niet instelt, zijn lokale apparaten vindbaar. + + Als je het beleid uitschakelt, is het niet mogelijk om lokale apparaten te vinden. + </translation> <translation id="7167436895080860385">Gebruikers toestaan wachtwoorden weer te geven in Wachtwoordmanager (beëindigd)</translation> <translation id="7173856672248996428">Kort geldig profiel</translation> <translation id="717630378807352957">Alle printers in het configuratiebestand toestaan.</translation> @@ -4631,11 +4631,6 @@ Als deze optie is ingesteld op 'False', zijn de updates voor onderdelen uitgeschakeld. Bepaalde onderdelen worden echter uitgesloten van dit beleid: updates voor onderdelen worden niet uitgeschakeld als deze geen uitvoerbare code bevatten, het gedrag van de browser niet aanzienlijk veranderen of essentieel zijn voor de beveiliging. Voorbeelden van dergelijk onderdelen zijn Certificate Revocation Lists en de Safe Browsing-gegevens. Zie https://developers.google.com/safe-browsing voor meer informatie over Safe Browsing.</translation> -<translation id="7563608136659080810">Dit beleid is beëindigd. Gebruik in plaats daarvan het beleid '<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />'. - - Als je het beleid instelt, worden servers toegewezen waaraan <ph name="PRODUCT_NAME" /> kan delegeren. Gebruik bij meerdere servernamen een komma als scheidingsteken. Jokertekens (<ph name="WILDCARD_VALUE" />) zijn toegestaan. - - Als je het beleid niet instelt, delegeert <ph name="PRODUCT_NAME" /> geen inloggegevens van gebruikers, zelfs niet als een server wordt gedetecteerd als intranet.</translation> <translation id="7566878661979235378">Verificatietype voor SAML-inlog</translation> <translation id="7567373982693549834">Met dit beleid beheer je het gebruik van Android-apps van niet-vertrouwde bronnen (andere dan de Google Play Store) per gebruiker. @@ -4871,6 +4866,31 @@ De aanbevolen manier om het scherm te vergrendelen bij inactiviteit is om schermvergrendeling bij opschorting in te schakelen en <ph name="PRODUCT_OS_NAME" /> te laten opschorten na een inactieve periode. Gebruik dit beleid alleen als schermvergrendeling veel eerder moet plaatsvinden dan opschorting of als je helemaal niet wilt opschorten bij inactiviteit.</translation> <translation id="7895553628261067384">Externe toegang</translation> +<translation id="7896787076628252574">Hiermee stel je een lijst op met regels ter voorkoming van datalekken op <ph name="PRODUCT_OS_NAME" />. + Een datalek kan optreden als je gegevens kopieert en plakt, gegevens overdraagt, afdrukt, je scherm deelt of screenshots maakt, enzovoort. + +Elke regel bevat het volgende: +- Een lijst met bronnen die zijn gedefinieerd als URL's. Alle gegevens in de bronnen worden beschouwd als vertrouwelijk en hierop worden de beperkingen toegepast. + - Een lijst met bestemmingen die zijn gedefinieerd als URL's of componenten, waarmee de vertrouwelijke gegevens wel of niet mogen worden gedeeld. + - Een lijst met beperkingen die op de gegevens van de bronnen moeten worden toegepast. + + Regels kunnen om deze redenen worden toegevoegd: +- Bepalen welke klembordgegevens mogen worden gedeeld tussen de bronnen en de bestemmingen. + - Bepalen of er screenshots van de bronnen mogen worden gemaakt. + - Bepalen of er bronnen mogen worden afgedrukt. + - Bepalen of het privacyscherm moet worden gebruikt als er bronnen zichtbaar zijn. + - Bepalen of de bronnen het scherm mogen delen. + + Het beperkingsniveau kan worden ingesteld op BLOCK of ALLOW. + - Als de beperking is ingesteld op BLOCK, is de actie niet toegestaan. + - Als de beperking is ingesteld op ALLOW, is de actie toegestaan. + + Opmerkingen: +- Met de beperking PRIVACY_SCREEN blokkeer je niet de mogelijkheid om het privacyscherm in te schakelen maar dwing je dit af als de beperkingsklasse is ingesteld op BLOCK. + - Bestemmingen mogen niet leeg zijn als een van de beperkingen CLIPBOARD is, maar ze maken geen verschil voor de overige beperkingen. + - Gebruik een notatie voor de URL-patronen volgens deze indeling (https://www.chromium.org/administrators/url-blocklist-filter-format). + +Als het beleid niet is ingesteld, worden er geen beperkingen toegepast.</translation> <translation id="7902040092815978832">Numeriek toetsenbord weergeven voor wachtwoord</translation> <translation id="7904177352786629708">Als je het beleid inschakelt, wordt CNAME-lookup overgeslagen. De servernaam wordt gebruikt zoals deze is opgegeven tijdens het genereren van de Kerberos SPN. @@ -5440,6 +5460,13 @@ Als je het beleid niet instelt, gebruikt Chrome de platformspecifieke standaardmap. Opmerking: Bekijk een lijst met variabelen die je kunt gebruiken (https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables).</translation> +<translation id="877499586514669705">Als je dit beleid instelt, wordt toegang geboden tot de vermelde URL's, als uitzonderingen op <ph name="URL_BLOCKLIST_POLICY_NAME" />. Bekijk de beschrijving van dit beleid voor de indeling van items in deze lijst. Als je <ph name="URL_BLOCKLIST_POLICY_NAME" /> bijvoorbeeld instelt op *, worden alle verzoeken geblokkeerd en kun je dit beleid gebruiken om toegang tot een beperkte lijst met URL's toe te staan. Je kunt dit beleid gebruiken om uitzonderingen voor bepaalde schema's, subdomeinen van andere domeinen, poorten of specifieke paden op te geven met de indeling die wordt gespecificeerd op (https://www.chromium.org/administrators/url-blocklist-filter-format). Het meest specifieke filter bepaalt of een URL geblokkeerd of toegestaan wordt. Het beleid <ph name="URL_ALLOWLIST_POLICY_NAME" /> krijgt voorrang op <ph name="URL_BLOCKLIST_POLICY_NAME" />. Dit beleid is beperkt tot 1000 items. + + Met dit beleid kan ook de automatische aanroep door de browser van een externe app worden ingeschakeld die is geregistreerd als protocolhandler voor de vermelde protocollen, zoals tel: of ssh:. + + Als je het beleid niet instelt, zijn er geen uitzonderingen toegestaan op <ph name="URL_BLOCKLIST_POLICY_NAME" />. + + In <ph name="MS_WIN_NAME" /> is deze functionaliteit alleen beschikbaar voor instanties die zijn gekoppeld aan een <ph name="MS_AD_NAME" />-domein, worden uitgevoerd in Windows 10 Pro of zijn ingeschreven voor <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. In <ph name="MAC_OS_NAME" /> is deze functionaliteit alleen beschikbaar voor instanties die via MDM worden beheerd of via MCX aan een domein zijn gekoppeld.</translation> <translation id="877557628527387598">Inloggen met wachtwoord</translation> <translation id="8777369558049831576">Het selectievakje 'Altijd openen' weergeven in dialoogvensters voor externe protocollen.</translation> <translation id="8786409859071107656">Als je het beleid inschakelt, wordt ook het stroombeheerbeleid voor energie delen via USB ingeschakeld. @@ -5820,6 +5847,13 @@ <translation id="943865157632139008">Hiermee kun je het standaard HTML-weergaveprogramma configureren wanneer <ph name="PRODUCT_FRAME_NAME" /> is geïnstalleerd. De standaardinstelling is om de hostbrowser de weergave te laten regelen, maar je kunt dit aanpassen en <ph name="PRODUCT_FRAME_NAME" /> HTML-pagina's standaard laten weergeven.</translation> <translation id="944817693306670849">Grootte voor schijfcache instellen</translation> +<translation id="947333773406819973">Dit beleid is beëindigd. Gebruik in plaats daarvan het beleid <ph name="URL_BLOCKLIST_POLICY_NAME" />. + + Als je het beleid instelt, wordt voorkomen dat webpagina's met verboden URL's worden geladen. Het beleid biedt een lijst met URL-patronen die verboden URL's definiëren. Als je het beleid niet instelt, worden er geen URL's verboden in de browser. Gebruik een notatie voor het URL-patroon volgens deze indeling (https://www.chromium.org/administrators/url-blocklist-filter-format). Er kunnen maximaal 1000 uitzonderingen worden gedefinieerd in <ph name="URL_ALLOWLIST_POLICY_NAME" />. + + Vanaf <ph name="PRODUCT_NAME" /> versie 73 kun je javascript://* URL's blokkeren. Maar dit heeft alleen gevolgen voor JavaScript die wordt ingevoerd in de adresbalk (of bijvoorbeeld bookmarklets). In-page JavaScript-URL's met dynamisch geladen gegevens vallen niet onder dit beleid. Als je bijvoorbeeld 'example.com/abc' blokkeert, kan de pagina 'example.com' nog steeds 'example.com/abc' laden via XMLHTTPRequest. + + Opmerking: Als je interne URL's met chrome://* blokkeert, kan dit tot onverwachte fouten leiden.</translation> <translation id="957778406002650056">De URL waar de <ph name="PLUGIN_VM_NAME" />-afbeelding kan worden gedownload.</translation> <translation id="974349541138387272">URI-template van gewenste DNS-over-HTTPS-resolver opgeven</translation> <translation id="981346395360763138">Locatieservices van Google uitgeschakeld</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 6caac53..d9b9611 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -1155,23 +1155,6 @@ Se a política for definida como "Somente usuário" (valor 1), os usuários poderão gerenciar os próprios certificados, mas não os do dispositivo.</translation> <translation id="2593762551209145088">O "Navegação segura" nunca está ativado.</translation> -<translation id="2600410857944104685">Lista de configurações dos serviços do Chrome Enterprise Connectors que serão aplicadas ao conector <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, que é acionado quando um arquivo é anexado ao Chrome. - - Os campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> são usados para determinar se o conector enviará um arquivo para análise quando for anexado a uma página específica e quais tags serão incluídas na solicitação de análise desse arquivo. Uma tag correspondente ao padrão "ativar" será incluída na solicitação de análise se o URL da página corresponder a um padrão associado a essa tag. Isso acontecerá apenas se nenhum padrão "desativar" com a mesma tag corresponder ao URL da página. A análise será feita se pelo menos uma tag for incluída na solicitação. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de análise correspondente às configurações. - - Se o campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> for definido como 1, o Chrome esperará uma resposta do serviço de análise antes de dar à página acesso ao arquivo. Qualquer outro valor inteiro dará à página acesso imediato ao arquivo. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla se o Chrome bloqueia ou permite arquivos protegidos por senha. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla se o Chrome bloqueia ou permite arquivos grandes demais para serem analisados (50 MB ou mais). - - O campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> é usado para determinar para quais tags o conector precisa requisitar uma justificativa do usuário para ignorar uma verificação que resulta em um aviso que pode ser ignorado. Se o campo não for definido, presume-se que uma justificativa não é necessária. - - Os campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> são usados para configurar uma mensagem que informa o usuário quando um aviso é exibido após uma verificação identificar um arquivo que viola a política. O campo message contém o texto que será exibido ao usuário e pode ter no máximo 200 caracteres. O campo learn_more_url contém um URL fornecido pelo administrador em que o usuário pode clicar para receber mais informações fornecidas pelo cliente sobre o motivo da ação ter sido bloqueada. O campo language é opcional e contém o idioma da mensagem. Deixar esse campo vazio ou com um valor "padrão" indica uma mensagem a ser usada quando o idioma do usuário não contiver uma mensagem. O campo tag especifica para quais tipos de verificação a mensagem será exibida. A lista custom_messages pode ter zero ou mais entradas. Cada entrada precisa ter campos message e tag não vazios. - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="26023406105317310">Configurar contas do Kerberos</translation> <translation id="2604182581880595781">Configurar políticas relacionadas ao Compartilhamento de arquivos de rede.</translation> <translation id="2615240493030733717">Enviar informações de fuso horário</translation> @@ -1382,7 +1365,6 @@ Se você definir a política, os usuários não poderão mudá-la. Esta política está suspensa. Use a <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">Definir a política especifica uma lista de nomes do host isentos da verificação da política HSTS que faria o upgrade de solicitações http para https. Apenas nomes de host de etiqueta única são permitidos nesta política. Nomes de host precisam ser canonizados. Todos os IDNs precisam ser convertidos no formato de etiqueta A, e todas as letras ASCII precisam ser minúsculas. Essa política se aplica exclusivamente aos nomes do host especificados, e não aos subdomínios desses nomes.</translation> <translation id="2952347049958405264">Restrições:</translation> <translation id="2957047180944828740">Especifica se sites não seguros podem fazer solicitações para endpoints de uma rede mais privada</translation> <translation id="2957506574938329824">Não permite que nenhum site solicite acesso a dispositivos Bluetooth por meio da API Web Bluetooth</translation> @@ -1403,7 +1385,6 @@ Para informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Configurações de comportamento de cookie <ph name="ATTRIBUTE_SAMESITE_NAME" /> legado</translation> -<translation id="2981998788751314539">Permite ignorar páginas de aviso SSL em páginas específicas</translation> <translation id="2985927503455169394">Usa o modo padrão da experiência de integração do Assistente</translation> <translation id="2987155890997901449">Ativar ARC</translation> <translation id="2987227569419001736">Controla o uso da API Web Bluetooth</translation> @@ -1453,13 +1434,6 @@ Essa autenticação sempre é permitida em perfis normais. Na versão 81 e em versões mais recentes do <ph name="PRODUCT_NAME" />, se a política não for definida, a autenticação pelo SO será ativada apenas em sessões normais.</translation> -<translation id="3021288356473993647">Esta política controla a verificação de URLs em tempo real para identificar URLs perigosos. - - Se ela não for definida ou for definida como "Desativada", as verificações do "Navegação segura" do consumidor serão aplicadas. As verificações do "Navegação Segura" do consumidor ainda podem incluir pesquisas em tempo real, dependendo do valor da configuração "Melhorar as pesquisas e a navegação" e da política UrlKeyedAnonymizedDataCollectionEnabled. - - Se esta política for definida como "Ativada", os URLs serão verificados em tempo real de acordo com os Termos de Serviço da empresa. Com isso, o Chrome passará a enviar URLs para o Google Cloud ou terceiros da sua preferência, onde serão verificados em tempo real. A versão de consumidor da verificação em tempo real do "Navegação segura" será desativada. - - Esta política só pode ser definida por meio do Google Admin Console.</translation> <translation id="3021562480854470924">Número de marcos em que a reversão é permitida</translation> <translation id="3023572080620427845">URL de um arquivo XML que contém URLs que serão carregados em um navegador alternativo.</translation> <translation id="302528139996622624">Configurações de imagem</translation> @@ -1527,23 +1501,6 @@ <translation id="3096595567015595053">Lista de plug-ins ativados</translation> <translation id="3101501961102569744">Escolher o modo de especificar as configurações do servidor proxy</translation> <translation id="3101709781009526431">Data e hora</translation> -<translation id="3102177185340515316">Lista de configurações para os serviços de conectores do Chrome Enterprise que serão aplicadas ao conector <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, que é acionado quando o download de um arquivo é feito no Chrome. - - Os campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> são usados para determinar se o conector enviará um arquivo para análise quando o download for feito de uma página específica e quais tags serão incluídas na solicitação de análise do arquivo. Uma tag correspondente ao padrão "ativar" será incluída na solicitação de análise se o URL da página corresponder a um padrão associado a essa tag. Isso acontecerá apenas se nenhum padrão "desativar" com a mesma tag corresponder ao URL da página. A análise será feita se pelo menos uma tag for incluída na solicitação. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de análise correspondente às configurações. - - Se o campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> for definido como 1, o Chrome esperará uma resposta do serviço de análise antes de dar ao usuário acesso ao arquivo. Qualquer outro valor inteiro dará ao usuário acesso imediato ao arquivo. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> controla se o Chrome bloqueia ou permite arquivos protegidos por senha. - - O campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> controla se o Chrome bloqueia ou permite arquivos grandes demais para serem analisados (50 MB ou mais). - - O campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> é usado para determinar para quais tags o conector precisa requisitar uma justificativa do usuário para ignorar uma verificação que resulta em um aviso que pode ser ignorado. Se o campo não for definido, presume-se que uma justificativa não é necessária. - - Os campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> são usados para configurar uma mensagem que informa o usuário quando um aviso é exibido após uma verificação ter um resultado não limpo. O campo message contém o texto que será exibido ao usuário e pode ter no máximo 200 caracteres. O campo learn_more_url contém um URL fornecido pelo administrador em que o usuário pode clicar para receber mais informações fornecidas pelo cliente sobre o motivo da ação ter sido bloqueada. O campo language é opcional e contém o idioma da mensagem. Deixar esse campo vazio ou com um valor "padrão" indica uma mensagem a ser usada quando o idioma do usuário não contiver uma mensagem. O campo tag especifica para quais tipos de verificação a mensagem será exibida. A lista custom_messages pode ter zero ou mais entradas. Cada entrada precisa ter campos message e tag não vazios. - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="3110248563985502478">Esta política foi suspensa na versão M88. O Flash não é mais compatível com o Chrome. Se a política for definida como "Ativada" os plug-ins desatualizados serão usados como plug-ins normais. Se a política for definida como "Desativada", os plug-ins desatualizados não serão usados. Se a política não for definida, os usuários poderão dar permissão para que os plug-ins desatualizados sejam executados.</translation> @@ -1632,21 +1589,6 @@ Deixar a política sem definição tornará indisponíveis as atualizações de firmware do <ph name="TPM_FIRMWARE_UPDATE_TPM" />.</translation> <translation id="3232691106293445015">Conexões HTTP não seguras não têm permissão para usar autenticação <ph name="BASIC_AUTH" />. O uso de HTTPS é obrigatório</translation> -<translation id="3234647080363107863">Lista de configurações para os serviços do Chrome Enterprise Connectors que serão aplicadas ao conector <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, que é acionado quando há a inserção de dados da área de transferência ou de conteúdos da Web (usando o recurso de arrastar e soltar) no Chrome. - - Os campos <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> são usados para determinar se o conector enviará dados para análise quando eles forem inseridos em uma página específica e quais tags serão incluídas na solicitação de análise desses dados. Uma tag correspondente ao padrão "ativar" será incluída na solicitação de análise se o URL da página corresponder a um padrão associado a essa tag. Isso acontecerá apenas se nenhum padrão "desativar" com a mesma tag corresponder ao URL da página. A análise será feita se pelo menos uma tag for incluída na solicitação. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de análise correspondente às configurações. - - Se o campo <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> for definido como 1, o Chrome esperará uma resposta do serviço de análise antes de dar à página acesso aos dados. Qualquer outro valor inteiro dará à página acesso imediato aos dados. - - O campo "<ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" />" indica que o tamanho mínimo (em bytes) dos dados inseridos no Chrome precisa ser igual ou maior para ser verificado. Se o campo não for definido, o valor padrão será de 100 bytes. - - O campo <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> é usado para determinar para quais tags o conector precisa requisitar uma justificativa do usuário para ignorar uma verificação que resulta em um aviso que pode ser ignorado. Se o campo não for definido, presume-se que uma justificativa não é necessária. - - Os campos <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> e <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> são usados para configurar uma mensagem que informa o usuário quando um aviso é exibido após uma verificação ter um arquivo que viola a política. O campo message contém o texto que será exibido ao usuário e pode ter no máximo 200 caracteres. O campo learn_more_url contém um URL fornecido pelo administrador em que o usuário pode clicar para receber mais informações fornecidas pelo cliente sobre o motivo da ação ter sido bloqueada. O campo language é opcional e contém o idioma da mensagem. Deixar esse campo vazio ou com um valor "padrão" indica uma mensagem a ser usada quando o idioma do usuário não contiver uma mensagem. O campo tag especifica para quais tipos de verificação a mensagem será exibida. A lista custom_messages pode ter zero ou mais entradas. Cada entrada precisa ter campos message e tag não vazios. - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="3236046242843493070">Padrões de URL para permitir instalação de extensões, aplicativos e scripts do usuário a partir de</translation> <translation id="3240609035816615922">Política de acesso à configuração de impressoras.</translation> <translation id="324062325008698789">Configura uma lista de impressoras</translation> @@ -2629,11 +2571,6 @@ Quando essa política não for definida ou estiver ativada, as verificações de interceptação de DNS são executadas. Quando a política é desativada explicitamente, elas não são executadas.</translation> <translation id="4700190441681139987">Não permitir o acesso de nenhum site aos sensores</translation> <translation id="4703402283970867140">Ativar modelo de escurecimento inteligente para aumentar o tempo que a tela permanece ativa</translation> -<translation id="4715026656747891013">Lista de configurações para os serviços do Chrome Enterprise Connectors que serão aplicadas ao conector <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />, que é acionado quando há uma ocorrência de segurança no Chrome. Isso inclui vereditos negativos do Enterprise Connectors, reutilização de senha, navegação para páginas não seguras e outras ações do usuário relacionadas à segurança. - - O campo <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> identifica o provedor de serviços de relatório ao qual as configurações correspondem. O campo <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> identifica os eventos ativados por esse provedor. - - Esta política só pode ser definida pelo Google Admin Console.</translation> <translation id="4722122254122249791">Ativar o isolamento de sites para origens específicas</translation> <translation id="4723122879352880315">Esta configuração permite que os usuários autentiquem para um proxy gerenciado com autenticação NTLM usando as credenciais de login do <ph name="PRODUCT_OS_NAME" />. @@ -4117,13 +4054,6 @@ Especifica os sinalizadores a serem aplicados ao <ph name="PRODUCT_NAME" /> quando ele for iniciado. Os sinalizadores especificados são aplicados apenas na tela de login. Os sinalizadores definidos por meio desta política não são propagados em sessões de usuário.</translation> <translation id="685769593149966548">Aplicar o Modo restrito rigoroso para o YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 ou versão posterior</translation> -<translation id="6877233375929006871">Se a política for definida, será possível configurar uma lista de padrões de URL que especifica os sites em que o usuário poderá clicar para ignorar páginas de aviso exibidas pelo <ph name="PRODUCT_NAME" /> ao acessar sites com erros de SSL. Os usuários não poderão clicar para ignorar páginas com avisos SSL em sites que não estejam na lista. - - Se <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> estiver desativada, a política não terá efeito. - - Se a política for deixada sem definição, <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> será aplicada em todos os sites. - - Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> não é um valor aceitável para esta política.</translation> <translation id="68818134518270542">A definição da política especifica os apps que os usuários podem ativar para fazer anotações na tela de bloqueio do <ph name="PRODUCT_OS_NAME" />. Se o app preferencial for ativado na tela de bloqueio, será exibido um elemento de IU para abri-lo. Quando iniciado, o app poderá criar uma janela própria na parte superior da tela de bloqueio e anotações no contexto dessa tela. Quando a sessão do usuário principal for desbloqueada, será possível importar para ela as notas criadas. Apenas os apps de anotação do <ph name="PRODUCT_NAME" /> são compatíveis com a tela de bloqueio. @@ -4621,11 +4551,6 @@ Se a política for definida como falsa, as atualizações dos componentes serão desativadas. Entretanto, alguns componentes estarão isentos desta política: atualizações em quaisquer componentes que não contenham código executável, que não alterem significativamente o comportamento do navegador ou que sejam essenciais para a segurança não serão desativadas. Entre os exemplos desses componentes estão as listas de revogação de certificado e os dados do Navegação segura. Consulte https://developers.google.com/safe-browsing para saber mais informações sobre o recurso Navegação segura.</translation> -<translation id="7563608136659080810">Esta política está obsoleta. Use a <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />. - - A definição da política atribui servidores que podem ser delegados pelo <ph name="PRODUCT_NAME" />. Separe vários nomes de servidor usando vírgulas. Caracteres curinga (<ph name="WILDCARD_VALUE" />) são permitidos. - - Se a política não for definida, o <ph name="PRODUCT_NAME" /> não delegará credenciais de usuário, mesmo que um servidor seja detectado como intranet.</translation> <translation id="7566878661979235378">Tipo de autenticação de login SAML</translation> <translation id="7567373982693549834">Esta política controla, no lugar de cada usuário, o uso de apps Android de fontes não confiáveis (diferentes do Google Play).
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index fbb01428..8fe8a9a 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -1145,23 +1145,6 @@ Если выбрано значение 1 (UserOnly), то можно управлять только сертификатами пользователей, но не сертификатами на уровне устройства.</translation> <translation id="2593762551209145088">Безопасный просмотр всегда отключен</translation> -<translation id="2600410857944104685">Список настроек, применяемых к коннектору <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается, когда к Chrome прикрепляется файл. - - Значения полей <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> определяют, должен ли коннектор отправить на анализ файл, который прикрепляется к определенной странице, и какие теги необходимо добавить в запрос на анализ этого файла. Тег, соответствующий шаблону в поле enable, будет включен в запрос на анализ, если URL страницы совпадет с шаблоном, связанным с этим тегом. При этом URL не должен соответствовать ни одному шаблону с таким же тегом в поле disable. Данные отправляются на анализ, если хотя бы один тег подходит для включения в запрос. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг анализа соответствуют эти настройки. - - Значение "1" в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указывает, что Chrome будет ждать ответа от сервиса анализа, прежде чем предоставлять странице доступ к файлу. Любое другое целое число в этом поле означает, что страница получит доступ к файлу сразу. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> определяет, будет ли Chrome блокировать или разрешать файлы, защищенные паролем. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> определяет, будет ли Chrome блокировать или разрешать слишком большие для анализа файлы (более 50 МБ). - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> определяет, для каких тегов коннектор потребует от пользователя ввести обоснование для обхода проверки. При обходе будет показано предупреждение. Если значение не указано, обоснование не требуется. - - Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> позволяют настроить сообщение, которое будет видеть пользователь при получении уведомления о неудовлетворительном результате проверки. В поле message указывается текст этого сообщения (максимум 200 символов). В поле learn_more_url содержится URL, предоставленный администратором, нажав на который пользователь может получить подробную клиентскую информацию о причине блокировки действия. Поле language заполнять необязательно. В нем указывается язык сообщения. Если задано значение default или поле не заполнено, это сообщение используется, когда нет сообщения на языке пользователя. Значение поля tag определяет тип проверок, для которых появляется сообщение. Список custom_messages может быть пустым. Если он содержит элементы, для каждого из них необходимо заполнить поля message и tag. - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="26023406105317310">Настроить аккаунты Kerberos</translation> <translation id="2604182581880595781">Настраивает правила, связанные с функцией совместного доступа к файлам в сети.</translation> <translation id="2615240493030733717">Передача информации о часовом поясе</translation> @@ -1373,7 +1356,6 @@ Если правило настроено, пользователи не могут изменить его. Это правило больше не поддерживается. Используйте вместо него правило <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">Правило позволяет указать список имен хостов, для которых не будет проверяться использование механизма HSTS (он позволяет изменить протокол, по которому осуществляются запросы, с HTTP на HTTPS). В списке правила могут быть только одноуровневые имена. Имена хостов необходимо нормализовать: доменные имена, содержащие символы национальных алфавитов, нужно преобразовать в формат А-метки, а буквы из таблицы ASCII сделать строчными. Это правило действует только для определенных имен хостов, указанных в списке. На субдомены оно не распространяется.</translation> <translation id="2952347049958405264">Ограничения:</translation> <translation id="2957047180944828740">Позволяет разрешать или запрещать для небезопасных сайтов отправку запросов к конечным точкам более частной сети.</translation> <translation id="2957506574938329824">Запретить всем сайтам запрашивать доступ к Bluetooth-устройствам через Web Bluetooth API</translation> @@ -1394,7 +1376,6 @@ О допустимых шаблонах URL рассказано на странице https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Ранее использовавшиеся настройки для файлов cookie<ph name="ATTRIBUTE_SAMESITE_NAME" /></translation> -<translation id="2981998788751314539">Разрешить пропуск предупреждений об ошибках SSL на определенных страницах</translation> <translation id="2985927503455169394">Использовать стандартный режим знакомства с Ассистентом</translation> <translation id="2987155890997901449">Включить ARC</translation> <translation id="2987227569419001736">Контроль использования Web Bluetooth API</translation> @@ -1444,13 +1425,6 @@ Обратите внимание, что в обычных профилях она всегда разрешена. В <ph name="PRODUCT_NAME" /> 81 и более поздних версиях: если это правило не настроено, пассивная аутентификация будет включена только в обычных сеансах.</translation> -<translation id="3021288356473993647">Это правило определяет, выявляются ли в режиме реального времени опасные URL. - - Если правило не задано или выбран вариант "Отключено", применяются пользовательские параметры проверки на соответствие критериям Безопасного просмотра. В таком случае проверка тоже может выполняться в режиме реального времени. Это зависит от установленной пользователем настройки "Помогать улучшить просмотр страниц и поиск" и значения, заданного для правила UrlKeyedAnonymizedDataCollectionEnabled. - - Если же выбран вариант "Включено", URL мгновенно проверяются согласно Условиям использования Chrome Enterprise. Для этого Chrome отправляет URL в Google Cloud или указанным вами третьим лицам. В таком случае пользовательские параметры проверки отключаются. - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="3021562480854470924">Число контрольных точек, до которых разрешен возврат</translation> <translation id="3023572080620427845">URL XML-файла, содержащего список URL, которые должны загружаться в альтернативном браузере</translation> <translation id="302528139996622624">Настройки изображений</translation> @@ -1518,23 +1492,6 @@ <translation id="3096595567015595053">Список включенных плагинов</translation> <translation id="3101501961102569744">Выбрать способ настройки прокси-сервера</translation> <translation id="3101709781009526431">Дата и время</translation> -<translation id="3102177185340515316">Список настроек, применяемых к коннектору <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается при скачивании любого файла из Chrome. - - Значения полей <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> определяют, должен ли коннектор отправить на анализ файл, который скачивается с определенной страницы, и какие теги необходимо добавить в запрос на анализ этого файла. Тег, соответствующий шаблону в поле enable, будет включен в запрос на анализ, если URL страницы совпадет с шаблоном, связанным с этим тегом. При этом URL не должен соответствовать ни одному шаблону с таким же тегом в поле disable. Данные отправляются на анализ, если хотя бы один тег подходит для включения в запрос. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг анализа соответствуют эти настройки. - - Значение "1" в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указывает, что Chrome будет ждать ответа от сервиса анализа, прежде чем предоставлять пользователю доступ к скачанному файлу. Любое другое целое число в этом поле означает, что пользователь получит доступ к файлу сразу. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> определяет, будет ли Chrome блокировать или разрешать файлы, защищенные паролем. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> определяет, будет ли Chrome блокировать или разрешать слишком большие для анализа файлы (более 50 МБ). - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> определяет, для каких тегов коннектор потребует от пользователя ввести обоснование для обхода проверки. При обходе будет показано предупреждение. Если значение не указано, обоснование не требуется. - - Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> позволяют настроить сообщение, которое будет видеть пользователь при получении уведомления о неудовлетворительном результате проверки. В поле message указывается текст этого сообщения (максимум 200 символов). В поле learn_more_url содержится URL, предоставленный администратором, нажав на который пользователь может получить подробную клиентскую информацию о причине блокировки действия. Поле language заполнять необязательно. В нем указывается язык сообщения. Если задано значение default или поле не заполнено, это сообщение используется, когда нет сообщения на языке пользователя. Значение поля tag определяет тип проверок, для которых появляется сообщение. Список custom_messages может быть пустым. Если он содержит элементы, для каждого из них необходимо заполнить поля message и tag. - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="3110248563985502478">Поддержка этого правила прекращена в версии M88. Плагин Flash больше не поддерживается в Chrome. Если это правило включено, устаревшие плагины используются как обычные. Если правило выключено, они не используются. Если правило не настроено, пользователи смогут разрешать или запрещать работу устаревших плагинов.</translation> @@ -1621,21 +1578,6 @@ Если правило не задано, встроенное ПО <ph name="TPM_FIRMWARE_UPDATE_TPM" /> не будет обновляться.</translation> <translation id="3232691106293445015"><ph name="BASIC_AUTH" /> аутентификация при подключении по небезопасному протоколу HTTP запрещена, требуется HTTPS</translation> -<translation id="3234647080363107863">Список настроек, применяемых к коннектору <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается при вставке в Chrome данных из буфера обмена или перетаскивании веб-контента. - - Значения полей <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> определяют, должен ли коннектор отправить на анализ данные, которые вставляются на определенной странице, и какие теги необходимо добавить в запрос на анализ этих данных. Тег, соответствующий шаблону в поле enable, будет включен в запрос на анализ, если URL страницы совпадет с шаблоном, связанным с этим тегом. При этом URL не должен соответствовать ни одному шаблону с таким же тегом в поле disable. Данные отправляются на анализ, если хотя бы один тег подходит для включения в запрос. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг анализа соответствуют эти настройки. - - Значение "1" в поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указывает, что Chrome будет ждать ответа от сервиса анализа, прежде чем предоставлять странице доступ к данным. Любое другое целое число в этом поле означает, что страница получит доступ к данным сразу. - - В поле <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> указывается минимальное количество байтов, которое должны включать введенные в Chrome данные, чтобы был выполнен их анализ. Если не указать собственное значение, минимальное количество по умолчанию будет равно 100 байтам. - - Значение в поле <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> определяет, для каких тегов коннектор потребует от пользователя ввести обоснование для обхода проверки. При обходе будет показано предупреждение. Если значение не указано, обоснование не требуется. - - Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> и <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> позволяют настроить сообщение, которое будет видеть пользователь при получении уведомления о неудовлетворительном результате проверки. В поле message указывается текст этого сообщения (максимум 200 символов). В поле learn_more_url содержится URL, предоставленный администратором, нажав на который пользователь может получить подробную клиентскую информацию о причине блокировки действия. Поле language заполнять необязательно. В нем указывается язык сообщения. Если задано значение default или поле не заполнено, это сообщение используется, когда нет сообщения на языке пользователя. Значение поля tag определяет тип проверок, для которых появляется сообщение. Список custom_messages может быть пустым. Если он содержит элементы, для каждого из них необходимо заполнить поля message и tag. - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="3236046242843493070">Шаблоны URL, с которых разрешается установка расширений, приложений и пользовательских скриптов</translation> <translation id="3240609035816615922">Настройка доступа к принтерам из файла конфигурации</translation> <translation id="324062325008698789">Позволяет настроить список принтеров.</translation> @@ -2634,11 +2576,6 @@ Если правило не настроено или включено, проводятся проверки на перехват DNS. Если правило отключено в явном виде, они не проводятся.</translation> <translation id="4700190441681139987">Не разрешать сайтам доступ к датчикам</translation> <translation id="4703402283970867140">Включить умное затемнение, чтобы продлить время до затемнения экрана</translation> -<translation id="4715026656747891013">Список настроек, применяемых к коннектору <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> для Chrome Enterprise. Коннектор запускается, когда в Chrome регистрируются события безопасности, например повторное использование паролей, переход на небезопасные страницы, получение отрицательных результатов анализа, запущенного коннекторами Chrome Enterprise, и другие действия пользователей, потенциально нарушающие правила безопасности. - - Значение поля <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> определяет, какому поставщику услуг отчетов соответствуют эти настройки. Значение поля <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> определяет, какие события допустимы для этого поставщика. - - Это правило можно настроить только через консоль администратора Google.</translation> <translation id="4722122254122249791">Включить изоляцию для определенных сайтов</translation> <translation id="4723122879352880315">Эта настройка позволяет определить, могут ли пользователи с помощью учетных данных устройства <ph name="PRODUCT_OS_NAME" /> подключаться к прокси-серверу, в котором применяется протокол NTLM. @@ -4123,13 +4060,6 @@ Определяет, какие настройки будут применяться при запуске <ph name="PRODUCT_NAME" />. Они используются только на экране входа и не распространяются на сеансы пользователей.</translation> <translation id="685769593149966548">Обязательное использование строгого Безопасного режима для YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 и более поздних версиях</translation> -<translation id="6877233375929006871">Позволяет задать список шаблонов URL для указания сайтов, где пользователи могут пропускать страницы предупреждений, которые <ph name="PRODUCT_NAME" /> показывает при переходе на сайты с ошибками SSL. Пользователи не смогут пропускать страницы предупреждений об ошибках SSL на сайтах, которых нет в этом списке. - - Если правило <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> отключено, это правило игнорируется. - - Если правило не настроено, для всех сайтов действует правило <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" />. - - Подробнее о допустимых шаблонах <ph name="URL_LABEL" />: https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Значение <ph name="WILDCARD_VALUE" /> не поддерживается для этого правила.</translation> <translation id="68818134518270542">Правило позволяет указать список приложений, которые можно использовать для создания заметок на заблокированном экране <ph name="PRODUCT_OS_NAME" />. Если предпочтительное приложение есть в списке, на заблокированном экране будет виден специальный элемент интерфейса, позволяющий запустить это приложение. При запуске окно приложения откроется поверх заблокированного экрана, и у пользователя будет возможность создавать заметки. После разблокировки экрана приложение сможет импортировать созданные заметки в основной сеанс пользователя. На заблокированном экране возможен запуск только тех приложений для заметок, которые предназначены для <ph name="PRODUCT_NAME" />. @@ -4631,11 +4561,6 @@ Если задано значение False, большая часть компонентов не будет обновляться. Исключение составят компоненты, которые не содержат исполняемый код, отвечают за безопасность браузера или существенно не меняют его работу. Примеры таких компонентов: списки отозванных сертификатов и данные Безопасного просмотра. Дополнительную информацию о Безопасном просмотре можно прочитать на странице https://developers.google.com/safe-browsing.</translation> -<translation id="7563608136659080810">Это правило больше не поддерживается. Используйте вместо него правило <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />. - - Правило позволяет указать список серверов, которым <ph name="PRODUCT_NAME" /> может предоставлять учетные данные пользователей. Названия серверов нужно разделять запятыми. Допустимы подстановочные знаки (<ph name="WILDCARD_VALUE" />). - - Если правило не настроено, <ph name="PRODUCT_NAME" /> не будет передавать учетные данные пользователей серверам, в том числе находящимся в интранете.</translation> <translation id="7566878661979235378">Тип аутентификации при входе через SAML</translation> <translation id="7567373982693549834">Это правило определяет, могут ли конкретные пользователи работать с приложениями для Android из ненадежных источников (не из Google Play).
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 76af373c..b1ad55a 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -1143,23 +1143,6 @@ การตั้งค่านโยบายเป็น "ผู้ใช้เท่านั้น" (ค่า 1) จะทำให้ผู้ใช้จัดการใบรับรองได้ แต่ต้องไม่ใช่ใบรับรองแบบทั่วทั้งอุปกรณ์</translation> <translation id="2593762551209145088">Safe Browsing จะไม่ทำงานเลย</translation> -<translation id="2600410857944104685">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีไฟล์แนบไปกับ Chrome - - ช่อง <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งไฟล์สำหรับการวิเคราะห์หรือไม่เมื่อมีการแนบไฟล์มากับหน้าหนึ่งๆ และแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับไฟล์นั้น แท็กที่สอดคล้องกับรูปแบบ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หาก URL ของหน้าตรงกับรูปแบบที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีรูปแบบ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับ URL ของหน้า การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า Chrome จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนให้สิทธิ์หน้าในการเข้าถึงไฟล์ ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า Chrome จะให้สิทธิ์เข้าถึงหน้าแก่ไฟล์โดยทันที - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตไฟล์ที่มีการป้องกันด้วยรหัสผ่าน - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตให้วิเคราะห์ไฟล์ที่มีขนาดใหญ่เกินไป (50 MB ขึ้นไป) - - ช่อง <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อต้องกำหนดให้ผู้ใช้ป้อนเหตุผลสำหรับแท็กใดเพื่อข้ามการสแกนที่ทำให้เกิดคำเตือนแบบข้ามได้ หากไม่ได้ตั้งค่าช่องนี้ ระบบจะถือว่าไม่จำเป็นต้องป้อนเหตุผล - - ช่อง <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> ใช้เพื่อกำหนดค่าข้อความที่จะแสดงแก่ผู้ใช้เมื่อมีคำเตือนปรากฏขึ้นหลังจากที่การสแกนตรวจพบการละเมิด ช่องข้อความมีข้อความที่จะแสดงต่อผู้ใช้และต้องมีความยาวไม่เกิน 200 อักขระ ช่อง learn_more_url มี URL จากผู้ดูแลระบบ ซึ่งผู้ใช้สามารถคลิกเพื่อดูข้อมูลเพิ่มเติมจากลูกค้าเกี่ยวกับเหตุผลที่การดำเนินการถูกบล็อก ช่องภาษาจะมีหรือไม่มีก็ได้และจะมีภาษาของข้อความ ช่องภาษาที่เว้นว่างไว้หรือมีค่าเป็น "ค่าเริ่มต้น" จะระบุข้อความที่จะใช้เมื่อภาษาของผู้ใช้ไม่มีข้อความ ช่องแท็กจะระบุประเภทการสแกนที่จะมีการแสดงข้อความ รายการ custom_messages อาจไม่มีรายการย่อยเลยหรือมีรายการย่อยเพิ่มเติม โดยที่รายการย่อยแต่ละรายการจำเป็นต้องมีช่องข้อความและช่องแท็กที่ไม่เว้นว่างไว้ - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="26023406105317310">กำหนดค่าบัญชี Kerberos</translation> <translation id="2604182581880595781">กำหนดค่านโยบายที่เกี่ยวข้องกับพื้นที่แชร์ไฟล์ของเครือข่าย</translation> <translation id="2615240493030733717">รายงานข้อมูลเขตเวลา</translation> @@ -1370,7 +1353,6 @@ หากคุณตั้งค่านโยบายไว้ ผู้ใช้จะเปลี่ยนไม่ได้ นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้ <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> แทน</translation> -<translation id="2949765875529121431">การตั้งค่านโยบายจะเป็นการระบุรายชื่อโฮสต์ที่ได้รับการยกเว้นจากการตรวจสอบนโยบาย HSTS ที่อาจอัปเกรดคำขอจาก http เป็น https นโยบายนี้อนุญาตเฉพาะชื่อโฮสต์ที่ติดป้ายกำกับป้ายเดียวเท่านั้น ชื่อโฮสต์ต้องกำหนดเป็น Canonical ซึ่งหมายความว่าต้องแปลง IDN ทั้งหมดเป็นรูปแบบ A-label และตัวอักษร ASCII ทั้งหมดต้องเป็นตัวพิมพ์เล็ก นโยบายนี้มีผลเฉพาะกับชื่อโฮสต์ที่ระบุไว้บางรายการเท่านั้น ไม่ใช่กับโดเมนย่อยของชื่อที่ระบุ</translation> <translation id="2952347049958405264">ข้อจำกัด:</translation> <translation id="2957047180944828740">ระบุว่าจะอนุญาตให้เว็บไซต์ที่ไม่ปลอดภัยส่งคำขอไปยังปลายทางเครือข่ายที่มีความเป็นส่วนตัวมากกว่าหรือไม่</translation> <translation id="2957506574938329824">ไม่อนุญาตให้เว็บไซต์ใดๆ ขอสิทธิ์เข้าถึงอุปกรณ์บลูทูธผ่าน Web Bluetooth API</translation> @@ -1391,7 +1373,6 @@ ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ URL ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns</translation> <translation id="2976429807269247880">การตั้งค่าลักษณะการทำงานของคุกกี้ <ph name="ATTRIBUTE_SAMESITE_NAME" /> เดิม</translation> -<translation id="2981998788751314539">อนุญาตให้ดำเนินการจากหน้าคำเตือน SSL ในบางหน้า</translation> <translation id="2985927503455169394">ใช้โหมดเริ่มต้นของการเริ่มต้นใช้งาน Assistant</translation> <translation id="2987155890997901449">เปิดใช้ ARC</translation> <translation id="2987227569419001736">ควบคุมการใช้ Web Bluetooth API</translation> @@ -1441,13 +1422,6 @@ โปรดทราบว่าระบบจะอนุญาตการตรวจสอบสิทธิ์แบบแอมเบียนท์ในโปรไฟล์ปกติเสมอ ใน <ph name="PRODUCT_NAME" /> เวอร์ชัน 81 ขึ้นไป หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะเปิดใช้การตรวจสอบสิทธิ์แบบแอมเบียนท์เฉพาะในเซสชันปกติ</translation> -<translation id="3021288356473993647">นโยบายนี้ควบคุมการตรวจสอบ URL แบบเรียลไทม์เพื่อระบุ URL ที่เป็นอันตราย - - หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น "ปิดใช้" ระบบจะใช้การตรวจสอบกับ Google Safe Browsing สำหรับผู้บริโภค การตรวจสอบกับ Google Safe Browsing สำหรับผู้บริโภคยังคงรวมการค้นหาแบบเรียลไทม์ได้อยู่ โดยขึ้นอยู่กับค่าของการตั้งค่า "ปรับปรุงการค้นหาและการท่องเว็บให้ดียิ่งขึ้น" และค่าของนโยบาย UrlKeyedAnonymizedDataCollectionEnabled - - หากตั้งค่านโยบายนี้เป็น "เปิดใช้" ระบบจะส่ง URL ไปสแกนแบบเรียลไทม์ตามข้อกำหนดในการให้บริการขององค์กร ซึ่งจะทำให้ Chrome ส่ง URL ไปยัง Google Cloud หรือบุคคลที่สามที่คุณเลือกเพื่อตรวจสอบ URL เหล่านั้นแบบเรียลไทม์ ระบบจะปิดการค้นหาแบบเรียลไทม์ของ Google Safe Browsing เวอร์ชันสำหรับผู้บริโภค - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="3021562480854470924">อนุญาตให้มีจุดการย้อนกลับ</translation> <translation id="3023572080620427845">URL ของไฟล์ XML ที่มี URL ที่จะโหลดในเบราว์เซอร์สำรอง</translation> <translation id="302528139996622624">การตั้งค่ารูปภาพ</translation> @@ -1515,23 +1489,6 @@ <translation id="3096595567015595053">รายการปลั๊กอินที่เปิดใช้งาน</translation> <translation id="3101501961102569744">เลือกวิธีระบุการตั้งค่าพร็อกซีเซิร์ฟเวอร์</translation> <translation id="3101709781009526431">วันที่และเวลา</translation> -<translation id="3102177185340515316">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีการดาวน์โหลดไฟล์ใน Chrome - - ช่อง <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งไฟล์สำหรับการวิเคราะห์หรือไม่เมื่อมีการดาวน์โหลดไฟล์จากหน้าหนึ่งๆ และแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับไฟล์นั้น แท็กที่สอดคล้องกับรูปแบบ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หาก URL ของหน้าตรงกับรูปแบบที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีรูปแบบ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับ URL ของหน้า การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า Chrome จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนให้สิทธิ์ผู้ใช้เข้าถึงไฟล์ที่ดาวน์โหลด ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า Chrome จะให้สิทธิ์ผู้ใช้เข้าถึงไฟล์นั้นทันที - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตไฟล์ที่มีการป้องกันด้วยรหัสผ่าน - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> จะควบคุมให้ Chrome บล็อกหรืออนุญาตให้วิเคราะห์ไฟล์ที่มีขนาดใหญ่เกินไป (50 MB ขึ้นไป) - - ช่อง <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อต้องกำหนดให้ผู้ใช้ป้อนเหตุผลสำหรับแท็กใดเพื่อข้ามการสแกนที่ทำให้เกิดคำเตือนแบบข้ามได้ หากไม่ได้ตั้งค่าช่องนี้ ระบบจะถือว่าไม่จำเป็นต้องป้อนเหตุผล - - ช่อง <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> ใช้เพื่อกำหนดค่าข้อความที่จะแสดงแก่ผู้ใช้เมื่อมีคำเตือนปรากฏขึ้นหลังจากที่การสแกนตรวจพบการละเมิด ช่องข้อความมีข้อความที่จะแสดงต่อผู้ใช้และต้องมีความยาวไม่เกิน 200 อักขระ ช่อง learn_more_url มี URL จากผู้ดูแลระบบ ซึ่งผู้ใช้สามารถคลิกเพื่อดูข้อมูลเพิ่มเติมจากลูกค้าเกี่ยวกับเหตุผลที่การดำเนินการถูกบล็อก ช่องภาษาจะมีหรือไม่มีก็ได้และจะมีภาษาของข้อความ ช่องภาษาที่เว้นว่างไว้หรือมีค่าเป็น "ค่าเริ่มต้น" จะระบุข้อความที่จะใช้เมื่อภาษาของผู้ใช้ไม่มีข้อความ ช่องแท็กจะระบุประเภทการสแกนที่จะมีการแสดงข้อความ รายการ custom_messages อาจไม่มีรายการย่อยเลยหรือมีรายการย่อยเพิ่มเติม โดยที่รายการย่อยแต่ละรายการจำเป็นต้องมีช่องข้อความและช่องแท็กที่ไม่เว้นว่างไว้ - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="3110248563985502478">นโยบายนี้เลิกใช้งานไปแล้วในรุ่น M88 และ Chrome ไม่รองรับ Flash อีกต่อไป การตั้งค่านโยบายเป็น "เปิดใช้" หมายความว่าระบบจะใช้ปลั๊กอินเก่าเป็นปลั๊กอินปกติ การตั้งค่านโยบายเป็น "ปิดใช้" หมายความว่าจะไม่มีการใช้ปลั๊กอินเก่า การไม่ตั้งค่านโยบายหมายความว่าระบบจะขออนุญาตผู้ใช้เพื่อเรียกใช้ปลั๊กอินเก่า</translation> @@ -1620,21 +1577,6 @@ การไม่ตั้งค่านโยบายจะทำให้การอัปเดตเฟิร์มแวร์ <ph name="TPM_FIRMWARE_UPDATE_TPM" /> ไม่พร้อมใช้งาน</translation> <translation id="3232691106293445015">การเชื่อมต่อผ่าน HTTP ที่ไม่ปลอดภัยไม่ได้รับอนุญาตให้ใช้การตรวจสอบสิทธิ์<ph name="BASIC_AUTH" /> ต้องใช้ HTTPS</translation> -<translation id="3234647080363107863">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อมีการป้อนข้อมูลใน Chrome จากคลิปบอร์ดหรือผ่านการลากและวางเนื้อหาเว็บ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อควรส่งข้อมูลสำหรับการวิเคราะห์หรือไม่เมื่อมีการป้อนข้อมูลจากหน้าหนึ่งๆ และแท็กใดที่จะรวมอยู่ในคำขอการวิเคราะห์สำหรับข้อมูลนั้น แท็กที่สอดคล้องกับรูปแบบ "เปิดใช้" จะรวมอยู่ในคำขอการวิเคราะห์หาก URL ของหน้าตรงกับรูปแบบที่เกี่ยวข้องกับแท็กดังกล่าวตราบใดที่ไม่มีรูปแบบ "ปิดใช้" ที่มีแท็กเดียวกันนั้นตรงกับ URL ของหน้า การวิเคราะห์จะเกิดขึ้นหากมีอย่างน้อย 1 แท็กในคำขอ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> จะระบุว่าผู้ให้บริการการวิเคราะห์ใดที่สอดคล้องกับการตั้งค่า - - ช่อง <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> ที่ตั้งไว้เป็น 1 หมายความว่า Chrome จะรอให้มีการตอบสนองจากบริการการวิเคราะห์ก่อนให้สิทธิ์หน้าในการเข้าถึงข้อมูล ค่าที่เป็นจำนวนเต็มอื่นๆ หมายความว่า Chrome จะให้สิทธิ์หน้าในการเข้าถึงข้อมูลโดยทันที - - ช่อง <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> ระบุขนาดขั้นต่ำ (หน่วยเป็นไบต์) ซึ่งข้อมูลที่ป้อนใน Chrome ต้องเท่ากับหรือเกินค่านี้จึงจะได้รับการสแกน ค่าเริ่มต้นคือ 100 ไบต์หากไม่ได้ตั้งค่าช่องนี้ - - ช่อง <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> ใช้เพื่อกำหนดว่าเครื่องมือเชื่อมต่อต้องกำหนดให้ผู้ใช้ป้อนเหตุผลสำหรับแท็กใดเพื่อข้ามการสแกนที่ทำให้เกิดคำเตือนแบบข้ามได้ หากไม่ได้ตั้งค่าช่องนี้ ระบบจะถือว่าไม่จำเป็นต้องป้อนเหตุผล - - ช่อง <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> และ <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> ใช้เพื่อกำหนดค่าข้อความที่จะแสดงแก่ผู้ใช้เมื่อมีคำเตือนปรากฏขึ้นหลังจากที่การสแกนตรวจพบการละเมิด ช่องข้อความมีข้อความที่จะแสดงต่อผู้ใช้และต้องมีความยาวไม่เกิน 200 อักขระ ช่อง learn_more_url มี URL จากผู้ดูแลระบบ ซึ่งผู้ใช้สามารถคลิกเพื่อดูข้อมูลเพิ่มเติมจากลูกค้าเกี่ยวกับเหตุผลที่การดำเนินการถูกบล็อก ช่องภาษาจะมีหรือไม่มีก็ได้และจะมีภาษาของข้อความ ช่องภาษาที่เว้นว่างไว้หรือมีค่าเป็น "ค่าเริ่มต้น" จะระบุข้อความที่จะใช้เมื่อภาษาของผู้ใช้ไม่มีข้อความ ช่องแท็กจะระบุประเภทการสแกนที่จะมีการแสดงข้อความ รายการ custom_messages อาจไม่มีรายการย่อยเลยหรือมีรายการย่อยเพิ่มเติม โดยที่รายการย่อยแต่ละรายการจำเป็นต้องมีช่องข้อความและช่องแท็กที่ไม่เว้นว่างไว้ - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="3236046242843493070">รูปแบบ URL ที่อนุญาตส่วนขยาย แอปพลิเคชัน และการติดตั้งสคริปต์ของผู้ใช้จาก</translation> <translation id="3240609035816615922">นโยบายการเข้าถึงการกำหนดค่าเครื่องพิมพ์</translation> <translation id="324062325008698789">กำหนดค่ารายการเครื่องพิมพ์</translation> @@ -2624,11 +2566,6 @@ หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็นเปิดใช้ การตรวจสอบการสกัดกั้น DNS จะทำงาน หากตั้งค่าอย่างชัดแจ้งว่าปิดใช้ การตรวจสอบจะไม่ทำงาน</translation> <translation id="4700190441681139987">ไม่อนุญาตให้เว็บไซต์ใดๆ เข้าถึงเซ็นเซอร์</translation> <translation id="4703402283970867140">เปิดใช้รูปแบบการหรี่แสงอัจฉริยะเพื่อขยายเวลาจนกว่าหน้าจอจะหรี่แสง</translation> -<translation id="4715026656747891013">รายการของการตั้งค่าบริการเครื่องมือเชื่อมต่อ Chrome Enterprise ที่จะใช้กับเครื่องมือเชื่อมต่อ <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> Enterprise ซึ่งจะเรียกใช้งานเมื่อเกิดการดำเนินการด้านความปลอดภัยใน Chrome โดยจะรวมถึงคำตัดสินในแง่ลบจากเครื่องมือเชื่อมต่อ Enterprise ของการวิเคราะห์ การใช้รหัสผ่านซ้ำ การนำทางไปยังหน้าที่ไม่ปลอดภัย และการดำเนินการอื่นๆ ของผู้ใช้ที่ละเอียดอ่อนต่อความปลอดภัย - - ช่อง <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> ระบุว่าผู้ให้บริการการรายงานใดที่สอดคล้องกับการตั้งค่า ส่วนช่อง <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> ระบุเหตุการณ์ที่เปิดใช้สำหรับผู้ให้บริการรายนี้ - - นโยบายนี้ตั้งค่าได้จากคอนโซล Google Admin เท่านั้น</translation> <translation id="4722122254122249791">เปิดใช้การแยกเว็บไซต์สำหรับต้นทางที่เจาะจง</translation> <translation id="4723122879352880315">การตั้งค่านี้อนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์ไปยังพร็อกซีที่มีการจัดการซึ่งมีการรักษาความปลอดภัยด้วยการตรวจสอบสิทธิ์ NTLM โดยใช้ข้อมูลเข้าสู่ระบบ <ph name="PRODUCT_OS_NAME" /> @@ -4112,13 +4049,6 @@ ระบุการแจ้งว่าไม่เหมาะสมที่ควรนำไปใช้กับ <ph name="PRODUCT_NAME" /> เมื่อเริ่มใช้งาน ระบบจะใช้การแจ้งที่ระบุนี้ในหน้าจอการเข้าสู่ระบบเท่านั้น การแจ้งว่าไม่เหมาะสมที่ตั้งผ่านนโยบายนี้จะไม่เผยแพร่ในเซสชันผู้ใช้</translation> <translation id="685769593149966548">บังคับใช้โหมดที่จำกัดเข้มงวดใน YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 ขึ้นไป</translation> -<translation id="6877233375929006871">การตั้งค่านโยบายนี้จะทำให้คุณสร้างรายการรูปแบบ URL ได้ ซึ่งจะระบุเว็บไซต์ที่ผู้ใช้สามารถคลิกผ่านหน้าคำเตือนที่ <ph name="PRODUCT_NAME" /> แสดงขึ้นเมื่อผู้ใช้ไปยังเว็บไซต์ที่มีข้อผิดพลาด SSL ผู้ใช้จะไม่สามารถคลิกผ่านหน้าคำเตือน SSL บนเว็บไซต์ที่ไม่อยู่ในรายการนี้ - - หากปิดใช้ <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> นโยบายนี้จะไม่ดำเนินการใดๆ - - การไม่ตั้งค่านโยบายหมายความว่า <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> จะมีผลกับทุกเว็บไซต์ - - ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ <ph name="URL_LABEL" /> ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns <ph name="WILDCARD_VALUE" /> ไม่ใช่ค่าที่ยอมรับสำหรับนโยบายนี้</translation> <translation id="68818134518270542">การตั้งค่านโยบายจะระบุแอปที่ผู้ใช้เปิดเป็นแอปจดโน้ตในหน้าจอล็อกของ <ph name="PRODUCT_OS_NAME" /> ได้ หากแอปที่ต้องการอยู่ในหน้าจอล็อก องค์ประกอบ UI สำหรับการเปิดแอปจดโน้ตที่ต้องการจะปรากฏขึ้นในหน้าจอ เมื่อเปิดแล้ว แอปจะสร้างหน้าต่างทับหน้าจอล็อกและสร้างโน้ตในบริบทนี้ได้ แอปจะนำเข้าโน้ตที่สร้างไว้ไปยังเซสชันหลักของผู้ใช้ได้เมื่อเซสชันนั้นไม่ได้ล็อก แอปที่ใช้ได้ในหน้าจอล็อกต้องเป็นแอปจดโน้ตของ <ph name="PRODUCT_NAME" /> เท่านั้น @@ -4620,11 +4550,6 @@ หากตั้งค่าเป็น "เท็จ" ระบบจะปิดใช้การอัปเดตคอมโพเนนต์ แต่คอมโพเนนต์บางอย่างจะได้รับการยกเว้นจากนโยบายนี้ กล่าวคือระบบจะไม่ปิดใช้การอัปเดตคอมโพเนนต์ที่ไม่มีโค้ดสั่งการ หรือที่ไม่ได้ปรับเปลี่ยนลักษณะการทำงานของเบราว์เซอร์มากนัก ตลอดจนคอมโพเนนต์ที่มีความสำคัญต่อการรักษาความปลอดภัย ตัวอย่างของคอมโพเนนต์ดังกล่าว ได้แก่ รายการยกเลิกใบรับรองและข้อมูล Safe Browsing ดูข้อมูลเพิ่มเติมเกี่ยวกับ Safe Browsing ได้ที่ https://developers.google.com/safe-browsing</translation> -<translation id="7563608136659080810">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้นโยบาย "<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />" แทน - - การตั้งค่านโยบายจะกำหนดเซิร์ฟเวอร์ที่ <ph name="PRODUCT_NAME" /> อาจมอบสิทธิ์ให้ คั่นชื่อเซิร์ฟเวอร์หลายรายการด้วยเครื่องหมายจุลภาค ใช้ไวลด์การ์ด (<ph name="WILDCARD_VALUE" />) ได้ - - การไม่ตั้งค่านโยบายหมายความว่า <ph name="PRODUCT_NAME" /> จะไม่มอบสิทธิ์ใช้ข้อมูลเข้าสู่ระบบของผู้ใช้ แม้จะตรวจพบว่าเซิร์ฟเวอร์เป็นอินทราเน็ตก็ตาม</translation> <translation id="7566878661979235378">ประเภทการตรวจสอบสิทธิ์ของการเข้าสู่ระบบด้วย SAML</translation> <translation id="7567373982693549834">นโยบายนี้ควบคุมการใช้งานแอป Android จากแหล่งที่มาที่ไม่น่าเชื่อถือ (แหล่งที่ไม่ใช่ Google Play Store) สำหรับผู้ใช้แต่ละราย
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index d8ac8c9..2a858f3 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -1151,23 +1151,6 @@ Politika, 'Yalnızca Kullanıcı' (değer 1) olarak ayarlanırsa kullanıcılar sertifikaları yönetebilir ancak cihaz genelindeki sertifikaları yönetemez.</translation> <translation id="2593762551209145088">Güvenli Tarama hiçbir zaman etkin değil.</translation> -<translation id="2600410857944104685">Chrome'a bir dosya eklendiğinde tetiklenen <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Connectors hizmetleri ayarlarının listesidir. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> alanları, bağlayıcı belirli bir sayfaya eklendiğinde analiz için dosya gönderip göndermemesi gerektiğini ve bu dosyanın analiz isteğine hangi etiketlerin dahil edileceğini belirlemek üzere kullanılır. Sayfa URL'si etiketle ilişkilendirilen desenle eşleşirse "etkinleştir" desenine karşılık gelen bu etiket analiz isteğine dahil edilir. Ancak, aynı etikete sahip "devre dışı bırak" deseni sayfa URL'si ile eşleşirse dahil edilmez. Analiz, isteğe en az 1 etiket dahil edilecekse gerçekleşir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi analiz servis sağlayıcısına karşılık geldiğini tanımlar. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> alanının 1 değerine ayarlanması, Chrome'un dosyaya sayfaya erişim izni vermeden önce analiz hizmetinden yanıt almak için bekleyeceği anlamına gelir. Başka herhangi bir tam sayı değeri, Chrome'un sayfaya dosyaya erişim iznini hemen vereceği anlamına gelir. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> alanı, Chrome'un şifre korumalı dosyaları engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> alanı, Chrome'un analiz edilemeyecek kadar büyük dosyaları (50 MB'tan büyük) engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> alanı, bağlayıcının hangi etiketler için kullanıcının atlanabilir uyarıyla sonuçlanan taramayı atlamak üzere gerekçe girmesini gerektirdiğini belirlemek amacıyla kullanılır. Bu alan ayarlanmazsa gerekçe girmenin gerekmediği varsayılır. - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> alanları, tarama sonucu net olmadığında görüntülenen uyarıdan sonra kullanıcıya gösterilen mesajı yapılandırmak için kullanılır. Mesaj alanında, en fazla 200 karakterden oluşması gereken metin bulunur. Learn_more_url (daha fazla bilgi edinin) alanı, yönetici tarafından sağlanan URL'yi içerir. Bu URL, işlemin neden engellendiği hakkında daha fazla müşteri tarafından sağlanan bilgi edinmek için kullanıcı tarafından tıklanabilir olur. Mesajın dilini içeren dil alanı isteğe bağlıdır. Dil alanının boş bırakılması veya "varsayılan" değerine ayarlanması, kullanıcının dilinde mesaj olmadığında kullanılacak mesajı gösterir. Etiket alanı, mesajın hangi tarama türleri için görüntüleneceğini belirtir. Custom_messages (özel mesajlar) listesi herhangi bir giriş içermeyebilir veya birden fazla giriş içerebilir. Her girişin boş olmayan mesajı ve etiket alanları olmalıdır. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="26023406105317310">Kerberos hesaplarını yapılandır</translation> <translation id="2604182581880595781">Ağ Üzerinde Dosya Paylaşımı ile ilgili politikaları yapılandırın.</translation> <translation id="2615240493030733717">Saat dilimi bilgisi raporlama</translation> @@ -1379,7 +1362,6 @@ Bu politikayı ayarlarsanız kullanıcılar değiştiremez. Bu politika kullanımdan kaldırıldı, bunun yerine lütfen <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> politikasını kullanın.</translation> -<translation id="2949765875529121431">Politika ayarlanırsa istekleri HTTP'den HTTPS'ye yükseltilebilecek HSTS politika kontrolünden muaf tutulan ana makine adlarının bir listesi belirtilir. Bu politikada yalnızca tek etiketli ana makine adlarına izin verilir. Ana makine adları standartlaştırılmalıdır: Tüm IDN'ler, A-etiket biçimine dönüştürülmeli ve tüm ASCII harfleri küçük harf olmalıdır. Bu politika yalnızca belirtilen spesifik ana makine adları için geçerlidir; bu adların alt alanları için geçerli değildir.</translation> <translation id="2952347049958405264">Kısıtlamalar:</translation> <translation id="2957047180944828740">Güvenli olmayan web sitelerinin, daha özel ağ uç noktalarına istekte bulunmasına izin verilip verilmeyeceğini belirtir</translation> <translation id="2957506574938329824">Hiçbir sitenin Web Bluetooth API'sı aracılığıyla Bluetooth hizmetlerine erişim istemesine izin verme</translation> @@ -1400,7 +1382,6 @@ Geçerli URL kalıpları hakkında ayrıntılı bilgi için https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns adresine bakabilirsiniz.</translation> <translation id="2976429807269247880">Eski <ph name="ATTRIBUTE_SAMESITE_NAME" /> çerez davranışı ayarları</translation> -<translation id="2981998788751314539">Belirli sayfalarda SSL uyarı sayfasından devam etmeye izin ver</translation> <translation id="2985927503455169394">Asistan ilk katılım deneyiminin varsayılan modunu kullanma</translation> <translation id="2987155890997901449">ARC'yi etkinleştir</translation> <translation id="2987227569419001736">Web Bluetooth API'sının kullanımını kontrol et</translation> @@ -1450,13 +1431,6 @@ Normal profillerde ambiyans kimlik doğrulamasına her zaman izin verildiğini unutmayın. <ph name="PRODUCT_NAME" /> sürüm 81 ve sonraki sürümlerde politika ayarlanmadan bırakılırsa ambiyans kimlik doğrulaması yalnızca normal oturumlarda etkinleştirilir.</translation> -<translation id="3021288356473993647">Bu politika, güvenli olmayan URL'leri belirlemek için URL'lerin gerçek zamanlı olarak kontrol edilmesini denetler. - - Bu politika ayarlanmadan bırakılırsa veya "Devre dışı" değerine ayarlanırsa tüketici Güvenli Tarama kontrolleri uygulanır. Tüketici Güvenli Tarama kontrolleri hem "Aramaları ve göz atmayı daha iyi yap" ayarının değerine hem de UrlKeyedAnonymizedDataCollectionEnabled politikasının değerine bağlı olarak gerçek zamanlı aramaları içermeye devam edebilir. - - Bu politika "Etkin" değerine ayarlanırsa URL'ler, kurumsal Hizmet Şartları kapsamında gerçek zamanlı olarak kontrol edilmek üzere gönderilir. Bu, Chrome'un gerçek zamanlı olarak kontrol etmek için URL'leri Google Cloud'a veya seçtiğiniz üçüncü taraflara göndermesine neden olur. Güvenli Tarama gerçek zamanlı aramanın tüketici sürümü kapatılır. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="3021562480854470924">Geri alma işleminin izin verildiği dönüm noktası sayısı</translation> <translation id="3023572080620427845">Alternatif bir tarayıcıda yüklenecek URL'leri içeren bir XML dosyasının URL'si.</translation> <translation id="302528139996622624">Resim ayarları</translation> @@ -1524,23 +1498,6 @@ <translation id="3096595567015595053">Etkin eklentilerin listesi</translation> <translation id="3101501961102569744">Proxy sunucu ayarlarının nasıl belirtileceğini seç</translation> <translation id="3101709781009526431">Tarih ve saat</translation> -<translation id="3102177185340515316">Chrome'da bir dosya indirildiğinde tetiklenen <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Connectors hizmetleri ayarlarının listesidir. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> alanları, bağlayıcı belirli bir sayfadan indirildiğinde analiz için dosya gönderip göndermemesi gerektiğini ve bu dosyanın analiz isteğine hangi etiketlerin dahil edileceğini belirlemek üzere kullanılır. Sayfa URL'si etiketle ilişkilendirilen desenle eşleşirse "etkinleştir" desenine karşılık gelen bu etiket analiz isteğine dahil edilir. Ancak, aynı etikete sahip "devre dışı bırak" deseni sayfa URL'si ile eşleşirse dahil edilmez. Analiz, isteğe en az 1 etiket dahil edilecekse gerçekleşir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi analiz servis sağlayıcısına karşılık geldiğini tanımlar. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> alanının 1 değerine ayarlanması, Chrome'un kullanıcıya indirilen dosyaya erişim izni vermeden önce analiz hizmetinden yanıt almak için bekleyeceği anlamına gelir. Başka herhangi bir tam sayı değeri, Chrome'un, kullanıcının dosyaya erişim iznini hemen vereceği anlamına gelir. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> alanı, Chrome'un şifre korumalı dosyaları engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> alanı, Chrome'un analiz edilemeyecek kadar büyük dosyaları (50 MB'tan büyük) engelleyeceğini mi yoksa izin mi vereceğini kontrol eder. - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> alanı, bağlayıcının hangi etiketler için kullanıcının atlanabilir uyarıyla sonuçlanan taramayı atlamak üzere gerekçe girmesini gerektirdiğini belirlemek amacıyla kullanılır. Bu alan ayarlanmazsa gerekçe girmenin gerekmediği varsayılır. - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> alanları, tarama sonucu net olmadığında görüntülenen uyarıdan sonra kullanıcıya gösterilen mesajı yapılandırmak için kullanılır. Mesaj alanında, en fazla 200 karakterden oluşması gereken metin bulunur. Learn_more_url (daha fazla bilgi edinin) alanı, yönetici tarafından sağlanan URL'yi içerir. Bu URL, işlemin neden engellendiği hakkında daha fazla müşteri tarafından sağlanan bilgi edinmek için kullanıcı tarafından tıklanabilir olur. Mesajın dilini içeren dil alanı isteğe bağlıdır. Dil alanının boş bırakılması veya "varsayılan" değerine ayarlanması, kullanıcının dilinde mesaj olmadığında kullanılacak mesajı gösterir. Etiket alanı, mesajın hangi tarama türleri için görüntüleneceğini belirtir. Custom_messages (özel mesajlar) listesi herhangi bir giriş içermeyebilir veya birden fazla giriş içerebilir. Her girişin boş olmayan mesajı ve etiket alanları olmalıdır. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="3110248563985502478">Bu politika, M88 sürümünde kullanımdan kaldırılmıştır. Flash artık Chrome tarafından desteklenmemektedir. Politika, Etkin değerine ayarlanırsa güncel olmayan eklentiler normal eklentiler gibi kullanılır. Politika, Devre dışı değerine ayarlanırsa güncel olmayan eklentiler kullanılmaz. Politika ayarlanmadan bırakılırsa güncel olmayan eklentileri çalıştırmak için kullanıcılardan izin istenir.</translation> @@ -1627,21 +1584,6 @@ Politika ayarlanmadan bırakılırsa <ph name="TPM_FIRMWARE_UPDATE_TPM" /> donanım yazılımı güncellemesi kullanılamaz.</translation> <translation id="3232691106293445015">Güvenli olmayan HTTP bağlantılarının <ph name="BASIC_AUTH" /> kimlik doğrulamasını kullanmasına izni verilmez, HTTPS gereklidir</translation> -<translation id="3234647080363107863">Chrome'da panodan veri girildiğinde veya web içeriği sürüklenip bırakıldığında tetiklenen <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Connectors hizmetleri ayarlarının listesidir. - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> alanları, bağlayıcı belirli bir sayfada girildiğinde analiz için veri gönderip göndermemesi gerektiğini ve bu veri analiz isteğine hangi etiketlerin dahil edileceğini belirlemek üzere kullanılır. Sayfa URL'si etiketle ilişkilendirilen desenle eşleşirse "etkinleştir" desenine karşılık gelen bu etiket analiz isteğine dahil edilir. Ancak, aynı etikete sahip "devre dışı bırak" deseni sayfa URL'si ile eşleşirse dahil edilmez. Analiz, isteğe en az 1 etiket dahil edilecekse gerçekleşir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi analiz servis sağlayıcısına karşılık geldiğini tanımlar. - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> alanının 1 değerine ayarlanması, Chrome'un verilere sayfaya erişim izni vermeden önce analiz hizmetinden yanıt almak için bekleyeceği anlamına gelir. Başka herhangi bir tam sayı değeri, Chrome'un verilere sayfaya erişim iznini hemen vereceği anlamına gelir. - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> alanı, Chrome'a girilen verilerin taranabilmesi için eşit olması veya aşması gereken minimum boyutu (bayt cinsinden) belirtir. Alan ayarlanmadan bırakılırsa varsayılan değer 100 bayttır. - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> alanı, bağlayıcının hangi etiketler için kullanıcının atlanabilir uyarıyla sonuçlanan taramayı atlamak üzere gerekçe girmesini gerektirdiğini belirlemek amacıyla kullanılır. Bu alan ayarlanmazsa gerekçe girmenin gerekmediği varsayılır. - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> ve <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> alanları, tarama sonucu net olmadığında görüntülenen uyarıdan sonra kullanıcıya gösterilen mesajı yapılandırmak için kullanılır. Mesaj alanında, en fazla 200 karakterden oluşması gereken metin bulunur. Learn_more_url (daha fazla bilgi edinin) alanı, yönetici tarafından sağlanan URL'yi içerir. Bu URL, işlemin neden engellendiği hakkında daha fazla müşteri tarafından sağlanan bilgi edinmek için kullanıcı tarafından tıklanabilir olur. Mesajın dilini içeren dil alanı isteğe bağlıdır. Dil alanının boş bırakılması veya "varsayılan" değerine ayarlanması, kullanıcının dilinde mesaj olmadığında kullanılacak mesajı gösterir. Etiket alanı, mesajın hangi tarama türleri için görüntüleneceğini belirtir. Custom_messages (özel mesajlar) listesi herhangi bir giriş içermeyebilir veya birden fazla giriş içerebilir. Her girişin boş olmayan mesajı ve etiket alanları olmalıdır. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="3236046242843493070">Uzantı, uygulama ve kullanıcı komut dosyası yüklemelerine izin veren URL kalıpları</translation> <translation id="3240609035816615922">Yazıcı yapılandırması erişim politikası.</translation> <translation id="324062325008698789">Yazıcılar listesini yapılandırır</translation> @@ -2636,11 +2578,6 @@ Bu politika ayarlanmadığında veya etkinken DNS müdahale kontrolleri yapılır. Açıkça devre dışı bırakıldığında kontrol yapılmaz.</translation> <translation id="4700190441681139987">Hiçbir sitenin sensörlere erişmesine izin verme</translation> <translation id="4703402283970867140">Ekranın karartma süresini uzatmak için akıllı karartma modelini etkinleştir</translation> -<translation id="4715026656747891013">Chrome'da bir güvenlik işlemi oluştuğunda tetiklenen <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> Enterprise Bağlayıcı'ya uygulanacak Chrome Enterprise Bağlayıcılar hizmetleri ayarlarının listesidir. Bu liste Enterprise Bağlayıcılar analizinin olumsuz sonuçlarını, şifre yeniden kullanımını, güvensiz sayfalarda gezinmeleri ve diğer güvenlik açısından hassas kullanıcı işlemlerini içerir. - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> alanı, ayarların hangi servis sağlayıcısına karşılık geldiğini; <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> alanı, bu sağlayıcı için hangi etkinliklerin etkinleştirildiğini tanımlar. - - Bu politika yalnızca Google Yönetici konsolundan ayarlanabilir.</translation> <translation id="4722122254122249791">Site İzolasyonu'nu belirtilen kaynaklar için etkinleştirme</translation> <translation id="4723122879352880315">Bu ayar, kullanıcıların <ph name="PRODUCT_OS_NAME" /> oturum açma kimlik bilgilerini kullanarak NTLM kimlik doğrulaması güvenliğine sahip yönetilen proxy'de kimlik doğrulaması yapmalarına olanak tanır. @@ -4125,13 +4062,6 @@ Başlatıldığında <ph name="PRODUCT_NAME" /> ürününe uygulanacak işaretleri belirtir. Belirtilen işaretler, yalnızca giriş ekranında uygulanır. Bu politika aracılığıyla ayarlanan işaretler, kullanıcı oturumlarına yayılmaz.</translation> <translation id="685769593149966548">YouTube için Yüksek Düzey Kısıtlı Mod'u zorunlu kıl</translation> <translation id="686079137349561371">Microsoft Windows 7 veya sonraki sürümler</translation> -<translation id="6877233375929006871">Bu politikayı ayarlamak, SSL hatası olan sitelere giden kullanıcıların, <ph name="PRODUCT_NAME" /> tarafından gösterilen uyarı sayfalarını hangi sitelerde atlayabileceklerini belirten URL kalıplarının olduğu bir liste yapmanıza olanak tanır. Kullanıcılar, bu listede olmayan sitelerde SSL uyarı sayfalarını atlayamaz. - - <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> Devre Dışı bırakılırsa bu politikanın bir işlevi olmaz. - - Politika ayarlanmadan bırakılırsa <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> bütün siteler için geçerli olur. - - Geçerli <ph name="URL_LABEL" /> kalıpları hakkında ayrıntılı bilgi için https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns adresine bakabilirsiniz. <ph name="WILDCARD_VALUE" />, bu politikada kabul edilen bir değer değildir.</translation> <translation id="68818134518270542">Politikanın ayarlanması, kullanıcıların <ph name="PRODUCT_OS_NAME" /> kilit ekranında not alma uygulaması olarak açabilecekleri uygulamaları belirtir. Tercih edilen not alma uygulaması kilit ekranındaysa ekranda bu uygulamayı başlatan bir kullanıcı arayüzü öğesi görünür. Başlatıldığında uygulama, kilit ekranının üst kısmında bir pencere ve kilit ekranı bağlamında notlar oluşturabilir. Oturumun kilidi açık olduğunda uygulama, oluşturulan notları birincil kullanıcı oturumunda içe aktarabilir. Kilit ekranında yalnızca <ph name="PRODUCT_NAME" /> not alma uygulamaları desteklenir. @@ -4635,11 +4565,6 @@ Yanlış değerine ayarlanırsa bileşen güncellemeleri devre dışı bırakılır. Ancak, bazı bileşenler bu politikadan muaf tutulur: Yürütülebilir kod içermeyen bileşenlerde yapılan, tarayıcının davranışını önemli ölçüde değiştirmeyen ya da güvenliğinin devre dışı kalmaması için kritik öneme sahip olan güncellemeler. Bu tür bileşenlere örnek olarak sertifika iptal listeleri ve güvenli tarama verileri gösterilebilir. Güvenli Tarama ile ilgili daha fazla bilgi için https://developers.google.com/safe-browsing adresine bakın.</translation> -<translation id="7563608136659080810">Bu politika kullanımdan kaldırıldı. Bunun yerine lütfen '<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />' politikasını kullanın. - - Politikayı ayarlamak <ph name="PRODUCT_NAME" /> ürününün yetki verebileceği sunucular atar. Birden fazla sunucu adını virgülle ayırın. Joker karakterlere (<ph name="WILDCARD_VALUE" />) izin verilir. - - Politika ayarlanmadan bırakılırsa bir sunucunun intranet olduğu belirlense dahi <ph name="PRODUCT_NAME" />, kullanıcı kimlik bilgilerine yeki vermez.</translation> <translation id="7566878661979235378">SAML oturum açma kimlik doğrulama türü</translation> <translation id="7567373982693549834">Bu politika, güvenilmeyen kaynaklardan (Google Play Store dışında) Android uygulamalarının kullanımını kullanıcı bazında kontrol eder.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 04f88815..7f6517e7 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -1162,23 +1162,6 @@ Якщо вибрано параметр "Лише користувач" (значення 1), користувачі можуть керувати лише користувацькими сертифікатами, але не сертифікатами на рівні пристрою.</translation> <translation id="2593762551209145088">Безпечний перегляд завжди вимкнено.</translation> -<translation id="2600410857944104685">Список налаштувань сервісів Chrome Enterprise Connectors, які застосовуються до конектора Enterprise <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" />, що активується, коли до сторінки в Chrome долучено файл. - - Поля <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> та <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> визначають, чи надсилатиме конектор на аналіз файл, який долучено до певної сторінки, а також які теги додавати в запит на аналіз цього файлу. Тег, який відповідає шаблону enable, буде включено в запит на аналіз, якщо URL-адреса сторінки відповідає шаблону, зв'язаному з цим тегом, і якщо для цього тега немає шаблону disable, що відповідає цій URL-адресі сторінки. Дані буде проаналізовано, якщо запит містить принаймні 1 тег. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг аналізу відповідають налаштування. - - Якщо в полі <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указано значення 1, Chrome надає сторінці доступ до файлу, лише коли отримує відповідь від сервісу аналізу. Якщо в цьому полі вказано будь-яке інше ціле число, Chrome одразу надає сторінці доступ до файлу. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> контролює, чи блокуватиме Chrome захищені паролем файли. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> контролює, чи блокуватиме Chrome файли, які є завеликими для аналізу (понад 50 МБ). - - Поле <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> визначає теги, для яких конектор показує користувачу запит на обґрунтування для обходу сканування. У такому випадку з'являється попередження, яке можна обійти. Якщо це поле не налаштовано, вважається, що вводити обґрунтування не потрібно. - - Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> і <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> налаштовують повідомлення для користувача, яке з'являється з попередженням про те, що під час сканування сталася помилка. Поле message – це текст, який бачитиме користувач, і воно має містити принаймні 200 символів. Поле learn_more_url містить указану адміністратором URL-адресу, за якою користувач зможе перейти й дізнатися докладніше, чому дію заблоковано. Поле language – необов'язкове, у ньому вказано мову повідомлення. Порожнє поле language або значення за умовчанням указують, яке повідомлення буде відображатися, коли немає повідомлення мовою користувача. Поле tag визначає, для яких типів сканування з'являється повідомлення. Список custom_messages може мати нуль або більше записів, і для кожного з них потрібно налаштувати поля message і tag. - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="26023406105317310">Налаштувати облікові записи Kerberos</translation> <translation id="2604182581880595781">Налаштовує правила, пов’язані зі спільними мережевими файлами.</translation> <translation id="2615240493030733717">Повідомляти інформацію про часовий пояс</translation> @@ -1389,7 +1372,6 @@ Якщо налаштувати це правило, користувачі не зможуть змінювати його. Це правило більше не підтримується. Натомість використовуйте правило <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">За допомогою налаштувань цього правила можна вказати список імен хостів, які не перевірятимуться на використання механізму HSTS (за його допомогою можна змінювати протокол запитів з HTTP на HTTPS). У цьому правилі можна вказувати лише імена хостів з однією міткою. Імена хостів мають бути канонікалізовані: усі інтернаціоналізовані доменні імена (IDN) потрібно конвертувати у формат A-label, а також вживати лише малі літери ASCII. Це правило застосовується лише до певних указаних імен хостів. Воно не діє для субдоменів указаних імен.</translation> <translation id="2952347049958405264">Обмеження:</translation> <translation id="2957047180944828740">Визначає, чи можуть незахищені веб-сайти надсилати запити більш приватним кінцевим точкам мережі</translation> <translation id="2957506574938329824">Заборонити всім сайтам запитувати доступ до пристроїв Bluetooth через API Web Bluetooth</translation> @@ -1410,7 +1392,6 @@ Докладніше про дійсні шаблони URL-адрес можна дізнатися на сторінці https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="2976429807269247880">Застаріла поведінка <ph name="ATTRIBUTE_SAMESITE_NAME" /> для файлів cookie</translation> -<translation id="2981998788751314539">Дозволяти перехід зі сторінки попередження SSL на певних сторінках</translation> <translation id="2985927503455169394">Використовувати режим реєстрації в Асистенті за умовчанням</translation> <translation id="2987155890997901449">Увімкнути ARC</translation> <translation id="2987227569419001736">Контролювати використання API Web Bluetooth</translation> @@ -1460,13 +1441,6 @@ Зауважте, що вона завжди дозволена у звичайних профілях. Якщо це правило не налаштовано у <ph name="PRODUCT_NAME" /> 81 і новіших версій, фонова автентифікація буде ввімкнена лише у звичайних сеансах.</translation> -<translation id="3021288356473993647">Це правило керує перевіркою URL-адрес у реальному часі. - - Якщо це правило не налаштовано або для нього вибрано значення Disabled, застосовуватимуться стандартні параметри перевірки Безпечного перегляду. Залежно від значень параметра "Покращувати пошук і веб-перегляд" і правила UrlKeyedAnonymizedDataCollectionEnabled, під час стандартних перевірок Безпечного перегляду все ще може здійснюватися пошук у реальному часі. - - Якщо для цього правила вибрано значення Enabled, URL-адреси надсилатимуться на сканування в реальному часі відповідно до Умов використання організації. Chrome надсилатиме URL-адреси на платформу Google Cloud або стороннім сервісам (відповідно до вашого вибору) на перевірку в реальному часі. Пошук в реальному часі в стандартній версії Безпечного перегляду буде вимкнено. - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="3021562480854470924">Кількість версій, які можна відновити</translation> <translation id="3023572080620427845">URL-адреса файлу XML, який містить URL-адреси для завантаження в альтернативному веб-переглядачі.</translation> <translation id="302528139996622624">Налаштування зображень</translation> @@ -1534,23 +1508,6 @@ <translation id="3096595567015595053">Список увімкнених плагінів</translation> <translation id="3101501961102569744">Вибрати спосіб визначення налаштувань проксі-сервера</translation> <translation id="3101709781009526431">Дата та час</translation> -<translation id="3102177185340515316">Список налаштувань сервісів Chrome Enterprise Connectors, які застосовуються до конектора Enterprise <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" />, що активується, коли в браузері Chrome завантажується файл. - - Поля <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> та <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> визначають, чи надсилатиме конектор на аналіз файл, який завантажено з певної сторінки, а також які теги додавати в запит на аналіз цього файлу. Тег, який відповідає шаблону enable, буде включено в запит на аналіз, якщо URL-адреса сторінки відповідає шаблону, зв'язаному з цим тегом, і якщо для цього тега немає шаблону disable, що відповідає цій URL-адресі сторінки. Дані буде проаналізовано, якщо запит містить принаймні 1 тег. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг аналізу відповідають налаштування. - - Якщо в полі <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указано значення 1, Chrome надає користувачу доступ до завантаженого файлу, лише коли отримує відповідь від сервісу аналізу. Якщо в цьому полі вказано будь-яке інше ціле число, Chrome одразу надає користувачу доступ до файлу. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> контролює, чи блокуватиме Chrome захищені паролем файли. - - Поле <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> контролює, чи блокуватиме Chrome файли, які є завеликими для аналізу (понад 50 МБ). - - Поле <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> визначає теги, для яких конектор показує користувачу запит на обґрунтування для обходу сканування. У такому випадку з'являється попередження, яке можна обійти. Якщо це поле не налаштовано, вважається, що вводити обґрунтування не потрібно. - - Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> і <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> налаштовують повідомлення для користувача, яке з'являється з попередженням про те, що під час сканування сталася помилка. Поле message – це текст, який бачитиме користувач, і воно має містити принаймні 200 символів. Поле learn_more_url містить указану адміністратором URL-адресу, за якою користувач зможе перейти й дізнатися докладніше, чому дію заблоковано. Поле language – необов'язкове, у ньому вказано мову повідомлення. Порожнє поле language або значення за умовчанням указують, яке повідомлення буде відображатися, коли немає повідомлення мовою користувача. Поле tag визначає, для яких типів сканування з'являється повідомлення. Список custom_messages може мати нуль або більше записів, і для кожного з них потрібно налаштувати поля message і tag. - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="3110248563985502478">Це правило не підтримується у версії M88. Chrome більше не підтримує Flash. Якщо це правило активовано, застарілі плагіни запускаються як звичайні. Якщо це правило деактивовано, застарілі плагіни не запускаються. Якщо це правило не налаштовано, для запуску застарілих плагінів потрібен дозвіл користувача.</translation> @@ -1639,21 +1596,6 @@ Якщо це правило не налаштовано, функція оновлення мікропрограми <ph name="TPM_FIRMWARE_UPDATE_TPM" /> недоступна.</translation> <translation id="3232691106293445015">Незахищеним з'єднанням HTTP не дозволено використовувати автентифікацію <ph name="BASIC_AUTH" />; необхідне з'єднання HTTPS</translation> -<translation id="3234647080363107863">Список налаштувань сервісів Chrome Enterprise Connectors, які застосовуються до конектора Enterprise <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" />, що активується, коли у веб-переглядачі Chrome вставляють дані з буферу обміну або перетягують веб-контент. - - Поля <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> та <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> визначають, чи надсилатиме конектор на аналіз дані, які внесено на певній сторінці, а також які теги додавати в запит на аналіз цих даних. Тег, який відповідає шаблону enable, буде включено в запит на аналіз, якщо URL-адреса сторінки відповідає шаблону, зв'язаному з цим тегом, і якщо для цього тега немає шаблону disable, що відповідає цій URL-адресі сторінки. Дані буде проаналізовано, якщо запит містить принаймні 1 тег. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг аналізу відповідають налаштування. - - Якщо в полі <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> указано значення 1, Chrome надає сторінці доступ до даних, лише коли отримує відповідь від сервісу аналізу. Якщо в цьому полі вказано будь-яке інше ціле число, Chrome одразу надає сторінці доступ до даних. - - Поле <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> визначає мінімальний розмір (у байтах) введених у Chrome даних, які скануються. Якщо це поле не налаштовано, використовується значення за умовчанням 100 байт. - - Поле <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> визначає теги, для яких конектор показує користувачу запит на обґрунтування для обходу сканування. У такому випадку з'являється попередження, яке можна обійти. Якщо це поле не налаштовано, вважається, що вводити обґрунтування не потрібно. - - Поля <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> і <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> налаштовують повідомлення для користувача, яке з'являється з попередженням про те, що під час сканування сталася помилка. Поле message – це текст, який бачитиме користувач, і воно має містити принаймні 200 символів. Поле learn_more_url містить указану адміністратором URL-адресу, за якою користувач зможе перейти й дізнатися докладніше, чому дію заблоковано. Поле language – необов'язкове, у ньому вказано мову повідомлення. Порожнє поле language або значення за умовчанням указують, яке повідомлення буде відображатися, коли немає повідомлення мовою користувача. Поле tag визначає, для яких типів сканування з'являється повідомлення. Список custom_messages може мати нуль або більше записів, і для кожного з них потрібно налаштувати поля message і tag. - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="3236046242843493070">Шаблони URL-адрес, з яких дозволено встановлювати розширення, програми та сценарії користувача</translation> <translation id="3240609035816615922">Правила доступу до конфігурації принтерів.</translation> <translation id="324062325008698789">Налаштовує список принтерів</translation> @@ -2651,11 +2593,6 @@ Якщо це правило не налаштовано або ввімкнено, перевірки перехоплення системи DNS виконуються. Якщо його вимкнено, перевірки не відбуваються.</translation> <translation id="4700190441681139987">Заборонити всім сайтам доступ до датчиків</translation> <translation id="4703402283970867140">Увімкнути модель розумного затемнення, щоб збільшити час активності екрана</translation> -<translation id="4715026656747891013">Список налаштувань сервісів Chrome Enterprise Connectors, які застосовуються до конектора Enterprise <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" />, що активується, коли у веб-переглядачі Chrome виявлено подію системи безпеки. Це можуть бути негативні результати аналізу конекторів Enterprise, повторне використання пароля, перехід на небезпечні сторінки чи інші дії, пов'язані з безпекою. - - Поле <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> визначає, якому постачальнику послуг звітування відповідають налаштування, а поле <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> – які події ввімкнено для цього постачальника. - - Це правило можна налаштувати лише в Консолі адміністратора Google.</translation> <translation id="4722122254122249791">Увімкнути Ізоляцію сайтів для вказаних джерел</translation> <translation id="4723122879352880315">Якщо налаштувати це правило, користувачі зможуть авторизуватися на керованому проксі-сервері, захищеному автентифікацією NTLM, за допомогою облікових даних для входу в <ph name="PRODUCT_OS_NAME" />. @@ -4145,13 +4082,6 @@ Указує позначки, які мають застосовуватися під час запуску <ph name="PRODUCT_NAME" />. Вони застосовуються лише на екрані входу. Позначки, додані за допомогою цього правила, не поширюються на сеанси користувача.</translation> <translation id="685769593149966548">Застосувати строгий безпечний режим на YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 і новіших версій</translation> -<translation id="6877233375929006871">За допомогою цього правила можна вказати список шаблонів URL-адрес, що визначають веб-сайти, де користувачі зможуть переходити на сайти з помилками SSL через відповідні сторінки попередження в <ph name="PRODUCT_NAME" />. Користувачі не зможуть переходити на сторінки попередження SSL на сайтах, яких немає в цьому списку. - - Це правило ігнорується, якщо вимкнено правило <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" />. - - Якщо це правило не налаштовано, до всіх сайтів застосовуватиметься правило <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" />. - - Докладніше про дійсні шаблони <ph name="URL_LABEL" />-адрес можна дізнатися на сторінці https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. <ph name="WILDCARD_VALUE" /> – недопустиме значення для цього правила.</translation> <translation id="68818134518270542">За допомогою цього правила можна створити список додатків, які користувачі можуть використовувати для нотаток на заблокованому екрані пристрою <ph name="PRODUCT_OS_NAME" />. Якщо вибраний додаток дозволено використовувати, на заблокованому екрані відображатиметься елемент інтерфейсу для запуску додатка для створення нотаток. Після запуску додатка поверх заблокованого екрана з'явиться вікно для створення нотаток. Додаток може імпортувати створені нотатки в сеанс основного користувача, коли екран буде розблоковано. На заблокованому екрані підтримуються лише додатки <ph name="PRODUCT_NAME" /> для створення нотаток. @@ -4653,11 +4583,6 @@ Якщо вибрано значення false, компоненти не оновлюються. Однак винятками є компоненти, які не містять виконуваний код, несуттєво змінюють роботу веб-переглядача або важливі для його безпеки. Приклади таких компонентів: списки відкликання сертифікатів і дані Безпечного перегляду. Відвідайте сторінку https://developers.google.com/safe-browsing, щоб дізнатися більше про Безпечний перегляд.</translation> -<translation id="7563608136659080810">Це правило більше не підтримується. Натомість використовуйте <ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />. - - Налаштування цього правила призначають сервери, яким <ph name="PRODUCT_NAME" /> може передавати дані. Назви серверів потрібно розділяти комами. Дозволяються символи підстановки (<ph name="WILDCARD_VALUE" />). - - Якщо це правило не налаштовано, <ph name="PRODUCT_NAME" /> не передаватиме облікові дані користувача, навіть якщо сервер виявлено в інтранет-мережі.</translation> <translation id="7566878661979235378">Тип автентифікації входу SAML</translation> <translation id="7567373982693549834">Це правило дає змогу вибрати окремо для кожного користувача, чи можна завантажувати додатки для Android із ненадійних джерел (не з Google Play).
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 189ca4c..d27b310 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -390,6 +390,11 @@ Nếu bạn tắt hoặc không đặt chính sách này, thì các tùy chọn cài đặt của Tài khoản Kerberos sẽ tắt. Người dùng không thể thêm các tài khoản Kerberos và sử dụng tính năng xác thực Kerberos. Tất cả các tài khoản Kerberos hiện có và mọi mật khẩu đã lưu trữ sẽ bị xóa.</translation> <translation id="1561424797596341174">Chính sách ghi đè dành cho bản dựng Gỡ lỗi của máy chủ truy cập từ xa</translation> <translation id="1561967320164410511">Tiện ích U2F+ để chứng thực cá nhân</translation> +<translation id="1567718448549957373">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì người dùng sẽ nhận được các thử thách xác thực <ph name="BASIC_AUTH" /> qua HTTP không an toàn. + + Nếu bạn đặt chính sách này thành Tắt, thì các yêu cầu HTTP không an toàn sẽ không được phép dùng lược đồ xác thực <ph name="BASIC_AUTH" />; chỉ HTTP an toàn mới được phép. + + Nếu bạn đặt chính sách <ph name="AUTH_SCHEMES_POLICY_NAME" /> và không bao gồm <ph name="BASIC_AUTH" />, thì chế độ cài đặt chính sách này bị bỏ qua (và <ph name="BASIC_AUTH" /> sẽ luôn bị cấm).</translation> <translation id="1575015449587326319">Chính sách cấu hình dành cho Trình kết nối OnFileDownloaded của Chrome Enterprise</translation> <translation id="1583248206450240930">Sử dụng <ph name="PRODUCT_FRAME_NAME" /> theo mặc định</translation> <translation id="1588240398285670601">Cài đặt của trình duyệt</translation> @@ -1157,23 +1162,6 @@ Khi bạn đặt chính sách này thành "UserOnly" (giá trị 1), người dùng có thể quản lý chứng chỉ người dùng, nhưng không thể quản lý các chứng chỉ cho toàn bộ thiết bị.</translation> <translation id="2593762551209145088">Tính năng Duyệt web an toàn sẽ không bao giờ hoạt động.</translation> -<translation id="2600410857944104685">Danh sách các tùy chọn cài đặt dịch vụ Chrome Enterprise Connectors sẽ áp dụng cho Trình kết nối <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> của Chrome Enterprise. Trình kết nối này sẽ chạy khi có tệp được đính kèm vào Chrome. - - Các trường <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> dùng để xác định xem trình kết nối có gửi tệp đi để phân tích hay không khi tệp được đính kèm vào một trang cụ thể, cũng như thẻ nào cần thêm vào yêu cầu phân tích cho tệp đó. Nếu URL của trang khớp với mẫu liên kết với một thẻ tương ứng với một mẫu "enable", thì hệ thống sẽ thêm thẻ đó vào yêu cầu phân tích chừng nào không còn mẫu "disable" có cùng thẻ như vậy khớp với URL của trang. Quá trình phân tích sẽ diễn ra nếu hệ thống thêm ít nhất 1 thẻ vào yêu cầu. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định nhà cung cấp dịch vụ phân tích nào tương ứng với các tùy chọn cài đặt. - - Nếu bạn đặt trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> thành 1, thì Chrome sẽ đợi để nhận phản hồi từ dịch vụ phân tích rồi mới cho phép trang này truy cập vào tệp đó. Nếu bạn đặt trường đó thành bất kỳ giá trị số nguyên nào khác, thì Chrome sẽ cho phép trang này truy cập vào tệp đó ngay lập tức. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép tệp được bảo vệ bằng mật khẩu. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép phân tích những tệp quá lớn (trên 50 MB). - - Trường <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> dùng để xác định những thẻ mà trình kết nối yêu cầu người dùng cho biết lý do bỏ qua quá trình quét dẫn đến cảnh báo có thể bỏ qua. Nếu bạn không đặt trường này, hệ thống sẽ xem như người dùng không cần cho biết lý do. - - Các trường <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" /> <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> dùng để cấu hình thông báo sẽ hiển thị với người dùng khi cảnh báo hiển thị cho biết quá trình quét cho kết quả không rõ ràng. Trường thông báo chứa văn bản sẽ hiển thị với người dùng và phải có tối đa 200 ký tự. Trường learn_more_url chứa URL do quản trị viên cung cấp mà người dùng có thể nhấp vào để nhận thêm thông tin từ khách hàng cho biết lý do chặn hành động. Trường ngôn ngữ là trường không bắt buộc và cho biết ngôn ngữ của thông báo. Trường ngôn ngữ trống hoặc có giá trị "default" cho biết thông báo sẽ được sử dụng khi không có thông báo ở ngôn ngữ của người dùng. Trường thẻ chỉ định kiểu quét mà thông báo sẽ hiển thị. Danh sách custom_messages có thể không có hoặc có nhiều mục nhập, trong đó mỗi mục nhập bắt buộc phải có các trường thẻ và thông báo không được để trống. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="26023406105317310">Định cấu hình các tài khoản Kerberos</translation> <translation id="2604182581880595781">Định cấu hình các chính sách liên quan đến tính năng Chia sẻ tệp trong mạng.</translation> <translation id="2615240493030733717">Báo cáo thông tin về múi giờ</translation> @@ -1385,7 +1373,6 @@ Nếu bạn đặt chính sách này, người dùng sẽ không thể thay đổi được. Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />.</translation> -<translation id="2949765875529121431">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định danh sách tên máy chủ không phải thực hiện quy trình kiểm tra chính sách Bảo mật truyền tải nghiêm ngặt HTTP (HSTS) để nâng cấp yêu cầu từ http lên https. Chính sách này chỉ cho phép tên máy chủ một nhãn. Cần phải chuẩn hóa tên máy chủ: Mọi IDN phải được chuyển đổi sang định dạng nhãn A và tất cả chữ cái ASCII phải là chữ thường. Chính sách này chỉ áp dụng cho các tên máy chủ cụ thể đã chỉ định, chứ không áp dụng cho miền con của các tên máy chủ đó.</translation> <translation id="2952347049958405264">Hạn chế:</translation> <translation id="2957047180944828740">Chỉ định xem có cho phép các trang web không an toàn gửi yêu cầu đến các thiết bị đầu cuối trên mạng riêng hay không</translation> <translation id="2957506574938329824">Không cho phép bất kỳ trang web nào yêu cầu quyền truy cập vào thiết bị Bluetooth qua API Web Bluetooth</translation> @@ -1406,7 +1393,6 @@ Để 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="2976429807269247880">Cài đặt hành vi cookie <ph name="ATTRIBUTE_SAMESITE_NAME" /> cũ</translation> -<translation id="2981998788751314539">Cho phép tiếp tục từ trang cảnh báo SSL trên một số trang</translation> <translation id="2985927503455169394">Sử dụng chế độ mặc định của trải nghiệm làm quen với Trợ lý</translation> <translation id="2987155890997901449">Bật ARC</translation> <translation id="2987227569419001736">Kiểm soát việc sử dụng API Web Bluetooth</translation> @@ -1456,13 +1442,6 @@ Lưu ý rằng quy trình xác thực môi trường xung quanh luôn được phép trên các hồ sơ thông thường. Trong <ph name="PRODUCT_NAME" /> phiên bản 81 trở lên, nếu bạn không đặt chính sách này, thì tùy chọn xác thực môi trường sẽ chỉ được bật trong các phiên thông thường.</translation> -<translation id="3021288356473993647">Chính sách này sẽ kiểm soát việc kiểm tra URL trong thời gian thực để xác định các URL không an toàn. - - Nếu bạn không đặt hoặc đặt chính sách này thành "Tắt", thì cơ chế kiểm tra thông qua tính năng Duyệt web an toàn mặc định sẽ được áp dụng. Các lượt kiểm tra bằng tính năng Duyệt web an toàn mặc định vẫn có thể bao gồm cả hoạt động tra cứu trong thời gian thực, tùy thuộc vào giá trị của tùy chọn cài đặt “Cải thiện tính năng tìm kiếm và duyệt web” và giá trị của chính sách UrlKeyedAnonymizedDataCollectionEnabled. - - Nếu bạn đặt chính sách này thành "Bật", thì các URL sẽ được gửi đi để quét trong thời gian thực theo Điều khoản dịch vụ của doanh nghiệp. Do vậy, Chrome sẽ gửi các URL tới Google Cloud hoặc các bên thứ ba mà bạn chọn để kiểm tra các URL đó trong thời gian thực. Phiên bản tra cứu bằng tính năng Duyệt web an toàn mặc định trong thời gian thực sẽ bị tắt. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="3021562480854470924">Số mốc cho phép khôi phục</translation> <translation id="3023572080620427845">URL của một tệp XML chứa các URL sẽ tải trên một trình duyệt thay thế.</translation> <translation id="302528139996622624">Cài đặt hình ảnh</translation> @@ -1492,6 +1471,7 @@ Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation> <translation id="3030000825273123558">Bật báo cáo số liệu</translation> +<translation id="3032322294267258117">Kiểm soát các chế độ cài đặt của người dùng được xác thực qua Gaia khi không có SAML.</translation> <translation id="3038323923255997294">Tiếp tục chạy các ứng dụng dưới nền khi <ph name="PRODUCT_NAME" /> bị đóng</translation> <translation id="3041707370546071653">Liệu có nhớ mật khẩu Kerberos hay không. Nếu không đặt hoặc đặt thành tắt, mật khẩu sẽ không được ghi nhớ. Bỏ qua nếu không chỉ định mật khẩu.</translation> <translation id="3041887182529293512">Nếu bạn không đặt hoặc đặt chính sách này thành True, thì các nội dung đề xuất được tạo tự động sẽ hiển thị trên trang Thẻ mới, dựa trên lịch sử duyệt web, mối quan tâm hoặc vị trí của người dùng. @@ -1528,23 +1508,6 @@ <translation id="3096595567015595053">Danh sách plugin được kích hoạt</translation> <translation id="3101501961102569744">Chọn cách chỉ định cài đặt máy chủ proxy</translation> <translation id="3101709781009526431">Ngày và giờ</translation> -<translation id="3102177185340515316">Danh sách các tùy chọn cài đặt dịch vụ Chrome Enterprise Connectors sẽ áp dụng cho Trình kết nối <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> của Enterprise. Trình kết nối này sẽ chạy khi tệp được tải xuống trong Chrome. - - Các trường <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> dùng để xác định xem trình kết nối có gửi tệp đi phân tích hay không khi tệp được tải xuống trên một trang cụ thể, cũng như thẻ nào cần thêm vào yêu cầu phân tích cho tệp đó. Nếu URL của trang khớp với mẫu liên kết với một thẻ tương ứng với một mẫu "enable", thì hệ thống sẽ thêm thẻ đó vào yêu cầu phân tích chừng nào không còn mẫu "disable" có cùng thẻ như vậy khớp với URL của trang. Quá trình phân tích sẽ diễn ra nếu hệ thống thêm ít nhất 1 thẻ vào yêu cầu. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định nhà cung cấp dịch vụ phân tích nào tương ứng với các tùy chọn cài đặt. - - Nếu bạn đặt trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> thành 1, thì Chrome sẽ đợi để nhận phản hồi từ dịch vụ phân tích rồi mới cho phép người dùng truy cập vào tệp đã tải xuống đó. Nếu bạn đặt trường này thành một giá trị số nguyên khác bất kỳ, thì Chrome sẽ cho phép người dùng truy cập vào tệp đó ngay lập tức. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép tệp được bảo vệ bằng mật khẩu. - - Trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> sẽ kiểm soát việc Chrome chặn hay cho phép phân tích những tệp quá lớn (trên 50 MB). - - Trường <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> dùng để xác định những thẻ mà trình kết nối yêu cầu người dùng cho biết lý do bỏ qua quá trình quét dẫn đến cảnh báo có thể bỏ qua. Nếu bạn không đặt trường này, hệ thống sẽ xem như người dùng không cần cho biết lý do. - - Các trường <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" /> <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> dùng để cấu hình thông báo sẽ hiển thị với người dùng khi cảnh báo hiển thị cho biết quá trình quét cho kết quả không rõ ràng. Trường thông báo chứa văn bản sẽ hiển thị với người dùng và phải có tối đa 200 ký tự. Trường learn_more_url chứa URL do quản trị viên cung cấp mà người dùng có thể nhấp vào để nhận thêm thông tin từ khách hàng cho biết lý do chặn hành động. Trường ngôn ngữ là trường không bắt buộc và cho biết ngôn ngữ của thông báo. Trường ngôn ngữ trống hoặc có giá trị "default" cho biết thông báo sẽ được sử dụng khi không có thông báo ở ngôn ngữ của người dùng. Trường thẻ chỉ định kiểu quét mà thông báo sẽ hiển thị. Danh sách custom_messages có thể không có hoặc có nhiều mục nhập, trong đó mỗi mục nhập bắt buộc phải có các trường thẻ và thông báo không được để trống. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="3110248563985502478">Chính sách này không còn dùng trong M88 và Chrome không hỗ trợ Flash nữa. Khi bạn đặt chính sách này thành Bật, các trình bổ trợ lỗi thời sẽ được dùng như trình bổ trợ thông thường. Khi bạn đặt chính sách này thành Tắt, các trình bổ trợ lỗi thời sẽ không được sử dụng. Khi bạn không đặt chính sách này, người dùng sẽ được yêu cầu cấp quyền để chạy các trình bổ trợ lỗi thời.</translation> @@ -1633,21 +1596,6 @@ Nếu bạn không đặt chính sách này thì sẽ không có bản cập nhật chương trình cơ sở <ph name="TPM_FIRMWARE_UPDATE_TPM" />.</translation> <translation id="3232691106293445015">Các đường kết nối HTTP không an toàn không được phép sử dụng phương thức xác thực <ph name="BASIC_AUTH" />; bắt buộc phải dùng HTTPS</translation> -<translation id="3234647080363107863">Danh sách các tùy chọn cài đặt dịch vụ Chrome Enterprise Connectors sẽ áp dụng cho Trình kết nối <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> của Enterprise. Trình kết nối này sẽ chạy khi người dùng nhập dữ liệu vào Chrome từ khay nhớ tạm hoặc bằng cách kéo và thả nội dung trên web. - - Các trường <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> dùng để xác định xem trình kết nối có gửi dữ liệu đi để phân tích hay không khi người dùng nhập dữ liệu vào một trang cụ thể và thẻ nào cần thêm vào yêu cầu phân tích cho dữ liệu đó. Nếu URL của trang khớp với mẫu liên kết với một thẻ tương ứng với một mẫu "enable", thì hệ thống sẽ thêm thẻ đó vào yêu cầu phân tích chừng nào không còn mẫu "disable" có cùng thẻ như vậy khớp với URL của trang. Quá trình phân tích sẽ diễn ra nếu hệ thống thêm ít nhất 1 thẻ vào yêu cầu. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định nhà cung cấp dịch vụ phân tích nào tương ứng với các tùy chọn cài đặt. - - Nếu bạn đặt trường <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> thành 1, thì Chrome sẽ đợi để nhận phản hồi từ dịch vụ phân tích rồi mới cho phép trang này truy cập vào dữ liệu đó. Nếu bạn đặt trường đó thành bất kỳ giá trị số nguyên nào khác, thì Chrome sẽ cho phép trang này truy cập vào dữ liệu đó ngay lập tức. - - Trường <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> cho biết kích thước tối thiểu (tính bằng byte) mà dữ liệu nhập vào Chrome phải bằng hoặc lớn hơn thì mới quét được. Giá trị mặc định là 100 byte nếu bạn không đặt trường này. - - Trường <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> dùng để xác định những thẻ mà trình kết nối yêu cầu người dùng cho biết lý do bỏ qua quá trình quét dẫn đến cảnh báo có thể bỏ qua. Nếu bạn không đặt trường này, hệ thống sẽ xem như người dùng không cần cho biết lý do. - - Các trường <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />, <ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" /> <ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> và <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> dùng để cấu hình thông báo sẽ hiển thị với người dùng khi cảnh báo hiển thị cho biết quá trình quét cho kết quả không rõ ràng. Trường thông báo chứa văn bản sẽ hiển thị với người dùng và phải có tối đa 200 ký tự. Trường learn_more_url chứa URL do quản trị viên cung cấp mà người dùng có thể nhấp vào để nhận thêm thông tin từ khách hàng cho biết lý do chặn hành động. Trường ngôn ngữ là trường không bắt buộc và cho biết ngôn ngữ của thông báo. Trường ngôn ngữ trống hoặc có giá trị "default" cho biết thông báo sẽ được sử dụng khi không có thông báo ở ngôn ngữ của người dùng. Trường thẻ chỉ định kiểu quét mà thông báo sẽ hiển thị. Danh sách custom_messages có thể không có hoặc có nhiều mục nhập, trong đó mỗi mục nhập bắt buộc phải có các trường thẻ và thông báo không được để trống. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="3236046242843493070">Mẫu URL để cho phép cài đặt tiện ích, ứng dụng và tập lệnh người dùng từ</translation> <translation id="3240609035816615922">Chính sách truy cập vào cấu hình máy in.</translation> <translation id="324062325008698789">Định cấu hình danh sách máy in</translation> @@ -2492,6 +2440,15 @@ <translation id="4510923771103268849">Người dùng được phép truy cập gốc vào vùng chứa Crostini</translation> <translation id="4515404363392014383">Bật tính năng Duyệt web an toàn cho các nguồn đáng tin cậy</translation> <translation id="4518251772179446575">Hỏi bất cứ khi nào trang web muốn theo dõi vị trí thực của người dùng.</translation> +<translation id="4521193243799782295">Trong khi đăng nhập, <ph name="PRODUCT_OS_NAME" /> có thể xác thực với một máy chủ (trực tuyến) hoặc sử dụng mật khẩu đã lưu vào bộ nhớ đệm (ngoại tuyến). + + Khi bạn đặt chính sách này thành -1, chính sách này sẽ không thực thi quá trình xác thực trực tuyến. Đồng thời, người dùng có thể sử dụng phương thức xác thực ngoại tuyến cho đến khi có một lý do khác không phải là chính sách này buộc họ phải đăng nhập ngoại tuyến. Nếu bạn đặt chính sách này thành 0 thì người dùng bắt buộc phải đăng nhập trực tuyến. Khi bạn đặt chính sách này thành bất kỳ giá trị nào khác, chính sách này sẽ chỉ định khoảng thời gian kể từ lần xác thực trực tuyến cuối cùng trước khi người dùng phải xác thực trực tuyến trong lần đăng nhập tiếp theo. + + Nếu bạn không đặt chính sách này, <ph name="PRODUCT_OS_NAME" /> sẽ sử dụng phương thức đăng nhập ngoại tuyến. + + Chính sách này chỉ ảnh hưởng đến những người dùng đã xác thực bằng GAIA mà không dùng SAML. + + Bạn phải chỉ định giá trị của chính sách bằng ngày.</translation> <translation id="4528929591840709501">Thời điểm thiết bị ngừng sạc, được diễn giải theo múi giờ địa phương trên thiết bị.</translation> <translation id="4529868888205510667">Nếu bạn không tắt ARC theo cách khác, thì việc đặt chính sách này thành True hoặc không đặt đều có nghĩa là cho phép người dùng sử dụng ARC. Nếu bạn đặt chính sách này thành False, thì người dùng chưa liên kết có thể không dùng được ARC. @@ -2636,11 +2593,6 @@ Khi bạn không đặt chính sách này hoặc đặt chính sách thành bật, các tùy chọn kiểm tra chặn DNS sẽ được áp dụng. Khi bạn tắt hoàn toàn chính sách này, các tùy chọn kiểm tra nói trên sẽ không được áp dụng.</translation> <translation id="4700190441681139987">Không cho phép bất kỳ trang web nào sử dụng cảm biến</translation> <translation id="4703402283970867140">Bật mô hình giảm độ sáng thông minh để kéo dài thời gian cho đến khi màn hình tối đi</translation> -<translation id="4715026656747891013">Danh sách các chế độ cài đặt dịch vụ Chrome Enterprise Connectors sẽ áp dụng cho Trình kết nối <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> của Enterprise. Trình kết nối này chạy khi một sự kiện bảo mật xảy ra trong Chrome. Sự kiện này bao gồm kết quả phủ định từ các Trình kết nối phân tích của Enterprise, hoạt động sử dụng lại mật khẩu, các lượt truy cập vào trang không an toàn và những hành động nhạy cảm khác của người dùng liên quan đến vấn đề bảo mật. - - Trường <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> xác định các chế độ cài đặt này tương ứng với nhà cung cấp dịch vụ báo cáo nào và trường <ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> xác định những sự kiện được bật cho nhà cung cấp này. - - Bạn chỉ có thể đặt chính sách này trên Bảng điều khiển dành cho quản trị viên của Google.</translation> <translation id="4722122254122249791">Bật chính sách Cô lập trang web cho các nguồn gốc đã xác định</translation> <translation id="4723122879352880315">Tùy chọn cài đặt này cho phép người dùng xác thực với một proxy được quản lý và bảo mật bằng phương thức xác thực NTLM khi sử dụng thông tin đăng nhập <ph name="PRODUCT_OS_NAME" />. @@ -3608,6 +3560,7 @@ <translation id="6155936611791017817">Đặt trạng thái của con trỏ lớn mặc định trên màn hình đăng nhập</translation> <translation id="6157537876488211233">Danh sách quy tắc bỏ qua proxy được phân cách bằng dấu phẩy</translation> <translation id="6158324314836466367">Tên cửa hàng trực tuyến dành cho doanh nghiệp (không dùng nữa)</translation> +<translation id="6169768162756928771">Các tùy chọn quản lý danh tính người dùng Gaia</translation> <translation id="6172896675583897796">Nếu bạn đặt chính sách này thành Bật, thì Trợ lý Google có thể truy cập vào ngữ cảnh màn hình và gửi dữ liệu đó tới máy chủ. Nếu bạn đặt chính sách này thành Tắt, thì Trợ lý Google sẽ không truy cập được ngữ cảnh màn hình. Nếu bạn không đặt chính sách này, thì người dùng có thể quyết định bật hoặc tắt tính năng này.</translation> @@ -4137,13 +4090,6 @@ Chỉ định cờ sẽ được áp dụng cho <ph name="PRODUCT_NAME" /> khi khởi động. Cờ được chỉ định sẽ chỉ được áp dụng trên màn hình đăng nhập. Các cờ được đặt qua chính sách này không phản ánh trong các phiên của người dùng.</translation> <translation id="685769593149966548">Buộc sử dụng Chế độ hạn chế nghiêm ngặt cho YouTube</translation> <translation id="686079137349561371">Microsoft Windows 7 trở lên</translation> -<translation id="6877233375929006871">Nếu đặt chính sách này, bạn có thể thiết lập một danh sách các mẫu URL chỉ định những trang web mà người dùng có thể nhấp qua những trang cảnh báo mà <ph name="PRODUCT_NAME" /> hiển thị khi người dùng truy cập vào những trang web có lỗi SSL. Người dùng sẽ không thể nhấp qua trang cảnh báo SSL trên những trang web không có trong danh sách này. - - Nếu bạn đặt chính sách <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> thành Tắt, chính sách này sẽ không thực hiện hành động nào. - - Nếu bạn không đặt chính sách này, chính sách <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> sẽ áp dụng cho mọi trang web. - - Để biết thông tin chi tiết về các mẫu <ph name="URL_LABEL" /> hợp lệ, vui lòng xem tại https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Chúng tôi không chấp nhận giá trị <ph name="WILDCARD_VALUE" /> đối với chính sách này.</translation> <translation id="68818134518270542">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định những ứng dụng mà người dùng có thể bật làm ứng dụng ghi chú trên màn hình khóa của <ph name="PRODUCT_OS_NAME" />. Nếu ứng dụng ghi chú ưa thích được bật trên màn hình khóa, thì thành phần trên giao diện người dùng để chạy ứng dụng đó sẽ xuất hiện trên màn hình. Sau khi chạy, ứng dụng có thể tạo một cửa sổ ở phía trên màn hình khóa và tạo các ghi chú trong bối cảnh này. Ứng dụng này có thể nhập các ghi chú đã tạo vào phiên truy cập của người dùng chính khi phiên được mở khóa. Chỉ các ứng dụng ghi chú của <ph name="PRODUCT_NAME" /> mới được hỗ trợ trên màn hình khóa. @@ -4647,11 +4593,6 @@ Nếu bạn đặt thành False, các bản cập nhật thành phần sẽ bị tắt. Tuy nhiên, chính sách này không áp dụng cho một số thành phần: các bản cập nhật cho bất kỳ thành phần nào không chứa mã thực thi hoặc không làm thay đổi đáng kể hoạt động của trình duyệt hay có ý nghĩa quan trọng đối với tính bảo mật của trình duyệt sẽ không bị tắt. Ví dụ về các thành phần như vậy gồm có danh sách thu hồi chứng chỉ và dữ liệu Duyệt web an toàn. Truy cập vào https://developers.google.com/safe-browsing để biết thêm thông tin về dịch vụ Duyệt web an toàn.</translation> -<translation id="7563608136659080810">Chính sách này không dùng nữa, vui lòng sử dụng chính sách "<ph name="AUTH_NEGOCIATE_DELEGATE_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ủ mà <ph name="PRODUCT_NAME" /> có thể ủy quyền. Hãy phân tách tên của các máy chủ bằng dấu phẩy. Cho phép sử dụng ký tự đại diện <ph name="WILDCARD_VALUE" />. - - Nếu bạn không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ không ủy quyền thông tin đăng nhập của người dùng ngay cả khi máy chủ được phát hiện là mạng nội bộ.</translation> <translation id="7566878661979235378">Loại xác thực đăng nhập SAML</translation> <translation id="7567373982693549834">Chính sách này kiểm soát việc sử dụng ứng dụng Android từ những nguồn không tin cậy (không phải là Cửa hàng Google Play) của từng người dùng. @@ -5563,6 +5504,7 @@ <translation id="8890438048579188548">Ẩn cảnh báo về việc ngừng cung cấp <ph name="CLOUD_PRINT_NAME" /></translation> <translation id="8892286064305622118">Dung lượng ổ đĩa trống cần có cho <ph name="PLUGIN_VM_NAME" /></translation> <translation id="8892783613915541293">Số lần trì hoãn và các hành động cần thực hiện khi thiết bị ở trạng thái rảnh và chạy bằng nguồn điện AC</translation> +<translation id="8897796778265450949">Giới hạn thời gian mà một người dùng được xác thực qua GAIA khi không có SAML có thể đăng nhập ở chế độ ngoại tuyến</translation> <translation id="8903283771634816230">Nếu bạn đặt chính sách này thành Bật, <ph name="PRODUCT_NAME" /> sẽ sử dụng máy in mặc định của hệ điều hành làm máy in đích mặc định để xem trước bản in. Nếu bạn đặt thành Tắt hoặc không đặt chính sách này, thì <ph name="PRODUCT_NAME" /> sẽ sử dụng những máy in đã dùng gần đây nhất làm máy in đích mặc định để xem trước bản in.</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 104809c..7b253b3 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -1136,23 +1136,6 @@ 如果此政策设为“UserOnly”(值为 1),用户便可以管理用户证书,但不能管理设备级证书。</translation> <translation id="2593762551209145088">“安全浏览”功能会一直处于关闭状态。</translation> -<translation id="2600410857944104685">让您能够指定一系列要应用于 <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> 企业版接口的 Chrome 企业版接口服务设置,以供系统在有人向 Chrome 附加文件时调用。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 字段用于确定当用户向特定网页附加文件时,该接口是否应将此文件发送给系统进行分析,以及要将哪些标记添加到此文件的分析请求中。如果相应的网页网址与某个标记关联的“enable”格式相匹配,但不与此标记关联的任何“disable”格式匹配,该接口便会将这个标记添加到分析请求中。如果该接口向分析请求中添加了至少 1 个标记,系统便会分析输入的数据。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置是与哪个分析服务提供商对应。 - - 如果您将 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 字段设为 1,Chrome 需要先等到分析服务做出响应,再确定是否要授权相应网页访问此文件。如果您将该字段设为任何其他整数值,Chrome 就会立即授权相应网页访问此文件。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问受密码保护的文件。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问因过大(超过 50 MB)而无法分析的文件。 - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 字段用于确定该接口应要求用户为哪些标记输入理由,以绕过那些触发了可绕过式警告的扫描。如果该字段未设置,系统会假设不需要输入理由。 - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 字段用于配置系统在扫描完毕并判定文件有问题后向用户显示的警告消息。message 字段包含要向用户显示的文字,最多只能有 200 个字符。learn_more_url 字段包含管理员提供的网址,用户可点击该网址以从客户提供的信息中详细了解相应操作被禁止的原因。language 字段是可选字段,包含消息所用的语言。空 language 字段或“default”值用于指明要在用户所用语言未设置有消息的情况下显示的消息。tag 字段用于指定要针对哪类扫描显示消息。custom_messages 列表可包含零个或多个条目,每个条目都必须具有非空的 message 和 tag 字段。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="26023406105317310">配置 Kerberos 帐号</translation> <translation id="2604182581880595781">配置网络文件共享功能相关政策。</translation> <translation id="2615240493030733717">报告时区信息</translation> @@ -1364,7 +1347,6 @@ 如果您设置了此政策,用户便无法更改相关设置。 此政策已被弃用,请改用 <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />。</translation> -<translation id="2949765875529121431">通过设置此政策,您可以指定一系列免受 HSTS 政策检查的主机名,该检查可将请求从 HTTP 升级到 HTTPS。此政策只能使用单标签主机名。必须使用规范化主机名:任何 IDN 都必须转换为对应的 A 标签格式,并且所有 ASCII 字母都必须小写。此政策只适用于指定的特定主机名,不适用于这些名称的子网域。</translation> <translation id="2952347049958405264">限制:</translation> <translation id="2957047180944828740">指定是否允许不安全网站向更专用网络上的端点发送请求</translation> <translation id="2957506574938329824">不允许任何网站通过 Web Bluetooth API 请求访问蓝牙设备</translation> @@ -1385,7 +1367,6 @@ 要详细了解有效网址格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation> <translation id="2976429807269247880">旧版 <ph name="ATTRIBUTE_SAMESITE_NAME" /> Cookie 行为设置</translation> -<translation id="2981998788751314539">允许从特定网页上的 SSL 警告页面继续操作</translation> <translation id="2985927503455169394">使用 Google 助理新手入门体验的默认模式</translation> <translation id="2987155890997901449">启用 ARC</translation> <translation id="2987227569419001736">控制对 Web Bluetooth API 的使用</translation> @@ -1435,13 +1416,6 @@ 请注意:系统始终允许对常规个人资料进行静默身份验证。 在 <ph name="PRODUCT_NAME" /> 版本 81 及更高版本中,如果未设置此政策,系统将会仅在常规会话中启用静默身份验证。</translation> -<translation id="3021288356473993647">此政策旨在控制实时网址检查以识别不安全的网址。 - - 如果此政策未设置或设为“已停用”,系统会应用个人用户的安全浏览检查设置。个人用户的安全浏览检查设置或许仍包含实时查找,具体取决于“改善搜索和浏览体验”设置的值以及 UrlKeyedAnonymizedDataCollectionEnabled 政策的值。 - - 如果此政策设为“已启用”,系统会根据《Chrome 企业版服务条款》,发送网址以供实时扫描。这会致使 Chrome 将网址发送给 Google Cloud 或您选择的第三方进行实时检查。个人用户版的安全浏览实时查找功能将被关闭。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="3021562480854470924">指定允许回滚到的里程碑的数量</translation> <translation id="3023572080620427845">与包含要在替代浏览器中加载的网址的 XML 文件对应的网址。</translation> <translation id="302528139996622624">图片设置</translation> @@ -1509,23 +1483,6 @@ <translation id="3096595567015595053">已启用插件的列表</translation> <translation id="3101501961102569744">选择如何指定代理服务器设置</translation> <translation id="3101709781009526431">日期和时间</translation> -<translation id="3102177185340515316">让您能够指定一系列要应用于 <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> 企业版接口的 Chrome 企业版接口服务设置,以供系统在有人通过 Chrome 下载文件时调用。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 字段用于确定当用户从特定网页下载某个文件时,该接口是否应将此文件发送给系统进行分析,以及要将哪些标记添加到此文件的分析请求中。如果相应的网页网址与某个标记关联的“enable”格式相匹配,那么只要此标记关联的“disable”格式都不与此网页网址匹配,该接口便会将这个标记添加到分析请求中。如果该接口向分析请求中添加了至少 1 个标记,系统便会分析输入的数据。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置是与哪个分析服务提供商对应。 - - 如果您将 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 字段设为 1,Chrome 需要先等到分析服务做出响应,再确定是否要向相应用户授予对所下载文件的访问权限。如果您将该字段设为任何其他整数值,Chrome 就会立即向相应用户授予文件访问权限。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问受密码保护的文件。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 字段用于控制 Chrome 是会禁止访问还是会允许访问因过大(超过 50 MB)而无法分析的文件。 - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 字段用于确定该接口应要求用户为哪些标记输入理由,以绕过那些触发了可绕过式警告的扫描。如果该字段未设置,系统会假设不需要输入理由。 - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 字段用于配置系统在扫描完毕并判定文件有问题后向用户显示的警告消息。message 字段包含要向用户显示的文字,最多只能有 200 个字符。learn_more_url 字段包含管理员提供的网址,用户可点击该网址以从客户提供的信息中详细了解相应操作被禁止的原因。language 字段是可选字段,包含消息所用的语言。空 language 字段或“default”值用于指明要在用户所用语言未设置有消息的情况下显示的消息。tag 字段用于指定要针对哪类扫描显示消息。custom_messages 列表可包含零个或多个条目,每个条目都必须具有非空的 message 和 tag 字段。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="3110248563985502478">此政策已在 M88 中弃用,而且 Chrome 已不再支持 Flash。如果此政策已启用,过期插件可作为正常插件使用。如果此政策已停用,系统将不会使用过期插件。 如果您未设置此政策,系统会请求用户授权其运行过期插件。</translation> @@ -1614,21 +1571,6 @@ 如果您未设置此政策,<ph name="TPM_FIRMWARE_UPDATE_TPM" /> 固件更新将不可用。</translation> <translation id="3232691106293445015">不安全的 HTTP 连接无法使用<ph name="BASIC_AUTH" />身份验证,只有 HTTPS 能使用该验证方案</translation> -<translation id="3234647080363107863">让您能够指定一系列要应用于 <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> 企业版接口的 Chrome 企业版接口服务设置,以供系统在下述情况发生时调用:有人通过复制剪贴板内容或拖放网页内容在 Chrome 中输入数据。 - - <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 字段用于确定当用户在特定网页中输入数据时,该接口是否应将此数据发送给系统进行分析,以及要将哪些标记添加到此数据的分析请求中。如果相应的网页网址与某个标记关联的“enable”格式相匹配,那么只要此标记关联的“disable”格式都不与此网页网址匹配,该接口便会将这个标记添加到分析请求中。如果该接口向分析请求中添加了至少 1 个标记,系统便会分析输入的数据。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置是与哪个分析服务提供商对应。 - - 如果您将 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 字段设为 1,Chrome 需要先等到分析服务做出响应,再确定是否要授权相应网页访问此数据。如果您将该字段设为任何其他整数值,Chrome 就会立即授权相应网页访问此数据。 - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> 字段用于指明数据大小下限(以字节为单位)- 在 Chrome 中输入的数据必须达到或超过此限值才能被扫描。如果该字段未设置,默认值为 100 字节。 - - <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 字段用于确定该接口应要求用户为哪些标记输入理由,以绕过那些触发了可绕过式警告的扫描。如果该字段未设置,系统会假设不需要输入理由。 - - <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 字段用于配置系统在扫描完毕并判定数据有问题后向用户显示的警告消息。message 字段包含要向用户显示的文字,最多只能有 200 个字符。learn_more_url 字段包含管理员提供的网址,用户可点击该网址以从客户提供的信息中详细了解相应操作被禁止的原因。language 字段是可选字段,包含消息所用的语言。空 language 字段或“default”值用于指明要在用户所用语言未设置有消息的情况下显示的消息。tag 字段用于指定要针对哪类扫描显示消息。custom_messages 列表可包含零个或多个条目,每个条目都必须具有非空的 message 和 tag 字段。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="3236046242843493070">允许的扩展程序、应用和用户脚本安装源的网址格式</translation> <translation id="3240609035816615922">打印机配置访问政策。</translation> <translation id="324062325008698789">配置打印机列表</translation> @@ -2617,11 +2559,6 @@ 如果未设置或启用了此政策,系统会执行 DNS 拦截检查。如果明确停用了此政策,系统便不会执行 DNS 拦截检查。</translation> <translation id="4700190441681139987">不允许任何网站使用传感器</translation> <translation id="4703402283970867140">启用智能调暗模式,以最大限度地推迟屏幕变暗时间</translation> -<translation id="4715026656747891013">让您能够指定一系列要应用于 <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> 企业版接口的 Chrome 企业版接口服务设置,以供系统在 Chrome 中发生安全性事件时调用。安全性事件包括分析类企业版接口给出的否定结果、密码重用、导航到不安全的网页,以及其他关乎安全性的用户操作。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 字段用于确定您指定的设置是与哪个报告服务提供商对应,<ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> 字段用于确定为此提供商启用了哪些事件。 - - 此政策只能通过 Google 管理控制台进行设置。</translation> <translation id="4722122254122249791">为指定的来源启用网站隔离功能</translation> <translation id="4723122879352880315">此设置允许用户使用 <ph name="PRODUCT_OS_NAME" />登录凭据向通过 NTLM 身份验证机制提供安全保护的受管理代理验证身份。 @@ -4106,13 +4043,6 @@ 指定要在 <ph name="PRODUCT_NAME" /> 启动时向其应用的实验性设置。指定的实验性设置仅会应用于登录屏幕。通过此政策设定的实验性设置不会反映在用户会话中。</translation> <translation id="685769593149966548">强制启用 YouTube“严格”受限模式</translation> <translation id="686079137349561371">Microsoft Windows 7 或更高版本</translation> -<translation id="6877233375929006871">通过设置此政策,您可以创建一个网址格式列表,从而指定在哪些含 SSL 错误的网站上用户可点击 <ph name="PRODUCT_NAME" /> 显示的警告页面以继续浏览相应网站。如果用户访问的网站不在此列表中,他们将无法点击该网站上的 SSL 警告页面继续浏览。 - - 如果 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 已停用,此政策不会起到任何作用。 - - 如果您未设置此政策,系统会将 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 应用于所有网站。 - - 如需详细了解有效的<ph name="URL_LABEL" />格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。<ph name="WILDCARD_VALUE" /> 不是此政策可接受的值。</translation> <translation id="68818134518270542">通过设置此政策,您可以指定用户能在 <ph name="PRODUCT_OS_NAME" />锁定屏幕中将哪些应用作为笔记应用开启。 如果首选的应用已添加到锁定屏幕中,屏幕上将会显示用于启动首选笔记应用的界面元素。启动后,该应用便可在锁定屏幕之上创建窗口,并在此情境中创建笔记。当主要用户会话解锁时,该应用便可将所创建的笔记导入此会话中。目前,锁定屏幕上仅支持 <ph name="PRODUCT_NAME" /> 笔记应用。 @@ -4613,11 +4543,6 @@ 如果此政策设为 false,则系统会禁止更新组件。不过,有些组件不受此政策限制,比如系统不会禁止对任何符合以下条件的组件进行更新:不含可执行代码、不会明显改变浏览器的行为,或对浏览器的安全性至关重要。 此类组件包括证书撤消列表和安全浏览数据等。 要详细了解安全浏览功能,请访问 https://developers.google.com/safe-browsing。</translation> -<translation id="7563608136659080810">此政策已被弃用,请改用“<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />”政策。 - - 通过设置此政策,您可以指定 <ph name="PRODUCT_NAME" /> 可将用户凭据委派给哪台/哪些服务器。若要指定多个服务器名称,请用英文逗号分隔。允许使用通配符 <ph name="WILDCARD_VALUE" />。 - - 如果您不设置此政策,那么即使检测到某台服务器在内网上,<ph name="PRODUCT_NAME" /> 也不会将用户凭据委派给它。</translation> <translation id="7566878661979235378">SAML 登录身份验证类型</translation> <translation id="7567373982693549834">此政策可以控制每个用户对来源不受信任(来自 Google Play 商店之外)的 Android 应用的使用。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 20179f6a..29757dfa 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -1139,23 +1139,6 @@ 如果將這項政策設為「僅限使用者」(值為 1),則使用者可以管理使用者憑證,但無法管理裝置通用的憑證。</translation> <translation id="2593762551209145088">一律不啟用安全瀏覽功能。</translation> -<translation id="2600410857944104685">指定要套用至 <ph name="ON_FILE_ATTACHED_ENTERPRISE_CONNECTOR" /> Enterprise 連接器的 Chrome Enterprise 連接器服務設定清單,這份清單會在檔案附加至 Chrome 時觸發。 - - 將檔案附加至特定網頁時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 欄位來判斷連接器是否要傳送檔案進行分析,以及要在該檔案的分析要求中加入哪些標記。系統會比對標記對應的模式,如果頁面網址符合與該標記相關聯的模式,且不符合該標記的「停用」模式,系統就會在分析要求中加入與「啟用」模式對應的標記。如果在要求中加入至少 1 個標記,系統就會進行分析。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位會識別與設定對應的分析服務供應商。 - - 如果將 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 欄位設為 1,Chrome 會先等候分析服務的回應,再授予頁面存取檔案的權限。如果設為其他整數值,Chrome 會立即授予頁面存取檔案的權限。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許受到密碼保護的檔案。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許超過檔案大小上限 (50 MB) 而無法分析的檔案。 - - 當掃描結果顯示可略過的警告時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 欄位來判斷連接器該在哪些標記中要求使用者輸入略過掃描的原因。如果不設定這個欄位,系統會假設原因非必填。 - - 當掃描結果判定檔案有問題時,系統會根據 <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 欄位設定要向使用者顯示的訊息。message 欄位包含要向使用者顯示的文字,長度上限為 200 個字元。learn_more_url 欄位包含由管理員提供的網址,使用者點擊後可取得更多由客戶提供的資訊,瞭解動作遭到封鎖的原因。language 欄位為選填,包含訊息所用語言。如果將 language 欄位留空或設為「default」值,表示要使用的訊息不是以使用者語言設定的訊息。tag 欄位會指定要針對哪些掃描類型顯示訊息。custom_messages 清單可以有零或多個項目,每個項目都必須包括非空白的 message 和 tag 欄位。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="26023406105317310">設定 Kerberos 帳戶</translation> <translation id="2604182581880595781">設定網路檔案共用功能相關政策。</translation> <translation id="2615240493030733717">回報時區資訊</translation> @@ -1366,7 +1349,6 @@ 如果你設定這項政策,使用者將無法變更設定。 這項政策已遭淘汰,請改用 <ph name="PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />。</translation> -<translation id="2949765875529121431">你可以透過這項政策,指定從 HTTP 嚴格傳輸安全性政策檢查作業中排除的主機名稱清單,該檢查可將要求從 HTTP 升級至 HTTPS。這項政策只允許單一標籤主機名稱。主機名稱必須標準化:任何 IDN 都必須轉換為單一標籤格式,且所有 ASCII 字母都必須使用小寫。這項政策只適用於指定的主機名稱,不適用於指定主機名稱的子網域。</translation> <translation id="2952347049958405264">限制:</translation> <translation id="2957047180944828740">指定是否允許不安全網站向更私密的網站端點傳送要求</translation> <translation id="2957506574938329824">不允許任何網站透過 Web Bluetooth API 要求存取藍牙裝置</translation> @@ -1387,7 +1369,6 @@ 如果想進一步瞭解有效的網址模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation> <translation id="2976429807269247880">舊版 <ph name="ATTRIBUTE_SAMESITE_NAME" /> Cookie 行為設定</translation> -<translation id="2981998788751314539">允許從 SSL 警告網頁前往特定網頁</translation> <translation id="2985927503455169394">使用 Google 助理入門使用體驗的預設模式</translation> <translation id="2987155890997901449">啟用 ARC</translation> <translation id="2987227569419001736">控制 Web Bluetooth API 使用權限</translation> @@ -1437,13 +1418,6 @@ 請注意,在一般設定檔的使用環境下,系統一律允許執行背景驗證。 在 <ph name="PRODUCT_NAME" /> 81 以上版本中,如果未設定這項政策,系統只會在一般工作階段中啟用背景驗證功能。</translation> -<translation id="3021288356473993647">這項政策可控管即時檢查網址以識別不安全網址的功能。 - - 如果不設定這項政策或設為「停用」,系統會套用一般使用者的安全瀏覽檢查。一般使用者的安全瀏覽檢查仍可能包含即時查詢,實際情況取決於「改善搜尋和瀏覽體驗」的設定值和 UrlKeyedAnonymizedDataCollectionEnabled 政策的值。 - - 如果將這項政策設為「啟用」,系統會依照《Chrome Enterprise 服務條款》傳送網址進行即時掃描。Chrome 會將網址傳送給 Google Cloud 或第三方,以便依照你的選擇進行即時檢查。系統會關閉一般使用者版本的安全瀏覽即時查詢功能。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="3021562480854470924">允許復原的重要事件數</translation> <translation id="3023572080620427845">XML 檔案的網址,其中包含要在替代瀏覽器中載入的網址。</translation> <translation id="302528139996622624">圖片設定</translation> @@ -1510,23 +1484,6 @@ <translation id="3096595567015595053">啟用的外掛程式清單</translation> <translation id="3101501961102569744">選擇如何指定 Proxy 伺服器設定</translation> <translation id="3101709781009526431">日期與時間</translation> -<translation id="3102177185340515316">指定要套用至 <ph name="ON_FILE_DOWNLOADED_ENTERPRISE_CONNECTOR" /> Enterprise 連接器的 Chrome Enterprise 連接器服務設定清單,在 Chrome 中下載檔案時會觸發這份清單。 - - 從特定網頁下載檔案時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 欄位來判斷連接器是否要傳送檔案進行分析,以及要在該檔案的分析要求中加入哪些標記。系統會比對標記對應的模式,如果頁面網址符合與該標記相關聯的模式,且不符合該標記的「停用」模式,系統就會在分析要求中加入與「啟用」模式對應的標記。如果在要求中加入至少 1 個標記,系統就會進行分析。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位會識別與設定對應的分析服務供應商。 - - 如果將 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 欄位設為 1,Chrome 會先等候分析服務的回應,再授予使用者存取下載檔案的權限。如果設為其他整數值,Chrome 會立即授予使用者存取檔案的權限。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_PASSWORD_PROTECTED_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許受到密碼保護的檔案。 - - <ph name="ENTERPRISE_CONNECTOR_BLOCK_LARGE_FILES_FIELD" /> 欄位可控制 Chrome 要封鎖還是允許超過檔案大小上限 (50 MB) 而無法分析的檔案。 - - 當掃描結果顯示可略過的警告時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 欄位來判斷連接器該在哪些標記中要求使用者輸入略過掃描的原因。如果不設定這個欄位,系統會假設原因非必填。 - - 當掃描結果判定檔案有問題時,系統會根據 <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 欄位設定要向使用者顯示的訊息。message 欄位包含要向使用者顯示的文字,長度上限為 200 個字元。learn_more_url 欄位包含由管理員提供的網址,使用者點擊後可取得更多由客戶提供的資訊,瞭解動作遭到封鎖的原因。language 欄位為選填,包含訊息所用語言。如果將 language 欄位留空或設為「default」值,表示要使用的訊息不是以使用者語言設定的訊息。tag 欄位會指定要針對哪些掃描類型顯示訊息。custom_messages 清單可以有零或多個項目,每個項目都必須包括非空白的 message 和 tag 欄位。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="3110248563985502478">這項政策已在 M88 版遭到淘汰,Chrome 已不再支援 Flash。如果將這項政策設為啟用,系統會將舊版外掛程式當做一般外掛程式使用。如果將這項政策設為停用,系統便不會使用舊版外掛程式。 如果不設定這項政策,系統會要求使用者授予執行舊版外掛程式的權限。</translation> @@ -1613,21 +1570,6 @@ 如果未設定這項政策,則系統無法更新 <ph name="TPM_FIRMWARE_UPDATE_TPM" /> 韌體。</translation> <translation id="3232691106293445015">不安全的 HTTP 連線無法使用<ph name="BASIC_AUTH" />驗證;必須採用 HTTPS 連線</translation> -<translation id="3234647080363107863">指定要套用至 <ph name="ON_BULK_DATA_ENTRY_ENTERPRISE_CONNECTOR" /> Enterprise 連接器的 Chrome Enterprise 連接器服務設定清單,在 Chrome 中透過剪貼簿或拖曳網頁內容的方式輸入資料時會觸發這份清單。 - - 在特定網頁中輸入資料時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_URL_LIST_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_TAGS_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_ENABLE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_DISABLE_FIELD" /> 欄位來判斷連接器是否要傳送資料進行分析,以及要在該資料的分析要求中加入哪些標記。系統會比對標記對應的模式,如果頁面網址符合與該標記相關聯的模式,且不符合該標記的「停用」模式,系統就會在分析要求中加入與「啟用」模式對應的標記。如果在要求中加入至少 1 個標記,系統就會進行分析。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位會識別與設定對應的分析服務供應商。 - - 如果將 <ph name="ENTERPRISE_CONNECTOR_BLOCK_UNTIL_VERDICT_FIELD" /> 欄位設為 1,Chrome 會先等候分析服務的回應,再授予頁面存取資料的權限。如果設為其他整數值,Chrome 會立即授予頁面存取資料的權限。 - - <ph name="ENTERPRISE_CONNECTOR_MINIMUM_DATA_SIZE" /> 欄位代表在 Chrome 中輸入的資料大小下限 (以位元組為單位),要掃描的資料大小必須大於或等於這個值。如果不設定這個欄位,預設值為 100 個位元組。 - - 當掃描結果顯示可略過的警告時,系統會使用 <ph name="ENTERPRISE_CONNECTOR_REQUIRE_JUSTIFICATION_TAGS_FIELD" /> 欄位來判斷連接器該在哪些標記中要求使用者輸入略過掃描的原因。如果不設定這個欄位,系統會假設原因非必填。 - - 當掃描結果判定檔案有問題時,系統會根據 <ph name="ENTERPRISE_CONNECTOR_CUSTOM_MESSAGES_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_MESSAGE_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LEARN_MORE_URL_FIELD" />、<ph name="ENTERPRISE_CONNECTOR_LANGUAGE_FIELD" /> 和 <ph name="ENTERPRISE_CONNECTOR_TAG_FIELD" /> 欄位設定要向使用者顯示的訊息。message 欄位包含要向使用者顯示的文字,長度上限為 200 個字元。learn_more_url 欄位包含由管理員提供的網址,使用者點擊後可取得更多由客戶提供的資訊,瞭解動作遭到封鎖的原因。language 欄位為選填,包含訊息所用語言。如果將 language 欄位留空或設為「default」值,表示要使用的訊息不是以使用者語言設定的訊息。tag 欄位會指定要針對哪些掃描類型顯示訊息。custom_messages 清單可以有零或多個項目,每個項目都必須包括非空白的 message 和 tag 欄位。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="3236046242843493070">允許安裝擴充功能、應用程式和使用者指令碼的來源網址模式清單</translation> <translation id="3240609035816615922">印表機設定存取權政策。</translation> <translation id="324062325008698789">設定印表機清單。</translation> @@ -2613,11 +2555,6 @@ 如果不設定這項政策或設為啟用,系統會執行 DNS 攔截檢查。如果明確指定停用這項政策,系統就不會執行 DNS 攔截檢查。</translation> <translation id="4700190441681139987">不允許任何網站存取感應器</translation> <translation id="4703402283970867140">啟用智慧型調光模式來延長使用時間,直到螢幕變暗為止</translation> -<translation id="4715026656747891013">指定要套用至 <ph name="ON_SECURITY_EVENT_ENTERPRISE_CONNECTOR" /> Enterprise 連接器的 Chrome Enterprise 連接器服務設定清單,這份清單會在 Chrome 中發生安全性事件時觸發。安全性事件包含分析 Enterprise 連接器指出的負面結果、重複使用密碼、瀏覽不安全的頁面,以及其他攸關安全性的使用者動作。 - - <ph name="ENTERPRISE_CONNECTOR_SERVICE_PROVIDER_FIELD" /> 欄位可用來指定與設定對應的報告服務供應商,<ph name="ENTERPRISE_CONNECTOR_ENABLED_EVENT_NAMES_FIELD" /> 欄位則可用來指定針對這個供應商啟用的事件。 - - 你只能透過 Google 管理控制台設定這項政策。</translation> <translation id="4722122254122249791">為指定來源啟用網站隔離</translation> <translation id="4723122879352880315">你可以透過這項設定,允許使用者利用 <ph name="PRODUCT_OS_NAME" />登入憑證,向採用 NTLM 驗證防護機制的受管理 Proxy 進行驗證。 @@ -4096,13 +4033,6 @@ 指定要在 <ph name="PRODUCT_NAME" /> 啟動時套用的設定。系統僅會在進入登入畫面時套用指定的設定。透過這個政策所指定的設定不會反映在使用者工作階段中。</translation> <translation id="685769593149966548">強制執行 YouTube 高度嚴格篩選模式</translation> <translation id="686079137349561371">Microsoft Windows 7 以上版本</translation> -<translation id="6877233375929006871">你可以透過這項政策設定網址模式清單,用於指定當使用者瀏覽哪些具有 SSL 錯誤的網站時,可以忽略 <ph name="PRODUCT_NAME" /> 顯示的警告網頁繼續前往該網站。對於不在這份清單中的網站,使用者將無法忽略相關的 SSL 警告網頁前往瀏覽。 - - 如果 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 政策已停用,這項政策就沒有任何作用。 - - 如果未設定這項政策,系統就會針對所有網站套用 <ph name="SSL_ERROR_OVERRIDE_ALLOWED_POLICY_NAME" /> 政策。 - - 想進一步瞭解有效的<ph name="URL_LABEL" />模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。<ph name="WILDCARD_VALUE" /> 不是這項政策許可的值。</translation> <translation id="68818134518270542">你可以透過這項政策指定應用程式,允許使用者在 <ph name="PRODUCT_OS_NAME" />螢幕鎖定畫面上以筆記應用程式的形式開啟。 如果偏好的筆記應用程式已在螢幕鎖定畫面上,用來啟動該應用程式的 UI 元素就會顯示在畫面上。應用程式啟動後,將可在螢幕鎖定畫面的上方建立視窗,並在螢幕鎖定的情況下建立筆記。應用程式可在工作階段解鎖後,將已建立的筆記匯入主要使用者的工作階段。螢幕鎖定畫面上僅支援 <ph name="PRODUCT_NAME" /> 筆記應用程式。 @@ -4606,11 +4536,6 @@ 如果設為 False,則禁止更新元件。不過,部分元件不受這項政策規範:只要元件更新不含可執行的程式碼、不大幅變更瀏覽器的行為,或是對元件安全性至關重要,就不會遭到禁止。 這類元件的範例包括憑證撤銷清單和安全瀏覽資料。 如要進一步瞭解安全瀏覽功能,請前往 https://developers.google.com/safe-browsing。</translation> -<translation id="7563608136659080810">這項政策已遭淘汰,請改用「<ph name="AUTH_NEGOCIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />」政策。 - - 你可以透過這項政策,指派 <ph name="PRODUCT_NAME" /> 可能會委派的目標伺服器。請以半形逗號分隔伺服器名稱,可使用萬用字元 (<ph name="WILDCARD_VALUE" />)。 - - 如果未設定這項政策,即使 <ph name="PRODUCT_NAME" /> 偵測到內部網路伺服器,也不會委派使用者憑證。</translation> <translation id="7566878661979235378">SAML 登入驗證類型</translation> <translation id="7567373982693549834">這項政策可控管每位使用者是否能使用來源不受信任 (並非來自 Google Play 商店) 的 Android 應用程式。
diff --git a/components/policy/resources/webui/policy.html b/components/policy/resources/webui/policy.html index 651746a..5f90858 100644 --- a/components/policy/resources/webui/policy.html +++ b/components/policy/resources/webui/policy.html
@@ -63,10 +63,6 @@ <div class="enterprise-enrollment-domain"></div> </div> <div class="status-entry" hidden> - <div class="label">$i18n{labelEnterpriseDisplayDomain}</div> - <div class="enterprise-display-domain"></div> - </div> - <div class="status-entry" hidden> <div class="label">$i18n{labelMachineEnrollmentMachineName}</div> <div class="machine-enrollment-name"></div> </div>
diff --git a/components/policy/resources/webui/policy_base.js b/components/policy/resources/webui/policy_base.js index a9e5b51..cdb5240 100644 --- a/components/policy/resources/webui/policy_base.js +++ b/components/policy/resources/webui/policy_base.js
@@ -113,8 +113,6 @@ loadTimeData.getString('statusDevice'); this.setLabelAndShow_( '.enterprise-enrollment-domain', status.enterpriseEnrollmentDomain); - this.setLabelAndShow_( - '.enterprise-display-domain', status.enterpriseDisplayDomain); // Populate the device naming information. // Populate the asset identifier.
diff --git a/components/policy/tools/generate_policy_source.py b/components/policy/tools/generate_policy_source.py index 31ddf626..154b624 100755 --- a/components/policy/tools/generate_policy_source.py +++ b/components/policy/tools/generate_policy_source.py
@@ -915,19 +915,22 @@ f.write(' %s,\n' % self.GetString(possible_values)) f.write('};\n\n') - f.write('const internal::SchemaData kChromeSchemaData = {\n' - ' kSchemas,\n') - f.write(' kPropertyNodes,\n' if self.property_nodes else ' nullptr,\n') - f.write(' kProperties,\n' if self.properties_nodes else ' nullptr,\n') - f.write( - ' kRestrictionNodes,\n' if self.restriction_nodes else ' nullptr,\n') - f.write(' kRequiredProperties,\n' if self. + f.write('const internal::SchemaData* GetChromeSchemaData() {\n') + f.write(' static const internal::SchemaData kChromeSchemaData = {\n' + ' kSchemas,\n') + f.write(' kPropertyNodes,\n' if self.property_nodes else ' nullptr,\n') + f.write(' kProperties,\n' if self.properties_nodes else ' nullptr,\n') + f.write(' kRestrictionNodes,\n' if self. + restriction_nodes else ' nullptr,\n') + f.write(' kRequiredProperties,\n' if self. required_properties else ' nullptr,\n') - f.write(' kIntegerEnumerations,\n' if self.int_enums else ' nullptr,\n') - f.write(' kStringEnumerations,\n' if self.string_enums else ' nullptr,\n') - f.write(' %d, // validation_schema root index\n' % + f.write(' kIntegerEnumerations,\n' if self.int_enums else ' nullptr,\n') + f.write( + ' kStringEnumerations,\n' if self.string_enums else ' nullptr,\n') + f.write(' %d, // validation_schema root index\n' % self.validation_schema_root_index) - f.write('};\n\n') + f.write(' };\n\n') + f.write(' return &kChromeSchemaData;\n' '}\n\n') def GetByID(self, id_str): if not isinstance(id_str, string_type): @@ -1124,10 +1127,6 @@ 'L"' + CHROMIUM_POLICY_KEY + '";\n' '#endif\n\n') - f.write('const internal::SchemaData* GetChromeSchemaData() {\n' - ' return &kChromeSchemaData;\n' - '}\n\n') - f.write('#if BUILDFLAG(IS_CHROMEOS_ASH)\n' 'void SetEnterpriseUsersDefaults(PolicyMap* policy_map) {\n')
diff --git a/components/policy_strings.grdp b/components/policy_strings.grdp index 17ca93b1..f8cf8c7 100644 --- a/components/policy_strings.grdp +++ b/components/policy_strings.grdp
@@ -311,9 +311,6 @@ <message name="IDS_POLICY_LABEL_ENTERPRISE_ENROLLMENT_DOMAIN" desc="Label for the enrollment domain in the device policy status box."> Enrollment domain: </message> - <message name="IDS_POLICY_LABEL_ENTERPRISE_DISPLAY_DOMAIN" desc="Label for the display domain in the device policy status box."> - Display domain: - </message> <message name="IDS_POLICY_LABEL_MACHINE_ENROLLMENT_DOMAIN" desc="Label for the enrollment domain in the machine policy status box."> Enrollment domain: </message>
diff --git a/components/reporting/proto/record_constants.proto b/components/reporting/proto/record_constants.proto index 21ed992..5a8d383a 100644 --- a/components/reporting/proto/record_constants.proto +++ b/components/reporting/proto/record_constants.proto
@@ -19,10 +19,25 @@ // Devices. For more information, see go/reliable-meet-device-telemetry. MEET_DEVICE_TELEMETRY = 2; + // |WEB_PROTECT| legacy web protect event handler + WEB_PROTECT = 3; + + // |ARC_INSTALL| legacy arc app installation event handler + ARC_INSTALL = 4; + + // |POLICY_VALIDATION| legacy policy validation event handler + POLICY_VALIDATION = 5; + + // |EXTENSION_INSTALL| legacy extension installation event handler + EXTENSION_INSTALL = 6; + + // |REPORTING_RECORD| Temporary group for Encrypted Reporting Pipeline + REPORTING_RECORD = 7; + // |DEVICE_TRUST_REPORTS| handler is for reporting data updates related to the // Device Trust connector, sent by Chrome browsers for Chrome Browser Cloud // Management (CBCM). - DEVICE_TRUST_REPORTS = 3; + DEVICE_TRUST_REPORTS = 8; } // |Priority| is used to determine when items from the queue should be rate
diff --git a/components/signin/core/browser/account_reconcilor_delegate_unittest.cc b/components/signin/core/browser/account_reconcilor_delegate_unittest.cc index 1196d93..576c0b1 100644 --- a/components/signin/core/browser/account_reconcilor_delegate_unittest.cc +++ b/components/signin/core/browser/account_reconcilor_delegate_unittest.cc
@@ -45,6 +45,10 @@ // Cookie was lost. { "A", "", "A", "A" }, { "ABCD", "", "A", "ABCD" }, + // New account is added. + { "ABC", "AB", "A", "ABC" }, + { "ACB", "AB", "A", "ABC" }, + { "BAC", "AB", "A", "ABC" }, // B kept in place. { "ADB", "CB", "A", "ABD" }, // ACEG kept in place.
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 9f279bb..4116371 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">আপোনাৰ কম্পিউটাৰত থকা ফ’ণ্ট ব্যৱহাৰ কৰক যাতে আপুনি উচ্চমানৰ সমল সৃষ্টি কৰিব পাৰে</translation> <translation id="1463543813647160932">৫x৭</translation> <translation id="1467432559032391204">বাওঁফালে</translation> +<translation id="1468463683985534315">ৱেব এপৰ উৎস এছোচিয়েশ্বন পাৰ্ছাৰ সেৱা</translation> <translation id="1472675084647422956">অধিক দেখুৱাওক</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">এই নীতিটোৱে বিচৰা ধৰণে কাম কৰি আছে, কিন্তু অন্য কোনো ঠাইত একেটা মান ছেট কৰা হৈছে আৰু সেইটোক এই নীতিটোৱে অপসাৰণ কৰিছে।</translation> <translation id="1569487616857761740">ম্যাদ উকলাৰ তাৰিখ দিয়ক</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">এই ৱেবপৃষ্ঠাটো প্ৰদর্শন কৰোঁতে কিবা আসোঁৱাহ হ’ল।</translation> <translation id="1586541204584340881">আপুনি ইনষ্টল কৰা এক্সটেনশ্বনসমূহ</translation> <translation id="1588438908519853928">সাধাৰণ</translation> @@ -379,6 +381,7 @@ <translation id="2359629602545592467">একাধিক</translation> <translation id="2359808026110333948">অব্যাহত ৰাখক</translation> <translation id="2367567093518048410">স্তৰ</translation> +<translation id="2372464001869762664">আপুনি নিশ্চিত কৰাৰ পাছত আপোনাৰ Google একাউণ্টৰ পৰা আপোনাৰ কাৰ্ডৰ সবিশেষ এই ছাইটটোৰ সৈতে শ্বেয়াৰ কৰা হ’ব। আপোনাৰ Plex একাউণ্টৰ সবিশেষত CVC বিচাৰক।</translation> <translation id="2380886658946992094">লিগেল</translation> <translation id="2384307209577226199">এণ্টাৰপ্ৰাইজৰ ডিফ’ল্ট</translation> <translation id="2385809941344967209">আপোনাৰ Chromeৰ ছেটিংসমূহৰ পৰা Chrome আপডে’ট কৰক</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 5a19551b..caf6c73 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">Die Schriftarten auf Ihrem Computer verwenden, damit Sie High Fidelity-Inhalte erstellen können</translation> <translation id="1463543813647160932">5 x 7</translation> <translation id="1467432559032391204">Links</translation> +<translation id="1468463683985534315">Parser-Dienst für Zuordnung des Web-App-Ursprungs</translation> <translation id="1472675084647422956">Mehr anzeigen</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">Diese Richtlinie funktioniert wie beabsichtigt, an anderer Stelle ist jedoch der gleiche Wert festgelegt, der von dieser Richtlinie ersetzt wird.</translation> <translation id="1569487616857761740">Ablaufdatum eingeben</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">Fehler beim Anzeigen dieser Webseite.</translation> <translation id="1586541204584340881">Welche Erweiterungen Sie installiert haben</translation> <translation id="1588438908519853928">Normal</translation> @@ -375,6 +377,7 @@ <translation id="2359629602545592467">Mehrere</translation> <translation id="2359808026110333948">Weiter</translation> <translation id="2367567093518048410">Ebene</translation> +<translation id="2372464001869762664">Nach erfolgter Bestätigung werden die Kartendetails Ihres Google-Kontos an diese Website weitergegeben. Den CVC finden Sie in den Details Ihres Plex-Kontos.</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">Unternehmensstandard</translation> <translation id="2385809941344967209">Chrome über die Chrome-Einstellungen aktualisieren</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index de2cbe9d..67da5d8 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -982,7 +982,7 @@ <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> <translation id="4807049035289105102">Une honetan ezin zara joan <ph name="SITE" /> webgunera, Google Chrome-k prozesatu ezin dituen kredentzial nahasiak bidali baititu webguneak. Sareko erroreak eta erasoak aldi baterako izan ohi dira. Beraz, segur aski geroago funtzionatuko du orriak.</translation> <translation id="4809079943450490359">Gailuaren administratzailearen argibideak:</translation> -<translation id="4813512666221746211">Sarearen errorea</translation> +<translation id="4813512666221746211">Sareko errorea</translation> <translation id="4816492930507672669">Egokitu orrira</translation> <translation id="4819347708020428563">Ikuspegi lehenetsian editatu nahi dituzu oharpenak?</translation> <translation id="484462545196658690">Automatikoa</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index c0482331..ba21beb 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -377,7 +377,7 @@ <translation id="2359629602545592467">Plusieurs</translation> <translation id="2359808026110333948">Continuer</translation> <translation id="2367567093518048410">Niveau</translation> -<translation id="2372464001869762664">Après votre confirmation, les renseignements de la carte provenant de votre compte Google seront partagés avec ce site. Vous trouverez le code CVC dans les renseignements de votre compte Plex.</translation> +<translation id="2372464001869762664">Après votre confirmation, les détails de la carte provenant de votre compte Google seront partagés avec ce site. Vous trouverez le code CVC dans les renseignements de votre compte Plex.</translation> <translation id="2380886658946992094">Légal</translation> <translation id="2384307209577226199">Politique d'entreprise par défaut</translation> <translation id="2385809941344967209">Mettez à jour Chrome dans les paramètres de Chrome</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 8ea557f..7e27003 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">Utiliser les polices installées sur votre ordinateur pour créer des contenus haute fidélité</translation> <translation id="1463543813647160932">5 x 7</translation> <translation id="1467432559032391204">À gauche</translation> +<translation id="1468463683985534315">Service d'analyse de l'association de départ de l'application Web</translation> <translation id="1472675084647422956">Plus</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">Cette règle fonctionne comme prévu, mais notez que la même valeur a été définie ailleurs et que cette règle la remplace.</translation> <translation id="1569487616857761740">Saisir la date d'expiration</translation> <translation id="1581080074034554886">Code CVC :</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">Une erreur s'est produite lors de l'affichage de la page Web.</translation> <translation id="1586541204584340881">Les extensions que vous avez installées</translation> <translation id="1588438908519853928">Standard</translation> @@ -379,6 +381,7 @@ <translation id="2359629602545592467">Plusieurs</translation> <translation id="2359808026110333948">Continuer</translation> <translation id="2367567093518048410">Niveau</translation> +<translation id="2372464001869762664">Une fois la validation effectuée, les informations relatives à la carte de votre compte Google seront partagées avec ce site. Recherchez le code CVC dans les informations de votre compte Plex.</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">Valeur par défaut définie par l'entreprise</translation> <translation id="2385809941344967209">Mettez à jour votre navigateur dans les paramètres Chrome</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index 2a04e1f6..efb935a 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">Жоғары сапалы мазмұн жасау үшін компьютердегі қаріптерді пайдаланыңыз.</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">Сол жақ</translation> +<translation id="1468463683985534315">Web App Origin Association Parser қызметі</translation> <translation id="1472675084647422956">Толығырақ көрсету</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">Бұл саясат ойдағыдай жұмыс істеуде, бірақ басқа жерде осы саясат бойынша ауыстырылатын тап осындай мән орнатылған.</translation> <translation id="1569487616857761740">Жарамдылық мерзімін енгізіңіз.</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">Бұл веб-бетті көрсету кезінде қате кетті.</translation> <translation id="1586541204584340881">қай кеңейтімдерді орнатқаныңызды;</translation> <translation id="1588438908519853928">Қалыпты</translation> @@ -379,6 +381,7 @@ <translation id="2359629602545592467">Бірнеше</translation> <translation id="2359808026110333948">Жалғастыру</translation> <translation id="2367567093518048410">Деңгей</translation> +<translation id="2372464001869762664">Растағаннан кейін, Google есептік жазбасындағы карта мәліметтері осы сайтқа беріледі. Plex есептік жазбаңыз туралы мәліметтерден CVC кодын тауып алыңыз.</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">Кәсіпорын (әдепкі)</translation> <translation id="2385809941344967209">Chrome браузерін Chrome параметрлерінен жаңартыңыз.</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index 20bf10e..3ea067ca 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">Мазмундарды жогорку тактык менен түзүү үчүн компьютердеги ариптерди колдонуңуз</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">Сол</translation> +<translation id="1468463683985534315">Web App Origin Association Parser Service</translation> <translation id="1472675084647422956">Дагы көрсөтүү</translation> <translation id="1473183651233018052">JIS B10 (32mm x 45mm)</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">Бул саясат талаптагыдай иштеп жатат, бирок ал башка жерде коюлган окшош мааниге алмаштырып койду.</translation> <translation id="1569487616857761740">Насыя картасынын жарамдуулук мөөнөтүн киргизиңиз</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">Бул веб-баракча жүктөлүп жатканда бир жерден ката кетти.</translation> <translation id="1586541204584340881">Кайсы кеңейтүүлөрдү орнотуп алдыңыз</translation> <translation id="1588438908519853928">Кадыресе</translation> @@ -379,6 +381,7 @@ <translation id="2359629602545592467">Бир нече</translation> <translation id="2359808026110333948">Улантуу</translation> <translation id="2367567093518048410">Деңгээли</translation> +<translation id="2372464001869762664">Ырастаганыңыздан кийин Google аккаунтуңуздагы карточканын чоо-жайы бул сайтка жөнөтүлөт. Plex аккаунтуңуздун чоо-жайынан CVC кодун табыңыз.</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">Демейки ишкана</translation> <translation id="2385809941344967209">Chrome'дун жөндөөлөрүнө өтүп, Chrome'ду жаңыртыңыз</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 86eae8d..52adb2ef 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ഉള്ള ഫോണ്ടുകൾ ഉപയോഗിക്കുന്നതിലൂടെ നിങ്ങൾക്ക് ഉയർന്ന ഫിഡിലിറ്റിയുള്ള ഉള്ളടക്കം സൃഷ്ടിക്കാനാകും</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">ഇടത്</translation> +<translation id="1468463683985534315">വെബ് ആപ്പ് ഒറിജിൻ അസോസിയേഷൻ പാർസർ സേവനം</translation> <translation id="1472675084647422956">കൂടുതൽ കാണിക്കുക</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">ഈ നയം ഉദ്ദേശിച്ചത് പോലെ പ്രവർത്തിക്കുന്നുണ്ട്, എന്നാൽ മറ്റൊരു ഉറവിടത്തിൽ അതേ മൂല്യം സജ്ജീകരിച്ചതിനെ തുടർന്ന് ഈ നയത്തിന് പകരം മറ്റൊന്ന് സജീവമായി.</translation> <translation id="1569487616857761740">കാലഹരണപ്പെടുന്ന തീയതി നൽകുക</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">ഈ വെബ്പേജ് പ്രദർശിപ്പിക്കുമ്പോൾ എന്തോ കുഴപ്പം സംഭവിച്ചു.</translation> <translation id="1586541204584340881">ഏതൊക്കെ വിപുലീകരണങ്ങൾ നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട് എന്നത്</translation> <translation id="1588438908519853928">സാധാരണം</translation> @@ -378,6 +380,7 @@ <translation id="2359629602545592467">ഒന്നിലധികം</translation> <translation id="2359808026110333948">തുടരുക</translation> <translation id="2367567093518048410">നില</translation> +<translation id="2372464001869762664">സ്ഥിരീകരിച്ച് കഴിഞ്ഞാൽ, നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിന്നുള്ള കാർഡ് വിശദാംശങ്ങൾ ഈ സൈറ്റുമായി പങ്കിടും. നിങ്ങളുടെ Plex അക്കൗണ്ട് വിശദാംശങ്ങളിൽ CVC കണ്ടെത്തുക.</translation> <translation id="2380886658946992094">നിയമപരം</translation> <translation id="2384307209577226199">എന്റര്പ്രൈസ് ഡിഫോൾട്ട്</translation> <translation id="2385809941344967209">നിങ്ങളുടെ Chrome ക്രമീകരണത്തിൽ നിന്ന് Chrome അപ്ഡേറ്റ് ചെയ്യുക</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 85f4b121..0fa704ec 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">आफ्नो कम्प्युटरमा भएका फन्टहरू प्रयोग गर्नुहोस्। यसो गर्दा तपाईं उच्च गुणस्तरका सामग्री बनाउन सक्नुहुन्छ</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">बाँया</translation> +<translation id="1468463683985534315">Web App Origin Association Parser Service</translation> <translation id="1472675084647422956">थप देखाउनुहोस्</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">यो नीतिले सोचेअनुसार काम गरिरहेको छ तर एउटै मान अन्यत्र तय गरिएका कारण यस नीतिअनुसार उक्त मानको साटो अर्को मान लागू गरिएको छ।</translation> <translation id="1569487616857761740">म्याद सकिने मिति प्रविष्टि गर्नुहोस्</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">यो वेबपृष्ठ प्रदर्शन गर्दा कुनै त्रुटी भयो।</translation> <translation id="1586541204584340881">तपाईंले स्थापना गर्नुभएका एक्स्टेन्सनहरू</translation> <translation id="1588438908519853928">सामान्य</translation> @@ -379,6 +381,7 @@ <translation id="2359629602545592467">बहु मुद्राहरू</translation> <translation id="2359808026110333948">जारी राख्नुहोस्</translation> <translation id="2367567093518048410">चरण</translation> +<translation id="2372464001869762664">तपाईंले पुष्टि गरिसकेपछि तपाईंको Google खातामा रहेका कार्डसम्बन्धी विवरणहरू यो साइटसँग सेयर गरिने छन्। तपाईं आफ्नो Plex खातासम्बन्धी विवरणहरूमा गई CVC हेर्न सक्नुहुन्छ।</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">उद्यम पूर्वनिर्धारित</translation> <translation id="2385809941344967209">आफ्नो Chrome ब्राउजरका सेटिङमा गई Chrome अपडेट गर्नुहोस्</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 5f5ba8d..163201b 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">ਆਪਣੇ ਕੰਪਿਊਟਰ 'ਤੇ ਫ਼ੌਂਟਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ ਤਾਂ ਜੋ ਤੁਸੀਂ ਉੱਚ ਵਾਸਤਵਿਕਤਾ ਸਮੱਗਰੀ ਬਣਾ ਸਕੋ</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">ਖੱਬੇ ਪਾਸੇ</translation> +<translation id="1468463683985534315">ਵੈੱਬ ਐਪ ਓਰਿਜਨ ਐਸੋਸੀਏਸ਼ਨ ਪਾਰਸਰ ਸੇਵਾ</translation> <translation id="1472675084647422956">ਹੋਰ ਦਿਖਾਓ</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">ਇਹ ਨੀਤੀ ਉਮੀਦ ਮੁਤਾਬਕ ਕੰਮ ਕਰ ਰਹੀ ਹੈ ਪਰ ਸਮਾਨ ਮੁੱਲ ਕਿਸੇ ਹੋਰ ਥਾਂ 'ਤੇ ਸੈੱਟ ਹੈ ਅਤੇ ਇਸ ਨੀਤੀ ਵੱਲੋਂ ਪ੍ਰਤਿਸਥਾਪਨ ਕੀਤਾ ਗਿਆ ਹੈ।</translation> <translation id="1569487616857761740">ਮਿਆਦ ਮੁੱਕਣ ਦੀ ਤਾਰੀਖ ਦਾਖਲ ਕਰੋ</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">ਇਹ ਵੈਬਸਫ਼ਾ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਦੇ ਸਮੇਂ ਕੁਝ ਗ਼ਲਤ ਹੋਇਆ ਸੀ।</translation> <translation id="1586541204584340881">ਤੁਸੀਂ ਕਿਹੜੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਹੋਈਆਂ ਹਨ</translation> <translation id="1588438908519853928">ਸਧਾਰਨ</translation> @@ -375,6 +377,7 @@ <translation id="2359629602545592467">ਇੱਕ ਤੋਂ ਵਧੇਰੇ</translation> <translation id="2359808026110333948">ਜਾਰੀ ਰੱਖੋ</translation> <translation id="2367567093518048410">ਪੱਧਰ</translation> +<translation id="2372464001869762664">ਤੁਹਾਡੇ ਵੱਲੋਂ ਤਸਦੀਕ ਕੀਤੇ ਜਾਣ ਤੋਂ ਬਾਅਦ, ਤੁਹਾਡੇ Google ਖਾਤੇ ਤੋਂ ਕਾਰਡ ਦੇ ਵੇਰਵੇ ਇਸ ਸਾਈਟ ਨਾਲ ਸਾਂਝੇ ਕੀਤੇ ਜਾਣਗੇ। CVC ਨੂੰ ਆਪਣੇ Plex ਖਾਤੇ ਦੇ ਵੇਰਵਿਆਂ ਵਿੱਚ ਲੱਭੋ।</translation> <translation id="2380886658946992094">ਕਨੂੰਨੀ</translation> <translation id="2384307209577226199">ਐਂਟਰਪ੍ਰਾਈਜ਼ ਪੂਰਵ-ਨਿਰਧਾਰਤ</translation> <translation id="2385809941344967209">ਆਪਣੀਆਂ Chrome ਸੈਟਿੰਗਾਂ ਤੋਂ Chrome ਅੱਪਡੇਟ ਕਰੋ</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 549ca52..60ca81e 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">துல்லியமான உள்ளடக்கத்தை உருவாக்க, உங்கள் கம்ப்யூட்டரில் உள்ள எழுத்துருக்களைப் பயன்படுத்தவும்</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">இடது</translation> +<translation id="1468463683985534315">Web App Origin Association Parser Service</translation> <translation id="1472675084647422956">மேலும் காண்பி</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">இந்தக் கொள்கை எதிர்பார்த்த வகையில் வேலை செய்கிறது. ஆனால் இதே மதிப்பு வேறு எங்கோ அமைக்கப்பட்டுள்ளதோடு இந்தக் கொள்கையின் மூலம் மாற்றியமைக்கப்படுகிறது.</translation> <translation id="1569487616857761740">காலாவதித் தேதியை உள்ளிடவும்</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">இந்த இணையப்பக்கத்தைக் காட்டும்போது ஏதோ தவறு ஏற்பட்டது.</translation> <translation id="1586541204584340881">நீங்கள் நிறுவியுள்ள நீட்டிப்புகள்</translation> <translation id="1588438908519853928">இயல்பு</translation> @@ -379,6 +381,7 @@ <translation id="2359629602545592467">பல</translation> <translation id="2359808026110333948">தொடர்க</translation> <translation id="2367567093518048410">நிலை</translation> +<translation id="2372464001869762664">நீங்கள் உறுதிப்படுத்திய பிறகு, உங்கள் Google கணக்கிலிருக்கும் கார்டு விவரங்கள் இந்தத் தளத்துடன் பகிரப்படும். உங்கள் Plex கணக்கு விவரங்களில் CVCயைக் கண்டறியவும்.</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">நிறுவன இயல்புநிலை</translation> <translation id="2385809941344967209">Chrome அமைப்புகளில் Chromeமைப் புதுப்பித்தல்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 7ffb576..89b6605 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -149,6 +149,7 @@ <translation id="1462951478840426066">మీ కంప్యూటర్లోని ఫాంట్లను ఉపయోగించండి, తద్వారా మీరు అధిక నాణ్యత గల కంటెంట్ను క్రియేట్ చేయవచ్చు</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">ఎడమ</translation> +<translation id="1468463683985534315">వెబ్ యాప్ ఆరిజిన్ అసోసియేషన్ పార్సర్ సర్వీస్</translation> <translation id="1472675084647422956">మరిన్ని చూపించు</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -183,6 +184,7 @@ <translation id="1567040042588613346">ఈ పాలసీ అనుకున్నట్టుగా పని చేస్తోంది, కానీ అదే విలువ మరో చోట సెట్ చేయబడింది, అలాగే ఈ పాలసీ ద్వారా అధిగమించబడింది.</translation> <translation id="1569487616857761740">గడువు ముగింపు తేదీని నమోదు చేయండి</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">ఈ వెబ్ పేజీని ప్రదర్శిస్తున్నప్పుడు ఏదో తప్పు జరిగింది.</translation> <translation id="1586541204584340881">మీరు ఏ ఎక్స్టెన్షన్లను ఇన్ స్టాల్ చేసుకున్నారు</translation> <translation id="1588438908519853928">సాధారణ</translation> @@ -381,6 +383,7 @@ <translation id="2359629602545592467">అనేకం</translation> <translation id="2359808026110333948">కొనసాగించు</translation> <translation id="2367567093518048410">స్థాయి</translation> +<translation id="2372464001869762664">మీరు నిర్ధారించిన తర్వాత, మీ Google ఖాతా నుండి కార్డ్ వివరాలు ఈ సైట్తో షేర్ చేయబడతాయి. CVCను మీ Plex ఖాతా వివరాలలో కనుగొనండి.</translation> <translation id="2380886658946992094">చట్టపరం</translation> <translation id="2384307209577226199">ఎంటర్ప్రైజ్ డిఫాల్ట్</translation> <translation id="2385809941344967209">మీ Chrome సెట్టింగ్ల నుండి Chromeను అప్డేట్ చేయండి</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 19f5a05..12acec5 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -147,6 +147,7 @@ <translation id="1462951478840426066">اپنے کمپیوٹر پر فونٹس کا استعمال کریں تاکہ آپ اعلی معیار کا مواد تخلیق کر سکیں</translation> <translation id="1463543813647160932">5x7</translation> <translation id="1467432559032391204">بائیں</translation> +<translation id="1468463683985534315">ویب ایپ اوریجن ایسوسی ایشن پارسر سروس</translation> <translation id="1472675084647422956">مزید دکھائیں</translation> <translation id="1473183651233018052">JIS B10</translation> <translation id="147358896496811705">2A0</translation> @@ -181,6 +182,7 @@ <translation id="1567040042588613346">یہ پالیسی توقع کے مطابق کام کر رہی ہے لیکن کسی دوسری جگہ ایک جیسی قدر سیٹ کی گئی ہے اور اس نے اس پالیسی کی جگہ لے لی ہے۔</translation> <translation id="1569487616857761740">تاریخ اختتام درج کریں</translation> <translation id="1581080074034554886">CVC</translation> +<translation id="1583294866416602487">Plex</translation> <translation id="1583429793053364125">یہ ویب صفحہ ڈسپلے کرتے ہوئے کچھ غلط ہو گیا۔</translation> <translation id="1586541204584340881">آپ نے کن ایکسٹینشنز کو انسٹال کیا ہے</translation> <translation id="1588438908519853928">حسب معمول</translation> @@ -380,6 +382,7 @@ <translation id="2359629602545592467">متعدد</translation> <translation id="2359808026110333948">جاری رکھیں</translation> <translation id="2367567093518048410">سطح</translation> +<translation id="2372464001869762664">آپ کے توثیق کرنے کے بعد آپ کے Google اکاؤنٹ سے کارڈ کی تفصیلات کا اشتراک اس سائٹ کے ساتھ کر دیا جائے گا۔ اپنے Plex اکاؤنٹ کی تفصیلات میں CVC تلاش کریں۔</translation> <translation id="2380886658946992094">Legal</translation> <translation id="2384307209577226199">انٹرپرائز ڈیفالٹ</translation> <translation id="2385809941344967209">اپنے Chrome کی ترتیبات سے Chrome کو اپ ڈیٹ کریں</translation>
diff --git a/components/sync/engine/model_type_worker.cc b/components/sync/engine/model_type_worker.cc index 5ccc0256..4cd048b 100644 --- a/components/sync/engine/model_type_worker.cc +++ b/components/sync/engine/model_type_worker.cc
@@ -579,7 +579,7 @@ if (newly_found_key.gu_responses_while_should_have_been_known > 0) { base::UmaHistogramCounts1000( base::StrCat({kTimeUntilEncryptionKeyFoundHistogramPrefix, - ModelTypeToString(GetModelType())}), + ModelTypeToHistogramSuffix(type_)}), newly_found_key.gu_responses_while_should_have_been_known); } } @@ -733,7 +733,7 @@ if (entries_pending_decryption_.size() < updates_before_dropping) { base::UmaHistogramCounts1000( base::StrCat({kUndecryptablePendingUpdatesDroppedHistogramPrefix, - ModelTypeToString(GetModelType())}), + ModelTypeToHistogramSuffix(type_)}), updates_before_dropping - entries_pending_decryption_.size()); } }
diff --git a/components/sync/engine/model_type_worker_unittest.cc b/components/sync/engine/model_type_worker_unittest.cc index 1b4e6f4..4828e9b 100644 --- a/components/sync/engine/model_type_worker_unittest.cc +++ b/components/sync/engine/model_type_worker_unittest.cc
@@ -1326,7 +1326,7 @@ // Double check the histogram hasn't been recorded so far. const std::string histogram_name = std::string("Sync.ModelTypeTimeUntilEncryptionKeyFound.") + - ModelTypeToString(worker()->GetModelType()); + ModelTypeToHistogramSuffix(worker()->GetModelType()); EXPECT_TRUE(histogram_tester.GetAllSamples(histogram_name).empty()); // Make the key available. The correct number of GetUpdatesResponse should @@ -1364,7 +1364,7 @@ // Should have recorded that 1 entity was dropped. histogram_tester.ExpectUniqueSample( base::StrCat({"Sync.ModelTypeUndecryptablePendingUpdatesDropped.", - ModelTypeToString(worker()->GetModelType())}), + ModelTypeToHistogramSuffix(worker()->GetModelType())}), 1, 1); // From now on, incoming updates encrypted with the missing key don't block
diff --git a/components/sync/test/fake_server/fake_server.cc b/components/sync/test/fake_server/fake_server.cc index 0206829..da99fce7 100644 --- a/components/sync/test/fake_server/fake_server.cc +++ b/components/sync/test/fake_server/fake_server.cc
@@ -35,6 +35,9 @@ using syncer::ModelType; using syncer::ModelTypeSet; +const char switches::kDisableFakeServerFailureOutput[] = + "disable-fake-server-failure-output"; + namespace fake_server { FakeServer::FakeServer() @@ -654,7 +657,7 @@ const std::string& title, const std::string& body) { if (base::CommandLine::ForCurrentProcess()->HasSwitch( - "disable-fake-server-failure-output")) { + switches::kDisableFakeServerFailureOutput)) { return; } gtest_scoped_traces_.push_back(std::make_unique<testing::ScopedTrace>(
diff --git a/components/sync/test/fake_server/fake_server.h b/components/sync/test/fake_server/fake_server.h index 9591effe..98fa700 100644 --- a/components/sync/test/fake_server/fake_server.h +++ b/components/sync/test/fake_server/fake_server.h
@@ -30,6 +30,12 @@ #include "net/http/http_status_code.h" #include "testing/gmock/include/gmock/gmock.h" +namespace switches { + +extern const char kDisableFakeServerFailureOutput[]; + +} // namespace switches + namespace fake_server { // This function only compares one part of the markers, the time-independent @@ -44,6 +50,8 @@ // A fake version of the Sync server used for testing. This class is not thread // safe. +// |switches::kDisableFakeServerFailureOutput| can be passed to the command line +// to avoid debug logs upon test failure. class FakeServer : public syncer::LoopbackServer::ObserverForTests { public: class Observer { @@ -250,7 +258,9 @@ const sync_pb::ClientToServerMessage& message, sync_pb::ClientToServerResponse* response); - // Logs a string that is meant to be shown in case the running test fails. + // Logs a string that is meant to be shown in case the running test fails, + // as long as |switches::kDisableFakeServerFailureOutput| hasn't been passed + // to the command line. void LogForTestFailure(const base::Location& location, const std::string& title, const std::string& body);
diff --git a/components/sync/trusted_vault/download_keys_response_handler.cc b/components/sync/trusted_vault/download_keys_response_handler.cc index a604012..dc7827e 100644 --- a/components/sync/trusted_vault/download_keys_response_handler.cc +++ b/components/sync/trusted_vault/download_keys_response_handler.cc
@@ -132,9 +132,9 @@ DownloadKeysResponseHandler::ProcessedResponse::ProcessedResponse( TrustedVaultRequestStatus status, - std::vector<std::vector<uint8_t>> keys, + std::vector<std::vector<uint8_t>> new_keys, int last_key_version) - : status(status), keys(keys), last_key_version(last_key_version) {} + : status(status), new_keys(new_keys), last_key_version(last_key_version) {} DownloadKeysResponseHandler::ProcessedResponse::ProcessedResponse( const ProcessedResponse& other) = default; @@ -205,7 +205,7 @@ std::vector<std::vector<uint8_t>> new_keys; for (const ExtractedSharedKey& key : extracted_keys) { if (!last_trusted_vault_key_and_version_.has_value() || - key.version >= last_trusted_vault_key_and_version_->version) { + key.version > last_trusted_vault_key_and_version_->version) { // Don't include previous keys into the result, because they weren't // validated using |last_trusted_vault_key_and_version| and client should // be already aware of them.
diff --git a/components/sync/trusted_vault/download_keys_response_handler.h b/components/sync/trusted_vault/download_keys_response_handler.h index 0162c1f..45569ce 100644 --- a/components/sync/trusted_vault/download_keys_response_handler.h +++ b/components/sync/trusted_vault/download_keys_response_handler.h
@@ -23,7 +23,7 @@ struct ProcessedResponse { explicit ProcessedResponse(TrustedVaultRequestStatus status); ProcessedResponse(TrustedVaultRequestStatus status, - std::vector<std::vector<uint8_t>> keys, + std::vector<std::vector<uint8_t>> new_keys, int last_key_version); ProcessedResponse(const ProcessedResponse& other); ProcessedResponse& operator=(const ProcessedResponse& other); @@ -38,11 +38,9 @@ // isn't valid serialized ListSecurityDomainsResponse proto. TrustedVaultRequestStatus status; - // Contains new keys and potentially previously known trusted vault key if - // it wasn't removed server-side. Doesn't contain keys that predate - // last known trusted vault key, because it's impossible to validate them - // and the client should be aware of them already. - std::vector<std::vector<uint8_t>> keys; + // Contains new keys (e.g. keys are stored by the server, excluding last + // known key and keys that predate it). + std::vector<std::vector<uint8_t>> new_keys; int last_key_version; };
diff --git a/components/sync/trusted_vault/download_keys_response_handler_unittest.cc b/components/sync/trusted_vault/download_keys_response_handler_unittest.cc index 041b9364..f475b21 100644 --- a/components/sync/trusted_vault/download_keys_response_handler_unittest.cc +++ b/components/sync/trusted_vault/download_keys_response_handler_unittest.cc
@@ -132,8 +132,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT(processed_response.keys, - ElementsAre(kKnownTrustedVaultKey, kTrustedVaultKey1)); + EXPECT_THAT(processed_response.new_keys, ElementsAre(kTrustedVaultKey1)); EXPECT_THAT(processed_response.last_key_version, Eq(kKnownTrustedVaultKeyVersion + 1)); } @@ -155,9 +154,8 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT( - processed_response.keys, - ElementsAre(kKnownTrustedVaultKey, kTrustedVaultKey1, kTrustedVaultKey2)); + EXPECT_THAT(processed_response.new_keys, + ElementsAre(kTrustedVaultKey1, kTrustedVaultKey2)); EXPECT_THAT(processed_response.last_key_version, Eq(kKnownTrustedVaultKeyVersion + 2)); } @@ -188,9 +186,8 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT( - processed_response.keys, - ElementsAre(kKnownTrustedVaultKey, kTrustedVaultKey2, kTrustedVaultKey3)); + EXPECT_THAT(processed_response.new_keys, + ElementsAre(kTrustedVaultKey2, kTrustedVaultKey3)); EXPECT_THAT(processed_response.last_key_version, Eq(kKnownTrustedVaultKeyVersion + 2)); } @@ -217,7 +214,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT(processed_response.keys, + EXPECT_THAT(processed_response.new_keys, ElementsAre(kTrustedVaultKey1, kTrustedVaultKey2)); EXPECT_THAT(processed_response.last_key_version, Eq(kKnownTrustedVaultKeyVersion + 2)); @@ -246,7 +243,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kLocalDataObsolete)); - EXPECT_THAT(processed_response.keys, IsEmpty()); + EXPECT_THAT(processed_response.new_keys, IsEmpty()); } // The test populates undecryptable/corrupted |wrapped_key| field, handler @@ -292,7 +289,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kLocalDataObsolete)); - EXPECT_THAT(processed_response.keys, IsEmpty()); + EXPECT_THAT(processed_response.new_keys, IsEmpty()); } // The test populates invalid |key_proof| field for intermediate key when @@ -315,7 +312,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kLocalDataObsolete)); - EXPECT_THAT(processed_response.keys, IsEmpty()); + EXPECT_THAT(processed_response.new_keys, IsEmpty()); } // In this scenario client already has most recent trusted vault key. It should @@ -394,8 +391,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT(processed_response.keys, - ElementsAre(kKnownTrustedVaultKey, kTrustedVaultKey1)); + EXPECT_THAT(processed_response.new_keys, ElementsAre(kTrustedVaultKey1)); EXPECT_THAT(processed_response.last_key_version, Eq(kKnownTrustedVaultKeyVersion + 1)); } @@ -454,8 +450,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT(processed_response.keys, - ElementsAre(kKnownTrustedVaultKey, kTrustedVaultKey1)); + EXPECT_THAT(processed_response.new_keys, ElementsAre(kTrustedVaultKey1)); EXPECT_THAT(processed_response.last_key_version, Eq(kKnownTrustedVaultKeyVersion + 1)); } @@ -495,7 +490,7 @@ EXPECT_THAT(processed_response.status, Eq(TrustedVaultRequestStatus::kSuccess)); - EXPECT_THAT(processed_response.keys, ElementsAre(kTrustedVaultKey1)); + EXPECT_THAT(processed_response.new_keys, ElementsAre(kTrustedVaultKey1)); EXPECT_THAT(processed_response.last_key_version, Eq(kLastKeyVersion)); }
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc index ba76533..05606b5 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
@@ -133,7 +133,7 @@ // |this| outlives |connection_| and |ongoing_connection_request_|, so it's // safe to use base::Unretained() here. - ongoing_connection_request_ = connection_->DownloadKeys( + ongoing_connection_request_ = connection_->DownloadNewKeys( *primary_account_, GetLastTrustedVaultKeyAndVersion(*per_user_vault), std::move(key_pair), base::BindOnce(&StandaloneTrustedVaultBackend::OnKeysDownloaded,
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc index 6fd0e9c..bc5de71 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc
@@ -76,12 +76,12 @@ RegisterAuthenticationFactorCallback callback), (override)); MOCK_METHOD(std::unique_ptr<Request>, - DownloadKeys, + DownloadNewKeys, (const CoreAccountInfo& account_info, const base::Optional<TrustedVaultKeyAndVersion>& last_trusted_vault_key_and_version, std::unique_ptr<SecureBoxKeyPair> device_key_pair, - DownloadKeysCallback callback), + DownloadNewKeysCallback callback), (override)); }; @@ -476,7 +476,7 @@ account_info); backend()->SetPrimaryAccount(account_info); - EXPECT_CALL(*connection(), DownloadKeys).Times(0); + EXPECT_CALL(*connection(), DownloadNewKeys).Times(0); std::vector<std::vector<uint8_t>> fetched_keys; // Callback should be called immediately. @@ -486,7 +486,7 @@ backend()->FetchKeys(account_info, fetch_keys_callback.Get()); } -TEST_F(StandaloneTrustedVaultBackendTest, ShouldDownloadKeys) { +TEST_F(StandaloneTrustedVaultBackendTest, ShouldDownloadNewKeys) { CoreAccountInfo account_info; account_info.gaia = "user"; @@ -504,16 +504,16 @@ const int kNewLastKeyVersion = 1; std::unique_ptr<SecureBoxKeyPair> device_key_pair; - TrustedVaultConnection::DownloadKeysCallback download_keys_callback; + TrustedVaultConnection::DownloadNewKeysCallback download_keys_callback; EXPECT_CALL(*connection(), - DownloadKeys(Eq(account_info), - OptionalTrustedVaultKeyAndVersionEq( - kInitialVaultKey, kInitialLastKeyVersion), - _, _)) + DownloadNewKeys(Eq(account_info), + OptionalTrustedVaultKeyAndVersionEq( + kInitialVaultKey, kInitialLastKeyVersion), + _, _)) .WillOnce([&](const CoreAccountInfo&, const base::Optional<TrustedVaultKeyAndVersion>&, std::unique_ptr<SecureBoxKeyPair> key_pair, - TrustedVaultConnection::DownloadKeysCallback callback) { + TrustedVaultConnection::DownloadNewKeysCallback callback) { device_key_pair = std::move(key_pair); download_keys_callback = std::move(callback); return std::make_unique<TrustedVaultConnection::Request>(); @@ -525,7 +525,7 @@ backend()->FetchKeys(account_info, fetch_keys_callback.Get()); ASSERT_FALSE(download_keys_callback.is_null()); - // Ensure that the right device key was passed into DonwloadKeys(). + // Ensure that the right device key was passed into DownloadNewKeys(). ASSERT_THAT(device_key_pair, NotNull()); EXPECT_THAT(device_key_pair->private_key().ExportToBytes(), Eq(private_device_key_material)); @@ -552,19 +552,19 @@ EXPECT_TRUE(backend()->MarkKeysAsStale(account_info)); backend()->SetPrimaryAccount(account_info); - TrustedVaultConnection::DownloadKeysCallback download_keys_callback; - ON_CALL(*connection(), DownloadKeys(_, _, _, _)) + TrustedVaultConnection::DownloadNewKeysCallback download_keys_callback; + ON_CALL(*connection(), DownloadNewKeys(_, _, _, _)) .WillByDefault( [&](const CoreAccountInfo&, const base::Optional<TrustedVaultKeyAndVersion>&, std::unique_ptr<SecureBoxKeyPair> key_pair, - TrustedVaultConnection::DownloadKeysCallback callback) { + TrustedVaultConnection::DownloadNewKeysCallback callback) { download_keys_callback = std::move(callback); return std::make_unique<TrustedVaultConnection::Request>(); }); clock()->SetNow(base::Time::Now()); - EXPECT_CALL(*connection(), DownloadKeys(_, _, _, _)); + EXPECT_CALL(*connection(), DownloadNewKeys(_, _, _, _)); // FetchKeys() should trigger keys downloading. backend()->FetchKeys(account_info, /*callback=*/base::DoNothing()); @@ -577,8 +577,8 @@ /*keys=*/std::vector<std::vector<uint8_t>>(), /*last_key_version=*/0); - download_keys_callback = TrustedVaultConnection::DownloadKeysCallback(); - EXPECT_CALL(*connection(), DownloadKeys(_, _, _, _)).Times(0); + download_keys_callback = TrustedVaultConnection::DownloadNewKeysCallback(); + EXPECT_CALL(*connection(), DownloadNewKeys(_, _, _, _)).Times(0); // Following request should be throttled. backend()->FetchKeys(account_info, /*callback=*/base::DoNothing()); EXPECT_TRUE(download_keys_callback.is_null()); @@ -587,7 +587,7 @@ // Advance time to pass the throttling duration and trigger another attempt. clock()->Advance(switches::kTrustedVaultServiceThrottlingDuration.Get()); - EXPECT_CALL(*connection(), DownloadKeys(_, _, _, _)); + EXPECT_CALL(*connection(), DownloadNewKeys(_, _, _, _)); backend()->FetchKeys(account_info, /*callback=*/base::DoNothing()); EXPECT_FALSE(download_keys_callback.is_null()); } @@ -595,7 +595,7 @@ // Tests silent device registration (when no vault keys available yet). After // successful registration, the client should be able to download keys. TEST_F(StandaloneTrustedVaultBackendTest, - ShouldSilentlyRegisterDeviceAndDownloadKeys) { + ShouldSilentlyRegisterDeviceAndDownloadNewKeys) { CoreAccountInfo account_info; account_info.gaia = "user"; @@ -629,16 +629,16 @@ EXPECT_TRUE(registration_info.device_registered()); EXPECT_TRUE(registration_info.has_private_key_material()); - TrustedVaultConnection::DownloadKeysCallback download_keys_callback; + TrustedVaultConnection::DownloadNewKeysCallback download_keys_callback; ON_CALL(*connection(), - DownloadKeys(account_info, - /*last_trusted_vault_key_and_version=*/Eq(base::nullopt), - _, _)) + DownloadNewKeys( + account_info, + /*last_trusted_vault_key_and_version=*/Eq(base::nullopt), _, _)) .WillByDefault( [&](const CoreAccountInfo&, const base::Optional<TrustedVaultKeyAndVersion>&, std::unique_ptr<SecureBoxKeyPair> key_pair, - TrustedVaultConnection::DownloadKeysCallback callback) { + TrustedVaultConnection::DownloadNewKeysCallback callback) { download_keys_callback = std::move(callback); return std::make_unique<TrustedVaultConnection::Request>(); });
diff --git a/components/sync/trusted_vault/trusted_vault_connection.h b/components/sync/trusted_vault/trusted_vault_connection.h index c202a9e..561879d 100644 --- a/components/sync/trusted_vault/trusted_vault_connection.h +++ b/components/sync/trusted_vault/trusted_vault_connection.h
@@ -44,7 +44,7 @@ public: using RegisterAuthenticationFactorCallback = base::OnceCallback<void(TrustedVaultRequestStatus)>; - using DownloadKeysCallback = + using DownloadNewKeysCallback = base::OnceCallback<void(TrustedVaultRequestStatus, const std::vector<std::vector<uint8_t>>& /*keys*/, int /*last_key_version*/)>; @@ -79,15 +79,16 @@ const SecureBoxPublicKey& authentication_factor_public_key, RegisterAuthenticationFactorCallback callback) WARN_UNUSED_RESULT = 0; - // Asynchronously attempts to download new vault keys from the trusted vault - // server. Caller should hold returned request object until |callback| call - // or until request needs to be cancelled. - virtual std::unique_ptr<Request> DownloadKeys( + // Asynchronously attempts to download new vault keys (e.g. keys with version + // greater than the on in |last_trusted_vault_key_and_version|) from the + // trusted vault server. Caller should hold returned request object until + // |callback| call or until request needs to be cancelled. + virtual std::unique_ptr<Request> DownloadNewKeys( const CoreAccountInfo& account_info, const base::Optional<TrustedVaultKeyAndVersion>& last_trusted_vault_key_and_version, std::unique_ptr<SecureBoxKeyPair> device_key_pair, - DownloadKeysCallback callback) WARN_UNUSED_RESULT = 0; + DownloadNewKeysCallback callback) WARN_UNUSED_RESULT = 0; }; } // namespace syncer
diff --git a/components/sync/trusted_vault/trusted_vault_connection_impl.cc b/components/sync/trusted_vault/trusted_vault_connection_impl.cc index 680c46c..3a09f74 100644 --- a/components/sync/trusted_vault/trusted_vault_connection_impl.cc +++ b/components/sync/trusted_vault/trusted_vault_connection_impl.cc
@@ -27,12 +27,13 @@ void ProcessDownloadKeysResponse( std::unique_ptr<DownloadKeysResponseHandler> response_handler, - TrustedVaultConnection::DownloadKeysCallback callback, + TrustedVaultConnection::DownloadNewKeysCallback callback, TrustedVaultRequest::HttpStatus http_status, const std::string& response_body) { DownloadKeysResponseHandler::ProcessedResponse processed_response = response_handler->ProcessResponse(http_status, response_body); - std::move(callback).Run(processed_response.status, processed_response.keys, + std::move(callback).Run(processed_response.status, + processed_response.new_keys, processed_response.last_key_version); } @@ -76,12 +77,12 @@ } std::unique_ptr<TrustedVaultConnection::Request> -TrustedVaultConnectionImpl::DownloadKeys( +TrustedVaultConnectionImpl::DownloadNewKeys( const CoreAccountInfo& account_info, const base::Optional<TrustedVaultKeyAndVersion>& last_trusted_vault_key_and_version, std::unique_ptr<SecureBoxKeyPair> device_key_pair, - DownloadKeysCallback callback) { + DownloadNewKeysCallback callback) { auto request = std::make_unique<TrustedVaultRequest>( TrustedVaultRequest::HttpMethod::kGet, GURL(trusted_vault_service_url_.spec() +
diff --git a/components/sync/trusted_vault/trusted_vault_connection_impl.h b/components/sync/trusted_vault/trusted_vault_connection_impl.h index a27afdf..4acc86a 100644 --- a/components/sync/trusted_vault/trusted_vault_connection_impl.h +++ b/components/sync/trusted_vault/trusted_vault_connection_impl.h
@@ -43,12 +43,12 @@ const SecureBoxPublicKey& authentication_factor_public_key, RegisterAuthenticationFactorCallback callback) override; - std::unique_ptr<Request> DownloadKeys( + std::unique_ptr<Request> DownloadNewKeys( const CoreAccountInfo& account_info, const base::Optional<TrustedVaultKeyAndVersion>& last_trusted_vault_key_and_version, std::unique_ptr<SecureBoxKeyPair> device_key_pair, - DownloadKeysCallback callback) override; + DownloadNewKeysCallback callback) override; private: // SharedURLLoaderFactory is created lazily, because it needs to be done on
diff --git a/components/sync/trusted_vault/trusted_vault_connection_impl_unittest.cc b/components/sync/trusted_vault/trusted_vault_connection_impl_unittest.cc index c258077a..e568f4b 100644 --- a/components/sync/trusted_vault/trusted_vault_connection_impl_unittest.cc +++ b/components/sync/trusted_vault/trusted_vault_connection_impl_unittest.cc
@@ -313,7 +313,7 @@ TEST_F(TrustedVaultConnectionImplTest, ShouldSendListSecurityDomainsRequest) { std::unique_ptr<TrustedVaultConnection::Request> request = - connection()->DownloadKeys( + connection()->DownloadNewKeys( /*account_info=*/CoreAccountInfo(), TrustedVaultKeyAndVersion(/*key=*/std::vector<uint8_t>(), /*version=*/0), @@ -335,10 +335,10 @@ // download_keys_response_handler_unittest.cc). TEST_F(TrustedVaultConnectionImplTest, ShouldHandleFailedListSecurityDomainsRequest) { - base::MockCallback<TrustedVaultConnection::DownloadKeysCallback> callback; + base::MockCallback<TrustedVaultConnection::DownloadNewKeysCallback> callback; std::unique_ptr<TrustedVaultConnection::Request> request = - connection()->DownloadKeys( + connection()->DownloadNewKeys( /*account_info=*/CoreAccountInfo(), TrustedVaultKeyAndVersion(/*key=*/std::vector<uint8_t>(), /*version=*/0), @@ -356,13 +356,13 @@ CreateConnectionWithAccessToken( /*access_token=*/base::nullopt); - base::MockCallback<TrustedVaultConnection::DownloadKeysCallback> callback; + base::MockCallback<TrustedVaultConnection::DownloadNewKeysCallback> callback; - // |callback| is called immediately after DownloadKeys(), because there is no - // access token. + // |callback| is called immediately after DownloadNewKeys(), because there is + // no access token. EXPECT_CALL(callback, Run(Eq(TrustedVaultRequestStatus::kOtherError), _, _)); std::unique_ptr<TrustedVaultConnection::Request> request = - connection->DownloadKeys( + connection->DownloadNewKeys( /*account_info=*/CoreAccountInfo(), TrustedVaultKeyAndVersion( /*key=*/std::vector<uint8_t>(), @@ -375,10 +375,10 @@ } TEST_F(TrustedVaultConnectionImplTest, ShouldCancelListSecurityDomainsRequest) { - base::MockCallback<TrustedVaultConnection::DownloadKeysCallback> callback; + base::MockCallback<TrustedVaultConnection::DownloadNewKeysCallback> callback; std::unique_ptr<TrustedVaultConnection::Request> request = - connection()->DownloadKeys( + connection()->DownloadNewKeys( /*account_info=*/CoreAccountInfo(), TrustedVaultKeyAndVersion( /*key=*/std::vector<uint8_t>(),
diff --git a/components/sync_bookmarks/bookmark_model_type_processor.cc b/components/sync_bookmarks/bookmark_model_type_processor.cc index 7fa2b5b..62da7865 100644 --- a/components/sync_bookmarks/bookmark_model_type_processor.cc +++ b/components/sync_bookmarks/bookmark_model_type_processor.cc
@@ -245,20 +245,20 @@ sync_pb::BookmarkModelMetadata model_metadata; model_metadata.ParseFromString(metadata_str); - const bool initial_sync_done = - model_metadata.model_type_state().initial_sync_done(); - const bool bookmarks_metadata_empty = - model_metadata.bookmarks_metadata().empty(); - bookmark_tracker_ = SyncedBookmarkTracker::CreateFromBookmarkModelAndMetadata( model, std::move(model_metadata)); if (bookmark_tracker_) { bookmark_tracker_->CheckAllNodesTracked(bookmark_model_); StartTrackingMetadata(); - } else if (!initial_sync_done && !bookmarks_metadata_empty) { - DLOG(ERROR) - << "Persisted Metadata not empty while initial sync is not done."; + } else if (!metadata_str.empty()) { + DLOG(WARNING) + << "Persisted bookmark sync metadata invalidated when loading."; + // Schedule a save to make sure the corrupt metadata is deleted from disk as + // soon as possible, to avoid reporting again after restart if nothing else + // schedules a save meanwhile (which is common if sync is not running + // properly, e.g. auth error). + schedule_save_closure_.Run(); } ConnectIfReady();
diff --git a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc index c73c4cd..442f619 100644 --- a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc +++ b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
@@ -509,6 +509,13 @@ EXPECT_THAT(new_processor.GetTrackerForTest(), NotNull()); } +TEST_F(BookmarkModelTypeProcessorTest, ShouldDecodeEmptyMetadata) { + // No save should be scheduled. + EXPECT_CALL(*schedule_save_closure(), Run()).Times(0); + SimulateModelReadyToSync(); + EXPECT_THAT(processor()->GetTrackerForTest(), IsNull()); +} + TEST_F(BookmarkModelTypeProcessorTest, ShouldIgnoreNonEmptyMetadataWhileSyncNotDone) { sync_pb::BookmarkModelMetadata model_metadata; @@ -522,9 +529,14 @@ // Create a new processor and init it with the metadata str. BookmarkModelTypeProcessor new_processor(bookmark_undo_service()); + // A save should be scheduled. + NiceMock<base::MockCallback<base::RepeatingClosure>> + new_schedule_save_closure; + EXPECT_CALL(new_schedule_save_closure, Run()); + std::string metadata_str; model_metadata.SerializeToString(&metadata_str); - new_processor.ModelReadyToSync(metadata_str, base::DoNothing(), + new_processor.ModelReadyToSync(metadata_str, new_schedule_save_closure.Get(), bookmark_model()); // Metadata are corrupted, so no tracker should have been created. EXPECT_THAT(new_processor.GetTrackerForTest(), IsNull()); @@ -544,9 +556,14 @@ // Create a new processor and init it with the metadata str. BookmarkModelTypeProcessor new_processor(bookmark_undo_service()); + // A save should be scheduled. + NiceMock<base::MockCallback<base::RepeatingClosure>> + new_schedule_save_closure; + EXPECT_CALL(new_schedule_save_closure, Run()); + std::string metadata_str; model_metadata.SerializeToString(&metadata_str); - new_processor.ModelReadyToSync(metadata_str, base::DoNothing(), + new_processor.ModelReadyToSync(metadata_str, new_schedule_save_closure.Get(), bookmark_model()); // Metadata are corrupted, so no tracker should have been created.
diff --git a/components/viz/test/data/backdrop_filter_blur_rounded.png b/components/viz/test/data/backdrop_filter_blur_rounded.png index aa43e15..1c6a19a 100644 --- a/components/viz/test/data/backdrop_filter_blur_rounded.png +++ b/components/viz/test/data/backdrop_filter_blur_rounded.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_on_scaled_layer_gl.png b/components/viz/test/data/backdrop_filter_on_scaled_layer_gl.png index 675ea63..e08e814f 100644 --- a/components/viz/test/data/backdrop_filter_on_scaled_layer_gl.png +++ b/components/viz/test/data/backdrop_filter_on_scaled_layer_gl.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_gl.png b/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_gl.png new file mode 100644 index 0000000..5e054f43 --- /dev/null +++ b/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_gl.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_skia_gl.png b/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_skia_gl.png new file mode 100644 index 0000000..f62dad95 --- /dev/null +++ b/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_skia_gl.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_sw.png b/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_sw.png new file mode 100644 index 0000000..1ab0d2b4 --- /dev/null +++ b/components/viz/test/data/backdrop_filter_on_scaled_layer_legacy_swiftshader_sw.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_on_scaled_layer_skia_gl.png b/components/viz/test/data/backdrop_filter_on_scaled_layer_skia_gl.png index 6337e5a..667ec94d 100644 --- a/components/viz/test/data/backdrop_filter_on_scaled_layer_skia_gl.png +++ b/components/viz/test/data/backdrop_filter_on_scaled_layer_skia_gl.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_rotated_gl.png b/components/viz/test/data/backdrop_filter_rotated_gl.png index 3b3081a..ff18be1 100644 --- a/components/viz/test/data/backdrop_filter_rotated_gl.png +++ b/components/viz/test/data/backdrop_filter_rotated_gl.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_rotated_skia_gl.png b/components/viz/test/data/backdrop_filter_rotated_skia_gl.png index 32416ee..8d15722 100644 --- a/components/viz/test/data/backdrop_filter_rotated_skia_gl.png +++ b/components/viz/test/data/backdrop_filter_rotated_skia_gl.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_rotated_skia_vk.png b/components/viz/test/data/backdrop_filter_rotated_skia_vk.png index 113d6fb..94243c15 100644 --- a/components/viz/test/data/backdrop_filter_rotated_skia_vk.png +++ b/components/viz/test/data/backdrop_filter_rotated_skia_vk.png Binary files differ
diff --git a/components/viz/test/data/backdrop_filter_rotated_sw.png b/components/viz/test/data/backdrop_filter_rotated_sw.png index 0a4fe04..034ab8a 100644 --- a/components/viz/test/data/backdrop_filter_rotated_sw.png +++ b/components/viz/test/data/backdrop_filter_rotated_sw.png Binary files differ
diff --git a/components/viz/test/data/green_alpha.png b/components/viz/test/data/green_alpha.png index 46cece30..d88a07f 100644 --- a/components/viz/test/data/green_alpha.png +++ b/components/viz/test/data/green_alpha.png Binary files differ
diff --git a/components/viz/test/data/green_alpha_vertex_opacity.png b/components/viz/test/data/green_alpha_vertex_opacity.png index f13ab7a..316c2cb 100644 --- a/components/viz/test/data/green_alpha_vertex_opacity.png +++ b/components/viz/test/data/green_alpha_vertex_opacity.png Binary files differ
diff --git a/components/viz/test/data/scaled_mask_with_effect_gl.png b/components/viz/test/data/scaled_mask_with_effect_gl.png index f02eace8..e309bf2 100644 --- a/components/viz/test/data/scaled_mask_with_effect_gl.png +++ b/components/viz/test/data/scaled_mask_with_effect_gl.png Binary files differ
diff --git a/components/viz/test/data/scaled_mask_with_effect_skia_vk.png b/components/viz/test/data/scaled_mask_with_effect_skia_vk.png index 93736c75..3693484 100644 --- a/components/viz/test/data/scaled_mask_with_effect_skia_vk.png +++ b/components/viz/test/data/scaled_mask_with_effect_skia_vk.png Binary files differ
diff --git a/components/viz/test/data/scaled_render_surface_layer_gl.png b/components/viz/test/data/scaled_render_surface_layer_gl.png index f6ea69d..fbf764b 100644 --- a/components/viz/test/data/scaled_render_surface_layer_gl.png +++ b/components/viz/test/data/scaled_render_surface_layer_gl.png Binary files differ
diff --git a/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_gl.png b/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_gl.png new file mode 100644 index 0000000..8376ea8 --- /dev/null +++ b/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_gl.png Binary files differ
diff --git a/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_skia_gl.png b/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_skia_gl.png new file mode 100644 index 0000000..1894419 --- /dev/null +++ b/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_skia_gl.png Binary files differ
diff --git a/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_sw.png b/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_sw.png new file mode 100644 index 0000000..6ef530a8 --- /dev/null +++ b/components/viz/test/data/scaled_render_surface_layer_legacy_swiftshader_sw.png Binary files differ
diff --git a/components/viz/test/data/scaled_render_surface_layer_sw.png b/components/viz/test/data/scaled_render_surface_layer_sw.png index b177b511..6ef530a8 100644 --- a/components/viz/test/data/scaled_render_surface_layer_sw.png +++ b/components/viz/test/data/scaled_render_surface_layer_sw.png Binary files differ
diff --git a/components/viz/test/data/spiral_64_scale.png b/components/viz/test/data/spiral_64_scale.png index 8dbfd76..58bb818a 100644 --- a/components/viz/test/data/spiral_64_scale.png +++ b/components/viz/test/data/spiral_64_scale.png Binary files differ
diff --git a/components/viz/test/data/spiral_64_scale_legacy_swiftshader.png b/components/viz/test/data/spiral_64_scale_legacy_swiftshader.png new file mode 100644 index 0000000..ec26b202 --- /dev/null +++ b/components/viz/test/data/spiral_64_scale_legacy_swiftshader.png Binary files differ
diff --git a/components/viz/test/data/spiral_64_scale_legacy_swiftshader_vk.png b/components/viz/test/data/spiral_64_scale_legacy_swiftshader_vk.png new file mode 100644 index 0000000..6953f66 --- /dev/null +++ b/components/viz/test/data/spiral_64_scale_legacy_swiftshader_vk.png Binary files differ
diff --git a/components/viz/test/data/spiral_64_scale_vk.png b/components/viz/test/data/spiral_64_scale_vk.png index 6953f66..482119c 100644 --- a/components/viz/test/data/spiral_64_scale_vk.png +++ b/components/viz/test/data/spiral_64_scale_vk.png Binary files differ
diff --git a/components/viz/test/data/srgb_green_in_p3.png b/components/viz/test/data/srgb_green_in_p3.png index fcbbe0a..0139b18 100644 --- a/components/viz/test/data/srgb_green_in_p3.png +++ b/components/viz/test/data/srgb_green_in_p3.png Binary files differ
diff --git a/components/viz/test/data/yuv_stripes.png b/components/viz/test/data/yuv_stripes.png index 1e64aa3..e32cb632 100644 --- a/components/viz/test/data/yuv_stripes.png +++ b/components/viz/test/data/yuv_stripes.png Binary files differ
diff --git a/components/viz/test/data/yuv_stripes_alpha.png b/components/viz/test/data/yuv_stripes_alpha.png index 90ef195..bab22be9 100644 --- a/components/viz/test/data/yuv_stripes_alpha.png +++ b/components/viz/test/data/yuv_stripes_alpha.png Binary files differ
diff --git a/components/viz/test/data/yuv_stripes_clipped.png b/components/viz/test/data/yuv_stripes_clipped.png index e6459b3..24cc7a05 100644 --- a/components/viz/test/data/yuv_stripes_clipped.png +++ b/components/viz/test/data/yuv_stripes_clipped.png Binary files differ
diff --git a/components/viz/test/data/yuv_stripes_offset.png b/components/viz/test/data/yuv_stripes_offset.png index be36012..e1d92af 100644 --- a/components/viz/test/data/yuv_stripes_offset.png +++ b/components/viz/test/data/yuv_stripes_offset.png Binary files differ
diff --git a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc index f472341..c007254 100644 --- a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc +++ b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
@@ -20,6 +20,8 @@ #include "content/shell/browser/shell.h" #include "content/test/content_browser_test_utils_internal.h" #include "net/dns/mock_host_resolver.h" +#include "ui/accessibility/ax_node_position.h" +#include "ui/accessibility/ax_tree_id.h" using Microsoft::WRL::ComPtr; @@ -227,7 +229,7 @@ ASSERT_EQ(ax::mojom::Role::kIframe, leaf_iframe_browser_accessibility->GetRole()); - AXTreeID iframe_tree_id = AXTreeID::FromString( + ui::AXTreeID iframe_tree_id = ui::AXTreeID::FromString( leaf_iframe_browser_accessibility->GetStringAttribute( ax::mojom::StringAttribute::kChildTreeId)); BrowserAccessibilityManager* iframe_browser_accessibility_manager = @@ -440,8 +442,8 @@ <!DOCTYPE html> <html> <body> - <input type='text' aria-label='input_text'> - <input type='search' aria-label='input_search'> + <input type="text" aria-label="input_text"> + <input type="search" aria-label="input_search"> </body> </html> )HTML")); @@ -2742,7 +2744,7 @@ GetTextRangeProviderFromTextNode(*node, &text_range_provider); ASSERT_NE(nullptr, text_range_provider.Get()); EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"Some text"); - AXTreeID old_tree_id = GetManager()->GetTreeID(); + ui::AXTreeID old_tree_id = GetManager()->GetTreeID(); // Reloading changes the tree id, triggering an AXTreeManager replacement. shell()->Reload();
diff --git a/content/browser/accessibility/browser_accessibility_position.cc b/content/browser/accessibility/browser_accessibility_position.cc index 4c424b4..823e062 100644 --- a/content/browser/accessibility/browser_accessibility_position.cc +++ b/content/browser/accessibility/browser_accessibility_position.cc
@@ -35,6 +35,12 @@ return GetAnchor()->GetText(); } +ax::mojom::Role BrowserAccessibilityPosition::GetRole() const { + if (IsNullPosition()) + return ax::mojom::Role::kNone; + return GetAnchor()->GetData().role; +} + bool BrowserAccessibilityPosition::IsInLineBreak() const { if (IsNullPosition()) return false; @@ -103,7 +109,7 @@ : AXPosition::INVALID_INDEX; } -int BrowserAccessibilityPosition::AnchorSiblingCount() const { +int BrowserAccessibilityPosition::GetAnchorSiblingCount() const { BrowserAccessibility* parent = GetAnchor()->PlatformGetParent(); if (parent) return static_cast<int>(parent->InternalChildCount());
diff --git a/content/browser/accessibility/browser_accessibility_position.h b/content/browser/accessibility/browser_accessibility_position.h index 4a0c6e5..24fa6182 100644 --- a/content/browser/accessibility/browser_accessibility_position.h +++ b/content/browser/accessibility/browser_accessibility_position.h
@@ -32,6 +32,7 @@ AXPositionInstance Clone() const override; base::string16 GetText() const override; + ax::mojom::Role GetRole() const override; bool IsInLineBreak() const override; bool IsInTextObject() const override; bool IsInWhiteSpace() const override; @@ -43,7 +44,7 @@ int AnchorChildCount() const override; int AnchorUnignoredChildCount() const override; int AnchorIndexInParent() const override; - int AnchorSiblingCount() const override; + int GetAnchorSiblingCount() const override; base::stack<BrowserAccessibility*> GetAncestorAnchors() const override; BrowserAccessibility* GetLowestUnignoredAncestor() const override; void AnchorParent(AXTreeID* tree_id, ui::AXNodeID* parent_id) const override;
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 6f9309a..0c25693 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -295,7 +295,7 @@ } IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, - AccessibilityCSSContentVisibilityAutoCrash) { + DISABLED_AccessibilityCSSContentVisibilityAutoCrash) { RunCSSTest(FILE_PATH_LITERAL("content-visibility-auto-crash.html")); }
diff --git a/content/browser/cache_storage/cache_storage.proto b/content/browser/cache_storage/cache_storage.proto index 245cc2b..b2e154b8 100644 --- a/content/browser/cache_storage/cache_storage.proto +++ b/content/browser/cache_storage/cache_storage.proto
@@ -13,7 +13,7 @@ required string name = 1; optional string cache_dir = 2; optional int64 size = 3; - optional string padding_key = 4; + optional string padding_key = 4 [deprecated = true]; optional int64 padding = 5; optional int32 padding_version = 6; }
diff --git a/content/browser/cache_storage/cache_storage_cache_unittest.cc b/content/browser/cache_storage/cache_storage_cache_unittest.cc index 79572da..32dfcd2 100644 --- a/content/browser/cache_storage/cache_storage_cache_unittest.cc +++ b/content/browser/cache_storage/cache_storage_cache_unittest.cc
@@ -426,11 +426,6 @@ return response; } -std::unique_ptr<crypto::SymmetricKey> CreateTestPaddingKey() { - return crypto::SymmetricKey::Import(crypto::SymmetricKey::HMAC_SHA1, - "abc123"); -} - void OnBadMessage(std::string* result) { *result = "CSDH_UNEXPECTED_OPERATION"; } @@ -454,8 +449,7 @@ quota_manager_proxy, std::move(blob_storage_context), 0 /* cache_size */, - 0 /* cache_padding */, - CreateTestPaddingKey()), + 0 /* cache_padding */), delay_backend_creation_(false) {} ~TestCacheStorageCache() override { base::RunLoop().RunUntilIdle(); }
diff --git a/content/browser/cache_storage/cache_storage_index.cc b/content/browser/cache_storage/cache_storage_index.cc index 5874104..000e1da7 100644 --- a/content/browser/cache_storage/cache_storage_index.cc +++ b/content/browser/cache_storage/cache_storage_index.cc
@@ -11,8 +11,7 @@ CacheStorageIndex::CacheStorageIndex() : doomed_cache_metadata_("", CacheStorage::kSizeUnknown, - CacheStorage::kSizeUnknown, - "") { + CacheStorage::kSizeUnknown) { ClearDoomedCache(); }
diff --git a/content/browser/cache_storage/cache_storage_index.h b/content/browser/cache_storage/cache_storage_index.h index ed5bff33f..ae9a2cd 100644 --- a/content/browser/cache_storage/cache_storage_index.h +++ b/content/browser/cache_storage/cache_storage_index.h
@@ -21,11 +21,8 @@ class CONTENT_EXPORT CacheStorageIndex { public: struct CacheMetadata { - CacheMetadata(const std::string& name, - int64_t size, - int64_t padding, - const std::string& padding_key) - : name(name), size(size), padding(padding), padding_key(padding_key) {} + CacheMetadata(const std::string& name, int64_t size, int64_t padding) + : name(name), size(size), padding(padding) {} std::string name; // The size (in bytes) of the cache. Set to CacheStorage::kSizeUnknown if // size not known. @@ -35,9 +32,6 @@ // if padding not known. int64_t padding; - // The raw key used to calculate padding for some cache entries. - std::string padding_key; - // The algorithm version used to calculate this padding. int32_t padding_version; };
diff --git a/content/browser/cache_storage/cache_storage_index_unittest.cc b/content/browser/cache_storage/cache_storage_index_unittest.cc index bfecca1..cc44d7f 100644 --- a/content/browser/cache_storage/cache_storage_index_unittest.cc +++ b/content/browser/cache_storage/cache_storage_index_unittest.cc
@@ -10,30 +10,18 @@ namespace content { -class CacheStorageIndexTest : public testing::Test { - public: - void SetUp() override {} - void TearDown() override {} - CacheStorageIndexTest() : padding_key_("abcd1234") {} - - const std::string padding_key_; - - private: - DISALLOW_COPY_AND_ASSIGN(CacheStorageIndexTest); -}; - -TEST_F(CacheStorageIndexTest, TestDefaultConstructor) { +TEST(CacheStorageIndexTest, TestDefaultConstructor) { CacheStorageIndex index; EXPECT_EQ(0u, index.num_entries()); EXPECT_TRUE(index.ordered_cache_metadata().empty()); EXPECT_EQ(0u, index.GetPaddedStorageSize()); } -TEST_F(CacheStorageIndexTest, TestSetCacheSize) { +TEST(CacheStorageIndexTest, TestSetCacheSize) { CacheStorageIndex index; - index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4, padding_key_)); + index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2)); + index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3)); + index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4)); EXPECT_EQ(3u, index.num_entries()); ASSERT_EQ(3u, index.ordered_cache_metadata().size()); EXPECT_EQ(12 + 2 + 19 + 3 + 1000 + 4, index.GetPaddedStorageSize()); @@ -49,11 +37,11 @@ index.GetCacheSizeForTesting("<not-present>")); } -TEST_F(CacheStorageIndexTest, TestSetCachePadding) { +TEST(CacheStorageIndexTest, TestSetCachePadding) { CacheStorageIndex index; - index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4, padding_key_)); + index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2)); + index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3)); + index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4)); EXPECT_EQ(3u, index.num_entries()); ASSERT_EQ(3u, index.ordered_cache_metadata().size()); EXPECT_EQ(12 + 2 + 19 + 3 + 1000 + 4, index.GetPaddedStorageSize()); @@ -69,11 +57,11 @@ index.GetCachePaddingForTesting("<not-present>")); } -TEST_F(CacheStorageIndexTest, TestDoomCache) { +TEST(CacheStorageIndexTest, TestDoomCache) { CacheStorageIndex index; - index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4, padding_key_)); + index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2)); + index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3)); + index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4)); EXPECT_EQ(3u, index.num_entries()); ASSERT_EQ(3u, index.ordered_cache_metadata().size()); EXPECT_EQ(12 + 2 + 19 + 3 + 1000 + 4, index.GetPaddedStorageSize()); @@ -101,11 +89,11 @@ EXPECT_EQ(19 + 3 + 1000 + 4, index.GetPaddedStorageSize()); } -TEST_F(CacheStorageIndexTest, TestDelete) { +TEST(CacheStorageIndexTest, TestDelete) { CacheStorageIndex index; - index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 2, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 3, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4, padding_key_)); + index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 2)); + index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 3)); + index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4)); EXPECT_EQ(3u, index.num_entries()); ASSERT_EQ(3u, index.ordered_cache_metadata().size()); EXPECT_EQ(19 + 2 + 12 + 3 + 1000 + 4, index.GetPaddedStorageSize()); @@ -148,21 +136,21 @@ EXPECT_EQ(3u, it->padding); } -TEST_F(CacheStorageIndexTest, TestInsert) { +TEST(CacheStorageIndexTest, TestInsert) { CacheStorageIndex index; - index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4, padding_key_)); + index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2)); + index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3)); + index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4)); EXPECT_EQ(3u, index.num_entries()); ASSERT_EQ(3u, index.ordered_cache_metadata().size()); EXPECT_EQ(12 + 2 + 19 + 3 + 1000 + 4, index.GetPaddedStorageSize()); } -TEST_F(CacheStorageIndexTest, TestMoveOperator) { +TEST(CacheStorageIndexTest, TestMoveOperator) { CacheStorageIndex index; - index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3, padding_key_)); - index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4, padding_key_)); + index.Insert(CacheStorageIndex::CacheMetadata("foo", 12, 2)); + index.Insert(CacheStorageIndex::CacheMetadata("bar", 19, 3)); + index.Insert(CacheStorageIndex::CacheMetadata("baz", 1000, 4)); CacheStorageIndex index2; index2 = std::move(index);
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage.cc b/content/browser/cache_storage/legacy/legacy_cache_storage.cc index e51e4f5c..a0f58150 100644 --- a/content/browser/cache_storage/legacy/legacy_cache_storage.cc +++ b/content/browser/cache_storage/legacy/legacy_cache_storage.cc
@@ -48,7 +48,6 @@ #include "net/base/net_errors.h" #include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/quota/quota_manager_proxy.h" -#include "storage/common/quota/padding_key.h" #include "third_party/blink/public/mojom/quota/quota_types.mojom.h" using blink::mojom::CacheStorageError; @@ -118,8 +117,7 @@ virtual std::unique_ptr<LegacyCacheStorageCache> CreateCache( const std::string& cache_name, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<SymmetricKey> cache_padding_key) = 0; + int64_t cache_padding) = 0; // Deletes any pre-existing cache of the same name and then loads it. virtual void PrepareNewCacheDestination(const std::string& cache_name, @@ -187,19 +185,16 @@ std::unique_ptr<LegacyCacheStorageCache> CreateCache( const std::string& cache_name, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<SymmetricKey> cache_padding_key) override { + int64_t cache_padding) override { return LegacyCacheStorageCache::CreateMemoryCache( origin_, owner_, cache_name, cache_storage_, scheduler_task_runner_, - quota_manager_proxy_, blob_storage_context_, - storage::CopyDefaultPaddingKey()); + quota_manager_proxy_, blob_storage_context_); } void PrepareNewCacheDestination(const std::string& cache_name, CacheAndErrorCallback callback) override { std::unique_ptr<LegacyCacheStorageCache> cache = - CreateCache(cache_name, 0 /*cache_size*/, 0 /* cache_padding */, - storage::CopyDefaultPaddingKey()); + CreateCache(cache_name, /*cache_size=*/0, /*cache_padding=*/0); std::move(callback).Run(std::move(cache), CacheStorageError::kSuccess); } @@ -260,8 +255,7 @@ std::unique_ptr<LegacyCacheStorageCache> CreateCache( const std::string& cache_name, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<SymmetricKey> cache_padding_key) override { + int64_t cache_padding) override { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(base::Contains(cache_name_to_cache_dir_, cache_name)); @@ -270,7 +264,7 @@ return LegacyCacheStorageCache::CreatePersistentCache( origin_, owner_, cache_name, cache_storage_, cache_path, scheduler_task_runner_, quota_manager_proxy_, blob_storage_context_, - cache_size, cache_padding, std::move(cache_padding_key)); + cache_size, cache_padding); } void PrepareNewCacheDestination(const std::string& cache_name, @@ -325,8 +319,7 @@ cache_name_to_cache_dir_[cache_name] = cache_dir; std::move(callback).Run( CreateCache(cache_name, LegacyCacheStorage::kSizeUnknown, - LegacyCacheStorage::kSizeUnknown, - storage::CopyDefaultPaddingKey()), + LegacyCacheStorage::kSizeUnknown), CacheStorageError::kSuccess); } @@ -372,7 +365,6 @@ index_cache->clear_size(); else index_cache->set_size(cache_metadata.size); - index_cache->set_padding_key(cache_metadata.padding_key); index_cache->set_padding(cache_metadata.padding); index_cache->set_padding_version( LegacyCacheStorageCache::GetResponsePaddingVersion()); @@ -450,13 +442,8 @@ cache_padding = LegacyCacheStorage::kSizeUnknown; } - std::string cache_padding_key = - cache.has_padding_key() ? cache.padding_key() - : storage::SerializeDefaultPaddingKey(); - - index->Insert(CacheStorageIndex::CacheMetadata( - cache.name(), cache_size, cache_padding, - std::move(cache_padding_key))); + index->Insert(CacheStorageIndex::CacheMetadata(cache.name(), cache_size, + cache_padding)); cache_name_to_cache_dir_[cache.name()] = cache.cache_dir(); cache_dirs->insert(cache.cache_dir()); } @@ -1066,8 +1053,7 @@ cache_map_.insert(std::make_pair(cache_name, std::move(cache))); cache_index_->Insert(CacheStorageIndex::CacheMetadata( - cache_name, cache_ptr->cache_size(), cache_ptr->cache_padding(), - cache_ptr->cache_padding_key()->key())); + cache_name, cache_ptr->cache_size(), cache_ptr->cache_padding())); CacheStorageCacheHandle handle = cache_ptr->CreateHandle(); index_write_task_.Cancel(); @@ -1370,9 +1356,8 @@ cache_index_->GetMetadata(cache_name); DCHECK(metadata); std::unique_ptr<LegacyCacheStorageCache> new_cache = - cache_loader_->CreateCache( - cache_name, metadata->size, metadata->padding, - storage::DeserializePaddingKey(metadata->padding_key)); + cache_loader_->CreateCache(cache_name, metadata->size, + metadata->padding); CacheStorageCache* cache_ptr = new_cache.get(); map_iter->second = std::move(new_cache);
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc index 20c2016..6a3b3a7 100644 --- a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc +++ b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.cc
@@ -558,13 +558,12 @@ LegacyCacheStorage* cache_storage, scoped_refptr<base::SequencedTaskRunner> scheduler_task_runner, scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy, - scoped_refptr<BlobStorageContextWrapper> blob_storage_context, - std::unique_ptr<crypto::SymmetricKey> cache_padding_key) { + scoped_refptr<BlobStorageContextWrapper> blob_storage_context) { LegacyCacheStorageCache* cache = new LegacyCacheStorageCache( origin, owner, cache_name, base::FilePath(), cache_storage, std::move(scheduler_task_runner), std::move(quota_manager_proxy), - std::move(blob_storage_context), 0 /* cache_size */, - 0 /* cache_padding */, std::move(cache_padding_key)); + std::move(blob_storage_context), /*cache_size=*/0, + /*cache_padding=*/0); cache->SetObserver(cache_storage); cache->InitBackend(); return base::WrapUnique(cache); @@ -582,13 +581,11 @@ scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy, scoped_refptr<BlobStorageContextWrapper> blob_storage_context, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<crypto::SymmetricKey> cache_padding_key) { + int64_t cache_padding) { LegacyCacheStorageCache* cache = new LegacyCacheStorageCache( origin, owner, cache_name, path, cache_storage, std::move(scheduler_task_runner), std::move(quota_manager_proxy), - std::move(blob_storage_context), cache_size, cache_padding, - std::move(cache_padding_key)); + std::move(blob_storage_context), cache_size, cache_padding); cache->SetObserver(cache_storage); cache->InitBackend(); return base::WrapUnique(cache); @@ -1032,8 +1029,7 @@ scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy, scoped_refptr<BlobStorageContextWrapper> blob_storage_context, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<crypto::SymmetricKey> cache_padding_key) + int64_t cache_padding) : origin_(origin), owner_(owner), cache_name_(cache_name), @@ -1045,7 +1041,6 @@ scheduler_task_runner_)), cache_size_(cache_size), cache_padding_(cache_padding), - cache_padding_key_(std::move(cache_padding_key)), max_query_size_bytes_(kMaxQueryCacheResultBytes), cache_observer_(nullptr), cache_entry_handler_( @@ -1055,7 +1050,6 @@ memory_only_(path.empty()) { DCHECK(!origin_.opaque()); DCHECK(quota_manager_proxy_.get()); - DCHECK(cache_padding_key_.get()); if (cache_size_ != CacheStorage::kSizeUnknown && cache_padding_ != CacheStorage::kSizeUnknown) {
diff --git a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h index 04cfdc4..6b7b6ad8 100644 --- a/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h +++ b/content/browser/cache_storage/legacy/legacy_cache_storage_cache.h
@@ -29,10 +29,6 @@ #include "third_party/blink/public/mojom/quota/quota_types.mojom.h" #include "url/origin.h" -namespace crypto { -class SymmetricKey; -} - namespace storage { class QuotaManagerProxy; } // namespace storage @@ -68,8 +64,7 @@ LegacyCacheStorage* cache_storage, scoped_refptr<base::SequencedTaskRunner> scheduler_task_runner, scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy, - scoped_refptr<BlobStorageContextWrapper> blob_storage_context, - std::unique_ptr<crypto::SymmetricKey> cache_padding_key); + scoped_refptr<BlobStorageContextWrapper> blob_storage_context); static std::unique_ptr<LegacyCacheStorageCache> CreatePersistentCache( const url::Origin& origin, storage::mojom::CacheStorageOwner owner, @@ -80,8 +75,7 @@ scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy, scoped_refptr<BlobStorageContextWrapper> blob_storage_context, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<crypto::SymmetricKey> cache_padding_key); + int64_t cache_padding); static int32_t GetResponsePaddingVersion(); void Match(blink::mojom::FetchAPIRequestPtr request, @@ -176,10 +170,6 @@ int64_t cache_padding() const { return cache_padding_; } - const crypto::SymmetricKey* cache_padding_key() const { - return cache_padding_key_.get(); - } - // Return the total cache size (actual size + padding). If either is unknown // then CacheStorage::kSizeUnknown is returned. int64_t PaddedCacheSize() const; @@ -251,8 +241,7 @@ scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy, scoped_refptr<BlobStorageContextWrapper> blob_storage_context, int64_t cache_size, - int64_t cache_padding, - std::unique_ptr<crypto::SymmetricKey> cache_padding_key); + int64_t cache_padding); // Runs |callback| with matching requests/response data. The data provided // in the QueryCacheResults depends on the |query_type|. If |query_type| is @@ -548,8 +537,6 @@ // The actual cache size (not including padding). int64_t cache_size_; int64_t cache_padding_ = 0; - // TODO(wanderview): remove padding key management - std::unique_ptr<crypto::SymmetricKey> cache_padding_key_; int64_t last_reported_size_ = 0; size_t max_query_size_bytes_; size_t handle_ref_count_ = 0;
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc index 6be7f55..dc2b024 100644 --- a/content/browser/child_process_security_policy_impl.cc +++ b/content/browser/child_process_security_policy_impl.cc
@@ -1615,7 +1615,15 @@ // BrowsingInstances are registered in the process. Allow this for now, // to maintain legacy behavior, until we rule out all the ways it can // happen. - return true; + RenderProcessHostImpl* child_host = static_cast<RenderProcessHostImpl*>( + RenderProcessHost::FromID(child_id)); + DCHECK(child_host); + failure_reason = base::StringPrintf( + "No BIids, keep_alive_count = %zu, last_source = %d", + child_host->keep_alive_ref_count(), + child_host->keep_alive_last_source()); + // This will fall through to the call to + // LogCanAccessDataForOriginCrashKeys and log the failure reason. } for (auto browsing_instance_id : security_state->browsing_instance_ids()) {
diff --git a/content/browser/media/session/media_session_controller.cc b/content/browser/media/session/media_session_controller.cc index a92a949..4705124 100644 --- a/content/browser/media/session/media_session_controller.cc +++ b/content/browser/media/session/media_session_controller.cc
@@ -147,6 +147,8 @@ void MediaSessionController::OnSetAudioSinkId( int player_id, const std::string& raw_device_id) { + DCHECK_EQ(player_id_, player_id); + // The sink id needs to be hashed before it is suitable for use in the // renderer process. auto salt_and_origin = content::GetMediaDeviceSaltAndOrigin( @@ -160,8 +162,15 @@ static_cast<RenderFrameHostImpl*>(id_.render_frame_host) ->SetAudioOutputDeviceIdForGlobalMediaControls(hashed_sink_id); - id_.render_frame_host->Send(new MediaPlayerDelegateMsg_SetAudioSinkId( - id_.render_frame_host->GetRoutingID(), id_.delegate_id, hashed_sink_id)); + media::mojom::MediaPlayer* remote = + web_contents_->media_web_contents_observer()->GetMediaPlayerRemote(id_); + if (!remote) { + // TODO(https://crbug.com/1161551): Remove this when lifetime bug is fixed. + NOTREACHED() << "Controller should not outlive remote MediaPlayer"; + return; + } + + remote->SetAudioSinkId(hashed_sink_id); } RenderFrameHost* MediaSessionController::render_frame_host() const {
diff --git a/content/browser/media/session/media_session_controller_unittest.cc b/content/browser/media/session/media_session_controller_unittest.cc index ef2931e..b4a7e1a 100644 --- a/content/browser/media/session/media_session_controller_unittest.cc +++ b/content/browser/media/session/media_session_controller_unittest.cc
@@ -111,6 +111,8 @@ void RequestExitPictureInPicture() override {} + void SetAudioSinkId(const std::string& sink_id) override {} + // Getters used from MediaSessionControllerTest. bool received_play() const { return received_play_; }
diff --git a/content/browser/net/cross_origin_embedder_policy_reporter.cc b/content/browser/net/cross_origin_embedder_policy_reporter.cc index 307a9ca..97939dd 100644 --- a/content/browser/net/cross_origin_embedder_policy_reporter.cc +++ b/content/browser/net/cross_origin_embedder_policy_reporter.cc
@@ -68,6 +68,15 @@ report_only); } +void CrossOriginEmbedderPolicyReporter::QueueWorkerInitializationReport( + const GURL& blocked_url, + bool report_only) { + GURL url_to_pass = StripUsernameAndPassword(blocked_url); + QueueAndNotify({std::make_pair("type", "worker initialization"), + std::make_pair("blockedURL", url_to_pass.spec())}, + report_only); +} + void CrossOriginEmbedderPolicyReporter::Clone( mojo::PendingReceiver<network::mojom::CrossOriginEmbedderPolicyReporter> receiver) {
diff --git a/content/browser/net/cross_origin_embedder_policy_reporter.h b/content/browser/net/cross_origin_embedder_policy_reporter.h index c096f10..1d7d56e8 100644 --- a/content/browser/net/cross_origin_embedder_policy_reporter.h +++ b/content/browser/net/cross_origin_embedder_policy_reporter.h
@@ -59,10 +59,16 @@ void BindObserver( mojo::PendingRemote<blink::mojom::ReportingObserver> observer); - // https://mikewest.github.io/corpp/#abstract-opdef-queue-coep-navigation-violation - // Queue a violation report for COEP mismatch for nested frame navigation. + // https://html.spec.whatwg.org/C/#check-a-navigation-response's-adherence-to-its-embedder-policy + // Queues a violation report for COEP mismatch for nested frame navigation. void QueueNavigationReport(const GURL& blocked_url, bool report_only); + // https://html.spec.whatwg.org/C/#check-a-global-object's-embedder-policy + // Queues a violation report for COEP mismatch during the worker + // initialization. + void QueueWorkerInitializationReport(const GURL& blocked_url, + bool report_only); + private: void QueueAndNotify(std::initializer_list< std::pair<base::StringPiece, base::StringPiece>> body,
diff --git a/content/browser/net/cross_origin_embedder_policy_reporter_unittest.cc b/content/browser/net/cross_origin_embedder_policy_reporter_unittest.cc index 39687b3..f8ce197 100644 --- a/content/browser/net/cross_origin_embedder_policy_reporter_unittest.cc +++ b/content/browser/net/cross_origin_embedder_policy_reporter_unittest.cc
@@ -106,7 +106,17 @@ base::StringPiece disposition) { base::Value dict(base::Value::Type::DICTIONARY); for (const auto& pair : - CreateBodyForNavigationInternal(blocked_url, disposition)) { + CreateBodyInternal("navigation", blocked_url, disposition)) { + dict.SetKey(std::move(pair.first), base::Value(std::move(pair.second))); + } + return dict; + } + + base::Value CreateBodyForWorkerInitialization(base::StringPiece blocked_url, + base::StringPiece disposition) { + base::Value dict(base::Value::Type::DICTIONARY); + for (const auto& pair : CreateBodyInternal("worker initialization", + blocked_url, disposition)) { dict.SetKey(std::move(pair.first), base::Value(std::move(pair.second))); } return dict; @@ -130,7 +140,7 @@ base::StringPiece disposition) { auto body = blink::mojom::ReportBody::New(); for (const auto& pair : - CreateBodyForNavigationInternal(blocked_url, disposition)) { + CreateBodyInternal("navigation", blocked_url, disposition)) { body->body.push_back(blink::mojom::ReportBodyElement::New( std::move(pair.first), std::move(pair.second))); } @@ -149,10 +159,11 @@ std::make_pair("disposition", disposition.as_string())}; } - std::vector<std::pair<std::string, std::string>> - CreateBodyForNavigationInternal(base::StringPiece blocked_url, - base::StringPiece disposition) const { - return {std::make_pair("type", "navigation"), + std::vector<std::pair<std::string, std::string>> CreateBodyInternal( + base::StringPiece type, + base::StringPiece blocked_url, + base::StringPiece disposition) const { + return {std::make_pair("type", type.as_string()), std::make_pair("blockedURL", blocked_url.as_string()), std::make_pair("disposition", disposition.as_string())}; } @@ -326,9 +337,6 @@ const GURL kContextUrl("https://example.com/path"); CrossOriginEmbedderPolicyReporter reporter( storage_partition(), kContextUrl, "e1", "e2", net::NetworkIsolationKey()); - CrossOriginEmbedderPolicy child_coep; - child_coep.report_only_value = - network::mojom::CrossOriginEmbedderPolicyValue::kRequireCorp; reporter.QueueNavigationReport(GURL("https://www1.example.com/x#foo?bar=baz"), /*report_only=*/false); @@ -407,5 +415,33 @@ CreateBodyForNavigation("https://www2.example.com/y", "reporting")); } +TEST_F(CrossOriginEmbedderPolicyReporterTest, BasicWorkerInitialization) { + const GURL kContextUrl("https://example.com/path"); + CrossOriginEmbedderPolicyReporter reporter( + storage_partition(), kContextUrl, "e1", "e2", net::NetworkIsolationKey()); + + reporter.QueueWorkerInitializationReport( + GURL("https://www1.example.com/worker.js"), + /*report_only=*/false); + reporter.QueueWorkerInitializationReport( + GURL("http://www2.example.com:41/worker.js"), + /*report_only=*/true); + + ASSERT_EQ(2u, network_context().reports().size()); + const Report& r1 = network_context().reports()[0]; + const Report& r2 = network_context().reports()[1]; + + EXPECT_EQ(r1.type, "coep"); + EXPECT_EQ(r1.group, "e1"); + EXPECT_EQ(r1.url, kContextUrl); + EXPECT_EQ(r1.body, CreateBodyForWorkerInitialization( + "https://www1.example.com/worker.js", "enforce")); + EXPECT_EQ(r2.type, "coep"); + EXPECT_EQ(r2.group, "e2"); + EXPECT_EQ(r2.url, kContextUrl); + EXPECT_EQ(r2.body, CreateBodyForWorkerInitialization( + "http://www2.example.com:41/worker.js", "reporting")); +} + } // namespace } // namespace content
diff --git a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc index d936ab7..150b57e 100644 --- a/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc +++ b/content/browser/picture_in_picture/picture_in_picture_service_impl_unittest.cc
@@ -123,6 +123,7 @@ void RequestSeekBackward(base::TimeDelta seek_time) override {} void RequestEnterPictureInPicture() override {} void RequestExitPictureInPicture() override {} + void SetAudioSinkId(const std::string& sink_id) override {} private: mojo::Receiver<media::mojom::MediaPlayer> receiver_{this};
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc index dbeaacc..fa81abd 100644 --- a/content/browser/prerender/prerender_browsertest.cc +++ b/content/browser/prerender/prerender_browsertest.cc
@@ -504,10 +504,11 @@ // Navigate to an initial page. ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); // Set a cookie to the origin. + const std::string initial_cookie = "initial_cookie=exist"; const std::string prerender_cookie = "prerender_cookie=exist"; EvalJsResult result = EvalJs(shell()->web_contents(), - "document.cookie='" + prerender_cookie + "; path=/'"); + "document.cookie='" + initial_cookie + "; path=/'"); EXPECT_TRUE(result.error.empty()) << result.error; // Make a prerendered page. @@ -519,8 +520,16 @@ WebContents* prerender_contents = WebContents::FromRenderFrameHost( prerender_host->GetPrerenderedMainFrameHostForTesting()); - // Verify the prerendered page can access the cookie. - EXPECT_EQ(prerender_cookie, EvalJs(prerender_contents, "document.cookie")); + // Verify the prerendered page can read the cookie. + EXPECT_EQ(initial_cookie, EvalJs(prerender_contents, "document.cookie")); + + // Verify the prerendered page can update cookies. + EvalJsResult prerender_result = EvalJs( + prerender_contents, "document.cookie='" + prerender_cookie + "; path=/'"); + EXPECT_TRUE(prerender_result.error.empty()) << prerender_result.error; + // Read the updated cookie from the initial page. + EXPECT_EQ(initial_cookie + "; " + prerender_cookie, + EvalJs(shell()->web_contents(), "document.cookie")); } class MojoCapabilityControlTestContentBrowserClient
diff --git a/content/browser/renderer_host/keep_alive_handle_factory.cc b/content/browser/renderer_host/keep_alive_handle_factory.cc index b0d98e14..e8492b4 100644 --- a/content/browser/renderer_host/keep_alive_handle_factory.cc +++ b/content/browser/renderer_host/keep_alive_handle_factory.cc
@@ -30,7 +30,8 @@ []() { GetContentClient()->browser()->OnKeepaliveRequestFinished(); })); if (!process_host || process_host->IsKeepAliveRefCountDisabled()) return; - process_host->IncrementKeepAliveRefCount(); + process_host->IncrementKeepAliveRefCount( + RenderProcessHost::KeepAliveSource::KEEP_ALIVE_HANDLE_FACTORY); } void Detach() {
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc index 41e8d10..bbf3921 100644 --- a/content/browser/renderer_host/media/video_capture_manager.cc +++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -203,6 +203,8 @@ "Media.VideoCaptureManager.DeviceSessionWasLocked", was_locked); if (was_locked) locked_sessions_.erase(locked_it); + if (locked_sessions_.empty() && !lock_time_.is_null()) + RecordDeviceSessionLockDuration(); } else { DCHECK(!locked_sessions_.contains(session_it->first)); } @@ -925,12 +927,33 @@ locked_sessions_.insert(it.first); } + if (!locked_sessions_.empty()) { + DCHECK(lock_time_.is_null()); + lock_time_ = base::TimeTicks::Now(); + } + for (auto session_id : desktopcapture_session_ids) { Close(session_id); } #endif // OS_ANDROID } +void VideoCaptureManager::OnScreenUnlocked() { + if (lock_time_.is_null()) + return; + + DCHECK(!locked_sessions_.empty()); + RecordDeviceSessionLockDuration(); +} + +void VideoCaptureManager::RecordDeviceSessionLockDuration() { + DCHECK(!lock_time_.is_null()); + base::UmaHistogramMediumTimes( + "Media.VideoCaptureManager.DeviceSessionLockDuration", + base::TimeTicks::Now() - lock_time_); + lock_time_ = base::TimeTicks(); +} + void VideoCaptureManager::EmitLogMessage(const std::string& message, int verbose_log_level) { DVLOG(verbose_log_level) << message;
diff --git a/content/browser/renderer_host/media/video_capture_manager.h b/content/browser/renderer_host/media/video_capture_manager.h index 44f6c815..3f28001 100644 --- a/content/browser/renderer_host/media/video_capture_manager.h +++ b/content/browser/renderer_host/media/video_capture_manager.h
@@ -269,9 +269,12 @@ // ScreenlockObserver implementation: void OnScreenLocked() override; + void OnScreenUnlocked() override; void EmitLogMessage(const std::string& message, int verbose_log_level); + void RecordDeviceSessionLockDuration(); + // Only accessed on Browser::IO thread. base::ObserverList<MediaStreamProviderListener>::Unchecked listeners_; @@ -283,6 +286,7 @@ // A set of sessions that have encountered screen lock. base::flat_set<media::VideoCaptureSessionId> locked_sessions_; + base::TimeTicks lock_time_; // Currently opened VideoCaptureController instances. The device may or may // not be started. This member is only accessed on IO thread.
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index 5a6e8de..cf83965 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -8012,7 +8012,7 @@ /*creator_worker_token=*/base::nullopt, /*ancestor_render_frame_host_id=*/GetGlobalFrameRoutingId(), last_committed_origin_, isolation_info_, - cross_origin_embedder_policy_, std::move(coep_reporter)), + cross_origin_embedder_policy_, coep_reporter_.get()), std::move(receiver)); }
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index b584309..e5c6082 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2204,7 +2204,7 @@ if (IsKeepAliveRefCountDisabled() || deleting_soon_ || fast_shutdown_started_) return; - IncrementKeepAliveRefCount(); + IncrementKeepAliveRefCount(KeepAliveSource::KEEP_ALIVE_SUBFRAME_UNLOAD); GetUIThreadTaskRunner({})->PostDelayedTask( FROM_HERE, base::BindOnce( @@ -2713,9 +2713,10 @@ return priority_.is_background(); } -void RenderProcessHostImpl::IncrementKeepAliveRefCount() { +void RenderProcessHostImpl::IncrementKeepAliveRefCount(KeepAliveSource source) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(!is_keep_alive_ref_count_disabled_); + keep_alive_last_source_ = source; ++keep_alive_ref_count_; if (keep_alive_ref_count_ == 1) GetRendererInterface()->SetSchedulerKeepActive(true);
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 91bb3a8..50aaa03 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -241,7 +241,7 @@ override; const base::TimeTicks& GetInitTimeForNavigationMetrics() override; bool IsProcessBackgrounded() override; - void IncrementKeepAliveRefCount() override; + void IncrementKeepAliveRefCount(KeepAliveSource source) override; void DecrementKeepAliveRefCount() override; void DisableKeepAliveRefCount() override; bool IsKeepAliveRefCountDisabled() override; @@ -656,6 +656,10 @@ } size_t keep_alive_ref_count() const { return keep_alive_ref_count_; } + // TODO(wjmaclean): remove this when the experiment is done. + KeepAliveSource keep_alive_last_source() const { + return keep_alive_last_source_; + } PeerConnectionTrackerHost* GetPeerConnectionTrackerHost(); @@ -927,6 +931,7 @@ mojo::OutgoingInvitation mojo_invitation_; size_t keep_alive_ref_count_; + KeepAliveSource keep_alive_last_source_ = KeepAliveSource::KEEP_ALIVE_NONE; // Set in DisableKeepAliveRefCount(). When true, |keep_alive_ref_count_| must // no longer be modified.
diff --git a/content/browser/service_worker/service_worker_process_manager.cc b/content/browser/service_worker/service_worker_process_manager.cc index 8b1a392..f97726d2 100644 --- a/content/browser/service_worker/service_worker_process_manager.cc +++ b/content/browser/service_worker/service_worker_process_manager.cc
@@ -161,7 +161,8 @@ worker_process_map_.emplace(embedded_worker_id, std::move(site_instance)); if (!rph->IsKeepAliveRefCountDisabled()) - rph->IncrementKeepAliveRefCount(); + rph->IncrementKeepAliveRefCount( + RenderProcessHost::KeepAliveSource::KEEP_ALIVE_SERVICE_WORKER); out_info->process_id = rph->GetID(); out_info->start_situation = start_situation; return blink::ServiceWorkerStatusCode::kOk;
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 47fd0d6..122b2d5d 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -7691,7 +7691,8 @@ // termination. RenderProcessHost* subframe_process = root->child_at(0)->current_frame_host()->GetProcess(); - subframe_process->IncrementKeepAliveRefCount(); + subframe_process->IncrementKeepAliveRefCount( + RenderProcessHost::KeepAliveSource::KEEP_ALIVE_SUBFRAME_UNLOAD); // Navigate the subframe away from b.com. Since this is the last active // frame in the b.com process, this causes the RenderWidget and RenderView to
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc index 62faaea4..8528204 100644 --- a/content/browser/worker_host/dedicated_worker_host.cc +++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -49,8 +49,7 @@ const url::Origin& creator_origin, const net::IsolationInfo& isolation_info, const network::CrossOriginEmbedderPolicy& cross_origin_embedder_policy, - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter, + CrossOriginEmbedderPolicyReporter* coep_reporter, mojo::PendingReceiver<blink::mojom::DedicatedWorkerHost> host) : service_(service), token_(token), @@ -65,7 +64,7 @@ isolation_info_(isolation_info), creator_cross_origin_embedder_policy_(cross_origin_embedder_policy), host_receiver_(this, std::move(host)), - coep_reporter_(std::move(coep_reporter)) { + coep_reporter_(coep_reporter) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK(worker_process_host_); DCHECK(worker_process_host_->IsInitializedAndNotDead()); @@ -418,8 +417,13 @@ // value is "unsafe-none", then queue a cross-origin embedder policy // inheritance violation with response, "worker initialization", owner's // policy's report only reporting endpoint, "reporting", and owner. - // TODO(crbug.com/1060837): Queue a report if the report-only value is not - // valid. + if (creator_cross_origin_embedder_policy.report_only_value == + network::mojom::CrossOriginEmbedderPolicyValue::kRequireCorp && + worker_cross_origin_embedder_policy.value == + network::mojom::CrossOriginEmbedderPolicyValue::kNone) { + coep_reporter_->QueueWorkerInitializationReport(final_response_url_.value(), + /*report_only=*/true); + } // > 5. If ownerPolicy's value is "unsafe-none" or policy's value is // "require-corp", then return true. @@ -433,7 +437,8 @@ // > 6. Queue a cross-origin embedder policy inheritance violation with // response, "worker initialization", owner's policy's reporting endpoint, // "enforce", and owner. - // TODO(crbug.com/1060837): Queue this report. + coep_reporter_->QueueWorkerInitializationReport(final_response_url_.value(), + /*report_only=*/false); // > 7. Return false. return false; @@ -505,19 +510,15 @@ void DedicatedWorkerHost::CreateNestedDedicatedWorker( mojo::PendingReceiver<blink::mojom::DedicatedWorkerHostFactory> receiver) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter; - coep_reporter_->Clone(coep_reporter.InitWithNewPipeAndPassReceiver()); // Set this worker as the creator of the new worker and inherit the ancestor // render frame. - mojo::MakeSelfOwnedReceiver( std::make_unique<DedicatedWorkerHostFactoryImpl>( worker_process_host_->GetID(), /*creator_render_frame_host_id_=*/base::nullopt, /*creator_worker_token=*/token_, ancestor_render_frame_host_id_, worker_origin_, isolation_info_, cross_origin_embedder_policy(), - std::move(coep_reporter)), + coep_reporter_), std::move(receiver)); }
diff --git a/content/browser/worker_host/dedicated_worker_host.h b/content/browser/worker_host/dedicated_worker_host.h index 7493ce9..7854bc76 100644 --- a/content/browser/worker_host/dedicated_worker_host.h +++ b/content/browser/worker_host/dedicated_worker_host.h
@@ -11,6 +11,7 @@ #include "base/scoped_observation.h" #include "build/build_config.h" #include "content/browser/browser_interface_broker_impl.h" +#include "content/browser/net/cross_origin_embedder_policy_reporter.h" #include "content/public/browser/global_routing_id.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host_observer.h" @@ -60,8 +61,7 @@ const url::Origin& creator_origin, const net::IsolationInfo& isolation_info, const network::CrossOriginEmbedderPolicy& cross_origin_embedder_policy, - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter, + CrossOriginEmbedderPolicyReporter* coep_reporter, mojo::PendingReceiver<blink::mojom::DedicatedWorkerHost> host); ~DedicatedWorkerHost() final; @@ -255,11 +255,11 @@ // The endpoint of this mojo interface is the RenderFrameHostImpl's COEP // reporter. The COEP endpoint is correct, but the context_url is the // Document's URL. - // TODO(arthursonzogni): After landing PlzDedicatedWorker, make the + // TODO(crbug.com/1060837): After landing PlzDedicatedWorker, make the // DedicatedWorkerHost to have its own COEP reporter using the right // context_url. - mojo::Remote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter_; // Never null. + CrossOriginEmbedderPolicyReporter* const coep_reporter_; // Never null. + // Will be set once the worker script started loading. base::Optional<GURL> final_response_url_;
diff --git a/content/browser/worker_host/dedicated_worker_host_factory_impl.cc b/content/browser/worker_host/dedicated_worker_host_factory_impl.cc index 7d8210d..e90a7a6 100644 --- a/content/browser/worker_host/dedicated_worker_host_factory_impl.cc +++ b/content/browser/worker_host/dedicated_worker_host_factory_impl.cc
@@ -43,8 +43,7 @@ const url::Origin& creator_origin, const net::IsolationInfo& isolation_info, const network::CrossOriginEmbedderPolicy& cross_origin_embedder_policy, - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter) + CrossOriginEmbedderPolicyReporter* coep_reporter) : worker_process_id_(worker_process_id), creator_render_frame_host_id_(creator_render_frame_host_id), creator_worker_token_(creator_worker_token), @@ -52,7 +51,7 @@ creator_origin_(creator_origin), isolation_info_(isolation_info), cross_origin_embedder_policy_(cross_origin_embedder_policy), - coep_reporter_(std::move(coep_reporter)) { + coep_reporter_(coep_reporter) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK((creator_render_frame_host_id_ && !creator_worker_token_) || (!creator_render_frame_host_id_ && creator_worker_token_)); @@ -91,14 +90,10 @@ return; } - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter; - coep_reporter_->Clone(coep_reporter.InitWithNewPipeAndPassReceiver()); - auto* host = new DedicatedWorkerHost( service, token, worker_process_host, creator_render_frame_host_id_, creator_worker_token_, ancestor_render_frame_host_id_, creator_origin_, - isolation_info_, cross_origin_embedder_policy_, std::move(coep_reporter), + isolation_info_, cross_origin_embedder_policy_, coep_reporter_, std::move(host_receiver)); host->BindBrowserInterfaceBrokerReceiver(std::move(broker_receiver)); } @@ -133,16 +128,11 @@ // TODO(https://crbug.com/1058759): Compare |creator_origin_| to // |script_url|, and report as bad message if that fails. - - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter; - coep_reporter_->Clone(coep_reporter.InitWithNewPipeAndPassReceiver()); - mojo::PendingRemote<blink::mojom::DedicatedWorkerHost> pending_remote_host; auto* host = new DedicatedWorkerHost( service, token, worker_process_host, creator_render_frame_host_id_, creator_worker_token_, ancestor_render_frame_host_id_, creator_origin_, - isolation_info_, cross_origin_embedder_policy_, std::move(coep_reporter), + isolation_info_, cross_origin_embedder_policy_, coep_reporter_, pending_remote_host.InitWithNewPipeAndPassReceiver()); mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker; host->BindBrowserInterfaceBrokerReceiver(
diff --git a/content/browser/worker_host/dedicated_worker_host_factory_impl.h b/content/browser/worker_host/dedicated_worker_host_factory_impl.h index e1d69d13..92df3453 100644 --- a/content/browser/worker_host/dedicated_worker_host_factory_impl.h +++ b/content/browser/worker_host/dedicated_worker_host_factory_impl.h
@@ -6,6 +6,7 @@ #define CONTENT_BROWSER_WORKER_HOST_DEDICATED_WORKER_HOST_FACTORY_IMPL_H_ #include "base/optional.h" +#include "content/browser/net/cross_origin_embedder_policy_reporter.h" #include "content/common/content_export.h" #include "content/public/browser/global_routing_id.h" #include "mojo/public/cpp/bindings/pending_remote.h" @@ -31,8 +32,7 @@ const url::Origin& creator_origin, const net::IsolationInfo& isolation_info, const network::CrossOriginEmbedderPolicy& cross_origin_embedder_policy, - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter); + CrossOriginEmbedderPolicyReporter* coep_reporter); ~DedicatedWorkerHostFactoryImpl() override; // blink::mojom::DedicatedWorkerHostFactory: @@ -67,8 +67,7 @@ const url::Origin creator_origin_; const net::IsolationInfo isolation_info_; const network::CrossOriginEmbedderPolicy cross_origin_embedder_policy_; - mojo::Remote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter_; + CrossOriginEmbedderPolicyReporter* const coep_reporter_; DISALLOW_COPY_AND_ASSIGN(DedicatedWorkerHostFactoryImpl); };
diff --git a/content/browser/worker_host/dedicated_worker_service_impl_unittest.cc b/content/browser/worker_host/dedicated_worker_service_impl_unittest.cc index 428c44e..f87d7794 100644 --- a/content/browser/worker_host/dedicated_worker_service_impl_unittest.cc +++ b/content/browser/worker_host/dedicated_worker_service_impl_unittest.cc
@@ -35,18 +35,17 @@ MockDedicatedWorker(int worker_process_id, GlobalFrameRoutingId render_frame_host_id) { // The COEP reporter is replaced by a dummy connection. Reports are ignored. - mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> - coep_reporter_remote; - auto dummy_coep_reporter = - coep_reporter_remote.InitWithNewPipeAndPassReceiver(); + CrossOriginEmbedderPolicyReporter coep_reporter( + RenderFrameHostImpl::FromID(render_frame_host_id) + ->GetStoragePartition(), + GURL(), base::nullopt, base::nullopt, net::NetworkIsolationKey()); mojo::MakeSelfOwnedReceiver( std::make_unique<DedicatedWorkerHostFactoryImpl>( worker_process_id, render_frame_host_id, /*creator_worker_token=*/base::nullopt, render_frame_host_id, url::Origin(), net::IsolationInfo::CreateTransient(), - network::CrossOriginEmbedderPolicy(), - std::move(coep_reporter_remote)), + network::CrossOriginEmbedderPolicy(), &coep_reporter), factory_.BindNewPipeAndPassReceiver()); if (base::FeatureList::IsEnabled(blink::features::kPlzDedicatedWorker)) {
diff --git a/content/browser/worker_host/shared_worker_host.cc b/content/browser/worker_host/shared_worker_host.cc index 97b4a7d..af84723 100644 --- a/content/browser/worker_host/shared_worker_host.cc +++ b/content/browser/worker_host/shared_worker_host.cc
@@ -90,7 +90,8 @@ public: explicit ScopedProcessHostRef(RenderProcessHost* render_process_host) : render_process_host_(render_process_host) { - render_process_host_->IncrementKeepAliveRefCount(); + render_process_host_->IncrementKeepAliveRefCount( + RenderProcessHost::KeepAliveSource::KEEP_ALIVE_SHARED_WORKER); } ~ScopedProcessHostRef() {
diff --git a/content/common/media/media_player_delegate_messages.h b/content/common/media/media_player_delegate_messages.h index a8cea24b..f85a034 100644 --- a/content/common/media/media_player_delegate_messages.h +++ b/content/common/media/media_player_delegate_messages.h
@@ -41,10 +41,6 @@ int /* delegate_id, distinguishes instances */, double /* is_persistent */) -IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_SetAudioSinkId, - int /* delegate_id, distinguishes instances */, - std::string /* sink_id */) - IPC_MESSAGE_ROUTED2(MediaPlayerDelegateMsg_NotifyPowerExperimentState, int /* delegate_id, distinguishes instances */, bool /* is experiment starting (true) or stopping? */)
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h index 23d8cb97e..7b2bd0e 100644 --- a/content/public/browser/render_process_host.h +++ b/content/public/browser/render_process_host.h
@@ -121,6 +121,15 @@ GENERATE_CRASH_DUMP, }; + // Temporary enum to track source of KeepAlive increments. + enum class KeepAliveSource { + KEEP_ALIVE_NONE, + KEEP_ALIVE_HANDLE_FACTORY, + KEEP_ALIVE_SUBFRAME_UNLOAD, + KEEP_ALIVE_SERVICE_WORKER, + KEEP_ALIVE_SHARED_WORKER + }; + // General functions --------------------------------------------------------- ~RenderProcessHost() override {} @@ -397,7 +406,7 @@ // Keeps the process alive briefly to give subframe unload handlers a // chance to execute after their parent frame navigates or is detached. // See https://crbug.com/852204. - virtual void IncrementKeepAliveRefCount() = 0; + virtual void IncrementKeepAliveRefCount(KeepAliveSource source) = 0; virtual void DecrementKeepAliveRefCount() = 0; // Sets keep alive ref counts to zero. Called when the browser context will be
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 7b9ef49..defe37e 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -42,10 +42,7 @@ // Runs the audio service in a separate process. const base::Feature kAudioServiceOutOfProcess { "AudioServiceOutOfProcess", -// TODO(crbug.com/1052397): Revisit the macro expression once build flag switch -// of lacros-chrome is complete. -#if defined(OS_WIN) || defined(OS_MAC) || \ - (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) +#if defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) base::FEATURE_ENABLED_BY_DEFAULT #else base::FEATURE_DISABLED_BY_DEFAULT
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc index a5df1e9f..9a68585 100644 --- a/content/public/test/mock_render_process_host.cc +++ b/content/public/test/mock_render_process_host.cc
@@ -364,7 +364,7 @@ return keep_alive_ref_count_; } -void MockRenderProcessHost::IncrementKeepAliveRefCount() { +void MockRenderProcessHost::IncrementKeepAliveRefCount(KeepAliveSource source) { ++keep_alive_ref_count_; }
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h index d1dc8a0e..cfb22ecd 100644 --- a/content/public/test/mock_render_process_host.h +++ b/content/public/test/mock_render_process_host.h
@@ -145,7 +145,7 @@ const base::TimeTicks& GetInitTimeForNavigationMetrics() override; bool IsProcessBackgrounded() override; size_t GetKeepAliveRefCount() const; - void IncrementKeepAliveRefCount() override; + void IncrementKeepAliveRefCount(KeepAliveSource source) override; void DecrementKeepAliveRefCount() override; void DisableKeepAliveRefCount() override; bool IsKeepAliveRefCountDisabled() override;
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc index 99fb0c5..67b3eaf6 100644 --- a/content/renderer/media/renderer_webmediaplayer_delegate.cc +++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc
@@ -237,8 +237,6 @@ OnMediaDelegateVolumeMultiplierUpdate) IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_BecamePersistentVideo, OnMediaDelegateBecamePersistentVideo) - IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_SetAudioSinkId, - OnMediaDelegateSetAudioSink) IPC_MESSAGE_HANDLER(MediaPlayerDelegateMsg_NotifyPowerExperimentState, OnMediaDelegatePowerExperimentState) IPC_MESSAGE_UNHANDLED(return false) @@ -295,14 +293,6 @@ observer->OnBecamePersistentVideo(value); } -void RendererWebMediaPlayerDelegate::OnMediaDelegateSetAudioSink( - int player_id, - std::string sink_id) { - Observer* observer = id_map_.Lookup(player_id); - if (observer) - observer->OnSetAudioSink(sink_id); -} - void RendererWebMediaPlayerDelegate::OnMediaDelegatePowerExperimentState( int player_id, bool state) {
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.h b/content/renderer/media/renderer_webmediaplayer_delegate.h index 0d2ea3d..c96e986 100644 --- a/content/renderer/media/renderer_webmediaplayer_delegate.h +++ b/content/renderer/media/renderer_webmediaplayer_delegate.h
@@ -93,7 +93,6 @@ void OnMediaDelegateSuspendAllMediaPlayers(); void OnMediaDelegateVolumeMultiplierUpdate(int player_id, double multiplier); void OnMediaDelegateBecamePersistentVideo(int player_id, bool value); - void OnMediaDelegateSetAudioSink(int player_id, std::string sink_id); void OnMediaDelegatePowerExperimentState(int player_id, bool state); // Schedules UpdateTask() to run soon.
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc index dfbc855..94c577cb 100644 --- a/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc +++ b/content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc
@@ -45,7 +45,6 @@ MOCK_METHOD1(OnVolumeMultiplierUpdate, void(double)); MOCK_METHOD1(OnBecamePersistentVideo, void(bool)); MOCK_METHOD0(OnPictureInPictureModeEnded, void()); - MOCK_METHOD1(OnSetAudioSink, void(const std::string&)); }; class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest {
diff --git a/content/test/data/gpu/webgpu-iframe-removed.html b/content/test/data/gpu/webgpu-iframe-removed.html index 8376366..40d32d0 100644 --- a/content/test/data/gpu/webgpu-iframe-removed.html +++ b/content/test/data/gpu/webgpu-iframe-removed.html
@@ -124,6 +124,46 @@ } }); + // Test creating a device asynchronously, but removing the iframe before + // the response is received. + await runTestCase(async () => { + const adapter = navigator.gpu && await navigator.gpu.requestAdapter(); + if (!adapter) { + console.warn('WebGPU not supported'); + parent.removeIframe(); + return; + } + + adapter.requestDevice(); + /* Wait till the next task so we're sure the command flushed */ + setTimeout(() => { + parent.removeIframe(); + }, 0); + }); + + // Test sending an async command and then removing the iframe + // before the response is received. + await runTestCase(async () => { + const adapter = navigator.gpu && await navigator.gpu.requestAdapter(); + if (!adapter) { + console.warn('WebGPU not supported'); + parent.removeIframe(); + return; + } + const device = await adapter.requestDevice(); + + const buffer = device.createBuffer({ + size: 4, + usage: GPUBufferUsage.MAP_READ, + }); + + buffer.mapAsync(GPUMapMode.READ); + /* Wait till the next microtask so we're sure the command flushed */ + setTimeout(() => { + parent.removeIframe(); + }, 0); + }); + window.domAutomationController.send('FINISHED'); } </script>
diff --git a/docs/speed/bot_health_sheriffing/how_to_disable_a_story.md b/docs/speed/bot_health_sheriffing/how_to_disable_a_story.md index 0f8503d..df549ef 100644 --- a/docs/speed/bot_health_sheriffing/how_to_disable_a_story.md +++ b/docs/speed/bot_health_sheriffing/how_to_disable_a_story.md
@@ -65,7 +65,9 @@ *Please make sure to CC the benchmark owner so that they're aware that they've lost coverage.* -The `Tbr:` and `No-Try:` are permitted and recommended so long as the only file changed is `tools/perf/expectations.config`. If your change touches real code rather than just that configuration data, you'll need a real review before submitting it. +The `Tbr:` and `No-Try:` are permitted and recommended so long as the only file changed is `tools/perf/expectations.config`. +To submit a `Tbr:` change, you will need to add `Rubber Stamper (rubber-stamper@appspot.gserviceaccount.com)` as a reviewer to the patch and wait for the bot's approval. +If your change touches real code rather than just that configuration data, you'll need a real review before submitting it. # How to disable a failing gtest perf test
diff --git a/docs/ui/learn/bestpractices/layout.md b/docs/ui/learn/bestpractices/layout.md index 37bc61c..e57ec9c 100644 --- a/docs/ui/learn/bestpractices/layout.md +++ b/docs/ui/learn/bestpractices/layout.md
@@ -335,7 +335,7 @@ group_modifier_container->AddChildView( std::make_unique<ColorPickerView>( colors_, background_color(), initial_color, - base::Bind( + base::BindRepeating( &TabGroupEditorBubbleView::UpdateGroup, base::Unretained(this)))); ... @@ -433,7 +433,7 @@ group_modifier_container->AddChildView( std::make_unique<ColorPickerView>( this, colors_, initial_color_id, - base::Bind( + base::BindRepeating( &TabGroupEditorBubbleView::UpdateGroup, base::Unretained(this)))); color_selector_->SetProperty(
diff --git a/extensions/common/extension_features.cc b/extensions/common/extension_features.cc index 0c7c5c29..b0e7be0 100644 --- a/extensions/common/extension_features.cc +++ b/extensions/common/extension_features.cc
@@ -61,15 +61,4 @@ const base::Feature kReportKeepaliveUkm{"ReportKeepaliveUkm", base::FEATURE_ENABLED_BY_DEFAULT}; -// Enables callers of the GetAuthToken API to request for the unbundled consent -// UI and populates the scopes parameter in the GetAuthToken callback function. -const base::Feature kReturnScopesInGetAuthToken{ - "ReturnScopesInGetAuthToken", base::FEATURE_ENABLED_BY_DEFAULT}; - -// If enabled, allows the GetAuthToken API to provide the "selected_user_id" -// parameter to the server, indicating which account to request permissions -// from. -const base::Feature kSelectedUserIdInGetAuthToken{ - "SelectedUserIdInGetAuthToken", base::FEATURE_ENABLED_BY_DEFAULT}; - } // namespace extensions_features
diff --git a/extensions/common/extension_features.h b/extensions/common/extension_features.h index 587b706..0fa79fb 100644 --- a/extensions/common/extension_features.h +++ b/extensions/common/extension_features.h
@@ -32,10 +32,6 @@ extern const base::Feature kReportKeepaliveUkm; -extern const base::Feature kReturnScopesInGetAuthToken; - -extern const base::Feature kSelectedUserIdInGetAuthToken; - } // namespace extensions_features #endif // EXTENSIONS_COMMON_EXTENSION_FEATURES_H_
diff --git a/fuchsia/engine/browser/frame_impl.cc b/fuchsia/engine/browser/frame_impl.cc index 610495f..9b3e601 100644 --- a/fuchsia/engine/browser/frame_impl.cc +++ b/fuchsia/engine/browser/frame_impl.cc
@@ -27,8 +27,8 @@ #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/permission_controller_delegate.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/renderer_preferences_util.h" @@ -1121,21 +1121,10 @@ context_->devtools_controller()->OnFrameLoaded(web_contents_.get()); } -void FrameImpl::RenderViewCreated(content::RenderViewHost* render_view_host) { - render_view_host->GetWidget()->GetView()->SetBackgroundColor( - SK_AlphaTRANSPARENT); -} - -void FrameImpl::RenderViewReady() { - web_contents_->GetRenderViewHost() - ->GetWidget() - ->GetView() - ->SetBackgroundColor(SK_AlphaTRANSPARENT); - - // Setting the background color doesn't necessarily apply it right away, so - // request a redraw if there is a view connected to this Frame. - if (window_tree_host_) - window_tree_host_->compositor()->ScheduleDraw(); +void FrameImpl::RenderFrameCreated(content::RenderFrameHost* frame_host) { + // The top-level frame is given a transparent background color. + if (frame_host == web_contents()->GetMainFrame()) + frame_host->GetView()->SetBackgroundColor(SK_AlphaTRANSPARENT); } void FrameImpl::DidFirstVisuallyNonEmptyPaint() {
diff --git a/fuchsia/engine/browser/frame_impl.h b/fuchsia/engine/browser/frame_impl.h index d6f69a2..ae33b07 100644 --- a/fuchsia/engine/browser/frame_impl.h +++ b/fuchsia/engine/browser/frame_impl.h
@@ -262,8 +262,7 @@ content::NavigationHandle* navigation_handle) override; void DidFinishLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url) override; - void RenderViewCreated(content::RenderViewHost* render_view_host) override; - void RenderViewReady() override; + void RenderFrameCreated(content::RenderFrameHost* frame_host) override; void DidFirstVisuallyNonEmptyPaint() override; void ResourceLoadComplete( content::RenderFrameHost* render_frame_host,
diff --git a/gin/gin_features.cc b/gin/gin_features.cc index 4865131..8439d46 100644 --- a/gin/gin_features.cc +++ b/gin/gin_features.cc
@@ -54,6 +54,10 @@ const base::Feature kV8ExperimentalRegexpEngine{ "V8ExperimentalRegexpEngine", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables experimental Turboprop compiler. +const base::Feature kV8Turboprop{"V8Turboprop", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables fast API calls in TurboFan. const base::Feature kV8TurboFastApiCalls{"V8TurboFastApiCalls", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/gin/gin_features.h b/gin/gin_features.h index 84576eb..9d891c3 100644 --- a/gin/gin_features.h +++ b/gin/gin_features.h
@@ -23,6 +23,7 @@ GIN_EXPORT extern const base::Feature kV8TurboDirectHeapAccess; GIN_EXPORT extern const base::Feature kV8ExperimentalRegexpEngine; GIN_EXPORT extern const base::Feature kV8TurboFastApiCalls; +GIN_EXPORT extern const base::Feature kV8Turboprop; } // namespace features
diff --git a/gin/v8_initializer.cc b/gin/v8_initializer.cc index 2aba21e..ac74939f 100644 --- a/gin/v8_initializer.cc +++ b/gin/v8_initializer.cc
@@ -304,6 +304,11 @@ sizeof(turbo_fast_api_calls) - 1); } + if (base::FeatureList::IsEnabled(features::kV8Turboprop)) { + static const char turboprop[] = "--turboprop"; + v8::V8::SetFlagsFromString(turboprop, sizeof(turboprop) - 1); + } + if (IsolateHolder::kStrictMode == mode) { static const char use_strict[] = "--use_strict"; v8::V8::SetFlagsFromString(use_strict, sizeof(use_strict) - 1);
diff --git a/gpu/command_buffer/client/webgpu_implementation.cc b/gpu/command_buffer/client/webgpu_implementation.cc index 98ee180..189ad00 100644 --- a/gpu/command_buffer/client/webgpu_implementation.cc +++ b/gpu/command_buffer/client/webgpu_implementation.cc
@@ -246,6 +246,9 @@ } void WebGPUImplementation::OnGpuControlReturnData( base::span<const uint8_t> data) { + if (lost_) { + return; + } #if BUILDFLAG(USE_DAWN) static uint32_t return_trace_id = 0;
diff --git a/headless/lib/browser/headless_web_contents_impl.cc b/headless/lib/browser/headless_web_contents_impl.cc index e9c7b85..4fdbf1c 100644 --- a/headless/lib/browser/headless_web_contents_impl.cc +++ b/headless/lib/browser/headless_web_contents_impl.cc
@@ -19,6 +19,7 @@ #include "base/trace_event/trace_event.h" #include "base/values.h" #include "build/build_config.h" +#include "build/chromeos_buildflags.h" #include "components/security_state/content/content_utils.h" #include "components/security_state/core/security_state.h" #include "content/public/browser/browser_thread.h" @@ -59,7 +60,7 @@ namespace { void UpdatePrefsFromSystemSettings(blink::RendererPreferences* prefs) { -#if defined(OS_LINUX) || defined(OS_WIN) +#if defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) || defined(OS_WIN) content::UpdateFontRendererPreferencesFromSystemSettings(prefs); #endif
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg index 19d2139..238f698 100644 --- a/infra/config/generated/commit-queue.cfg +++ b/infra/config/generated/commit-queue.cfg
@@ -1003,6 +1003,10 @@ location_regexp_exclude: ".+/[+]/infra/config/.+" } builders { + name: "chromium/try/linux-blink-v8-oilpan" + includable_only: true + } + builders { name: "chromium/try/linux-blink-web-tests-force-accessibility-rel" includable_only: true } @@ -1120,10 +1124,7 @@ } builders { name: "chromium/try/linux-rel-rts" - experiment_percentage: 5 - location_regexp: ".*" - location_regexp_exclude: ".+/[+]/docs/.+" - location_regexp_exclude: ".+/[+]/infra/config/.+" + includable_only: true } builders { name: "chromium/try/linux-swangle-chromium-try-x64"
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index c0a9350..4b51dca1 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -393,6 +393,3 @@ * [`//content/browser/tracing/.+`](https://cs.chromium.org/chromium/src/content/browser/tracing/) * [`//services/tracing/.+`](https://cs.chromium.org/chromium/src/services/tracing/) -* [linux-rel-rts](https://ci.chromium.org/p/chromium/builders/try/linux-rel-rts) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-rel-rts)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-rel-rts)) - * Experiment percentage: 5.0 -
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index 864fbb77..1211ffe 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -22732,6 +22732,64 @@ } } builders { + name: "linux-blink-v8-oilpan" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-16.04" + dimensions: "pool:luci.chromium.ci" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + execution_timeout_secs: 36000 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.gtests_local" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.junit_tests" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + history_options { + use_invocation_timestamp: true + } + } + } + builders { name: "linux-cfm-rel" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper" @@ -41288,6 +41346,68 @@ } } builders { + name: "linux-blink-v8-oilpan" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-16.04" + dimensions: "pool:luci.chromium.try" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.linux\",\"recipe\":\"chromium_trybot\"}" + execution_timeout_secs: 14400 + expiration_secs: 7200 + caches { + name: "win_toolchain" + path: "win_toolchain" + } + build_numbers: YES + service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" + task_template_canary_percentage { + value: 5 + } + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "chromium.resultdb.result_sink.junit_tests" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "try_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_try_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + history_options { + use_invocation_timestamp: true + } + } + } + builders { name: "linux-blink-web-tests-force-accessibility-rel" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper"
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci-milo.cfg index 59b8a79..91f6d1d1 100644 --- a/infra/config/generated/luci-milo.cfg +++ b/infra/config/generated/luci-milo.cfg
@@ -5630,6 +5630,11 @@ short_name: "VF" } builders { + name: "buildbucket/luci.chromium.ci/linux-blink-v8-oilpan" + category: "linux|blink" + short_name: "VO" + } + builders { name: "buildbucket/luci.chromium.ci/linux-chromium-tests-staging-builder" category: "recipe|staging|linux" short_name: "bld" @@ -12501,6 +12506,9 @@ name: "buildbucket/luci.chromium.try/linux-blink-rel" } builders { + name: "buildbucket/luci.chromium.try/linux-blink-v8-oilpan" + } + builders { name: "buildbucket/luci.chromium.try/linux-blink-web-tests-force-accessibility-rel" } builders { @@ -13409,6 +13417,9 @@ name: "buildbucket/luci.chromium.try/linux-blink-heap-verification-try" } builders { + name: "buildbucket/luci.chromium.try/linux-blink-v8-oilpan" + } + builders { name: "buildbucket/luci.chromium.try/linux-blink-web-tests-force-accessibility-rel" } builders {
diff --git a/infra/config/generated/luci-notify.cfg b/infra/config/generated/luci-notify.cfg index e33e466..0bf8637 100644 --- a/infra/config/generated/luci-notify.cfg +++ b/infra/config/generated/luci-notify.cfg
@@ -3034,6 +3034,19 @@ } notifiers { notifications { + on_new_status: FAILURE + email { + recipients: "mlippautz+fyi-bots@chromium.org" + } + } + builders { + bucket: "ci" + name: "linux-blink-v8-oilpan" + repository: "https://chromium.googlesource.com/chromium/src" + } +} +notifiers { + notifications { on_occurrence: FAILURE failed_step_regexp: "\\b(bot_update|compile|gclient runhooks|runhooks|update|\\w*nocompile_test)\\b" email {
diff --git a/infra/config/generated/luci-scheduler.cfg b/infra/config/generated/luci-scheduler.cfg index 5eb132c..6add2b47 100644 --- a/infra/config/generated/luci-scheduler.cfg +++ b/infra/config/generated/luci-scheduler.cfg
@@ -5307,6 +5307,16 @@ } } job { + id: "linux-blink-v8-oilpan" + realm: "ci" + acl_sets: "ci" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "linux-blink-v8-oilpan" + } +} +job { id: "linux-cfm-rel" realm: "ci" acl_sets: "ci" @@ -6878,6 +6888,7 @@ triggers: "linux-blink-animation-use-time-delta" triggers: "linux-blink-heap-concurrent-marking-tsan-rel" triggers: "linux-blink-heap-verification" + triggers: "linux-blink-v8-oilpan" triggers: "linux-cfm-rel" triggers: "linux-chromeos-dbg" triggers: "linux-chromeos-rel"
diff --git a/infra/config/notifiers.star b/infra/config/notifiers.star index 9d7aa78f..e8325ec 100644 --- a/infra/config/notifiers.star +++ b/infra/config/notifiers.star
@@ -194,7 +194,7 @@ ) luci.notifier( - name = "linux-blink-heap-verification", + name = "linux-blink-fyi-bots", notify_emails = [ "mlippautz+fyi-bots@chromium.org", ],
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index 6429f76..895bf8bb 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -2981,7 +2981,16 @@ category = "linux|blink", short_name = "VF", ), - notifies = ["linux-blink-heap-verification"], + notifies = ["linux-blink-fyi-bots"], +) + +ci.fyi_builder( + name = "linux-blink-v8-oilpan", + console_view_entry = consoles.console_view_entry( + category = "linux|blink", + short_name = "VO", + ), + notifies = ["linux-blink-fyi-bots"], ) ci.fyi_builder(
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index 5485889..57f890a 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -979,6 +979,10 @@ ) try_.chromium_linux_builder( + name = "linux-blink-v8-oilpan", +) + +try_.chromium_linux_builder( name = "linux-blink-web-tests-force-accessibility-rel", ) @@ -1072,7 +1076,6 @@ name = "linux-rel-rts", builderless = False, goma_jobs = goma.jobs.J150, - tryjob = try_.job(experiment_percentage = 5), use_clang_coverage = True, )
diff --git a/ios/chrome/app/application_delegate/url_opener_params_unittest.mm b/ios/chrome/app/application_delegate/url_opener_params_unittest.mm index 31043856..663992b 100644 --- a/ios/chrome/app/application_delegate/url_opener_params_unittest.mm +++ b/ios/chrome/app/application_delegate/url_opener_params_unittest.mm
@@ -18,7 +18,13 @@ typedef PlatformTest URLOpenerParamsTest; // Simple test for initWithUIOpenURLContext:. -TEST_F(URLOpenerParamsTest, initWithUIOpenURLContext) { +// TODO(crbug.com/1172529): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_initWithUIOpenURLContext initWithUIOpenURLContext +#else +#define MAYBE_initWithUIOpenURLContext DISABLED_initWithUIOpenURLContext +#endif +TEST_F(URLOpenerParamsTest, MAYBE_initWithUIOpenURLContext) { if (@available(iOS 13, *)) { NSURL* url = [NSURL URLWithString:@"https://url.test"]; NSString* source = @"source";
diff --git a/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm b/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm index 72a4aa0..3542aca 100644 --- a/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm +++ b/ios/chrome/app/application_delegate/user_activity_handler_unittest.mm
@@ -888,7 +888,16 @@ // Tests that performActionForShortcutItem set startupParameters accordingly to // the shortcut used -TEST_F(UserActivityHandlerTest, PerformActionForShortcutItemWithRealShortcut) { +// TODO(crbug.com/1172529): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_PerformActionForShortcutItemWithRealShortcut \ + PerformActionForShortcutItemWithRealShortcut +#else +#define MAYBE_PerformActionForShortcutItemWithRealShortcut \ + DISABLED_PerformActionForShortcutItemWithRealShortcut +#endif +TEST_F(UserActivityHandlerTest, + MAYBE_PerformActionForShortcutItemWithRealShortcut) { // Setup. GURL gurlNewTab("chrome://newtab/");
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb index f60f213..bcc58a7a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="as"> <translation id="102360288709523007">Googleলৈ ব্যৱহাৰৰ পৰিসংখ্যা আৰু ক্ৰেশ্ব ৰিপ’ৰ্ট পঠিয়াই Chromium ক অধিক উন্নত কৰাত সহায় কৰক।</translation> +<translation id="1130979953299110755">ছাইন আউট কৰাৰ ফলত আপোনাৰ বুকমাৰ্ক, ইতিহাস, পাছৱৰ্ড আৰু অন্য Chromium ডেটা আপোনাৰ Google একাউণ্টত আৰু ছিংক কৰা নহ’ব।</translation> <translation id="1185134272377778587">Chromiumৰ বিষয়ে</translation> <translation id="1257458525759135959">প্ৰতিচ্ছবিসমূহ ছেভ কৰিবলৈ Chromiumক আপোনাৰ ফট’সমূহত যোগ দিয়াৰ অনুমতি দিবলৈ ছেটিংসমূহত টিপক</translation> <translation id="1361748954329991663">Chromium পুৰণি হৈছে। <ph name="BEGIN_LINK" />App Store<ph name="END_LINK" />ত কোনো আপডে’ট নাথাকিলে এয়া সম্ভৱ যে আপোনাৰ ডিভাইচটোৱে Chromiumৰ নতুন সংস্কৰণসমূহ আৰু সমৰ্থন নকৰে।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb index 58663014..3d2239f0 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="de"> <translation id="102360288709523007">Nutzungsstatistiken und Absturzberichte zur Verbesserung von Chromium an Google senden.</translation> +<translation id="1130979953299110755">Wenn Sie sich abmelden, werden Ihre Lesezeichen, Ihr Verlauf, Ihre Passwörter und andere Chromium-Daten nicht mehr mit Ihrem Google-Konto synchronisiert.</translation> <translation id="1185134272377778587">Über Chromium</translation> <translation id="1257458525759135959">Um Bilder zu speichern, geben Sie Chromium unter "Einstellungen" die Berechtigung zum Hinzufügen von Fotos</translation> <translation id="1361748954329991663">Chromium ist veraltet. Wenn im <ph name="BEGIN_LINK" />App Store<ph name="END_LINK" /> kein Update verfügbar ist, unterstützt Ihr Gerät neuere Versionen von Chromium möglicherweise nicht mehr.</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 da6dcf2..ab43166 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fr"> <translation id="102360288709523007">Envoyez à Google des statistiques d'utilisation et des rapports d'erreur pour améliorer Chromium.</translation> +<translation id="1130979953299110755">Si vous vous déconnectez, vos favoris, votre historique, vos mots de passe et d'autres données Chromium ne seront plus synchronisés avec votre compte Google.</translation> <translation id="1185134272377778587">À propos de Chromium</translation> <translation id="1257458525759135959">Pour enregistrer une image, appuyez sur "Paramètres" afin que Chromium puisse l'ajouter à vos photos</translation> <translation id="1361748954329991663">Version de Chromium obsolète. Si aucune mise à jour n'est disponible sur l'<ph name="BEGIN_LINK" />App Store<ph name="END_LINK" />, votre appareil n'est peut-être plus compatible avec les nouvelles versions de Chromium.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb index 1a65dec..16a361f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="kk"> <translation id="102360288709523007">Пайдалану статистикасы мен жаңылыс туралы есептерді Google-ға жіберіп, Chromium қызметін жақсартыңыз.</translation> +<translation id="1130979953299110755">Есептік жазбадан шықсаңыз, бетбелгілер, тарих, құпия сөздер және басқа Chromium деректері бұдан кейін Google есептік жазбасымен синхрондалмайтын болады.</translation> <translation id="1185134272377778587">Chromium туралы ақпарат</translation> <translation id="1257458525759135959">Суреттерді сақтау үшін "Параметрлер" бөлімін түртіп, Chromium браузеріне суреттер қосуға рұқсат етіңіз.</translation> <translation id="1361748954329991663">Chromium ескірген. Егер <ph name="BEGIN_LINK" />App Store<ph name="END_LINK" /> дүкенінде жаңа нұсқа болмаса, құрылғыңыз Chromium-ның жаңа нұсқаларын бұдан былай қолдамайтын болуы мүмкін.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb index 24d1db50..f17f72b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ky.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ky"> <translation id="102360288709523007">Google'га колдонуу статистикасын жана ката жөнүндө кабарды жиберип туруу</translation> +<translation id="1130979953299110755">Аккаунттан чыксаңыз, кыстармаларыңыз, таржымалыңыз, сырсөздөрүңүз жана Chromium'дагы башка дайын-даректер мындан ары Google аккаунтуңузга шайкештирилбейт.</translation> <translation id="1185134272377778587">Chromium жөнүндө</translation> <translation id="1257458525759135959">Сүрөттөрдү сактоо үчүн, Жөндөөлөрдү таптап, Chromium'га сүрөттөрүңүздү кошууга уруксат бериңиз.</translation> <translation id="1361748954329991663">Chromium эскирип калган. Эгер <ph name="BEGIN_LINK" />Колдонмолор дүкөнүндө<ph name="END_LINK" /> жаңыртуу болбосо, түзмөгүңүз Chromium'дун жаңы версияларын мындан ары колдоого албай калышы мүмкүн.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb index 3c78c8c..c48465c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ml"> <translation id="102360288709523007">Google-ന് ഉപയോഗ വിവരക്കണക്കും ക്രാഷ് റിപ്പോർട്ടുകളും അയച്ച് Chromium മികച്ചതാക്കാൻ സഹായിക്കുക.</translation> +<translation id="1130979953299110755">സൈൻ ഔട്ട് ചെയ്താൽ, നിങ്ങളുടെ ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ, മറ്റ് Chromium ഡാറ്റ എന്നിവ ഇനി Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കില്ല.</translation> <translation id="1185134272377778587">Chromium-ത്തിനെക്കുറിച്ച്</translation> <translation id="1257458525759135959">ചിത്രങ്ങൾ സംരക്ഷിക്കാൻ, ക്രമീകരണത്തിൽ ടാപ്പ് ചെയ്ത് അവ നിങ്ങളുടെ ഫോട്ടോകളിലേക്ക് ചേർക്കാൻ Chromium-നെ അനുവദിക്കുക</translation> <translation id="1361748954329991663">Chromium കാലഹരണപ്പെട്ടു. <ph name="BEGIN_LINK" />ആപ്പ് സ്റ്റോറിൽ<ph name="END_LINK" /> അപ്ഡേറ്റ് ലഭ്യമല്ലെങ്കിൽ, നിങ്ങളുടെ ഉപകരണം ഇനി 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 4d7b86a4..f8567de 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ne"> <translation id="102360288709523007">Google मा प्रयोग सम्बन्धी तथ्याङ्क र क्रयास रिपोर्टहरू पठाएर Chromium लाई राम्रो बनाउन सहयोग गर्नुहोस्।</translation> +<translation id="1130979953299110755">तपाईंले साइन आउट गर्नुभयो भने तपाईंका बुकमार्क, इतिहास, पासवर्ड र Chromium मा भएका अन्य डेटा तपाईंको Google खातामा सिंक हुने छैनन्।</translation> <translation id="1185134272377778587">Chromium का बारेमा</translation> <translation id="1257458525759135959">फोटोहरू सुरक्षित गर्न सेटिङमा ट्याप गर्नुहोस् र Chromium लाई आफ्ना फोटोहरूको फोल्डरमा फोटो हाल्न दिनुहोस्</translation> <translation id="1361748954329991663">Chromium पुरानो भइसकेको छ। <ph name="BEGIN_LINK" />एप स्टोर<ph name="END_LINK" />मा कुनै पनि अपडेट उपलब्ध छैन भने तपाईंको यन्त्रमा अब उप्रान्त Chromium का नयाँ संस्करण प्रयोग गर्न नमिल्न सक्छ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb index 1ef4688c..ff851e2 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pa"> <translation id="102360288709523007">Google ਨੂੰ ਵਰਤੋਂ ਅੰਕੜੇ ਅਤੇ ਕ੍ਰੈਸ਼ ਰਿਪੋਰਟਾਂ ਭੇਜ ਕੇ Chromium ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰੋ।</translation> +<translation id="1130979953299110755">ਸਾਈਨ-ਆਊਟ ਕਰਨ ਨਾਲ, ਤੁਹਾਡੇ ਬੁੱਕਮਾਰਕਾਂ, ਇਤਿਹਾਸ, ਪਾਸਵਰਡਾਂ ਅਤੇ ਹੋਰ Chromium ਡਾਟੇ ਦਾ ਹੁਣ ਤੁਹਾਡੇ Google ਖਾਤੇ ਨਾਲ ਸਮਕਾਲੀਕਰਨ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> <translation id="1185134272377778587">Chromium ਬਾਰੇ</translation> <translation id="1257458525759135959">ਚਿੱਤਰਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨ ਲਈ, Chromium ਨੂੰ ਤੁਹਾਡੀਆਂ ਫ਼ੋਟੋਆਂ ਸ਼ਾਮਲ ਕਰਨ ਦੇਣ ਲਈ ਸੈਟਿੰਗਾਂ 'ਤੇ ਟੈਪ ਕਰੋ</translation> <translation id="1361748954329991663">Chromium ਦਾ ਇਹ ਵਰਜਨ ਪੁਰਾਣਾ ਹੈ। ਜੇ <ph name="BEGIN_LINK" />ਐਪ ਸਟੋਰ<ph name="END_LINK" /> ਵਿੱਚ ਕੋਈ ਅੱਪਡੇਟ ਉਪਲਬਧ ਨਹੀਂ ਹੈ, ਤਾਂ ਇਹ ਸੰਭਵ ਹੈ ਕਿ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਹੁਣ Chromium ਦੇ ਨਵੇਂ ਵਰਜਨਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ ਹੈ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb index 0a2f0355b..697f25b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ta"> <translation id="102360288709523007">உபயோகப் புள்ளிவிவரங்களையும் சிதைவு அறிக்கைகளையும் Googleளுக்கு அனுப்பி, Chromiumஐ இன்னும் சிறப்பானதாக்க உதவவும்.</translation> +<translation id="1130979953299110755">வெளியேறினால் புக்மார்க்குகள், வரலாறு, கடவுச்சொற்கள், பிற Chromium தரவு ஆகியவை இனி உங்கள் Google கணக்குடன் ஒத்திசைக்கப்படாது.</translation> <translation id="1185134272377778587">Chromium அறிமுகம்</translation> <translation id="1257458525759135959">படங்களைச் சேமிக்க, அமைப்புகள் என்பதைத் தட்டி அவற்றை உங்கள் படங்களில் சேர்க்க Chromiumமை அனுமதிக்கவும்</translation> <translation id="1361748954329991663">Chromium உலாவி காலாவதியாகிவிட்டது. <ph name="BEGIN_LINK" />App Store<ph name="END_LINK" />ரில் புதுப்பிப்பு எதுவும் இல்லையெனில் உங்கள் சாதனம் 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 6f8e3423..f1cd8056 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="te"> <translation id="102360288709523007">Googleకు వినియోగ గణాంకాలు, క్రాష్ నివేదికలు పంపి Chromiumను మెరుగుపరచడంలో సహాయపడండి.</translation> +<translation id="1130979953299110755">సైన్ అవుట్ చేయడం ద్వారా, మీ బుక్మార్క్లు, హిస్టరీ, పాస్వర్డ్లు, ఇతర Chromium డేటా ఇకపై మీ Google ఖాతాకు సింక్ చేయబడదు.</translation> <translation id="1185134272377778587">Chromium గురించి</translation> <translation id="1257458525759135959">ఇమేజ్లను సేవ్ చేయడానికి, మీ ఫోటోలకు యాడ్ చేయడం కోసం Chromiumను అనుమతించడానికి సెట్టింగ్లపై ట్యాప్ చేయండి</translation> <translation id="1361748954329991663">Chromium వెర్షన్ కాలం చెల్లింది. <ph name="BEGIN_LINK" />యాప్ స్టోర్<ph name="END_LINK" />లో ఎలాంటి అప్డేట్ అందుబాటులో లేకపోతే, మీ పరికరం ఇకపై కొత్త Chromium వెర్షన్లను సపోర్ట్ చేయకపోవచ్చు.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb index de50d4aa..0a25565 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ur"> <translation id="102360288709523007">Google کو استعمال کے اعداد و شمار اور کریش رپورٹس بھیج کر Chromium کو بہتر بنانے میں مدد کریں۔</translation> +<translation id="1130979953299110755">سائن آؤٹ کرنے پر، آپ کے بُک مارکس، سرگزشت، پاس ورڈز اور Chromium کے دیگر ڈیٹا کی اب آپ کے Google اکاؤنٹ کے ساتھ مطابقت پذیری نہیں کی جائے گی۔</translation> <translation id="1185134272377778587">Chromium کے بارے میں</translation> <translation id="1257458525759135959">تصاویر محفوظ کرنے کے لیے، Chromium کو آپ کی تصاویر میں شامل کرنے دینے کے لیے ترتیبات پر تھپتھپائیں</translation> <translation id="1361748954329991663">Chromium پرانا ہے۔ اگر کوئی اپ ڈیٹ <ph name="BEGIN_LINK" />App اسٹور<ph name="END_LINK" /> میں دستیاب نہیں ہے تو یہ ممکن ہے کہ آپ کا آلہ مزید Chromium کے نئے ورژنز کو سپورٹ نہیں کرتا ہے۔</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index b1a180a..2a58a2c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -605,6 +605,7 @@ <translation id="7203585745079012652">সঁহাৰিটো কৈ দিয়ক</translation> <translation id="7207383424303353046">নতুন: Chromeক আপোনাৰ ডিফ’ল্ট ব্ৰাউজাৰ এপ্ বনাই ছাইটসমূহ স্বয়ংক্ৰিয়ভাৱে তাত খোলক। <ph name="BEGIN_LINK" />ছেটিংসমূহ খোলক<ph name="END_LINK" /></translation> <translation id="721597782417389033">কার্ডৰ উপনাম অমান্য</translation> +<translation id="722989956228261714">ছাইন আউট কৰক…</translation> <translation id="7265758999917665941">এই ছাইটটোৰ বাবে কেতিয়াও নহয়</translation> <translation id="7272437679830969316">আপোনাৰ পৰিচয় সত্যাপন কৰিব পৰা নগ’ল। পাছৱৰ্ড প্ৰতিলিপি কৰা নহ’ল।</translation> <translation id="7291368939935408496">পাছৱর্ড সাজু কৰি থকা হৈছে...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 24af50d..a7edd588 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">Gesprochene Antworten</translation> <translation id="7207383424303353046">Neu: Websites werden automatisch in Chrome geöffnet, wenn Sie es als Standard-Browser-App festlegen. <ph name="BEGIN_LINK" />Zu den Einstellungen<ph name="END_LINK" /></translation> <translation id="721597782417389033">Ungültiger Kartenalias</translation> +<translation id="722989956228261714">Abmelden…</translation> <translation id="7265758999917665941">Für diese Website niemals</translation> <translation id="7272437679830969316">Ihre Identität konnte nicht bestätigt werden. Das Passwort wurde nicht kopiert.</translation> <translation id="7291368939935408496">Passwörter werden zum Exportieren vorbereitet…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 097666ad..7bb0d86 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">Énoncer les réponses</translation> <translation id="7207383424303353046">Nouveau : Ouvrez automatiquement les sites dans Chrome en le définissant comme appli de navigation par défaut. <ph name="BEGIN_LINK" />Accéder aux paramètres<ph name="END_LINK" /></translation> <translation id="721597782417389033">Pseudo incorrect associé à la carte</translation> +<translation id="722989956228261714">Se déconnecter</translation> <translation id="7265758999917665941">Jamais pour ce site</translation> <translation id="7272437679830969316">Impossible de confirmer votre identité. Mot de passe non copié.</translation> <translation id="7291368939935408496">Préparation des mots de passe…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index d5b58b8d..f5cb96e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">Жауаптарды дыбыстау</translation> <translation id="7207383424303353046">Жаңалық: Chrome қолданбасын әдепкі браузер етіп қойсаңыз, сайттар автоматты түрде сол браузерде ашылады. <ph name="BEGIN_LINK" />Параметрлерді ашу<ph name="END_LINK" /></translation> <translation id="721597782417389033">Картаның лақап аты жарамсыз</translation> +<translation id="722989956228261714">Шығу…</translation> <translation id="7265758999917665941">Бұл сайт үшін ешқашан</translation> <translation id="7272437679830969316">Жеке басыңыз расталмады. Құпия сөз көшірілмеді.</translation> <translation id="7291368939935408496">Құпия сөздер дайындалуда...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ky.xtb b/ios/chrome/app/strings/resources/ios_strings_ky.xtb index 9f141bad..ef113bbe 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ky.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ky.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">Жоопторду айтуу</translation> <translation id="7207383424303353046">Жаңы: Chrome'ду демейки серепчиңиз кылып алып, андагы сайттарды автоматтык түрдө ачыңыз. <ph name="BEGIN_LINK" />Жөндөөлөрдү ачуу<ph name="END_LINK" /></translation> <translation id="721597782417389033">Картанын ылакап аты туура эмес</translation> +<translation id="722989956228261714">Чыгуу…</translation> <translation id="7265758999917665941">Бул сайт үчүн эч качан</translation> <translation id="7272437679830969316">Аныктыгыңыз тастыкталган жок. Сырсөз көчүрүлгөн жок.</translation> <translation id="7291368939935408496">Сырсөздөр даярдалууда…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 482519dc..5ee7bb27 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">മറുപടിയായി ഉത്തരങ്ങൾ പറയുക</translation> <translation id="7207383424303353046">പുതിയത്: Chrome നിങ്ങളുടെ ഡിഫോൾഡ് ബ്രൗസർ ആപ്പ് ആയി സജ്ജീകരിച്ച് അതിൽ സൈറ്റുകൾ സ്വയമേവ തുറക്കൂ. <ph name="BEGIN_LINK" />ക്രമീകരണം തുറക്കുക<ph name="END_LINK" /></translation> <translation id="721597782417389033">കാർഡിന്റെ വിളിപ്പേര് അസാധുവാണ്</translation> +<translation id="722989956228261714">സൈൻ ഔട്ട് ചെയ്യുക…</translation> <translation id="7265758999917665941">ഈ സൈറ്റിൻ്റെ പാസ്വേഡ് ഓർക്കേണ്ടതില്ല</translation> <translation id="7272437679830969316">നിങ്ങളുടെ ഐഡന്റിറ്റി പരിശോധിച്ചുറപ്പിക്കാനാകില്ല. പാസ്വേഡ് പകർത്തിയില്ല.</translation> <translation id="7291368939935408496">പാസ്വേഡുകൾ തയ്യാറാക്കുന്നു...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 6eb0421..dd00a78 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">जवाफहरू पुन: भन्नुहोस्</translation> <translation id="7207383424303353046">नयाँ: Chrome लाई आफ्नो पूर्वनिर्धारित ब्राउजर एप बनाएर साइटहरू स्वतः Chrome मा खोल्नुहोस्। <ph name="BEGIN_LINK" />सेटिङ खोल्नुहोस्<ph name="END_LINK" /></translation> <translation id="721597782417389033">कार्डको उपनाम अवैध छ</translation> +<translation id="722989956228261714">साइन आउट गर्नुहोस्…</translation> <translation id="7265758999917665941">यो साइटका हकमा कहिल्यै पनि नसम्झनुहोस्</translation> <translation id="7272437679830969316">तपाईंको पहिचान पुष्टि गर्न सकिएन। पासवर्डको प्रतिलिपि गरिएको छैन।</translation> <translation id="7291368939935408496">पासवर्डहरू निर्यात गर्ने तयारी गरिँदै…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index baecc232..1c94807 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -604,6 +604,7 @@ <translation id="7203585745079012652">ਜਵਾਬ ਦੁਬਾਰਾ ਬੋਲੋ</translation> <translation id="7207383424303353046">ਨਵਾਂ: Chrome ਨੂੰ ਆਪਣੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਐਪ ਬਣਾ ਕੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਇਸ ਵਿੱਚ ਸਾਈਟਾਂ ਖੋਲ੍ਹੋ। <ph name="BEGIN_LINK" />ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ<ph name="END_LINK" /></translation> <translation id="721597782417389033">ਕਾਰਡ ਦਾ ਉਪਨਾਮ ਅਵੈਧ ਹੈ</translation> +<translation id="722989956228261714">ਸਾਈਨ-ਆਊਟ ਕਰੋ…</translation> <translation id="7265758999917665941">ਇਸ ਸਾਈਟ ਲਈ ਕਦੇ ਵੀ ਨਹੀਂ</translation> <translation id="7272437679830969316">ਤੁਹਾਡੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਪਾਸਵਰਡ ਕਾਪੀ ਨਹੀਂ ਕੀਤਾ ਗਿਆ।</translation> <translation id="7291368939935408496">ਪਾਸਵਰਡ ਤਿਆਰ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index df30c4da..2e508f4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">பதில்களை மீண்டும் படி</translation> <translation id="7207383424303353046">புதிது: Chromeமை உங்கள் இயல்பு உலாவி ஆப்ஸாக அமைப்பதன் மூலம் தளங்கள் தானாகவே அதில் திறக்கப்படும். <ph name="BEGIN_LINK" />அமைப்புகளைத் திற<ph name="END_LINK" /></translation> <translation id="721597782417389033">கார்டின் புனைப்பெயர் தவறானது</translation> +<translation id="722989956228261714">வெளியேறு…</translation> <translation id="7265758999917665941">இந்தத் தளத்திற்கு எப்போதும் வேண்டாம்</translation> <translation id="7272437679830969316">அடையாளத்தைச் சரிபார்க்க முடியவில்லை. கடவுச்சொல் நகலெடுக்கப்படவில்லை.</translation> <translation id="7291368939935408496">கடவுச்சொற்கள் தயாராகின்றன...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index ae29e75..181e1cc 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">సమాధానాలను చదివి వినిపించు</translation> <translation id="7207383424303353046">కొత్తది: Chromeను మీ ఆటోమేటిక్ బ్రౌజర్ యాప్గా చేయడం ద్వారా, దానిలో సైట్లను ఆటోమేటిక్గా తెరవండి. <ph name="BEGIN_LINK" />సెట్టింగ్లను తెరవండి<ph name="END_LINK" /></translation> <translation id="721597782417389033">కార్డ్ మారుపేరు చెల్లదు</translation> +<translation id="722989956228261714">సైన్ అవుట్ చేయి…</translation> <translation id="7265758999917665941">ఈ సైట్ కోసం ఎప్పటికీ వద్దు</translation> <translation id="7272437679830969316">మీ గుర్తింపును ధృవీకరించడం సాధ్యపడలేదు. పాస్వర్డ్ కాపీ చేయబడలేదు.</translation> <translation id="7291368939935408496">పాస్వర్డ్లను సిద్ధం చేస్తోంది...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index db8cd9f..ccfbea8b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -606,6 +606,7 @@ <translation id="7203585745079012652">جوابات دوبارہ بولیں</translation> <translation id="7207383424303353046">نیا: Chrome کو اپنی ڈیفالٹ براؤزر ایپ بنا کر سائٹس کو اس میں خودکار طور پر کھولیں۔ <ph name="BEGIN_LINK" />ترتیبات کھولیں<ph name="END_LINK" /></translation> <translation id="721597782417389033">کارڈ کا غلط عرفی نام</translation> +<translation id="722989956228261714">سائن آؤٹ کریں…</translation> <translation id="7265758999917665941">اس سائٹ کیلئے کبھی نہیں</translation> <translation id="7272437679830969316">آپ کی شناخت کی توثیق نہیں کی جا سکتی۔ پاس ورڈ کاپی نہیں ہوا۔</translation> <translation id="7291368939935408496">پاسورڈز تیار کیے جا رہے ہيں...</translation>
diff --git a/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm b/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm index 04dae43..a52cd4c 100644 --- a/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm +++ b/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm
@@ -196,7 +196,15 @@ }; // Tests that a valid URL launches app. -TEST_F(AppLauncherTabHelperTest, AbuseDetectorPolicyAllowedForValidUrl) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_AbuseDetectorPolicyAllowedForValidUrl \ + AbuseDetectorPolicyAllowedForValidUrl +#else +#define MAYBE_AbuseDetectorPolicyAllowedForValidUrl \ + DISABLED_AbuseDetectorPolicyAllowedForValidUrl +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_AbuseDetectorPolicyAllowedForValidUrl) { abuse_detector_.policy = ExternalAppLaunchPolicyAllow; EXPECT_FALSE(TestShouldAllowRequest(@"valid://1234", /*target_frame_is_main=*/true, @@ -219,7 +227,13 @@ // Tests that a valid URL shows an alert and launches app when launch policy is // to prompt and user accepts. -TEST_F(AppLauncherTabHelperTest, ValidUrlPromptUserAccepts) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ValidUrlPromptUserAccepts ValidUrlPromptUserAccepts +#else +#define MAYBE_ValidUrlPromptUserAccepts DISABLED_ValidUrlPromptUserAccepts +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_ValidUrlPromptUserAccepts) { abuse_detector_.policy = ExternalAppLaunchPolicyPrompt; delegate_.set_should_accept_prompt(true); EXPECT_FALSE(TestShouldAllowRequest(@"valid://1234", @@ -245,7 +259,13 @@ // Tests that ShouldAllowRequest only launches apps for App Urls in main frame, // or iframe when there was a recent user interaction. -TEST_F(AppLauncherTabHelperTest, ShouldAllowRequestWithAppUrl) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ShouldAllowRequestWithAppUrl ShouldAllowRequestWithAppUrl +#else +#define MAYBE_ShouldAllowRequestWithAppUrl DISABLED_ShouldAllowRequestWithAppUrl +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_ShouldAllowRequestWithAppUrl) { NSString* url_string = @"itms-apps://itunes.apple.com/us/app/appname/id123"; EXPECT_FALSE(TestShouldAllowRequest(url_string, /*target_frame_is_main=*/true, /*target_frame_is_cross_origin=*/false, @@ -311,7 +331,13 @@ // Tests that when the last committed URL is invalid, the URL is only opened // when the last committed item is nil. -TEST_F(AppLauncherTabHelperTest, ValidUrlInvalidCommittedURL) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ValidUrlInvalidCommittedURL ValidUrlInvalidCommittedURL +#else +#define MAYBE_ValidUrlInvalidCommittedURL DISABLED_ValidUrlInvalidCommittedURL +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_ValidUrlInvalidCommittedURL) { NSString* url_string = @"itms-apps://itunes.apple.com/us/app/appname/id123"; web_state_.SetCurrentURL(GURL()); @@ -344,7 +370,13 @@ // Tests that tel: URLs are blocked when the target frame is cross-origin // with respect to the source origin. -TEST_F(AppLauncherTabHelperTest, TelUrls) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_TelUrls TelUrls +#else +#define MAYBE_TelUrls DISABLED_TelUrls +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_TelUrls) { EXPECT_FALSE(TestShouldAllowRequest(@"tel:+12345551212", /*target_frame_is_main=*/true, /*target_frame_is_cross_origin=*/true, @@ -374,7 +406,13 @@ // This test is using https://chromeiostesting-dot-u2fdemo.appspot.com URL which // is a URL allowed for the purpose of testing, but the test doesn't send any // requests to the server. -TEST_F(AppLauncherTabHelperTest, U2FUrls) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_U2FUrls U2FUrls +#else +#define MAYBE_U2FUrls DISABLED_U2FUrls +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_U2FUrls) { // Add required tab helpers for the U2F check. TabIdTabHelper::CreateForWebState(&web_state_); std::unique_ptr<web::NavigationItem> item = web::NavigationItem::Create(); @@ -412,7 +450,13 @@ } // Tests that URLs with Chrome Bundle schemes are blocked on iframes. -TEST_F(AppLauncherTabHelperTest, ChromeBundleUrlScheme) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ChromeBundleUrlScheme ChromeBundleUrlScheme +#else +#define MAYBE_ChromeBundleUrlScheme DISABLED_ChromeBundleUrlScheme +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_ChromeBundleUrlScheme) { // Get the test bundle URL Scheme. NSString* scheme = [[ChromeAppConstants sharedInstance] bundleURLScheme]; NSString* url = [NSString stringWithFormat:@"%@://www.google.com", scheme]; @@ -439,7 +483,13 @@ // Tests that ShouldAllowRequest updates the reading list correctly for non-link // transitions regardless of the app launching success when AppLauncherRefresh // flag is enabled. -TEST_F(AppLauncherTabHelperTest, UpdatingTheReadingList) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_UpdatingTheReadingList UpdatingTheReadingList +#else +#define MAYBE_UpdatingTheReadingList DISABLED_UpdatingTheReadingList +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_UpdatingTheReadingList) { // Update reading list if the transition is not a link transition. EXPECT_TRUE(TestReadingListUpdate(/*is_app_blocked=*/true, /*is_link_transition*/ false, @@ -465,7 +515,14 @@ // Tests that launching a SMS URL via a JavaScript redirect in the main frame // is allowed. Covers the scenario for crbug.com/1058388 -TEST_F(AppLauncherTabHelperTest, LaunchSmsApp_JavaScriptRedirect) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_LaunchSmsApp_JavaScriptRedirect LaunchSmsApp_JavaScriptRedirect +#else +#define MAYBE_LaunchSmsApp_JavaScriptRedirect \ + DISABLED_LaunchSmsApp_JavaScriptRedirect +#endif +TEST_F(AppLauncherTabHelperTest, MAYBE_LaunchSmsApp_JavaScriptRedirect) { NSString* sms_url_string = @"sms:?&body=Hello%20World"; ui::PageTransition page_transition = ui::PageTransitionFromInt( ui::PageTransition::PAGE_TRANSITION_LINK | @@ -538,7 +595,13 @@ // Tests that URLs to non-blocked domains are able to open native apps when // policy is blocking other domains. -TEST_F(BlockedUrlPolicyAppLauncherTabHelperTest, AllowedUrl) { +// TODO(crbug.com/1172516): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_AllowedUrl AllowedUrl +#else +#define MAYBE_AllowedUrl DISABLED_AllowedUrl +#endif +TEST_F(BlockedUrlPolicyAppLauncherTabHelperTest, MAYBE_AllowedUrl) { base::test::ScopedFeatureList scoped_features; scoped_features.InitWithFeatures( /*enabled_features=*/{kURLBlocklistIOS,
diff --git a/ios/chrome/browser/tabs/tab_model_unittest.mm b/ios/chrome/browser/tabs/tab_model_unittest.mm index 2c5d59208..f9b5d59 100644 --- a/ios/chrome/browser/tabs/tab_model_unittest.mm +++ b/ios/chrome/browser/tabs/tab_model_unittest.mm
@@ -121,7 +121,8 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/web_state_list_->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); EXPECT_EQ(web_state_list_->count(), 1); EXPECT_EQ(new_web_state, web_state_list_->GetWebStateAt(0));
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm index da62fb45..445b176 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm +++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
@@ -39,7 +39,10 @@ [SigninEarlGrey addFakeIdentity:fakeIdentity]; [ChromeEarlGreyUI openSettingsMenu]; [ChromeEarlGreyUI - tapSettingsMenuButton:chrome_test_util::SecondarySignInButton()]; + tapSettingsMenuButton:chrome_test_util::PrimarySignInButton()]; + [[EarlGrey selectElementWithMatcher:grey_accessibilityID( + kIdentityPickerViewIdentifier)] + performAction:grey_tap()]; [self selectIdentityWithEmail:fakeIdentity.userEmail]; [self tapSigninConfirmationDialog]; if ([fakeIdentity.userEmail hasSuffix:ios::kManagedIdentityEmailSuffix]) {
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm index 5b0a1aa..6b0309b 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm +++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
@@ -6,11 +6,13 @@ #include <memory> +#include "base/feature_list.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" #include "base/strings/sys_string_conversions.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/base/account_consistency_method.h" #include "components/signin/public/base/signin_metrics.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_browser_provider_observer_bridge.h" @@ -435,10 +437,8 @@ BOOL hasCloseButton = AlreadySeenSigninViewPreferenceKey(self.accessPoint) != nullptr; if (_defaultIdentity) { - AuthenticationService* authService = - AuthenticationServiceFactory::GetForBrowserState(_browserState); SigninPromoViewMode viewMode = - authService->IsAuthenticated() + base::FeatureList::IsEnabled(signin::kMobileIdentityConsistency) ? SigninPromoViewModeSyncWithPrimaryAccount : SigninPromoViewModeSigninWithAccount; return [[SigninPromoViewConfigurator alloc]
diff --git a/ios/chrome/browser/ui/bookmarks/BUILD.gn b/ios/chrome/browser/ui/bookmarks/BUILD.gn index 8583bb2..7ea87f8 100644 --- a/ios/chrome/browser/ui/bookmarks/BUILD.gn +++ b/ios/chrome/browser/ui/bookmarks/BUILD.gn
@@ -56,6 +56,7 @@ "//ios/chrome/browser/main:public", "//ios/chrome/browser/metrics:metrics_internal", "//ios/chrome/browser/policy:feature_flags", + "//ios/chrome/browser/policy:policy_util", "//ios/chrome/browser/signin", "//ios/chrome/browser/sync", "//ios/chrome/browser/tabs",
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm index 0f9695c..91526121 100644 --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -26,6 +26,7 @@ #import "ios/chrome/browser/main/browser.h" #import "ios/chrome/browser/metrics/new_tab_page_uma.h" #include "ios/chrome/browser/policy/policy_features.h" +#import "ios/chrome/browser/policy/policy_util.h" #import "ios/chrome/browser/ui/activity_services/activity_params.h" #import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h" #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h" @@ -1455,6 +1456,16 @@ [self.sharingCoordinator start]; } +// Returns whether the incognito mode is forced. +- (BOOL)isIncognitoForced { + return IsIncognitoModeForced(self.browser->GetBrowserState()->GetPrefs()); +} + +// Returns whether the incognito mode is available. +- (BOOL)isIncognitoAvailable { + return !IsIncognitoModeDisabled(self.browser->GetBrowserState()->GetPrefs()); +} + #pragma mark - Loading and Empty States // Shows loading spinner background view. @@ -1782,7 +1793,8 @@ inIncognito:NO newTab:NO]; } - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDefault + enabled:![self isIncognitoForced]]; titleString = GetNSString(IDS_IOS_BOOKMARK_CONTEXT_MENU_OPEN_INCOGNITO); [coordinator addItemWithTitle:titleString @@ -1795,7 +1807,8 @@ inIncognito:YES newTab:NO]; } - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDefault + enabled:[self isIncognitoAvailable]]; std::set<int64_t> nodeIds; for (const BookmarkNode* node : nodes) { @@ -1855,7 +1868,8 @@ inIncognito:NO newTab:YES]; } - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDefault + enabled:![self isIncognitoForced]]; if (base::ios::IsMultipleScenesSupported()) { titleString = GetNSString(IDS_IOS_CONTENT_CONTEXT_OPENINNEWWINDOW); @@ -1868,7 +1882,8 @@ }; [coordinator addItemWithTitle:titleString action:action - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDefault + enabled:![self isIncognitoForced]]; } titleString = GetNSString(IDS_IOS_CONTENT_CONTEXT_OPENLINKNEWINCOGNITOTAB); @@ -1878,7 +1893,8 @@ inIncognito:YES newTab:YES]; } - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDefault + enabled:[self isIncognitoAvailable]]; titleString = GetNSString(IDS_IOS_CONTENT_CONTEXT_COPY); [coordinator @@ -2336,23 +2352,31 @@ NSMutableArray<UIMenuElement*>* menuElements = [[NSMutableArray alloc] init]; - [menuElements addObject:[actionFactory actionToOpenInNewTabWithBlock:^{ - [weakSelf openAllURLs:{nodeURL} - inIncognito:NO - newTab:YES]; - }]]; + UIAction* openAction = [actionFactory actionToOpenInNewTabWithBlock:^{ + [weakSelf openAllURLs:{nodeURL} inIncognito:NO newTab:YES]; + }]; + if ([self isIncognitoForced]) { + openAction.attributes = UIMenuElementAttributesDisabled; + } + [menuElements addObject:openAction]; - [menuElements - addObject:[actionFactory actionToOpenInNewIncognitoTabWithBlock:^{ + UIAction* openInIncognito = + [actionFactory actionToOpenInNewIncognitoTabWithBlock:^{ [weakSelf openAllURLs:{nodeURL} inIncognito:YES newTab:YES]; - }]]; + }]; + if (![self isIncognitoAvailable]) { + openInIncognito.attributes = UIMenuElementAttributesDisabled; + } + [menuElements addObject:openInIncognito]; if (base::ios::IsMultipleScenesSupported()) { - [menuElements - addObject:[actionFactory - actionToOpenInNewWindowWithURL:nodeURL - activityOrigin: - WindowActivityBookmarksOrigin]]; + UIAction* openInWindow = [actionFactory + actionToOpenInNewWindowWithURL:nodeURL + activityOrigin:WindowActivityBookmarksOrigin]; + if ([self isIncognitoForced]) { + openInWindow.attributes = UIMenuElementAttributesDisabled; + } + [menuElements addObject:openInWindow]; } [menuElements addObject:[actionFactory actionToCopyURL:nodeURL]];
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h index 7cd27562..7147e17 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -89,7 +89,8 @@ // Opens a new tab as if originating from |originPoint| and |focusOmnibox|. - (void)openNewTabFromOriginPoint:(CGPoint)originPoint - focusOmnibox:(BOOL)focusOmnibox; + focusOmnibox:(BOOL)focusOmnibox + inheritOpener:(BOOL)inheritOpener; // Adds |tabAddedCompletion| to the completion block (if any) that will be run // the next time a tab is added to the TabModel this object was initialized
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index a6e815b..beafcb56 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -1060,7 +1060,8 @@ } - (void)openNewTabFromOriginPoint:(CGPoint)originPoint - focusOmnibox:(BOOL)focusOmnibox { + focusOmnibox:(BOOL)focusOmnibox + inheritOpener:(BOOL)inheritOpener { NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate]; BOOL offTheRecord = self.isOffTheRecord; ProceduralBlock oldForegroundTabWasAddedCompletionBlock = @@ -1104,6 +1105,7 @@ UrlLoadParams params = UrlLoadParams::InNewTab(GURL(kChromeUINewTabURL)); params.web_params.transition_type = ui::PAGE_TRANSITION_TYPED; params.in_incognito = self.isOffTheRecord; + params.inherit_opener = inheritOpener; UrlLoadingBrowserAgent::FromBrowser(self.browser)->Load(params); } @@ -1465,7 +1467,7 @@ // When using the thumb strip, the web content needs to be hidden when the // thumb strip is opened. - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { self.browserViewHiderCoordinator = [[BrowserViewHiderCoordinator alloc] initWithBaseViewController:self browser:self.browser]; @@ -1705,7 +1707,7 @@ } }]; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { CGFloat baseViewHeight = size.height; self.thumbStripPanHandler.baseViewHeight = baseViewHeight; // On rotation, reposition the BVC container if positioned at the bottom. @@ -1913,7 +1915,7 @@ } - (void)installFakeStatusBar { - if (IsThumbStripEnabled() && + if (ShowThumbStripInTraitCollection(self.traitCollection) && !fullscreen::features::ShouldUseSmoothScrolling()) { // A fake status bar on the browser view is not necessary when the thumb // strip feature is enabled because the view behind the browser view already @@ -2893,7 +2895,8 @@ #pragma mark - ViewRevealingAnimatee -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { // Disable fullscreen if the thumb strip is about to be shown. if (currentViewRevealState == ViewRevealState::Hidden && !_fullscreenDisabler) { @@ -2961,6 +2964,9 @@ self.fullscreenController->FreezeToolbarHeight(true); } } + if (nextViewRevealState == ViewRevealState::Revealed) { + [self.view endEditing:YES]; + } } - (void)animateViewReveal:(ViewRevealState)nextViewRevealState { @@ -3289,7 +3295,8 @@ case WindowOpenDisposition::NEW_BACKGROUND_TAB: { return insertionAgent->InsertWebState( loadParams, webState, false, TabInsertion::kPositionAutomatically, - (params.disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB)); + (params.disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB), + /*inherit_opener=*/false); } case WindowOpenDisposition::CURRENT_TAB: { webState->GetNavigationManager()->LoadURLWithParams(loadParams); @@ -3298,7 +3305,7 @@ case WindowOpenDisposition::NEW_POPUP: { return insertionAgent->InsertWebState( loadParams, webState, true, TabInsertion::kPositionAutomatically, - false); + /*in_background=*/false, /*inherit_opener=*/false); } default: NOTIMPLEMENTED(); @@ -4400,8 +4407,9 @@ loadParams.transition_type = ui::PAGE_TRANSITION_LINK; TabInsertionBrowserAgent* insertionAgent = TabInsertionBrowserAgent::FromBrowser(self.browser); - insertionAgent->InsertWebState(loadParams, webState, true, - TabInsertion::kPositionAutomatically, false); + insertionAgent->InsertWebState( + loadParams, webState, true, TabInsertion::kPositionAutomatically, + /*in_background=*/false, /*inherit_opener=*/false); }; [self.currentWebState->GetJSInjectionReceiver() executeJavaScript:script @@ -5021,7 +5029,8 @@ insertionAgent->InsertWebState( web_navigation_util::CreateWebLoadParams( landingURL, ui::PAGE_TRANSITION_TYPED, nullptr), - nil, false, self.browser->GetWebStateList()->count(), false); + nil, false, self.browser->GetWebStateList()->count(), + /*in_background=*/false, /*inherit_opener=*/false); } #pragma mark - PageInfoPresentation
diff --git a/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm b/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm index 5f2107d..68d1c60 100644 --- a/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/hider/browser_view_hider_view_controller.mm
@@ -89,7 +89,8 @@ #pragma mark - viewRevealingAnimatee -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { self.view.alpha = currentViewRevealState == ViewRevealState::Revealed ? 1 : 0; self.view.hidden = NO; }
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index 67e6279..80f3798 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -61,6 +61,7 @@ "//ios/chrome/browser/ntp", "//ios/chrome/browser/ntp_snippets", "//ios/chrome/browser/ntp_tiles", + "//ios/chrome/browser/policy:policy_util", "//ios/chrome/browser/reading_list", "//ios/chrome/browser/search_engines", "//ios/chrome/browser/signin",
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h index 84d97ad..8dfe8b6 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h
@@ -32,6 +32,8 @@ // Command handler for the accessibility custom actions. @property(nonatomic, weak, nullable) id<ContentSuggestionsGestureCommands> commandHandler; +// Whether the incognito action should be available. +@property(nonatomic, assign) BOOL incognitoAvailable; @end
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.mm index 90cba46..e655cca 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.mm +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.mm
@@ -71,11 +71,12 @@ target:self selector:@selector(removeMostVisited)]; - NSArray* customActions = - [NSArray arrayWithObjects:openInNewTab, openInNewIncognitoTab, - removeMostVisited, nil]; - - return customActions; + if (self.incognitoAvailable) { + return [NSArray arrayWithObjects:openInNewTab, openInNewIncognitoTab, + removeMostVisited, nil]; + } else { + return [NSArray arrayWithObjects:openInNewTab, removeMostVisited, nil]; + } } // Target for custom action.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_alert_factory.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_alert_factory.mm index 9450ca0f..b1f7c95 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_alert_factory.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_alert_factory.mm
@@ -4,6 +4,9 @@ #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_alert_factory.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" +#import "ios/chrome/browser/main/browser.h" +#import "ios/chrome/browser/policy/policy_util.h" #import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_gesture_commands.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_item.h" @@ -132,6 +135,8 @@ } style:UIAlertActionStyleDefault]; + BOOL incognitoEnabled = + !IsIncognitoModeDisabled(browser->GetBrowserState()->GetPrefs()); [alertCoordinator addItemWithTitle:l10n_util::GetNSStringWithFixup( IDS_IOS_CONTENT_CONTEXT_OPENLINKNEWINCOGNITOTAB) @@ -144,7 +149,8 @@ atIndex:indexPath.item]; } } - style:UIAlertActionStyleDefault]; + style:UIAlertActionStyleDefault + enabled:incognitoEnabled]; [alertCoordinator addItemWithTitle:l10n_util::GetNSStringWithFixup(
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm index 69b7657..3aff4e221 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
@@ -30,6 +30,7 @@ #import "ios/chrome/browser/main/browser.h" #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h" #include "ios/chrome/browser/ntp_tiles/ios_most_visited_sites_factory.h" +#import "ios/chrome/browser/policy/policy_util.h" #include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/reading_list/reading_list_model_factory.h" #import "ios/chrome/browser/search_engines/template_url_service_factory.h" @@ -653,13 +654,22 @@ atIndex:indexPath.item]; }]]; - [menuElements - addObject:[actionFactory actionToOpenInNewIncognitoTabWithBlock:^{ + UIAction* incognitoAction = + [actionFactory actionToOpenInNewIncognitoTabWithBlock:^{ [weakSelf.ntpMediator openNewTabWithMostVisitedItem:item incognito:YES atIndex:indexPath.item]; - }]]; + }]; + + if (IsIncognitoModeDisabled( + self.browser->GetBrowserState()->GetPrefs())) { + // Disable the "Open in Incognito" option if the incognito mode is + // disabled. + incognitoAction.attributes = UIMenuElementAttributesDisabled; + } + + [menuElements addObject:incognitoAction]; if (base::ios::IsMultipleScenesSupported()) { UIAction* newWindowAction = [actionFactory
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm index 1fafc5c..0923e85 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
@@ -21,6 +21,7 @@ #import "components/reading_list/ios/reading_list_model_bridge_observer.h" #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/ntp_tiles/most_visited_sites_observer_bridge.h" +#import "ios/chrome/browser/policy/policy_util.h" #include "ios/chrome/browser/pref_names.h" #import "ios/chrome/browser/pref_names.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_discover_item.h" @@ -139,6 +140,9 @@ // Number of unread items in reading list model. @property(nonatomic, assign) NSInteger readingListUnreadCount; +// Whether the incognito mode is available. +@property(nonatomic, assign) BOOL incognitoAvailable; + @end @implementation ContentSuggestionsMediator @@ -160,6 +164,7 @@ isGoogleDefaultSearchProvider:(BOOL)isGoogleDefaultSearchProvider { self = [super init]; if (self) { + _incognitoAvailable = !IsIncognitoModeDisabled(prefService); _contentSuggestionsEnabled = prefService->FindPreference(prefs::kArticlesForYouEnabled); if (!IsDiscoverFeedEnabled()) { @@ -578,6 +583,7 @@ ContentSuggestionsMostVisitedItem* item = ConvertNTPTile(tile, self.mostVisitedSectionInfo); item.commandHandler = self.commandHandler; + item.incognitoAvailable = self.incognitoAvailable; [self.faviconMediator fetchFaviconForMostVisited:item]; [self.freshMostVisitedItems addObject:item]; }
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm index f895b57..151b90f3d 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm
@@ -16,9 +16,11 @@ #include "components/ntp_snippets/features.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #include "components/strings/grit/components_strings.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" #import "ios/chrome/browser/metrics/new_tab_page_uma.h" #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h" +#import "ios/chrome/browser/policy/policy_util.h" #import "ios/chrome/browser/search_engines/search_engine_observer_bridge.h" #import "ios/chrome/browser/signin/authentication_service.h" #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h" @@ -493,6 +495,12 @@ - (void)openNewTabWithMostVisitedItem:(ContentSuggestionsMostVisitedItem*)item incognito:(BOOL)incognito atIndex:(NSInteger)index { + if (incognito && + IsIncognitoModeDisabled(self.browser->GetBrowserState()->GetPrefs())) { + // This should only happen when the policy changes while the option is + // presented. + return; + } [self logMostVisitedOpening:item atIndex:index]; CGPoint cellCenter = [self cellCenterForItem:item]; [self openNewTabWithURL:item.URL incognito:incognito originPoint:cellCenter];
diff --git a/ios/chrome/browser/ui/gestures/view_revealing_animatee.h b/ios/chrome/browser/ui/gestures/view_revealing_animatee.h index bee265c9..2f1eeb19 100644 --- a/ios/chrome/browser/ui/gestures/view_revealing_animatee.h +++ b/ios/chrome/browser/ui/gestures/view_revealing_animatee.h
@@ -17,9 +17,11 @@ // pan gesture handler. @protocol ViewRevealingAnimatee -// Called before a view reveal animation. Takes as argument the state in which -// the view revealer is before the animation. -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState; +// Called before a view reveal animation. Takes as argument both the state in +// which the view revealer is before the animation and the state that the view +// revealer will transition to. +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState; // Called inside an animation block to animate the revealing of the view. Takes // as argument the state in which the view revealer will be after the animation.
diff --git a/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm b/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm index 58284f6..f4a1de3 100644 --- a/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm +++ b/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.mm
@@ -131,7 +131,8 @@ - (void)addAnimatee:(id<ViewRevealingAnimatee>)animatee { [self.animatees addObject:animatee]; // Make sure the newly added animatee is in the correct state. - [animatee willAnimateViewReveal:self.currentState]; + [animatee willAnimateViewRevealFromState:self.currentState + toState:self.currentState]; [animatee animateViewReveal:self.currentState]; [animatee didAnimateViewReveal:self.currentState]; } @@ -165,7 +166,8 @@ // from the current view reveal state. - (void)willAnimateViewReveal { for (id<ViewRevealingAnimatee> animatee in self.animatees) { - [animatee willAnimateViewReveal:self.currentState]; + [animatee willAnimateViewRevealFromState:self.currentState + toState:self.nextState]; } }
diff --git a/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler_unittest.mm b/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler_unittest.mm index f3441f3a..626199ac 100644 --- a/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler_unittest.mm +++ b/ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler_unittest.mm
@@ -31,7 +31,8 @@ } return self; } -- (void)willAnimateViewReveal:(ViewRevealState)viewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { } - (void)animateViewReveal:(ViewRevealState)viewRevealState { self.state = viewRevealState;
diff --git a/ios/chrome/browser/ui/main/bvc_container_view_controller.mm b/ios/chrome/browser/ui/main/bvc_container_view_controller.mm index 5725a7d..8215846cc 100644 --- a/ios/chrome/browser/ui/main/bvc_container_view_controller.mm +++ b/ios/chrome/browser/ui/main/bvc_container_view_controller.mm
@@ -28,7 +28,7 @@ // When the thumb strip is enabled, the BVC container stays around all the // time. When on a tab grid page with no tabs or the recent tab page, the // currentBVC will be set to nil. - DCHECK(bvc || IsThumbStripEnabled()); + DCHECK(bvc || ShowThumbStripInTraitCollection(self.traitCollection)); if (self.currentBVC == bvc) { return; } @@ -55,7 +55,7 @@ [self.view addSubview:bvc.view]; [bvc didMoveToParentViewController:self]; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { // The background needs to be clear to allow the thumb strip to be seen // during the enter/exit thumb strip animation. self.currentBVC.view.backgroundColor = [UIColor clearColor]; @@ -101,7 +101,8 @@ #pragma mark - ViewRevealingAnimatee -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { // No-op. }
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm index 9d685ae1..eca11a5 100644 --- a/ios/chrome/browser/ui/main/scene_controller.mm +++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -1100,14 +1100,14 @@ } - (void)displayTabSwitcherForcingRegularTabs:(BOOL)forcing { - if (!IsThumbStripEnabled()) { - // When the thumb strip feature is enabled, |self.tabSwitcherIsActive| could - // be YES if the tab switcher button is tapped while the thumb strip is - // visible, or it could be NO if tapped while thumb strip is hidden. - // Otherwise, when the thumb strip feature is disabled, - // |self.tabSwitcherIsActive| should always be NO at this point in code. - DCHECK(!self.tabSwitcherIsActive); - } + // When the thumb strip feature is enabled, |self.tabSwitcherIsActive| could + // be YES if the tab switcher button is tapped while the thumb strip is + // visible, or it could be NO if tapped while thumb strip is hidden. + // Otherwise, when the thumb strip feature is disabled, + // |self.tabSwitcherIsActive| should always be NO at this point in code. + DCHECK(ShowThumbStripInTraitCollection( + self.currentInterface.viewController.traitCollection) || + !self.tabSwitcherIsActive); if (!self.isProcessingVoiceSearchCommand) { [self.currentInterface.bvc userEnteredTabSwitcher]; @@ -1200,6 +1200,7 @@ params.from_chrome = command.fromChrome; params.user_initiated = command.userInitiated; params.should_focus_omnibox = command.shouldFocusOmnibox; + params.inherit_opener = !command.inBackground; self.sceneURLLoadingService->LoadUrlInNewTab(params); } @@ -1612,7 +1613,9 @@ shouldActivateBrowser:(Browser*)browser dismissTabGrid:(BOOL)dismissTabGrid focusOmnibox:(BOOL)focusOmnibox { - DCHECK(dismissTabGrid || IsThumbStripEnabled()); + DCHECK(dismissTabGrid || + ShowThumbStripInTraitCollection( + self.currentInterface.viewController.traitCollection)); [self beginActivatingBrowser:browser dismissTabSwitcher:dismissTabGrid focusOmnibox:focusOmnibox]; @@ -1640,7 +1643,9 @@ focusOmnibox:(BOOL)focusOmnibox { DCHECK(browser == self.mainInterface.browser || browser == self.incognitoInterface.browser); - DCHECK(dismissTabSwitcher || IsThumbStripEnabled()); + DCHECK(dismissTabSwitcher || + ShowThumbStripInTraitCollection( + self.currentInterface.viewController.traitCollection)); self.activatingBrowser = YES; ApplicationMode mode = (browser == self.mainInterface.browser) @@ -2188,9 +2193,11 @@ } - (void)openNewTabFromOriginPoint:(CGPoint)originPoint - focusOmnibox:(BOOL)focusOmnibox { + focusOmnibox:(BOOL)focusOmnibox + inheritOpener:(BOOL)inheritOpener { [self.currentInterface.bvc openNewTabFromOriginPoint:originPoint - focusOmnibox:focusOmnibox]; + focusOmnibox:focusOmnibox + inheritOpener:inheritOpener]; } - (Browser*)currentBrowserForURLLoading { @@ -2569,7 +2576,7 @@ withURLLoadParams:(const UrlLoadParams&)urlLoadParams { TabInsertionBrowserAgent::FromBrowser(browser)->InsertWebState( urlLoadParams.web_params, nil, false, browser->GetWebStateList()->count(), - false); + /*in_background=*/false, /*inherit_opener=*/false); [self beginActivatingBrowser:browser dismissTabSwitcher:YES focusOmnibox:NO]; }
diff --git a/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm b/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm index ec23bb9..84d44e5 100644 --- a/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
@@ -58,7 +58,13 @@ // reports to upload. +[SafeModeViewController hasSuggestions] does not depend // on the value of breakpad_helper::IsEnabled or // breakpad_helper::IsUploadingEnabled. -TEST_F(SafeModeViewControllerTest, HasSuggestions) { +// TODO(crbug.com/1173776): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_HasSuggestions HasSuggestions +#else +#define MAYBE_HasSuggestions DISABLED_HasSuggestions +#endif +TEST_F(SafeModeViewControllerTest, MAYBE_HasSuggestions) { // Test when crash reporter is disabled. breakpad_helper::SetUserEnabledUploading(false); EXPECT_FALSE([SafeModeViewController hasSuggestions]);
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm index ac64782e..cb32872 100644 --- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -483,7 +483,7 @@ [model addSectionWithIdentifier:SettingsSectionIdentifierSignIn]; AuthenticationService* authService = AuthenticationServiceFactory::GetForBrowserState(_browserState); - if ((authService->IsAuthenticated() && self.shouldDisplaySyncPromo) || + if (self.shouldDisplaySyncPromo || (!authService->IsAuthenticated() && self.shouldDisplaySigninPromo)) { if (!_signinPromoViewMediator) { _signinPromoViewMediator = [[SigninPromoViewMediator alloc] @@ -541,7 +541,7 @@ toSectionWithIdentifier:SettingsSectionIdentifierAccount]; _hasRecordedSigninImpression = NO; } else if (!authService->IsAuthenticated() && - !self.shouldDisplaySigninPromo) { + !self.shouldDisplaySigninPromo && !self.shouldDisplaySyncPromo) { // Signed-out default AccountSignInItem* signInTextItem = [[AccountSignInItem alloc] initWithType:SettingsItemTypeSignInButton]; @@ -587,10 +587,11 @@ // too many times by a single user account (as defined in // SigninPromoViewMediator). - (BOOL)shouldDisplaySigninPromo { - return [SigninPromoViewMediator - shouldDisplaySigninPromoViewWithAccessPoint:signin_metrics::AccessPoint:: - ACCESS_POINT_SETTINGS - browserState:_browserState]; + return !base::FeatureList::IsEnabled(signin::kMobileIdentityConsistency) && + [SigninPromoViewMediator + shouldDisplaySigninPromoViewWithAccessPoint: + signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS + browserState:_browserState]; } // Returns YES if the Sync service is available and all promos have not been @@ -599,7 +600,10 @@ syncer::SyncService* syncService = ProfileSyncServiceFactory::GetForBrowserState(_browserState); return base::FeatureList::IsEnabled(signin::kMobileIdentityConsistency) && - [self shouldDisplaySigninPromo] && + [SigninPromoViewMediator + shouldDisplaySigninPromoViewWithAccessPoint: + signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS + browserState:_browserState] && !syncService->IsSyncFeatureEnabled(); }
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/BUILD.gn index e08fba1..45202c4 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/BUILD.gn +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/BUILD.gn
@@ -43,7 +43,6 @@ "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_switcher/tab_grid/grid/grid_constants.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_constants.mm index 63e80f1..0eb910e5 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_constants.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_constants.mm
@@ -21,8 +21,6 @@ // PlusSignCell styling NSString* const kPlusSignCellBackgroundColor = @"plus_sign_grid_cell_background_color"; -NSString* const kPlusSignCellBackgroundDarkColor = - @"plus_sign_grid_cell_background_dark_color"; // The height of the BVC that remains visible after transitioning from thumb // strip to tab grid.
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_layout.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_layout.mm index 6ffc65a..ea5671c 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_layout.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_layout.mm
@@ -63,7 +63,7 @@ self.sectionInset = kGridLayoutInsetsRegularRegular; self.minimumLineSpacing = kGridLayoutLineSpacingRegularRegular; } - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.collectionView.traitCollection)) { // When the thumb strip feature is enabled, increase the bottom inset to // account for the bvc on the bottom of the screen. UIEdgeInsets sectionInset = self.sectionInset;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.h index 76c36c3..f082b33 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.h
@@ -52,6 +52,11 @@ - (void)gridViewController:(GridViewController*)gridViewController contentNeedsAuthenticationChanged:(BOOL)needsAuth; +// Tells the delegate that the grid view controller's scroll view will begin +// dragging. +- (void)gridViewControllerWillBeginDragging: + (GridViewController*)gridViewController; + @end // A view controller that contains a grid of items.
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm index fd6ea936..d9b800a84 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller.mm
@@ -106,7 +106,7 @@ - (void)loadView { self.horizontalLayout = [[HorizontalLayout alloc] init]; self.gridLayout = [[GridLayout alloc] init]; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { self.currentLayout = self.horizontalLayout; } else { self.currentLayout = self.gridLayout; @@ -127,7 +127,7 @@ // For thumb strip, the horizontal layout should bounce horizontal. In the // grid layout, the scrolling between tabs will take priority over this // bouncing. - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { collectionView.alwaysBounceHorizontal = YES; } // CollectionView, in contrast to TableView, doesn’t inset the @@ -291,7 +291,7 @@ - (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section { - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { // The PlusSignCell (new item button) is always appended at the end of the // collection. return base::checked_cast<NSInteger>(self.items.count + 1); @@ -466,7 +466,7 @@ destinationIndex = base::checked_cast<NSUInteger>(coordinator.destinationIndexPath.item); } - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { // The sourceIndexPath is nil if the drop item is not from the same // collection view. NSUInteger plusSignCellIndex = @@ -522,8 +522,12 @@ self.emptyStateView.scrollViewContentInsets = scrollView.contentInset; } +- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView { + [self.delegate gridViewControllerWillBeginDragging:self]; +} + - (void)scrollViewDidScroll:(UIScrollView*)scrollView { - if (!IsThumbStripEnabled()) + if (!ShowThumbStripInTraitCollection(self.traitCollection)) return; [self updateFractionVisibleOfLastItem]; } @@ -826,7 +830,7 @@ // |targetIndexPathForMoveFromItemAtIndexPath:toProposedIndexPath:| gets // called, and that's why indexPath.item is not being compared to // self.items.count here. - return IsThumbStripEnabled() && + return ShowThumbStripInTraitCollection(self.traitCollection) && indexPath.item == [self.collectionView numberOfItemsInSection:0] - 1; }
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller_unittest.mm index 76bf96a..9d96adf2 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_view_controller_unittest.mm
@@ -64,6 +64,10 @@ (GridViewController*)gridViewController { // No-op for unittests. } +- (void)gridViewControllerWillBeginDragging: + (GridViewController*)gridViewController { + // No-op for unittests. +} @end class GridViewControllerTest : public RootViewControllerTest {
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/plus_sign_cell.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/plus_sign_cell.mm index 2cacbfad..34104d6 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/plus_sign_cell.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/plus_sign_cell.mm
@@ -64,34 +64,9 @@ break; } - 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; - } + self.contentView.backgroundColor = + [UIColor colorNamed:kPlusSignCellBackgroundColor]; - 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; }
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/BUILD.gn index 11d9c7c5..c4dde97 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/BUILD.gn +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/BUILD.gn
@@ -31,8 +31,3 @@ 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_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json index 75c173f..a839a1e 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_color.colorset/Contents.json
@@ -15,24 +15,6 @@ "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_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_dark_color.colorset/Contents.json b/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_dark_color.colorset/Contents.json deleted file mode 100644 index 393a202..0000000 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/grid/resources/plus_sign_grid_cell_background_dark_color.colorset/Contents.json +++ /dev/null
@@ -1,20 +0,0 @@ -{ - "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_switcher/tab_grid/tab_grid_bottom_toolbar.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm index 18cde29d..12be048 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_bottom_toolbar.mm
@@ -155,8 +155,9 @@ _largeNewTabButton.page = self.page; CGFloat floatingButtonVerticalInset = kTabGridFloatingButtonVerticalInset; - if (IsThumbStripEnabled()) + if (ShowThumbStripInTraitCollection(self.traitCollection)) { floatingButtonVerticalInset += kBVCHeightTabGrid; + } _floatingConstraints = @[ [_largeNewTabButton.topAnchor constraintEqualToAnchor:self.topAnchor],
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm index 2620589..dc3fe2e 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm
@@ -202,7 +202,8 @@ - (void)showTabGrid { BOOL animated = !self.animationsDisabledForTesting; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)) { [self.thumbStripCoordinator.panHandler setState:ViewRevealState::Revealed animated:animated]; [self.baseViewController contentWillAppearAnimated:animated]; @@ -254,7 +255,9 @@ - (void)showTabViewController:(UIViewController*)viewController shouldCloseTabGrid:(BOOL)shouldCloseTabGrid completion:(ProceduralBlock)completion { - DCHECK(viewController || (IsThumbStripEnabled() && self.bvcContainer)); + bool thumbStripEnabled = + ShowThumbStripInTraitCollection(self.baseViewController.traitCollection); + DCHECK(viewController || (thumbStripEnabled && self.bvcContainer)); if (shouldCloseTabGrid) { self.tabGridExitTime = base::TimeTicks::Now(); @@ -266,7 +269,7 @@ // If thumb strip is enabled, this will always be true except during initial // setup before the BVC container has been created. - if (IsThumbStripEnabled() && self.bvcContainer) { + if (thumbStripEnabled && self.bvcContainer) { self.bvcContainer.currentBVC = viewController; self.baseViewController.childViewControllerForStatusBarStyle = viewController; @@ -298,7 +301,8 @@ self.bvcContainer = [[BVCContainerViewController alloc] init]; self.bvcContainer.currentBVC = viewController; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)) { self.bvcContainer.thumbStripPanHandler = self.thumbStripCoordinator.panHandler; [self.thumbStripCoordinator.panHandler addAnimatee:self.bvcContainer]; @@ -388,6 +392,13 @@ baseViewController.incognitoTabsDragDropHandler = self.incognitoTabsMediator; baseViewController.regularTabsImageDataSource = self.regularTabsMediator; baseViewController.incognitoTabsImageDataSource = self.incognitoTabsMediator; + if (ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)) { + baseViewController.regularPopupMenuHandler = HandlerForProtocol( + _regularBrowser->GetCommandDispatcher(), PopupMenuCommands); + baseViewController.incognitoPopupMenuHandler = HandlerForProtocol( + _incognitoBrowser->GetCommandDispatcher(), PopupMenuCommands); + } self.incognitoAuthMediator = [[IncognitoReauthMediator alloc] initWithConsumer:self.baseViewController.incognitoTabsConsumer @@ -437,7 +448,8 @@ [self.remoteTabsMediator refreshSessionsView]; } - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)) { self.thumbStripCoordinator = [[ThumbStripCoordinator alloc] initWithBaseViewController:baseViewController browser:self.browser]; @@ -495,12 +507,14 @@ focusOmnibox:(BOOL)focusOmnibox closeTabGrid:(BOOL)closeTabGrid { DCHECK(self.regularBrowser && self.incognitoBrowser); - DCHECK(closeTabGrid || IsThumbStripEnabled()); + DCHECK(closeTabGrid || ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)); Browser* activeBrowser = nullptr; switch (page) { case TabGridPageIncognitoTabs: if (self.incognitoBrowser->GetWebStateList()->count() == 0) { - DCHECK(IsThumbStripEnabled()); + DCHECK(ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)); [self showTabViewController:nil shouldCloseTabGrid:closeTabGrid completion:nil]; @@ -510,7 +524,8 @@ break; case TabGridPageRegularTabs: if (self.regularBrowser->GetWebStateList()->count() == 0) { - DCHECK(IsThumbStripEnabled()); + DCHECK(ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)); [self showTabViewController:nil shouldCloseTabGrid:closeTabGrid completion:nil]; @@ -519,7 +534,8 @@ activeBrowser = self.regularBrowser; break; case TabGridPageRemoteTabs: - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection( + self.baseViewController.traitCollection)) { [self showTabViewController:nil shouldCloseTabGrid:closeTabGrid completion:nil];
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.h b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.h index 6e26c32..9d04c8fc 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.h +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.h
@@ -19,6 +19,7 @@ @protocol GridCommands; @protocol GridDragDropHandler; @protocol GridImageDataSource; +@protocol PopupMenuCommands; @protocol RecentTabsConsumer; @class RecentTabsTableViewController; @class TabGridViewController; @@ -60,6 +61,9 @@ @property(nonatomic, weak) id<ApplicationCommands> handler; @property(nonatomic, weak) id<IncognitoReauthCommands> reauthHandler; +// Handlers for popup menu commands for the regular and incognito states. +@property(nonatomic, weak) id<PopupMenuCommands> regularPopupMenuHandler; +@property(nonatomic, weak) id<PopupMenuCommands> incognitoPopupMenuHandler; // Delegate for this view controller to handle presenting tab UI. @property(nonatomic, weak) id<TabPresentationDelegate> tabPresentationDelegate;
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm index 48a9a0d..a3b543cd4 100644 --- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm +++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_view_controller.mm
@@ -12,6 +12,7 @@ #include "base/task/post_task.h" #include "ios/chrome/browser/crash_report/crash_keys_helper.h" #import "ios/chrome/browser/ui/commands/application_commands.h" +#import "ios/chrome/browser/ui/commands/popup_menu_commands.h" #import "ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.h" #import "ios/chrome/browser/ui/tab_switcher/tab_grid/features.h" #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_commands.h" @@ -185,7 +186,7 @@ [self setupRemoteTabsViewController]; [self setupTopToolbar]; [self setupBottomToolbar]; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { [self setupThumbStripPlusSignButton]; [self setupForegroundView]; } @@ -505,7 +506,8 @@ #pragma mark - ViewRevealingAnimatee -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { self.currentState = currentViewRevealState; self.scrollView.scrollEnabled = NO; switch (currentViewRevealState) { @@ -684,11 +686,12 @@ CGFloat bottomInset = self.configuration == TabGridConfigurationBottomToolbar ? self.bottomToolbar.intrinsicContentSize.height : 0; - if (IsThumbStripEnabled()) { + BOOL showThumbStrip = ShowThumbStripInTraitCollection(self.traitCollection); + if (showThumbStrip) { bottomInset += self.topToolbar.intrinsicContentSize.height; } CGFloat topInset = - IsThumbStripEnabled() ? 0 : self.topToolbar.intrinsicContentSize.height; + showThumbStrip ? 0 : self.topToolbar.intrinsicContentSize.height; UIEdgeInsets inset = UIEdgeInsetsMake(topInset, 0, bottomInset, 0); inset.left = self.scrollView.safeAreaInsets.left; inset.right = self.scrollView.safeAreaInsets.right; @@ -788,7 +791,7 @@ if (!self.viewVisible) { return; } - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { [self.tabPresentationDelegate showActiveTabInPage:self.currentPage focusOmnibox:NO closeTabGrid:NO]; @@ -831,7 +834,7 @@ self.scrollContentView = contentView; self.scrollView = scrollView; self.scrollView.accessibilityIdentifier = kTabGridScrollViewIdentifier; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { self.scrollView.scrollEnabled = NO; } NSArray* constraints = @[ @@ -1053,7 +1056,7 @@ self.plusSignButton = plusSignButton; plusSignButton.translatesAutoresizingMaskIntoConstraints = NO; [plusSignButton addTarget:self - action:@selector(newTabButtonTapped:) + action:@selector(plusSignButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:plusSignButton]; @@ -1170,7 +1173,7 @@ // animations. - (void)showToolbars { [self.topToolbar show]; - if (IsThumbStripEnabled()) { + if (ShowThumbStripInTraitCollection(self.traitCollection)) { GridViewController* gridViewController = [self gridViewControllerForPage:self.currentPage]; DCHECK(gridViewController); @@ -1534,6 +1537,15 @@ [self configureButtonsForActiveAndCurrentPage]; } +- (void)gridViewControllerWillBeginDragging: + (GridViewController*)gridViewController { + if (!ShowThumbStripInTraitCollection(self.traitCollection)) { + return; + } + [self.incognitoPopupMenuHandler dismissPopupMenuAnimated:YES]; + [self.regularPopupMenuHandler dismissPopupMenuAnimated:YES]; +} + #pragma mark - Control actions - (void)doneButtonTapped:(id)sender { @@ -1624,6 +1636,22 @@ } } +- (void)plusSignButtonTapped:(id)sender { + switch (self.currentPage) { + case TabGridPageRegularTabs: + [self.regularTabsDelegate addNewItem]; + // TODO(crbug.com/1135329): Record when a new regular tab is opened. + break; + case TabGridPageIncognitoTabs: + [self.incognitoTabsDelegate addNewItem]; + // TODO(crbug.com/1135329): Record when a new incognito tab is opened. + break; + case TabGridPageRemoteTabs: + // No-op. + break; + } +} + - (void)pageControlChangedValue:(id)sender { // Map the page control slider position (in the range 0.0-1.0) to an // x-offset for the scroll view.
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm index 145627f..155ad19b 100644 --- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm +++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
@@ -1791,7 +1791,8 @@ } #pragma mark - ViewRevealingAnimatee -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { // Specifically when Smooth Scrolling is on, the background of the view // is non-clear to cover the WKWebView. In this case, make the tab strip // background clear as soon as view revealing begins so any animations that
diff --git a/ios/chrome/browser/ui/thumb_strip/BUILD.gn b/ios/chrome/browser/ui/thumb_strip/BUILD.gn index 84f20fd..8c547a9 100644 --- a/ios/chrome/browser/ui/thumb_strip/BUILD.gn +++ b/ios/chrome/browser/ui/thumb_strip/BUILD.gn
@@ -35,6 +35,7 @@ "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/util", ] + frameworks = [ "UIKit.framework" ] configs += [ "//build/config/compiler:enable_arc" ] }
diff --git a/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.h b/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.h index e433cfc5..21a0aca 100644 --- a/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.h +++ b/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.h
@@ -5,7 +5,9 @@ #ifndef IOS_CHROME_BROWSER_UI_THUMB_STRIP_THUMB_STRIP_FEATURE_H_ #define IOS_CHROME_BROWSER_UI_THUMB_STRIP_THUMB_STRIP_FEATURE_H_ -// Returns true if the Thumb Strip feature is enabled and the device is an iPad. -bool IsThumbStripEnabled(); +#import <UIKit/UIKit.h> + +// Determines if the ThumbStrip should be shown in the passed UITraitCollection. +bool ShowThumbStripInTraitCollection(UITraitCollection* traitCollection); #endif // IOS_CHROME_BROWSER_UI_THUMB_STRIP_THUMB_STRIP_FEATURE_H_
diff --git a/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.mm b/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.mm index 022385954..0475853 100644 --- a/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.mm +++ b/ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.mm
@@ -6,11 +6,17 @@ #import "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/ui_util.h" +#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif +// Returns true if the Thumb Strip feature is enabled and the device is an iPad. bool IsThumbStripEnabled() { return IsIPadIdiom() && base::FeatureList::IsEnabled(kExpandedTabStrip); } + +bool ShowThumbStripInTraitCollection(UITraitCollection* trait_collection) { + return IsThumbStripEnabled() && IsRegularXRegularSizeClass(trait_collection); +}
diff --git a/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm index f4381a9c1..8d5ad4b9 100644 --- a/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm +++ b/ios/chrome/browser/ui/toolbar/primary_toolbar_view_controller.mm
@@ -75,7 +75,8 @@ #pragma mark - viewRevealingAnimatee -- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState { +- (void)willAnimateViewRevealFromState:(ViewRevealState)currentViewRevealState + toState:(ViewRevealState)nextViewRevealState { } - (void)animateViewReveal:(ViewRevealState)nextViewRevealState {
diff --git a/ios/chrome/browser/ui/webui/policy/policy_ui.mm b/ios/chrome/browser/ui/webui/policy/policy_ui.mm index 3eaaf68..1e0b657f 100644 --- a/ios/chrome/browser/ui/webui/policy/policy_ui.mm +++ b/ios/chrome/browser/ui/webui/policy/policy_ui.mm
@@ -39,8 +39,6 @@ {"labelAssetId", IDS_POLICY_LABEL_ASSET_ID}, {"labelClientId", IDS_POLICY_LABEL_CLIENT_ID}, {"labelDirectoryApiId", IDS_POLICY_LABEL_DIRECTORY_API_ID}, - {"labelEnterpriseDisplayDomain", - IDS_POLICY_LABEL_ENTERPRISE_DISPLAY_DOMAIN}, {"labelEnterpriseEnrollmentDomain", IDS_POLICY_LABEL_ENTERPRISE_ENROLLMENT_DOMAIN}, {"labelGaiaId", IDS_POLICY_LABEL_GAIA_ID},
diff --git a/ios/chrome/browser/url_loading/scene_url_loading_service.h b/ios/chrome/browser/url_loading/scene_url_loading_service.h index c244b56..f4d8ea09 100644 --- a/ios/chrome/browser/url_loading/scene_url_loading_service.h +++ b/ios/chrome/browser/url_loading/scene_url_loading_service.h
@@ -47,7 +47,8 @@ // Opens a new tab as if originating from |originPoint| and |focusOmnibox|. - (void)openNewTabFromOriginPoint:(CGPoint)originPoint - focusOmnibox:(BOOL)focusOmnibox; + focusOmnibox:(BOOL)focusOmnibox + inheritOpener:(BOOL)inheritOpener; // Informs the BVC that a new foreground tab is about to be opened in given // |targetMode|. This is intended to be called before setWebUsageSuspended:NO in
diff --git a/ios/chrome/browser/url_loading/scene_url_loading_service.mm b/ios/chrome/browser/url_loading/scene_url_loading_service.mm index e179464..389e76c 100644 --- a/ios/chrome/browser/url_loading/scene_url_loading_service.mm +++ b/ios/chrome/browser/url_loading/scene_url_loading_service.mm
@@ -75,7 +75,8 @@ // openNewTabFromOriginPoint a delegate there. openNewTabFromOriginPoint is // only called from here. [delegate_ openNewTabFromOriginPoint:params.origin_point - focusOmnibox:params.should_focus_omnibox]; + focusOmnibox:params.should_focus_omnibox + inheritOpener:params.inherit_opener]; } }
diff --git a/ios/chrome/browser/url_loading/url_loading_browser_agent.mm b/ios/chrome/browser/url_loading/url_loading_browser_agent.mm index 401bdd87..0022b13 100644 --- a/ios/chrome/browser/url_loading/url_loading_browser_agent.mm +++ b/ios/chrome/browser/url_loading/url_loading_browser_agent.mm
@@ -337,9 +337,9 @@ auto openTab = ^{ TabInsertionBrowserAgent* insertionAgent = TabInsertionBrowserAgent::FromBrowser(browser_); - insertionAgent->InsertWebState(saved_params.web_params, adjacent_web_state, - false, insertion_index, - saved_params.in_background()); + insertionAgent->InsertWebState( + saved_params.web_params, adjacent_web_state, false, insertion_index, + saved_params.in_background(), saved_params.inherit_opener); notifier_->NewTabDidLoadUrl(saved_params.web_params.url, saved_params.user_initiated); };
diff --git a/ios/chrome/browser/url_loading/url_loading_params.h b/ios/chrome/browser/url_loading/url_loading_params.h index 52eaaea..6958846 100644 --- a/ios/chrome/browser/url_loading/url_loading_params.h +++ b/ios/chrome/browser/url_loading/url_loading_params.h
@@ -82,6 +82,9 @@ // Only used when the |web_params.url| isn't valid. Defaults to |false|. bool should_focus_omnibox; + // Whether the new tab should inherit opener. + bool inherit_opener; + // Opaque way of changing loading behavior. UrlLoadStrategy load_strategy;
diff --git a/ios/chrome/browser/url_loading/url_loading_params.mm b/ios/chrome/browser/url_loading/url_loading_params.mm index 08b68ea..606ecea 100644 --- a/ios/chrome/browser/url_loading/url_loading_params.mm +++ b/ios/chrome/browser/url_loading/url_loading_params.mm
@@ -78,6 +78,7 @@ from_chrome(false), user_initiated(true), should_focus_omnibox(false), + inherit_opener(false), load_strategy(UrlLoadStrategy::NORMAL) {} UrlLoadParams::UrlLoadParams(const UrlLoadParams& other) @@ -89,6 +90,7 @@ from_chrome(other.from_chrome), user_initiated(other.user_initiated), should_focus_omnibox(other.should_focus_omnibox), + inherit_opener(other.inherit_opener), load_strategy(other.load_strategy) {} UrlLoadParams& UrlLoadParams::operator=(const UrlLoadParams& other) { @@ -100,6 +102,7 @@ from_chrome = other.from_chrome; user_initiated = other.user_initiated; should_focus_omnibox = other.should_focus_omnibox; + inherit_opener = other.inherit_opener; load_strategy = other.load_strategy; return *this; }
diff --git a/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h b/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h index a70d1a8b..61639452 100644 --- a/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h +++ b/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.h
@@ -36,7 +36,8 @@ web::WebState* parent, bool opened_by_dom, int index, - bool in_background); + bool in_background, + bool inherit_opener); web::WebState* InsertWebStateOpenedByDOM(web::WebState* parent);
diff --git a/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.mm b/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.mm index ae01d566..d0b5e14 100644 --- a/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.mm +++ b/ios/chrome/browser/web_state_list/tab_insertion_browser_agent.mm
@@ -26,7 +26,8 @@ web::WebState* parent, bool opened_by_dom, int index, - bool in_background) { + bool in_background, + bool inherit_opener) { DCHECK(index == TabInsertion::kPositionAutomatically || (index >= 0 && index <= web_state_list_->count())); @@ -46,6 +47,10 @@ insertion_flags |= WebStateList::INSERT_ACTIVATE; } + if (inherit_opener) { + insertion_flags |= WebStateList::INSERT_INHERIT_OPENER; + } + web::WebState::CreateParams create_params(browser_state_); create_params.created_with_opener = opened_by_dom;
diff --git a/ios/chrome/browser/web_state_list/tab_insertion_browser_agent_unittest.mm b/ios/chrome/browser/web_state_list/tab_insertion_browser_agent_unittest.mm index 41a6ad4..61d75f81 100644 --- a/ios/chrome/browser/web_state_list/tab_insertion_browser_agent_unittest.mm +++ b/ios/chrome/browser/web_state_list/tab_insertion_browser_agent_unittest.mm
@@ -53,7 +53,8 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/0, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); ASSERT_EQ(1, browser_->GetWebStateList()->count()); EXPECT_EQ(web_state, browser_->GetWebStateList()->GetWebStateAt(0)); } @@ -63,18 +64,20 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/0, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); web::WebState* web_state1 = agent_->InsertWebState(Params(GURL(kURL1)), /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/0, - /*in_background=*/false); - + /*in_background=*/false, + /*inherit_opener=*/false); web::WebState* web_state2 = agent_->InsertWebState(Params(GURL(kURL1)), /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/1, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); ASSERT_EQ(3, browser_->GetWebStateList()->count()); EXPECT_EQ(web_state1, browser_->GetWebStateList()->GetWebStateAt(0)); @@ -88,7 +91,8 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); ASSERT_EQ(1, browser_->GetWebStateList()->count()); EXPECT_EQ(web_state, browser_->GetWebStateList()->GetWebStateAt(0)); @@ -100,19 +104,22 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); web::WebState* web_state1 = agent_->InsertWebState(Params(GURL(kURL1)), /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); web::WebState* web_state2 = agent_->InsertWebState(Params(GURL(kURL1)), /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); ASSERT_EQ(3, browser_->GetWebStateList()->count()); EXPECT_EQ(web_state0, browser_->GetWebStateList()->GetWebStateAt(0)); @@ -127,17 +134,20 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); agent_->InsertWebState(Params(GURL(kURL1)), /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); agent_->InsertWebState(Params(GURL(kURL1)), /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); // Add a new tab, it should be added behind the parent. web::WebState* child = @@ -145,7 +155,8 @@ /*parent=*/parent, /*opened_by_dom=*/false, /*index=*/TabInsertion::kPositionAutomatically, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); EXPECT_EQ(browser_->GetWebStateList()->GetIndexOfWebState(parent), 0); EXPECT_EQ(browser_->GetWebStateList()->GetIndexOfWebState(child), 1); @@ -155,7 +166,8 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/TabInsertion::kPositionAutomatically, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); EXPECT_EQ(browser_->GetWebStateList()->GetIndexOfWebState(web_state), browser_->GetWebStateList()->count() - 1); @@ -165,7 +177,8 @@ /*parent=*/nil, /*opened_by_dom=*/false, /*index=*/browser_->GetWebStateList()->count(), - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); EXPECT_EQ(browser_->GetWebStateList()->GetIndexOfWebState(web_state2), browser_->GetWebStateList()->count() - 1); @@ -175,7 +188,8 @@ /*parent=*/web_state, /*opened_by_dom=*/false, /*index=*/TabInsertion::kPositionAutomatically, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); EXPECT_EQ(browser_->GetWebStateList()->GetIndexOfWebState(web_state3), browser_->GetWebStateList()->GetIndexOfWebState(web_state) + 1); @@ -185,7 +199,8 @@ /*parent=*/web_state3, /*opened_by_dom=*/false, /*index=*/TabInsertion::kPositionAutomatically, - /*in_background=*/false); + /*in_background=*/false, + /*inherit_opener=*/false); EXPECT_EQ(browser_->GetWebStateList()->GetIndexOfWebState(web_state4), browser_->GetWebStateList()->GetIndexOfWebState(web_state3) + 1); }
diff --git a/ios/chrome/browser/web_state_list/web_state_list.h b/ios/chrome/browser/web_state_list/web_state_list.h index cb7e6f48..d75f246a 100644 --- a/ios/chrome/browser/web_state_list/web_state_list.h +++ b/ios/chrome/browser/web_state_list/web_state_list.h
@@ -259,6 +259,14 @@ bool use_group, int n) const; + // Returns the wrapper of the currently active WebState or null if there + // is none. + WebStateWrapper* GetActiveWebStateWrapper() const; + + // Returns the wrapper of the WebState at the specified index. It is invalid + // to call this with an index such that |ContainsIndex(index)| returns false. + WebStateWrapper* GetWebStateWrapperAt(int index) const; + // The WebStateList delegate. WebStateListDelegate* delegate_ = nullptr;
diff --git a/ios/chrome/browser/web_state_list/web_state_list.mm b/ios/chrome/browser/web_state_list/web_state_list.mm index 9deeb7d..c6303fe 100644 --- a/ios/chrome/browser/web_state_list/web_state_list.mm +++ b/ios/chrome/browser/web_state_list/web_state_list.mm
@@ -55,6 +55,11 @@ WebStateOpener opener() const { return opener_; } void SetOpener(WebStateOpener opener); + // Gets and sets whether this WebState opener must be clear when the active + // WebState changes. + bool ShouldResetOpenerOnActiveWebStateChange() const; + void SetShouldResetOpenerOnActiveWebStateChange(bool should_reset_opener); + // Returns whether |opener| spawned the wrapped WebState. If |use_group| is // true, also use the opener navigation index to detect navigation changes // during the same session. @@ -65,6 +70,7 @@ private: std::unique_ptr<web::WebState> web_state_; WebStateOpener opener_; + bool should_reset_opener_ = false; DISALLOW_COPY_AND_ASSIGN(WebStateWrapper); }; @@ -96,6 +102,7 @@ void WebStateList::WebStateWrapper::SetOpener(WebStateOpener opener) { DCHECK_NE(web_state_.get(), opener.opener); + should_reset_opener_ = false; opener_ = opener; } @@ -112,6 +119,16 @@ return opener_.navigation_index == opener_navigation_index; } +bool WebStateList::WebStateWrapper::ShouldResetOpenerOnActiveWebStateChange() + const { + return should_reset_opener_; +} + +void WebStateList::WebStateWrapper::SetShouldResetOpenerOnActiveWebStateChange( + bool should_reset_opener) { + should_reset_opener_ = should_reset_opener; +} + WebStateList::WebStateList(WebStateListDelegate* delegate) : delegate_(delegate), order_controller_(std::make_unique<WebStateListOrderController>(this)) { @@ -139,15 +156,13 @@ web::WebState* WebStateList::GetActiveWebState() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (active_index_ != kInvalidIndex) - return GetWebStateAt(active_index_); - return nullptr; + WebStateWrapper* wrapper = GetActiveWebStateWrapper(); + return wrapper ? wrapper->web_state() : nullptr; } web::WebState* WebStateList::GetWebStateAt(int index) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(ContainsIndex(index)); - return web_state_wrappers_[index]->web_state(); + return GetWebStateWrapperAt(index)->web_state(); } int WebStateList::GetIndexOfWebState(const web::WebState* web_state) const { @@ -273,8 +288,12 @@ DCHECK(web_state); const bool activating = IsInsertionFlagSet(insertion_flags, INSERT_ACTIVATE); - if (IsInsertionFlagSet(insertion_flags, INSERT_INHERIT_OPENER)) + if (IsInsertionFlagSet(insertion_flags, INSERT_INHERIT_OPENER)) { + for (const auto& wrapper : web_state_wrappers_) { + wrapper->SetOpener(WebStateOpener()); + } opener = WebStateOpener(GetActiveWebState()); + } if (!IsInsertionFlagSet(insertion_flags, INSERT_FORCE_INDEX)) { index = order_controller_->DetermineInsertionIndex(opener.opener); @@ -293,6 +312,11 @@ if (active_index_ >= index) ++active_index_; + if (IsInsertionFlagSet(insertion_flags, INSERT_INHERIT_OPENER)) { + const auto& wrapper = web_state_wrappers_[index]; + wrapper->SetShouldResetOpenerOnActiveWebStateChange(true); + } + for (auto& observer : observers_) observer.WebStateInsertedAt(this, web_state_ptr, index, activating); @@ -438,9 +462,16 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(locked_); DCHECK(ContainsIndex(index) || index == kInvalidIndex); - web::WebState* old_web_state = GetActiveWebState(); + WebStateWrapper* old_web_state_wrapper = GetActiveWebStateWrapper(); + if (old_web_state_wrapper) { + if (old_web_state_wrapper->ShouldResetOpenerOnActiveWebStateChange()) + old_web_state_wrapper->SetOpener(WebStateOpener()); + } + active_index_ = index; - NotifyIfActiveWebStateChanged(old_web_state, reason); + NotifyIfActiveWebStateChanged( + old_web_state_wrapper ? old_web_state_wrapper->web_state() : nullptr, + reason); } void WebStateList::AddObserver(WebStateListObserver* observer) { @@ -522,5 +553,19 @@ return found_index; } +WebStateList::WebStateWrapper* WebStateList::GetActiveWebStateWrapper() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (active_index_ != kInvalidIndex) + return GetWebStateWrapperAt(active_index_); + return nullptr; +} + +WebStateList::WebStateWrapper* WebStateList::GetWebStateWrapperAt( + int index) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(ContainsIndex(index)); + return web_state_wrappers_[index].get(); +} + // static const int WebStateList::kInvalidIndex;
diff --git a/ios/chrome/common/ui/reauthentication/reauthentication_module_unittest.mm b/ios/chrome/common/ui/reauthentication/reauthentication_module_unittest.mm index 7255676..791b7b91 100644 --- a/ios/chrome/common/ui/reauthentication/reauthentication_module_unittest.mm +++ b/ios/chrome/common/ui/reauthentication/reauthentication_module_unittest.mm
@@ -65,7 +65,13 @@ // Tests that reauthentication is not reused when reuse is not permitted // even if the time interval since the previous reauthentication is less // than 60 seconds. -TEST_F(ReauthenticationModuleTest, ReauthReuseNotPermitted) { +// TODO(crbug.com/1173774): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ReauthReuseNotPermitted ReauthReuseNotPermitted +#else +#define MAYBE_ReauthReuseNotPermitted DISABLED_ReauthReuseNotPermitted +#endif +TEST_F(ReauthenticationModuleTest, MAYBE_ReauthReuseNotPermitted) { const int kIntervalFromFakePreviousAuthInSeconds = 20; NSDate* lastReauthTime = [NSDate date]; [time_accessor_ updateSuccessfulReauthTime:lastReauthTime]; @@ -91,7 +97,16 @@ // Tests that the previous reauthentication is reused when reuse is permitted // and the last successful reauthentication occured less than 60 seconds // before the current attempt. -TEST_F(ReauthenticationModuleTest, ReauthReusePermittedLessThanSixtySeconds) { +// TODO(crbug.com/1173774): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ReauthReusePermittedLessThanSixtySeconds \ + ReauthReusePermittedLessThanSixtySeconds +#else +#define MAYBE_ReauthReusePermittedLessThanSixtySeconds \ + DISABLED_ReauthReusePermittedLessThanSixtySeconds +#endif +TEST_F(ReauthenticationModuleTest, + MAYBE_ReauthReusePermittedLessThanSixtySeconds) { const int kIntervalFromFakePreviousAuthInSeconds = 20; NSDate* lastReauthTime = [NSDate date]; [time_accessor_ updateSuccessfulReauthTime:lastReauthTime]; @@ -124,7 +139,16 @@ // Tests that the previous reauthentication is not reused when reuse is // permitted, but the last successful reauthentication occured more than 60 // seconds before the current attempt. -TEST_F(ReauthenticationModuleTest, ReauthReusePermittedMoreThanSixtySeconds) { +// TODO(crbug.com/1173774): The test fails on device. +#if TARGET_IPHONE_SIMULATOR +#define MAYBE_ReauthReusePermittedMoreThanSixtySeconds \ + ReauthReusePermittedMoreThanSixtySeconds +#else +#define MAYBE_ReauthReusePermittedMoreThanSixtySeconds \ + DISABLED_ReauthReusePermittedMoreThanSixtySeconds +#endif +TEST_F(ReauthenticationModuleTest, + MAYBE_ReauthReusePermittedMoreThanSixtySeconds) { const int kIntervalFromFakePreviousAuthInSeconds = 70; NSDate* lastReauthTime = [NSDate date]; [time_accessor_ updateSuccessfulReauthTime:lastReauthTime];
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 index 327bcef1a..d1972f4 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -5273851e3988a3766d29706a836dfd12a17c08af \ No newline at end of file +f2271e415867b72fb8aa21a5bb6e92cc986d866e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 index 0da0120..edf18cd 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -af5b23a5ab5629959c3bde1b2477fb551f1a9454 \ No newline at end of file +161b1f72f4cb89f8bca40a243ddd22b7a1f77941 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 index f11bca85..e38f3c6 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -6497991a5b90b682c122a737300ce5deff1deac4 \ No newline at end of file +f313f5b0c10336d36aeeca618c3da3e88998de40 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 index 29b0313..5b8b0fc9 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -cbe55d8c929fc902c1bd41f1f967e22bfc176783 \ No newline at end of file +73048fd13f616a10dba5911fb19ce5a3799f68cb \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 index 78d6ee146..ec5863e 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -21240ae7f0d1ecdc3fd0c8ade8fffe3f930a52c2 \ No newline at end of file +c16f0660a041d34845d46b3298328a07c82cc49f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 index 20bea35..df62eb8 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -9a7bfe743f60bda976c930dc06a55fb5c0d23b95 \ No newline at end of file +46a525345f663a514116a62d2aa92e9b9e710e3f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 index 338a6c9..80d0466 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -09f0799f8ebd4567657dec328d3fccb3ec00f589 \ No newline at end of file +8334a3c91838908110eaf84e9ccf015d4611c76d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 index 3d91196..33b1ae64 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -b5c5db3397ac14240a7a45418dbd5c903552d2ab \ No newline at end of file +f9b5b60d75735c5008b1e2e1fd9af6e169fd4723 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 index b3ff6f0..bfe15f24 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -0d7f1e86fc8966a8ba1024393723b4008ec6d377 \ No newline at end of file +11b19b76ea2dddc7e3768d678a9de5783d36f29e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 index b293034..0624b8b 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -ca77ac99be403913432a01d9a9fcfb53c80ef1ed \ No newline at end of file +dca774ddc806ef5504d5e65c9ee47141ebc1ed3c \ No newline at end of file
diff --git a/ios/web/js_messaging/java_script_content_world.mm b/ios/web/js_messaging/java_script_content_world.mm index b570cf6..6375fa8 100644 --- a/ios/web/js_messaging/java_script_content_world.mm +++ b/ios/web/js_messaging/java_script_content_world.mm
@@ -124,31 +124,30 @@ } [user_content_controller_ addUserScript:user_script]; - // Setup Javascript message callbacks. - for (auto handlers_by_name : feature->GetScriptMessageHandlers()) { - std::unique_ptr<ScopedWKScriptMessageHandler> script_message_handler; + } + + // Setup Javascript message callbacks. + for (auto handlers_by_name : feature->GetScriptMessageHandlers()) { + std::unique_ptr<ScopedWKScriptMessageHandler> script_message_handler; #if defined(__IPHONE_14_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0 - if (@available(iOS 14, *)) { - if (content_world_) { - script_message_handler = - std::make_unique<ScopedWKScriptMessageHandler>( - user_content_controller_, - base::SysUTF8ToNSString(handlers_by_name.first), - content_world_, - base::BindRepeating(handlers_by_name.second, browser_state_)); - } - } -#endif // defined(__IPHONE14_0) - - if (!script_message_handler.get()) { + if (@available(iOS 14, *)) { + if (content_world_) { script_message_handler = std::make_unique<ScopedWKScriptMessageHandler>( user_content_controller_, - base::SysUTF8ToNSString(handlers_by_name.first), + base::SysUTF8ToNSString(handlers_by_name.first), content_world_, base::BindRepeating(handlers_by_name.second, browser_state_)); } - script_message_handlers_[feature] = std::move(script_message_handler); } +#endif // defined(__IPHONE14_0) + + if (!script_message_handler.get()) { + script_message_handler = std::make_unique<ScopedWKScriptMessageHandler>( + user_content_controller_, + base::SysUTF8ToNSString(handlers_by_name.first), + base::BindRepeating(handlers_by_name.second, browser_state_)); + } + script_message_handlers_[feature] = std::move(script_message_handler); } }
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index 65f3e37..2dde2f0 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -381,7 +381,7 @@ // Show Cast sessions in Global Media Controls. It is no-op if // kGlobalMediaControls is not enabled. const base::Feature kGlobalMediaControlsForCast{ - "GlobalMediaControlsForCast", base::FEATURE_ENABLED_BY_DEFAULT}; + "GlobalMediaControlsForCast", base::FEATURE_DISABLED_BY_DEFAULT}; // Allow Global Media Controls in system tray of CrOS. const base::Feature kGlobalMediaControlsForChromeOS{ @@ -696,6 +696,10 @@ const base::Feature kMediaFoundationVideoCapture{ "MediaFoundationVideoCapture", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enables MediaFoundation based video capture with D3D11 +const base::Feature kMediaFoundationD3D11VideoCapture{ + "MediaFoundationD3D11VideoCapture", base::FEATURE_DISABLED_BY_DEFAULT}; + // Enables VP8 decode acceleration for Windows. const base::Feature MEDIA_EXPORT kMediaFoundationVP8Decoding{ "MediaFoundationVP8Decoding", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index f57c021..c9321a91 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -233,6 +233,7 @@ MEDIA_EXPORT extern const base::Feature kMediaFoundationAV1Decoding; MEDIA_EXPORT extern const base::Feature kMediaFoundationVideoCapture; MEDIA_EXPORT extern const base::Feature kMediaFoundationVP8Decoding; +MEDIA_EXPORT extern const base::Feature kMediaFoundationD3D11VideoCapture; MEDIA_EXPORT extern const base::Feature kWasapiRawAudioCapture; #endif // defined(OS_WIN)
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc index cd1cf1ee..d5cf649 100644 --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc
@@ -2581,11 +2581,6 @@ UpdatePlayState(); } -void WebMediaPlayerImpl::OnSetAudioSink(const std::string& sink_id) { - SetSinkId(WebString::FromASCII(sink_id), - base::DoNothing::Once<base::Optional<blink::WebSetSinkIdError>>()); -} - void WebMediaPlayerImpl::OnVolumeMultiplierUpdate(double multiplier) { volume_multiplier_ = multiplier; SetVolume(volume_); @@ -3612,7 +3607,8 @@ if (IsHidden()) { if (ShouldPausePlaybackWhenHidden()) { PauseVideoIfNeeded(); - } else if (update_background_status_cb_.IsCancelled()) { + } else if (!is_background_status_change_scheduled_) { + is_background_status_change_scheduled_ = true; // Only trigger updates when we don't have one already scheduled. update_background_status_cb_.Reset( base::Bind(&WebMediaPlayerImpl::DisableVideoTrackIfNeeded, @@ -3628,6 +3624,7 @@ } } else { update_background_status_cb_.Cancel(); + is_background_status_change_scheduled_ = false; EnableVideoTrackIfNeeded(); } } @@ -3667,6 +3664,8 @@ void WebMediaPlayerImpl::DisableVideoTrackIfNeeded() { DCHECK(IsHidden()); + is_background_status_change_scheduled_ = false; + // Don't change video track while the pipeline is resuming or seeking. if (is_pipeline_resuming_ || seeking_) return;
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 78684fe..60535ceb 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -246,7 +246,6 @@ void OnFrameClosed() override; void OnFrameShown() override; void OnIdleTimeout() override; - void OnSetAudioSink(const std::string& sink_id) override; void OnVolumeMultiplierUpdate(double multiplier) override; void OnBecamePersistentVideo(bool value) override; void OnPowerExperimentState(bool state) override; @@ -995,9 +994,11 @@ OverlayInfo overlay_info_; - // TODO(crbug.com/1141533): Convert to base::CancelableOnceClosure. Previous - // attempts to do so have led to test flakiness. - base::CancelableClosure update_background_status_cb_; + base::CancelableOnceClosure update_background_status_cb_; + + // We cannot use `update_background_status_cb_.IsCancelled()` as that changes + // when the callback is run, even if not explicitly cancelled. + bool is_background_status_change_scheduled_ = false; mojo::Remote<mojom::MediaMetricsProvider> media_metrics_provider_; mojo::Remote<mojom::PlaybackEventsRecorder> playback_events_recorder_;
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc index e38820a..514d527 100644 --- a/media/blink/webmediaplayer_impl_unittest.cc +++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -636,7 +636,7 @@ bool IsVideoTrackDisabled() const { return wmpi_->video_track_disabled_; } bool IsDisableVideoTrackPending() const { - return !wmpi_->update_background_status_cb_.IsCancelled(); + return wmpi_->is_background_status_change_scheduled_; } gfx::Size GetNaturalSize() const {
diff --git a/media/capture/video/win/video_capture_device_factory_win.cc b/media/capture/video/win/video_capture_device_factory_win.cc index 4c6a79b4..d1edb94 100644 --- a/media/capture/video/win/video_capture_device_factory_win.cc +++ b/media/capture/video/win/video_capture_device_factory_win.cc
@@ -324,6 +324,8 @@ VideoCaptureDeviceFactoryWin::VideoCaptureDeviceFactoryWin() : use_media_foundation_( base::FeatureList::IsEnabled(media::kMediaFoundationVideoCapture)), + use_d3d11_with_media_foundation_(base::FeatureList::IsEnabled( + media::kMediaFoundationD3D11VideoCapture)), com_thread_("Windows Video Capture COM Thread") { if (use_media_foundation_ && !PlatformSupportsMediaFoundation()) { use_media_foundation_ = false;
diff --git a/media/capture/video/win/video_capture_device_factory_win.h b/media/capture/video/win/video_capture_device_factory_win.h index bd8b86ce..1064765 100644 --- a/media/capture/video/win/video_capture_device_factory_win.h +++ b/media/capture/video/win/video_capture_device_factory_win.h
@@ -97,7 +97,7 @@ std::vector<VideoCaptureDeviceInfo> GetDevicesInfoDirectShow(); bool use_media_foundation_; - bool use_d3d11_with_media_foundation_ = false; + bool use_d3d11_with_media_foundation_; MFSessionLifetime session_; // For calling WinRT methods on a COM initiated thread.
diff --git a/media/mojo/mojom/media_player.mojom b/media/mojo/mojom/media_player.mojom index 5e62b21f..946e5e9 100644 --- a/media/mojo/mojom/media_player.mojom +++ b/media/mojo/mojom/media_player.mojom
@@ -31,6 +31,9 @@ // Requests the media player to exit the Picture-in-Picture mode. RequestExitPictureInPicture(); + + // Set the media player sink id to |sink_id|. + SetAudioSinkId(string sink_id); }; // Implemented by MediaWebContentsObserver::MediaPlayerObserverHostImpl in the
diff --git a/pdf/accessibility.cc b/pdf/accessibility.cc index 16ea1b58..40c7cbf 100644 --- a/pdf/accessibility.cc +++ b/pdf/accessibility.cc
@@ -26,19 +26,21 @@ char_index - text_run_start_char_index < text_run.len; } -bool GetEnclosingTextRunRangeForCharRange( +// If a valid text run range is not found for the char range then return the +// fallback value. +AccessibilityTextRunRangeInfo GetEnclosingTextRunRangeForCharRange( const std::vector<AccessibilityTextRunInfo>& text_runs, int start_char_index, - int char_count, - uint32_t* start_text_run_index, - uint32_t* text_run_count) { + int char_count) { + // Initialize with fallback value. + AccessibilityTextRunRangeInfo text_range = {text_runs.size(), 0}; if (start_char_index < 0 || char_count <= 0) - return false; + return text_range; base::CheckedNumeric<uint32_t> checked_end_char_index = char_count - 1; checked_end_char_index += start_char_index; if (!checked_end_char_index.IsValid()) - return false; + return text_range; uint32_t end_char_index = checked_end_char_index.ValueOrDie(); uint32_t current_char_index = 0; base::Optional<uint32_t> start_text_run; @@ -51,13 +53,13 @@ if (start_text_run.has_value() && IsCharWithinTextRun(text_runs[i], current_char_index, end_char_index)) { - *start_text_run_index = start_text_run.value(); - *text_run_count = i - *start_text_run_index + 1; - return true; + text_range.index = start_text_run.value(); + text_range.count = i - text_range.index + 1; + break; } current_char_index += text_runs[i].len; } - return false; + return text_range; } template <typename T> @@ -79,16 +81,9 @@ link_info.url = std::move(cur_engine_info.url); link_info.index_in_page = i; link_info.bounds = cur_engine_info.bounds; - - if (!GetEnclosingTextRunRangeForCharRange( - text_runs, cur_engine_info.start_char_index, - cur_engine_info.char_count, &link_info.text_range.index, - &link_info.text_range.count)) { - // If a valid text run range is not found for the link, set the fallback - // values of |index| and |count| for |text_range| in |link_info|. - link_info.text_range.index = text_runs.size(); - link_info.text_range.count = 0; - } + link_info.text_range = GetEnclosingTextRunRangeForCharRange( + text_runs, cur_engine_info.start_char_index, + cur_engine_info.char_count); link_infos.push_back(std::move(link_info)); } std::sort(link_infos.begin(), link_infos.end(), @@ -130,17 +125,9 @@ highlight_info.bounds = cur_highlight_info.bounds; highlight_info.color = cur_highlight_info.color; highlight_info.note_text = std::move(cur_highlight_info.note_text); - - if (!GetEnclosingTextRunRangeForCharRange( - text_runs, cur_highlight_info.start_char_index, - cur_highlight_info.char_count, &highlight_info.text_range.index, - &highlight_info.text_range.count)) { - // If a valid text run range is not found for the highlight, set the - // fallback values of |index| and |count| for |text_range| in - // |highlight_info|. - highlight_info.text_range.index = text_runs.size(); - highlight_info.text_range.count = 0; - } + highlight_info.text_range = GetEnclosingTextRunRangeForCharRange( + text_runs, cur_highlight_info.start_char_index, + cur_highlight_info.char_count); highlight_infos.push_back(std::move(highlight_info)); }
diff --git a/remoting/resources/remoting_strings_hi.xtb b/remoting/resources/remoting_strings_hi.xtb index e3eb9f54..246a737 100644 --- a/remoting/resources/remoting_strings_hi.xtb +++ b/remoting/resources/remoting_strings_hi.xtb
@@ -172,7 +172,7 @@ <translation id="8525306231823319788">फ़ुल स्क्रीन</translation> <translation id="858006550102277544">टिप्पणी</translation> <translation id="8743328882720071828">क्या आप <ph name="CLIENT_USERNAME" /> को अपना कंप्यूटर देखने और नियंत्रित करने देना चाहते हैं?</translation> -<translation id="8747048596626351634">सत्र बंद हो गया या शुरू नहीं हो पाया. अगर दूरस्थ कंप्यूटर पर ~/.chrome-remote-desktop-session मौजूद है, तो पक्का करें कि यह डेस्कटॉप परिवेश या विंडो प्रबंधक जैसी देर तक चलने वाली फ़ोरग्राउंड प्रक्रिया चालू कर देता है.</translation> +<translation id="8747048596626351634">सत्र बंद हो गया या शुरू नहीं हो पाया. अगर दूरस्थ कंप्यूटर पर ~/.chrome-remote-desktop-session मौजूद है, तो पक्का करें कि यह डेस्कटॉप परिवेश या विंडो मैनेजर जैसी देर तक चलने वाली फ़ोरग्राउंड प्रक्रिया चालू कर देता है.</translation> <translation id="8804164990146287819">निजता नीति</translation> <translation id="8906511416443321782">ऑडियो कैप्चर करने और उसे 'Chrome रिमोट डेस्कटॉप' क्लाइंट पर स्ट्रीम करने के लिए, माइक्रोफ़ोन का ऐक्सेस ज़रूरी है.</translation> <translation id="9111855907838866522">आप कहीं और मौजूद अपने डिवाइस से जुड़े हुए हैं. मेन्यू खोलने के लिए, कृपया स्क्रीन पर चार अंगुलियों से टैप करें.</translation>
diff --git a/sandbox/linux/syscall_broker/broker_process.cc b/sandbox/linux/syscall_broker/broker_process.cc index d72c9d23..c2176eb 100644 --- a/sandbox/linux/syscall_broker/broker_process.cc +++ b/sandbox/linux/syscall_broker/broker_process.cc
@@ -71,10 +71,6 @@ return false; if (child_pid) { - // This string is referenced in a ChromeOS integration test; do not change. - // TODO(crbug.com/1044502): If we can fix setproctitle, the integration - // test not longer needs to look for this message. - VLOG(3) << "BrokerProcess::Init(), in parent, child is " << child_pid; // We are the parent and we have just forked our broker process. ipc_reader.reset(); broker_pid_ = child_pid; @@ -87,11 +83,6 @@ return true; } - // This string is referenced in a ChromeOS integration test; do not change. - // TODO(crbug.com/1044502): If we can fix setproctitle, the integration test - // not longer needs to look for this message. - VLOG(3) << "BrokerProcess::Init(), in child"; - // We are the broker process. Make sure to close the writer's end so that // we get notified if the client disappears. ipc_writer.reset();
diff --git a/services/tracing/public/cpp/perfetto/perfetto_config.cc b/services/tracing/public/cpp/perfetto/perfetto_config.cc index 74028e08..de0d18a 100644 --- a/services/tracing/public/cpp/perfetto/perfetto_config.cc +++ b/services/tracing/public/cpp/perfetto/perfetto_config.cc
@@ -81,9 +81,8 @@ if (!privacy_filtering_enabled) { // TODO(crbug.com/1052397): Revisit once build flag switch of lacros-chrome is // complete. -#if defined(OS_CHROMEOS) || \ - (BUILDFLAG(IS_CHROMECAST) && \ - (defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS))) +#if BUILDFLAG(IS_CHROMEOS_ASH) || \ + (BUILDFLAG(IS_CHROMECAST) && defined(OS_LINUX)) if (source_names.empty() || source_names.count(tracing::mojom::kSystemTraceDataSourceName) == 1) { AddDataSourceConfig(perfetto_config,
diff --git a/storage/common/quota/padding_key.cc b/storage/common/quota/padding_key.cc index 856927b6..14abee0 100644 --- a/storage/common/quota/padding_key.cc +++ b/storage/common/quota/padding_key.cc
@@ -12,6 +12,7 @@ #include "base/time/time.h" #include "crypto/hmac.h" #include "crypto/random.h" +#include "crypto/symmetric_key.h" #include "net/base/schemeful_site.h" #include "net/http/http_request_headers.h" #include "services/network/public/mojom/url_response_head.mojom-shared.h" @@ -37,29 +38,6 @@ } // namespace -const SymmetricKey* GetDefaultPaddingKey() { - return GetPaddingKeyInternal()->get(); -} - -std::unique_ptr<SymmetricKey> CopyDefaultPaddingKey() { - return SymmetricKey::Import(kPaddingKeyAlgorithm, - (*GetPaddingKeyInternal())->key()); -} - -std::unique_ptr<SymmetricKey> DeserializePaddingKey( - const std::string& raw_key) { - return SymmetricKey::Import(kPaddingKeyAlgorithm, raw_key); -} - -std::string SerializeDefaultPaddingKey() { - return (*GetPaddingKeyInternal())->key(); -} - -void ResetPaddingKeyForTesting() { - *GetPaddingKeyInternal() = - SymmetricKey::GenerateRandomKey(kPaddingKeyAlgorithm, 128); -} - bool ShouldPadResponseType(network::mojom::FetchResponseType type) { return type == network::mojom::FetchResponseType::kOpaque || type == network::mojom::FetchResponseType::kOpaqueRedirect; @@ -95,7 +73,7 @@ site.Serialize().c_str(), request_method.c_str(), side_data_size); crypto::HMAC hmac(crypto::HMAC::SHA256); - CHECK(hmac.Init(GetDefaultPaddingKey())); + CHECK(hmac.Init(GetPaddingKeyInternal()->get())); uint64_t digest_start = 0; CHECK(hmac.Sign(key, reinterpret_cast<uint8_t*>(&digest_start),
diff --git a/storage/common/quota/padding_key.h b/storage/common/quota/padding_key.h index ad463cb..58e9f030 100644 --- a/storage/common/quota/padding_key.h +++ b/storage/common/quota/padding_key.h
@@ -9,7 +9,6 @@ #include <string> #include "base/component_export.h" -#include "crypto/symmetric_key.h" #include "services/network/public/mojom/url_response_head.mojom-shared.h" #include "url/gurl.h" @@ -23,40 +22,6 @@ namespace storage { -COMPONENT_EXPORT(STORAGE_COMMON) -const crypto::SymmetricKey* GetDefaultPaddingKey(); - -// Returns a copy of the default key used to calculate padding sizes. -// -// The default padding key is a singleton object whose value is randomly -// generated the first time it is requested on every browser startup. In -// CacheStorage, when a cache does not have a padding key, it is assigned the -// current default key. -COMPONENT_EXPORT(STORAGE_COMMON) -std::unique_ptr<crypto::SymmetricKey> CopyDefaultPaddingKey(); - -// Builds a key whose value is the given string. -// -// May return null if deserializing fails (e.g. if the raw key is the wrong -// size). -COMPONENT_EXPORT(STORAGE_COMMON) -std::unique_ptr<crypto::SymmetricKey> DeserializePaddingKey( - const std::string& raw_key); - -// Gets the raw value of the default padding key. -// -// Each cache stores the raw value of the key that should be used when -// calculating its padding size. -COMPONENT_EXPORT(STORAGE_COMMON) -std::string SerializeDefaultPaddingKey(); - -// Resets the default key to a random value. -// -// Simulating a key change across a browser restart lets us test that padding -// calculations are using the appropriate key. -COMPONENT_EXPORT(STORAGE_COMMON) -void ResetPaddingKeyForTesting(); - // Utility method to determine if a given type of response should be padded. COMPONENT_EXPORT(STORAGE_COMMON) bool ShouldPadResponseType(network::mojom::FetchResponseType type);
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index c6742276..a07c491 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -42345,6 +42345,814 @@ } ] }, + "linux-blink-v8-oilpan": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "absl_hardening_tests", + "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/" + }, + { + "args": [ + "angle_unittests" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "angle_unittests", + "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/", + "use_isolated_scripts_api": true + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_util_unittests", + "test_id_prefix": "ninja://base/util:base_util_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_common_unittests", + "test_id_prefix": "ninja://third_party/blink/common:blink_common_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_heap_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/heap:blink_heap_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_platform_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "webkit_unit_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "boringssl_crypto_tests", + "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "boringssl_ssl_tests", + "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/" + }, + { + "args": [ + "--gtest_filter=-*UsingRealWebcam*" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "capture_unittests", + "test_id_prefix": "ninja://media/capture:capture_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cast_unittests", + "test_id_prefix": "ninja://media/cast:cast_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "components_browsertests", + "test_id_prefix": "ninja://components:components_browsertests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "components_unittests", + "test_id_prefix": "ninja://components:components_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 6 + }, + "test": "content_browsertests", + "test_id_prefix": "ninja://content/test:content_browsertests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "content_unittests", + "test_id_prefix": "ninja://content/test:content_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "crashpad_tests", + "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "crypto_unittests", + "test_id_prefix": "ninja://crypto:crypto_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "events_unittests", + "test_id_prefix": "ninja://ui/events:events_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gcm_unit_tests", + "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gin_unittests", + "test_id_prefix": "ninja://gin:gin_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "google_apis_unittests", + "test_id_prefix": "ninja://google_apis:google_apis_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gpu_unittests", + "test_id_prefix": "ninja://gpu:gpu_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gwp_asan_unittests", + "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ipc_tests", + "test_id_prefix": "ninja://ipc:ipc_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "jingle_unittests", + "test_id_prefix": "ninja://jingle:jingle_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "latency_unittests", + "test_id_prefix": "ninja://ui/latency:latency_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "libjingle_xmpp_unittests", + "test_id_prefix": "ninja://third_party/libjingle_xmpp:libjingle_xmpp_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "liburlpattern_unittests", + "test_id_prefix": "ninja://third_party/liburlpattern:liburlpattern_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "media_blink_unittests", + "test_id_prefix": "ninja://media/blink:media_blink_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "media_unittests", + "test_id_prefix": "ninja://media:media_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "midi_unittests", + "test_id_prefix": "ninja://media/midi:midi_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "mojo_unittests", + "test_id_prefix": "ninja://mojo:mojo_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "net_unittests", + "test_id_prefix": "ninja://net:net_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "perfetto_unittests", + "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "services_unittests", + "test_id_prefix": "ninja://services:services_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "shell_dialogs_unittests", + "test_id_prefix": "ninja://ui/shell_dialogs:shell_dialogs_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "skia_unittests", + "test_id_prefix": "ninja://skia:skia_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "sql_unittests", + "test_id_prefix": "ninja://sql:sql_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "storage_unittests", + "test_id_prefix": "ninja://storage:storage_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_base_unittests", + "test_id_prefix": "ninja://ui/base:ui_base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_touch_selection_unittests", + "test_id_prefix": "ninja://ui/touch_selection:ui_touch_selection_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "url_unittests", + "test_id_prefix": "ninja://url:url_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "wtf_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "zlib_unittests", + "test_id_prefix": "ninja://third_party/zlib:zlib_unittests/" + } + ], + "isolated_scripts": [ + { + "args": [ + "--num-retries=3" + ], + "isolate_name": "blink_web_tests", + "merge": { + "args": [ + "--verbose" + ], + "script": "//third_party/blink/tools/merge_web_test_results.py" + }, + "name": "blink_web_tests", + "resultdb": { + "enable": true + }, + "results_handler": "layout tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 12 + }, + "test_id_prefix": "ninja://:blink_web_tests/" + } + ] + }, "linux-chromeos-code-coverage": { "additional_compile_targets": [ "gn_all" @@ -51310,82 +52118,6 @@ "linux-perfetto-rel": { "additional_compile_targets": [ "chrome" - ], - "gtest_tests": [ - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "base_unittests", - "test_id_prefix": "ninja://base:base_unittests/" - }, - { - "args": [ - "--gtest_filter=*Tracing*:*MemoryInstrumentation*" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "perfetto_unittests", - "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/" - }, - { - "args": [ - "--gtest_filter=*Trace*:*Tracing*:*Perfetto*:*StackUnwinder*:*Hprof*" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "services_unittests", - "test_id_prefix": "ninja://services:services_unittests/" - } ] }, "linux-upload-perfetto": {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 8ad030c0..767e7133 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -4321,21 +4321,6 @@ 'zlib_unittests': {}, }, - 'perfetto_gtests': { - 'base_unittests': {}, - 'content_browsertests': { - 'args': [ - '--gtest_filter=*Tracing*:*MemoryInstrumentation*', - ], - }, - 'perfetto_unittests': {}, - 'services_unittests': { - 'args': [ - '--gtest_filter=*Trace*:*Tracing*:*Perfetto*:*StackUnwinder*:*Hprof*', - ], - }, - }, - 'performance_smoke_test_isolated_scripts': { 'performance_test_suite': { 'args': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 94ed6f5c..502040c2 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2928,6 +2928,15 @@ 'isolated_scripts': 'chromium_web_tests_and_wpt_webdriver_isolated_scripts', }, }, + 'linux-blink-v8-oilpan': { + 'mixins': [ + 'linux-xenial', + ], + 'test_suites': { + 'gtest_tests': 'chromium_gtests', + 'isolated_scripts': 'chromium_webkit_isolated_scripts', + }, + }, 'linux-chromeos-code-coverage': { 'mixins': [ 'isolate_profile_data', @@ -3037,9 +3046,6 @@ 'mixins': [ 'linux-xenial', ], - 'test_suites': { - 'gtest_tests': 'perfetto_gtests', - }, }, 'linux-upload-perfetto': { 'additional_compile_targets': [ 'trace_processor_shell' ],
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 2175a16..68f5ce8 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -7678,7 +7678,8 @@ "linux", "ios", "android", - "android_weblayer" + "android_weblayer", + "android_webview" ], "experiments": [ {
diff --git a/third_party/android_deps/support_mediarouter.flags b/third_party/android_deps/support_mediarouter.flags deleted file mode 100644 index ca57bd5..0000000 --- a/third_party/android_deps/support_mediarouter.flags +++ /dev/null
@@ -1,18 +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. - -# Help R8 to remove debug related coded. All of these static constants are -# initialized to: Log.isLoggable(DEBUG, TAG). - --assumevalues class androidx.mediarouter.app.MediaRouteControllerDialogFragment { - static boolean USE_SUPPORT_DYNAMIC_GROUP return false; -} - --assumevalues class androidx.mediarouter.media.MediaRouter { - static boolean DEBUG return false; -} - --assumevalues class androidx.mediarouter.media.RegisteredMediaRouteProvider { - static boolean DEBUG return false; -}
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index c7fad63..82bef16 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2899,7 +2899,7 @@ kForcedDarkMode = 3579, kPreferredColorSchemeDark = 3580, kPreferredColorSchemeDarkSetting = 3581, - kIdentifiabilityStudyReserved3582 = 3582, + kIdentifiabilityMediaDevicesEnumerateDevices = 3582, kIdentifiabilityStudyReserved3583 = 3583, kIdentifiabilityStudyReserved3584 = 3584, kIdentifiabilityStudyReserved3585 = 3585,
diff --git a/third_party/blink/public/platform/media/webmediaplayer_delegate.h b/third_party/blink/public/platform/media/webmediaplayer_delegate.h index e1e136be..09b8a95 100644 --- a/third_party/blink/public/platform/media/webmediaplayer_delegate.h +++ b/third_party/blink/public/platform/media/webmediaplayer_delegate.h
@@ -51,9 +51,6 @@ // discarding their decoders. virtual void OnIdleTimeout() = 0; - // Called when external controls are activated. - virtual void OnSetAudioSink(const std::string& sink_id) = 0; - // Called to control audio ducking. Output volume should be set to // |player_volume| * |multiplier|. The range of |multiplier| is [0, 1], // where 1 indicates normal (non-ducked) playback.
diff --git a/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h b/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h index 7efe9e0..56193fd 100644 --- a/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h +++ b/third_party/blink/public/web/modules/mediastream/webmediaplayer_ms.h
@@ -178,7 +178,6 @@ void OnFrameClosed() override; void OnFrameShown() override; void OnIdleTimeout() override; - void OnSetAudioSink(const std::string& sink_id) override; void OnVolumeMultiplierUpdate(double multiplier) override; void OnBecamePersistentVideo(bool value) override;
diff --git a/third_party/blink/renderer/core/editing/ime/cached_text_input_info.cc b/third_party/blink/renderer/core/editing/ime/cached_text_input_info.cc index f6a1367..ca08115 100644 --- a/third_party/blink/renderer/core/editing/ime/cached_text_input_info.cc +++ b/third_party/blink/renderer/core/editing/ime/cached_text_input_info.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include "third_party/blink/renderer/core/editing/iterators/text_iterator.h" #include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace blink { @@ -70,8 +71,17 @@ constexpr unsigned kInitialCapacity = 1 << 15; StringBuilder builder; - if (needs_text) - builder.ReserveCapacity(kInitialCapacity); + if (needs_text) { + unsigned capacity = kInitialCapacity; + if (auto* block_flow = + DynamicTo<LayoutBlockFlow>(container.GetLayoutObject())) { + if (block_flow->HasNGInlineNodeData()) { + if (const auto* mapping = NGInlineNode::GetOffsetMapping(block_flow)) + capacity = mapping->GetText().length(); + } + } + builder.ReserveCapacity(capacity); + } const Node* last_text_node = nullptr; unsigned length = 0;
diff --git a/third_party/blink/renderer/core/frame/deprecation.cc b/third_party/blink/renderer/core/frame/deprecation.cc index fa94b2b..e3ba4e78 100644 --- a/third_party/blink/renderer/core/frame/deprecation.cc +++ b/third_party/blink/renderer/core/frame/deprecation.cc
@@ -573,6 +573,16 @@ " See https://chromestatus.com/feature/6730096436051968 for " "more details."}; + case WebFeature::kV8SpeechRecognitionEvent_Interpretation_AttributeGetter: + return {"V8SpeechRecognitionEvent_Interpretation_AttributeGetter", kM91, + WillBeRemoved("SpeechRecognitionEvent's interpretation attribute", + kM91, "5769608873115648")}; + + case WebFeature::kV8SpeechRecognitionEvent_Emma_AttributeGetter: + return {"V8SpeechRecognitionEvent_Emma_AttributeGetter", kM91, + WillBeRemoved("SpeechRecognitionEvent's emma attribute", kM91, + "5769608873115648")}; + case WebFeature::kRTCPeerConnectionSdpSemanticsPlanB: return {"RTCPeerConnectionSdpSemanticsPlanB", kM93, "Plan B SDP semantics, which is used when constructing an "
diff --git a/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.cc b/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.cc index c3ccabd..a78fc3a 100644 --- a/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.cc +++ b/third_party/blink/renderer/core/frame/local_frame_ukm_aggregator.cc
@@ -323,9 +323,9 @@ sub_record.pre_fcp_aggregate += duration; if (should_report_uma_this_frame) { if (is_pre_fcp) - record.pre_fcp_uma_counter->CountMicroseconds(duration); + sub_record.pre_fcp_uma_counter->CountMicroseconds(duration); else - record.post_fcp_uma_counter->CountMicroseconds(duration); + sub_record.post_fcp_uma_counter->CountMicroseconds(duration); } } }
diff --git a/third_party/blink/renderer/core/html/build.gni b/third_party/blink/renderer/core/html/build.gni index 72f8efc4..41b918d 100644 --- a/third_party/blink/renderer/core/html/build.gni +++ b/third_party/blink/renderer/core/html/build.gni
@@ -432,6 +432,8 @@ "list_item_ordinal.h", "loading_attribute.cc", "loading_attribute.h", + "media/audio_output_device_controller.cc", + "media/audio_output_device_controller.h", "media/autoplay_policy.cc", "media/autoplay_policy.h", "media/autoplay_uma_helper.cc",
diff --git a/third_party/blink/renderer/core/html/media/audio_output_device_controller.cc b/third_party/blink/renderer/core/html/media/audio_output_device_controller.cc new file mode 100644 index 0000000..3a762f42 --- /dev/null +++ b/third_party/blink/renderer/core/html/media/audio_output_device_controller.cc
@@ -0,0 +1,35 @@ +// Copyright 2021 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 "third_party/blink/renderer/core/html/media/audio_output_device_controller.h" + +namespace blink { + +// static +const char AudioOutputDeviceController::kSupplementName[] = + "AudioOutputDeviceController"; + +// static +AudioOutputDeviceController* AudioOutputDeviceController::From( + HTMLMediaElement& element) { + return Supplement<HTMLMediaElement>::From<AudioOutputDeviceController>( + element); +} + +void AudioOutputDeviceController::Trace(Visitor* visitor) const { + Supplement<HTMLMediaElement>::Trace(visitor); +} + +AudioOutputDeviceController::AudioOutputDeviceController( + HTMLMediaElement& element) + : Supplement<HTMLMediaElement>(element) {} + +// static +void AudioOutputDeviceController::ProvideTo( + HTMLMediaElement& element, + AudioOutputDeviceController* controller) { + Supplement<HTMLMediaElement>::ProvideTo(element, controller); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/html/media/audio_output_device_controller.h b/third_party/blink/renderer/core/html/media/audio_output_device_controller.h new file mode 100644 index 0000000..1bbb2e76 --- /dev/null +++ b/third_party/blink/renderer/core/html/media/audio_output_device_controller.h
@@ -0,0 +1,34 @@ +// Copyright 2021 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 THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_AUDIO_OUTPUT_DEVICE_CONTROLLER_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_AUDIO_OUTPUT_DEVICE_CONTROLLER_H_ + +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/html/media/html_media_element.h" +#include "third_party/blink/renderer/platform/supplementable.h" + +namespace blink { + +class CORE_EXPORT AudioOutputDeviceController + : public Supplement<HTMLMediaElement> { + public: + static const char kSupplementName[]; + + static AudioOutputDeviceController* From(HTMLMediaElement&); + + virtual void SetSinkId(const String&) = 0; + + void Trace(Visitor*) const override; + + protected: + explicit AudioOutputDeviceController(HTMLMediaElement&); + + // To be called by the implementation to register itself. + static void ProvideTo(HTMLMediaElement&, AudioOutputDeviceController*); +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_AUDIO_OUTPUT_DEVICE_CONTROLLER_H_
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 91629fd..34554f24 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
@@ -75,6 +75,7 @@ #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/fullscreen/fullscreen.h" #include "third_party/blink/renderer/core/html/html_source_element.h" +#include "third_party/blink/renderer/core/html/media/audio_output_device_controller.h" #include "third_party/blink/renderer/core/html/media/autoplay_policy.h" #include "third_party/blink/renderer/core/html/media/html_media_element_controls_list.h" #include "third_party/blink/renderer/core/html/media/media_controls.h" @@ -4509,6 +4510,13 @@ setCurrentTime(currentTime() - seconds); } +void HTMLMediaElement::SetAudioSinkId(const String& sink_id) { + auto* audio_output_controller = AudioOutputDeviceController::From(*this); + DCHECK(audio_output_controller); + + audio_output_controller->SetSinkId(sink_id); +} + bool HTMLMediaElement::MediaShouldBeOpaque() const { return !IsMediaDataCorsSameOrigin() && ready_state_ < kHaveMetadata && EffectivePreloadType() != WebMediaPlayer::kPreloadNone;
diff --git a/third_party/blink/renderer/core/html/media/html_media_element.h b/third_party/blink/renderer/core/html/media/html_media_element.h index cbc0623..787e5bd 100644 --- a/third_party/blink/renderer/core/html/media/html_media_element.h +++ b/third_party/blink/renderer/core/html/media/html_media_element.h
@@ -501,6 +501,7 @@ void RequestSeekBackward(base::TimeDelta seek_time) override; void RequestEnterPictureInPicture() override {} void RequestExitPictureInPicture() override {} + void SetAudioSinkId(const String&) override; void LoadTimerFired(TimerBase*); void ProgressEventTimerFired(TimerBase*);
diff --git a/third_party/blink/renderer/core/inspector/inspector_contrast.cc b/third_party/blink/renderer/core/inspector/inspector_contrast.cc index 253d0516..ab69b7b 100644 --- a/third_party/blink/renderer/core/inspector/inspector_contrast.cc +++ b/third_party/blink/renderer/core/inspector/inspector_contrast.cc
@@ -127,10 +127,17 @@ if (rtree_built_) return; - document_->GetFrame() - ->ContentLayoutObject() - ->GetFrameView() - ->UpdateLifecycleToPrePaintClean(DocumentUpdateReason::kInspector); + LocalFrame* frame = document_->GetFrame(); + if (!frame) + return; + LayoutView* layout_view = frame->ContentLayoutObject(); + if (!layout_view) + return; + + if (!layout_view->GetFrameView()->UpdateLifecycleToPrePaintClean( + DocumentUpdateReason::kInspector)) { + return; + } InspectorDOMAgent::CollectNodes( document_, INT_MAX, true, @@ -295,8 +302,19 @@ if (!style) continue; + // If background elements are hidden, ignore their background colors. + if (element != top_element && style->Visibility() == EVisibility::kHidden) + continue; + Color background_color = style->VisitedDependentColor(GetCSSPropertyBackgroundColor()); + + // Opacity applies to the entire element so mix it with the alpha channel. + if (style->HasOpacity()) { + background_color = background_color.CombineWithAlpha( + background_color.Alpha() / 255 * style->Opacity()); + } + bool found_non_transparent_color = false; if (background_color.Alpha() != 0) { found_non_transparent_color = true;
diff --git a/third_party/blink/renderer/core/inspector/inspector_contrast_test.cc b/third_party/blink/renderer/core/inspector/inspector_contrast_test.cc index c59614d..1e1b8c4 100644 --- a/third_party/blink/renderer/core/inspector/inspector_contrast_test.cc +++ b/third_party/blink/renderer/core/inspector/inspector_contrast_test.cc
@@ -59,6 +59,50 @@ EXPECT_EQ(0u, colors.size()); } +TEST_F(InspectorContrastTest, GetBackgroundColorsBgOpacity) { + GetDocument().body()->setInnerHTML(R"HTML( + <div style="position: relative"> + <div style="position: absolute; width: 100px; height: 100px; background-color: black; opacity: 0.1;"></div> + <div id="target" style="position: absolute; width: 100px; height: 100px; color: black;">test</div> + </div> + )HTML"); + GetDocument().View()->UpdateAllLifecyclePhasesForTest(); + Element* target = GetDocument().getElementById("target"); + InspectorContrast contrast(&GetDocument()); + Vector<Color> colors = contrast.GetBackgroundColors(target); + EXPECT_EQ(1u, colors.size()); + EXPECT_EQ("#e5e5e5", colors.at(0).Serialized()); +} + +TEST_F(InspectorContrastTest, GetBackgroundColorsBgOpacityParent) { + GetDocument().body()->setInnerHTML(R"HTML( + <div style="background-color: black; opacity: 0.1;"> + <div id="target" style="color: black;">test</div> + </div> + )HTML"); + GetDocument().View()->UpdateAllLifecyclePhasesForTest(); + Element* target = GetDocument().getElementById("target"); + InspectorContrast contrast(&GetDocument()); + Vector<Color> colors = contrast.GetBackgroundColors(target); + EXPECT_EQ(1u, colors.size()); + EXPECT_EQ("#e5e5e5", colors.at(0).Serialized()); +} + +TEST_F(InspectorContrastTest, GetBackgroundColorsBgHidden) { + GetDocument().body()->setInnerHTML(R"HTML( + <div style="position: relative"> + <div style="position: absolute; width: 100px; height: 100px; background-color: black; visibility: hidden;"></div> + <div id="target" style="position: absolute; width: 100px; height: 100px; color: black;">test</div> + </div> + )HTML"); + GetDocument().View()->UpdateAllLifecyclePhasesForTest(); + Element* target = GetDocument().getElementById("target"); + InspectorContrast contrast(&GetDocument()); + Vector<Color> colors = contrast.GetBackgroundColors(target); + EXPECT_EQ(1u, colors.size()); + EXPECT_EQ("#ffffff", colors.at(0).Serialized()); +} + TEST_F(InspectorContrastTest, GetBackgroundColorsWithOpacity) { GetDocument().body()->setInnerHTML(R"HTML( <div style="background-color: rgba(0,0,0,0.75);">
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index b4cfa6d3..2facefe 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -4691,13 +4691,12 @@ } bool check_min_max_height = false; - bool compute_size_as_replaced = ShouldComputeSizeAsReplaced(); // The parent box is flexing us, so it has increased or decreased our // height. We have to grab our cached flexible height. if (HasOverrideLogicalHeight()) { h = Length::Fixed(OverrideLogicalHeight()); - } else if (compute_size_as_replaced) { + } else if (ShouldComputeSizeAsReplaced()) { h = Length::Fixed(ComputeReplacedLogicalHeight() + BorderAndPaddingLogicalHeight()); } else { @@ -4707,8 +4706,7 @@ LayoutUnit height_result; if (check_min_max_height) { - if (!compute_size_as_replaced && - ShouldComputeLogicalHeightFromAspectRatio()) { + if (ShouldComputeLogicalHeightFromAspectRatio()) { NGBoxStrut border_padding(BorderStart() + ComputedCSSPaddingStart(), BorderEnd() + ComputedCSSPaddingEnd(), BorderBefore() + ComputedCSSPaddingBefore(),
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc index fe571dec..701c826c 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
@@ -31,16 +31,15 @@ Vector<GridItemData> out_of_flow_items; ConstructAndAppendGridItems(&grid_items, &out_of_flow_items); - NGGridLayoutAlgorithmTrackCollection algorithm_column_track_collection; - NGGridLayoutAlgorithmTrackCollection algorithm_row_track_collection; + NGGridLayoutAlgorithmTrackCollection column_track_collection; + NGGridLayoutAlgorithmTrackCollection row_track_collection; NGGridPlacement grid_placement( Style(), ComputeAutomaticRepetitions(kForColumns, LengthResolvePhase::kLayout), ComputeAutomaticRepetitions(kForRows, LengthResolvePhase::kLayout)); - BuildAlgorithmTrackCollections( - &grid_items, &algorithm_column_track_collection, - &algorithm_row_track_collection, &grid_placement); + BuildAlgorithmTrackCollections(&grid_items, &column_track_collection, + &row_track_collection, &grid_placement); // Create a vector of grid item indices using |NGGridChildIterator| order. Vector<wtf_size_t> reordered_item_indices(grid_items.size()); @@ -48,24 +47,24 @@ reordered_item_indices[i] = i; // Cache track span properties for grid items. - CacheGridItemsTrackSpanProperties(algorithm_column_track_collection, - &grid_items, &reordered_item_indices); - CacheGridItemsTrackSpanProperties(algorithm_row_track_collection, &grid_items, + CacheGridItemsTrackSpanProperties(column_track_collection, &grid_items, + &reordered_item_indices); + CacheGridItemsTrackSpanProperties(row_track_collection, &grid_items, &reordered_item_indices); // Resolve inline size. - ComputeUsedTrackSizes(&algorithm_column_track_collection, &grid_items, - &reordered_item_indices); + ComputeUsedTrackSizes(SizingConstraint::kLayout, &column_track_collection, + &grid_items, &reordered_item_indices); // Resolve block size. - ComputeUsedTrackSizes(&algorithm_row_track_collection, &grid_items, - &reordered_item_indices); + ComputeUsedTrackSizes(SizingConstraint::kLayout, &row_track_collection, + &grid_items, &reordered_item_indices); // Place grid and out of flow items. LayoutUnit intrinsic_block_size; LayoutUnit block_size; - PlaceItems(algorithm_column_track_collection, algorithm_row_track_collection, - &grid_items, &out_of_flow_items, &grid_placement, - &intrinsic_block_size, &block_size); + PlaceItems(column_track_collection, row_track_collection, &grid_items, + &out_of_flow_items, &grid_placement, &intrinsic_block_size, + &block_size); container_builder_.SetIntrinsicBlockSize(intrinsic_block_size); container_builder_.SetFragmentsTotalBlockSize(block_size); @@ -74,6 +73,24 @@ return container_builder_.ToBoxFragment(); } +namespace { + +LayoutUnit ComputeTotalTrackSize( + const NGGridLayoutAlgorithmTrackCollection& track_collection, + const LayoutUnit grid_gap) { + LayoutUnit total_track_size; + for (auto set_iterator = track_collection.GetSetIterator(); + !set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { + const auto& set = set_iterator.CurrentSet(); + total_track_size += set.BaseSize() + set.TrackCount() * grid_gap; + } + // Clamp to zero to avoid a negative |grid_gap| when there are no tracks. + total_track_size -= grid_gap; + return total_track_size.ClampNegativeToZero(); +} + +} // namespace + MinMaxSizesResult NGGridLayoutAlgorithm::ComputeMinMaxSizes( const MinMaxSizesInput& input) const { // TODO(janewman): Handle the cases typically done via: @@ -83,16 +100,16 @@ Vector<GridItemData> grid_items; ConstructAndAppendGridItems(&grid_items); - NGGridLayoutAlgorithmTrackCollection algorithm_column_track_collection; - NGGridLayoutAlgorithmTrackCollection algorithm_row_track_collection; + NGGridLayoutAlgorithmTrackCollection column_track_collection_for_min_size; + NGGridLayoutAlgorithmTrackCollection row_track_collection; NGGridPlacement grid_placement( Style(), ComputeAutomaticRepetitions(kForColumns, LengthResolvePhase::kIntrinsic), ComputeAutomaticRepetitions(kForRows, LengthResolvePhase::kIntrinsic)); - BuildAlgorithmTrackCollections( - &grid_items, &algorithm_column_track_collection, - &algorithm_row_track_collection, &grid_placement); + BuildAlgorithmTrackCollections(&grid_items, + &column_track_collection_for_min_size, + &row_track_collection, &grid_placement); // Create a vector of grid item indices using |NGGridChildIterator| order. Vector<wtf_size_t> reordered_item_indices(grid_items.size()); @@ -100,41 +117,27 @@ reordered_item_indices[i] = i; // Cache track span properties for grid items. - CacheGridItemsTrackSpanProperties(algorithm_column_track_collection, + CacheGridItemsTrackSpanProperties(column_track_collection_for_min_size, &grid_items, &reordered_item_indices); - // Resolve inline size. - ComputeUsedTrackSizes(&algorithm_column_track_collection, &grid_items, + // Before the track sizing algorithm, create a copy of the column collection; + // one will be used to compute the min size and the other for the max size. + NGGridLayoutAlgorithmTrackCollection column_track_collection_for_max_size = + column_track_collection_for_min_size; + + // Resolve inline size under a 'min-content' constraint. + ComputeUsedTrackSizes(SizingConstraint::kMinContent, + &column_track_collection_for_min_size, &grid_items, + &reordered_item_indices); + // Resolve inline size under a 'max-content' constraint. + ComputeUsedTrackSizes(SizingConstraint::kMaxContent, + &column_track_collection_for_max_size, &grid_items, &reordered_item_indices); const LayoutUnit grid_gap = GridGap(kForColumns); - - // Now the columns should have their used track size and growth limit, each - // adding up to match the min and max size of the grid respectively. - MinMaxSizes sizes; - - // If the track collection does not have any tracks, then we do not want to - // subtract the grid gap from the last track. - bool has_tracks = false; - for (auto column_set_iterator = - algorithm_column_track_collection.GetSetIterator(); - !column_set_iterator.IsAtEnd(); column_set_iterator.MoveToNextSet()) { - const auto& set = column_set_iterator.CurrentSet(); - has_tracks |= set.TrackCount(); - LayoutUnit gap = set.TrackCount() * grid_gap; - - // Aggregate min/max size contributions for this set of tracks. - LayoutUnit min_size_contribution = set.BaseSize() + gap; - sizes.min_size += min_size_contribution; - sizes.max_size += set.GrowthLimit() == kIndefiniteSize - ? min_size_contribution - : set.GrowthLimit() + gap; - } - - // Subtract the gap from the end of the last track. Only do this if there is - // at least one track. - if (has_tracks) - sizes -= grid_gap; + MinMaxSizes sizes{ + ComputeTotalTrackSize(column_track_collection_for_min_size, grid_gap), + ComputeTotalTrackSize(column_track_collection_for_max_size, grid_gap)}; // TODO(janewman): Confirm that |input.percentage_resolution_block_size| // isn't used within grid layout. @@ -341,6 +344,7 @@ namespace { +// TODO(ethavar): Consider doing this in-place, as it's not used more than once. // Returns an iterator for every |NGGridSet| contained within an item's span in // the relevant track collection. NGGridLayoutAlgorithmTrackCollection::SetIterator GetSetIteratorForItem( @@ -355,7 +359,7 @@ // TODO(ethavar): Current implementation of this method simply returns the // preferred size of the grid item in the relevant direction. We should follow -// the definitions from https://drafts.csswg.org/css-grid-1/#algo-spanning-items +// the definitions from https://drafts.csswg.org/css-grid-2/#algo-spanning-items // (i.e. compute minimum, min-content, and max-content contributions). LayoutUnit NGGridLayoutAlgorithm::ContributionSizeForGridItem( const GridItemData& grid_item, @@ -515,10 +519,13 @@ else contribution = BlockSize(); break; + case GridItemContributionType::kForFreeSpace: + NOTREACHED() << "|kForFreeSpace| should only be used to distribute extra " + "space in maximize tracks and stretch auto tracks steps."; + break; } DCHECK_NE(contribution, kIndefiniteSize); - return contribution + ((track_direction == kForColumns) ? grid_item.margins.InlineSum() : grid_item.margins.BlockSum()); @@ -958,24 +965,35 @@ TrackSpanProperties::kHasIntrinsicTrack); } -// https://drafts.csswg.org/css-grid-1/#algo-track-sizing +// https://drafts.csswg.org/css-grid-2/#algo-track-sizing void NGGridLayoutAlgorithm::ComputeUsedTrackSizes( + SizingConstraint sizing_constraint, NGGridLayoutAlgorithmTrackCollection* track_collection, Vector<GridItemData>* grid_items, Vector<wtf_size_t>* reordered_item_indices) const { DCHECK(track_collection && grid_items); - LayoutUnit content_box_size = track_collection->IsForColumns() + const GridTrackSizingDirection track_direction = + track_collection->Direction(); + LayoutUnit content_box_size = (track_direction == kForColumns) ? child_percentage_size_.inline_size : child_percentage_size_.block_size; - // 1. Initialize track sizes (https://drafts.csswg.org/css-grid-1/#algo-init). + // 1. Initialize track sizes (https://drafts.csswg.org/css-grid-2/#algo-init). for (auto set_iterator = track_collection->GetSetIterator(); !set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { - NGGridSet& current_set = set_iterator.CurrentSet(); + auto& current_set = set_iterator.CurrentSet(); const GridTrackSize& track_size = current_set.TrackSize(); + if (track_size.IsFitContent()) { + // Indefinite lengths cannot occur, as they must be normalized to 'auto'. + DCHECK(!track_size.FitContentTrackBreadth().HasPercentage() || + content_box_size != kIndefiniteSize); + current_set.SetFitContentLimit(MinimumValueForLength( + track_size.FitContentTrackBreadth().length(), content_box_size)); + continue; + } + if (track_size.HasFixedMinTrackBreadth()) { - // Indefinite lengths cannot occur, as they’re treated as 'auto'. DCHECK(!track_size.MinTrackBreadth().HasPercentage() || content_box_size != kIndefiniteSize); @@ -1010,6 +1028,11 @@ // 2. Resolve intrinsic track sizing functions to absolute lengths. ResolveIntrinsicTrackSizes(track_collection, grid_items, reordered_item_indices); + + // 3. If the free space is positive, distribute it equally to the base sizes + // of all tracks, freezing tracks as they reach their growth limits (and + // continuing to grow the unfrozen tracks as needed). + MaximizeTracks(sizing_constraint, track_collection); } // Helpers for the track sizing algorithm. @@ -1017,11 +1040,12 @@ using GridItemContributionType = NGGridLayoutAlgorithm::GridItemContributionType; +using GridSetVector = Vector<NGGridSet*, 16>; // Returns the corresponding size to be increased by accommodating a grid item's // contribution; for intrinsic min track sizing functions, return the base size. // For intrinsic max track sizing functions, return the growth limit. -static LayoutUnit AffectedSizeForContribution( +LayoutUnit AffectedSizeForContribution( const NGGridSet& set, GridItemContributionType contribution_type) { switch (contribution_type) { @@ -1030,18 +1054,23 @@ case GridItemContributionType::kForMaxContentMinimums: return set.BaseSize(); case GridItemContributionType::kForIntrinsicMaximums: - case GridItemContributionType::kForMaxContentMaximums: + case GridItemContributionType::kForMaxContentMaximums: { LayoutUnit growth_limit = set.GrowthLimit(); // For infinite growth limits, substitute with the track's base size. if (growth_limit == kIndefiniteSize) return set.BaseSize(); return growth_limit; + } + case GridItemContributionType::kForFreeSpace: + NOTREACHED(); + return LayoutUnit(); } } -static void GrowAffectedSizeByPlannedIncrease( +void GrowAffectedSizeByPlannedIncrease( NGGridSet& set, GridItemContributionType contribution_type) { + bool did_growth_limit_become_finite = false; switch (contribution_type) { case GridItemContributionType::kForIntrinsicMinimums: case GridItemContributionType::kForContentBasedMinimums: @@ -1049,23 +1078,35 @@ set.SetBaseSize(set.BaseSize() + set.PlannedIncrease()); break; case GridItemContributionType::kForIntrinsicMaximums: - case GridItemContributionType::kForMaxContentMaximums: + case GridItemContributionType::kForMaxContentMaximums: { LayoutUnit growth_limit = set.GrowthLimit(); // If the affected size to grow is an infinite growth limit, set it to the // track's base size plus the planned increase. - if (growth_limit == kIndefiniteSize) + if (growth_limit == kIndefiniteSize) { set.SetGrowthLimit(set.BaseSize() + set.PlannedIncrease()); - else + did_growth_limit_become_finite = true; + } else { set.SetGrowthLimit(growth_limit + set.PlannedIncrease()); + } + break; + } + case GridItemContributionType::kForFreeSpace: + NOTREACHED(); break; } + + // Mark any tracks whose growth limit changed from infinite to finite in this + // step as infinitely growable for the next step. + if (contribution_type == GridItemContributionType::kForIntrinsicMaximums) + set.SetInfinitelyGrowable(did_growth_limit_become_finite); + else + set.SetInfinitelyGrowable(false); } // Returns true if a set should increase its used size according to the steps in -// https://drafts.csswg.org/css-grid-1/#algo-spanning-items; false otherwise. -static bool IsContributionAppliedToSet( - const NGGridSet& set, - GridItemContributionType contribution_type) { +// https://drafts.csswg.org/css-grid-2/#algo-spanning-items; false otherwise. +bool IsContributionAppliedToSet(const NGGridSet& set, + GridItemContributionType contribution_type) { switch (contribution_type) { case GridItemContributionType::kForIntrinsicMinimums: return set.TrackSize().HasIntrinsicMinTrackBreadth(); @@ -1074,23 +1115,24 @@ case GridItemContributionType::kForMaxContentMinimums: // TODO(ethavar): Check if the grid container is being sized under a // 'max-content' constraint to consider 'auto' min track sizing functions, - // see https://drafts.csswg.org/css-grid-1/#track-size-max-content-min. + // see https://drafts.csswg.org/css-grid-2/#track-size-max-content-min. return set.TrackSize().HasMaxContentMinTrackBreadth(); case GridItemContributionType::kForIntrinsicMaximums: return set.TrackSize().HasIntrinsicMaxTrackBreadth(); case GridItemContributionType::kForMaxContentMaximums: return set.TrackSize().HasMaxContentOrAutoMaxTrackBreadth(); + case GridItemContributionType::kForFreeSpace: + return true; } } -// https://drafts.csswg.org/css-grid-1/#extra-space +// https://drafts.csswg.org/css-grid-2/#extra-space // Returns true if a set's used size should be consider to grow beyond its limit // (see the "Distribute space beyond limits" section); otherwise, false. // Note that we will deliberately return false in cases where we don't have a // collection of tracks different than "all affected tracks". -static bool ShouldUsedSizeGrowBeyondLimit( - const NGGridSet& set, - GridItemContributionType contribution_type) { +bool ShouldUsedSizeGrowBeyondLimit(const NGGridSet& set, + GridItemContributionType contribution_type) { // This function assumes that we already determined that extra space // distribution will be applied to the specified set. DCHECK(IsContributionAppliedToSet(set, contribution_type)); @@ -1103,16 +1145,17 @@ return set.TrackSize().HasMaxContentMaxTrackBreadth(); case GridItemContributionType::kForIntrinsicMaximums: case GridItemContributionType::kForMaxContentMaximums: + case GridItemContributionType::kForFreeSpace: return false; } } -static bool IsDistributionForGrowthLimits( - GridItemContributionType contribution_type) { +bool IsDistributionForGrowthLimits(GridItemContributionType contribution_type) { switch (contribution_type) { case GridItemContributionType::kForIntrinsicMinimums: case GridItemContributionType::kForContentBasedMinimums: case GridItemContributionType::kForMaxContentMinimums: + case GridItemContributionType::kForFreeSpace: return false; case GridItemContributionType::kForIntrinsicMaximums: case GridItemContributionType::kForMaxContentMaximums: @@ -1125,7 +1168,7 @@ // We define growth potential = limit - affected size; for base sizes, the limit // is its growth limit. For growth limits, the limit is infinity if it is marked // as "infinitely growable", and equal to the growth limit otherwise. -static LayoutUnit GrowthPotentialForSet( +LayoutUnit GrowthPotentialForSet( const NGGridSet& set, GridItemContributionType contribution_type, InfinitelyGrowableBehavior infinitely_growable_behavior = @@ -1166,22 +1209,36 @@ // Otherwise, this set has infinite growth potential. return kIndefiniteSize; } + case GridItemContributionType::kForFreeSpace: { + LayoutUnit growth_limit = set.GrowthLimit(); + DCHECK_NE(growth_limit, kIndefiniteSize); + return growth_limit - set.BaseSize(); + } } } -} // namespace - -// Follow the definitions from https://drafts.csswg.org/css-grid-1/#extra-space; +// Follow the definitions from https://drafts.csswg.org/css-grid-2/#extra-space; // notice that this method replaces the notion of "tracks" with "sets". -void NGGridLayoutAlgorithm::DistributeExtraSpaceToSets( +void DistributeExtraSpaceToSets( LayoutUnit extra_space, GridItemContributionType contribution_type, - NGGridSetVector* sets_to_grow, - NGGridSetVector* sets_to_grow_beyond_limit) { - DCHECK(sets_to_grow && extra_space >= 0); - if (!extra_space) - return; + GridSetVector* sets_to_grow, + GridSetVector* sets_to_grow_beyond_limit = nullptr) { + DCHECK(extra_space && sets_to_grow); + if (extra_space == kIndefiniteSize) { + // Infinite extra space should only happen when distributing free space at + // the maximize tracks step; in such case, we can simplify this method by + // "filling" every track base size up to their growth limit. + DCHECK_EQ(contribution_type, GridItemContributionType::kForFreeSpace); + for (NGGridSet* set : *sets_to_grow) { + set->SetItemIncurredIncrease( + GrowthPotentialForSet(*set, contribution_type)); + } + return; + } + + DCHECK_GT(extra_space, 0); #if DCHECK_IS_ON() if (IsDistributionForGrowthLimits(contribution_type)) DCHECK_EQ(sets_to_grow, sets_to_grow_beyond_limit); @@ -1191,7 +1248,7 @@ for (NGGridSet* set : *sets_to_grow) { set->SetItemIncurredIncrease(LayoutUnit()); - // From the first note in https://drafts.csswg.org/css-grid-1/#extra-space: + // From the first note in https://drafts.csswg.org/css-grid-2/#extra-space: // - If the affected size was a growth limit and the track is not marked // "infinitely growable", then each item-incurred increase will be zero. // @@ -1304,15 +1361,10 @@ DCHECK_GE(extra_space, 0); } } - - // For each affected track, if the track's item-incurred increase is larger - // than its planned increase, set the planned increase to that value. - for (NGGridSet* set : *sets_to_grow) { - set->SetPlannedIncrease( - std::max(set->ItemIncurredIncrease(), set->PlannedIncrease())); - } } +} // namespace + void NGGridLayoutAlgorithm::IncreaseTrackSizesToAccommodateGridItems( ReorderedGridItems::Iterator group_begin, ReorderedGridItems::Iterator group_end, @@ -1327,8 +1379,8 @@ set_iterator.CurrentSet().SetPlannedIncrease(LayoutUnit()); } - NGGridSetVector sets_to_grow; - NGGridSetVector sets_to_grow_beyond_limit; + GridSetVector sets_to_grow; + GridSetVector sets_to_grow_beyond_limit; for (auto grid_item = group_begin; grid_item != group_end; ++grid_item) { // We can skip this item if it doesn't span intrinsic tracks. if (!grid_item->IsSpanningIntrinsicTrack(track_direction)) @@ -1368,10 +1420,20 @@ *grid_item, track_direction, contribution_type); extra_space -= spanned_tracks_size; + if (extra_space <= 0) + continue; + DistributeExtraSpaceToSets( extra_space.ClampNegativeToZero(), contribution_type, &sets_to_grow, sets_to_grow_beyond_limit.IsEmpty() ? &sets_to_grow : &sets_to_grow_beyond_limit); + + // For each affected track, if the track's item-incurred increase is larger + // than its planned increase, set the planned increase to that value. + for (NGGridSet* set : sets_to_grow) { + set->SetPlannedIncrease( + std::max(set->ItemIncurredIncrease(), set->PlannedIncrease())); + } } for (auto set_iterator = track_collection->GetSetIterator(); @@ -1381,7 +1443,7 @@ } } -// https://drafts.csswg.org/css-grid-1/#algo-content +// https://drafts.csswg.org/css-grid-2/#algo-content void NGGridLayoutAlgorithm::ResolveIntrinsicTrackSizes( NGGridLayoutAlgorithmTrackCollection* track_collection, Vector<GridItemData>* grid_items, @@ -1412,16 +1474,16 @@ CompareGridItemsForIntrinsicTrackResolution); // First, process the items that don't span a flexible track. - ReorderedGridItems reordered_items = + auto reordered_items = ReorderedGridItems(*reordered_item_indices, *grid_items); - ReorderedGridItems::Iterator current_group_begin = reordered_items.begin(); + auto current_group_begin = reordered_items.begin(); while (current_group_begin != reordered_items.end() && !current_group_begin->IsSpanningFlexibleTrack(track_direction)) { // Each iteration considers all items with the same span size. wtf_size_t current_group_span_size = current_group_begin->SpanSize(track_direction); - ReorderedGridItems::Iterator current_group_end = current_group_begin; + auto current_group_end = current_group_begin; do { DCHECK(!current_group_end->IsSpanningFlexibleTrack(track_direction)); ++current_group_end; @@ -1433,14 +1495,89 @@ IncreaseTrackSizesToAccommodateGridItems( current_group_begin, current_group_end, GridItemContributionType::kForIntrinsicMinimums, track_collection); + IncreaseTrackSizesToAccommodateGridItems( + current_group_begin, current_group_end, + GridItemContributionType::kForContentBasedMinimums, track_collection); + IncreaseTrackSizesToAccommodateGridItems( + current_group_begin, current_group_end, + GridItemContributionType::kForMaxContentMinimums, track_collection); + IncreaseTrackSizesToAccommodateGridItems( + current_group_begin, current_group_end, + GridItemContributionType::kForIntrinsicMaximums, track_collection); + IncreaseTrackSizesToAccommodateGridItems( + current_group_begin, current_group_end, + GridItemContributionType::kForMaxContentMaximums, track_collection); - // TODO(ethavar): Add remaining stages, mark infinitely growable sets... + // Move to the next group with greater span size. current_group_begin = current_group_end; } - // TODO(ethavar): drafts.csswg.org/css-grid-1/#algo-spanning-flex-items + // TODO(ethavar): drafts.csswg.org/css-grid-2/#algo-spanning-flex-items // Repeat the previous step instead considering (together, rather than grouped // by span) all items that do span a track with a flexible sizing function. + + // If any track still has an infinite growth limit (i.e. it had no items + // placed in it), set its growth limit to its base size. + for (auto set_iterator = track_collection->GetSetIterator(); + !set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { + auto& set = set_iterator.CurrentSet(); + if (set.GrowthLimit() == kIndefiniteSize) + set.SetGrowthLimit(set.BaseSize()); + } +} + +// https://drafts.csswg.org/css-grid-2/#algo-grow-tracks +void NGGridLayoutAlgorithm::MaximizeTracks( + SizingConstraint sizing_constraint, + NGGridLayoutAlgorithmTrackCollection* track_collection) const { + const GridTrackSizingDirection track_direction = + track_collection->Direction(); + + LayoutUnit free_space; + switch (sizing_constraint) { + case SizingConstraint::kLayout: + free_space = (track_direction == kForColumns) + ? ChildAvailableSize().inline_size + : ChildAvailableSize().block_size; + if (free_space != kIndefiniteSize) { + free_space -= ComputeTotalTrackSize( + *track_collection, GridGap(track_direction, free_space)); + // If tracks consume more space than the grid container has available, + // clamp the free space to zero as there's no more room left to grow. + free_space = free_space.ClampNegativeToZero(); + } + break; + case SizingConstraint::kMaxContent: + // If sizing under a max-content constraint, the free space is infinite. + free_space = kIndefiniteSize; + break; + case SizingConstraint::kMinContent: + // If sizing under a min-content constraint, the free space is zero. + break; + } + if (!free_space) + return; + + GridSetVector sets_to_grow; + sets_to_grow.ReserveCapacity(track_collection->SetCount()); + for (auto set_iterator = track_collection->GetSetIterator(); + !set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { + sets_to_grow.push_back(&set_iterator.CurrentSet()); + } + + DistributeExtraSpaceToSets( + free_space, GridItemContributionType::kForFreeSpace, &sets_to_grow); + + for (auto set_iterator = track_collection->GetSetIterator(); + !set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { + auto& set = set_iterator.CurrentSet(); + set.SetBaseSize(set.BaseSize() + set.ItemIncurredIncrease()); + } + + // TODO(ethavar): If this would cause the grid to be larger than the grid + // container’s inner size as limited by its 'max-width/height', then redo this + // step, treating the available grid space as equal to the grid container’s + // inner size when it’s sized to its 'max-width/height'. } namespace { @@ -1468,21 +1605,10 @@ }; auto ComputeFreeSpaceAndTrackCount = [&track_collection, &available_size, &grid_gap]() -> FreeSpaceAndTrackCount { - LayoutUnit total_track_size; - wtf_size_t track_count = 0u; - for (auto set_iterator = track_collection.GetSetIterator(); - !set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { - const auto& set = set_iterator.CurrentSet(); - total_track_size += set.BaseSize() + set.TrackCount() * grid_gap; - track_count += set.TrackCount(); - } - - // Subtract the gap from the end of the last track. Only do this if there - // is at least one track. - if (track_count) - total_track_size -= grid_gap; - - return {available_size - total_track_size, track_count}; + // Since we normalized grid lines to be 0-indexed, the end line of the + // implicit grid is equivalent to the total track count. + return {available_size - ComputeTotalTrackSize(track_collection, grid_gap), + track_collection.EndLineOfImplicitGrid()}; }; // The default alignment, perform adjustments on top of this.
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h index 60b60585..a2ae223 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.h
@@ -27,13 +27,14 @@ // This enum corresponds to each step used to accommodate grid items across // intrinsic tracks according to their min and max track sizing functions, as - // defined in https://drafts.csswg.org/css-grid-1/#algo-spanning-items. + // defined in https://drafts.csswg.org/css-grid-2/#algo-spanning-items. enum class GridItemContributionType { kForIntrinsicMinimums, kForContentBasedMinimums, kForMaxContentMinimums, kForIntrinsicMaximums, - kForMaxContentMaximums + kForMaxContentMaximums, + kForFreeSpace }; struct ItemSetIndices { @@ -99,21 +100,12 @@ explicit NGGridLayoutAlgorithm(const NGLayoutAlgorithmParams& params); scoped_refptr<const NGLayoutResult> Layout() override; - MinMaxSizesResult ComputeMinMaxSizes(const MinMaxSizesInput&) const override; private: - using NGGridSetVector = Vector<NGGridSet*, 16>; - friend class NGGridLayoutAlgorithmTest; - enum class GridLayoutAlgorithmState { - kMeasuringItems, - kResolvingInlineSize, - kResolvingBlockSize, - kPlacingGridItems, - kCompletedLayout - }; + enum class SizingConstraint { kLayout, kMinContent, kMaxContent }; class ReorderedGridItems { public: @@ -188,12 +180,13 @@ // Calculates from the min and max track sizing functions the used track size. void ComputeUsedTrackSizes( + SizingConstraint sizing_constraint, NGGridLayoutAlgorithmTrackCollection* track_collection, Vector<GridItemData>* grid_items, Vector<wtf_size_t>* reordered_item_indices) const; // These methods implement the steps of the algorithm for intrinsic track size - // resolution defined in https://drafts.csswg.org/css-grid-1/#algo-content. + // resolution defined in https://drafts.csswg.org/css-grid-2/#algo-content. void ResolveIntrinsicTrackSizes( NGGridLayoutAlgorithmTrackCollection* track_collection, Vector<GridItemData>* grid_items, @@ -205,11 +198,9 @@ GridItemContributionType contribution_type, NGGridLayoutAlgorithmTrackCollection* track_collection) const; - static void DistributeExtraSpaceToSets( - LayoutUnit extra_space, - GridItemContributionType contribution_type, - NGGridSetVector* sets_to_grow, - NGGridSetVector* sets_to_grow_beyond_limit); + void MaximizeTracks( + SizingConstraint sizing_constraint, + NGGridLayoutAlgorithmTrackCollection* track_collection) const; // Lays out and computes inline and block offsets for grid items. void PlaceItems(
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm_test.cc index 9f2ae89..0e1a775 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm_test.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm_test.cc
@@ -54,8 +54,8 @@ LengthResolvePhase::kLayout)); algorithm.BuildAlgorithmTrackCollections( - &grid_items_, &algorithm_column_track_collection_, - &algorithm_row_track_collection_, &grid_placement); + &grid_items_, &column_track_collection_, &row_track_collection_, + &grid_placement); // Create a vector of grid item indices using |NGGridChildIterator| order. Vector<wtf_size_t> reordered_item_indices(grid_items_.size()); @@ -64,23 +64,24 @@ // Cache track span properties for grid items. algorithm.CacheGridItemsTrackSpanProperties( - algorithm_column_track_collection_, &grid_items_, - &reordered_item_indices); + column_track_collection_, &grid_items_, &reordered_item_indices); algorithm.CacheGridItemsTrackSpanProperties( - algorithm_row_track_collection_, &grid_items_, &reordered_item_indices); + row_track_collection_, &grid_items_, &reordered_item_indices); // Resolve inline size. - algorithm.ComputeUsedTrackSizes(&algorithm_column_track_collection_, - &grid_items_, &reordered_item_indices); + algorithm.ComputeUsedTrackSizes( + NGGridLayoutAlgorithm::SizingConstraint::kLayout, + &column_track_collection_, &grid_items_, &reordered_item_indices); // Resolve block size. - algorithm.ComputeUsedTrackSizes(&algorithm_row_track_collection_, - &grid_items_, &reordered_item_indices); + algorithm.ComputeUsedTrackSizes( + NGGridLayoutAlgorithm::SizingConstraint::kLayout, + &row_track_collection_, &grid_items_, &reordered_item_indices); } NGGridLayoutAlgorithmTrackCollection& TrackCollection( GridTrackSizingDirection track_direction) { - return (track_direction == kForColumns) ? algorithm_column_track_collection_ - : algorithm_row_track_collection_; + return (track_direction == kForColumns) ? column_track_collection_ + : row_track_collection_; } // Helper methods to access private data on NGGridLayoutAlgorithm. This class @@ -180,8 +181,8 @@ Vector<NGGridLayoutAlgorithm::GridItemData> grid_items_; Vector<NGGridLayoutAlgorithm::GridItemData> out_of_flow_items_; - NGGridLayoutAlgorithmTrackCollection algorithm_column_track_collection_; - NGGridLayoutAlgorithmTrackCollection algorithm_row_track_collection_; + NGGridLayoutAlgorithmTrackCollection column_track_collection_; + NGGridLayoutAlgorithmTrackCollection row_track_collection_; }; TEST_F(NGGridLayoutAlgorithmTest, NGGridLayoutAlgorithmMeasuring) { @@ -1087,8 +1088,8 @@ for (wtf_size_t i = 0; i < growth_limits.size(); ++i) EXPECT_EQ(expected_column_growth_limits[i], growth_limits[i]); - Vector<LayoutUnit> expected_row_base_sizes = {LayoutUnit(0), LayoutUnit(50), - LayoutUnit(40)}; + Vector<LayoutUnit> expected_row_base_sizes = {LayoutUnit(80), LayoutUnit(50), + LayoutUnit(70)}; Vector<LayoutUnit> expected_row_growth_limits = { LayoutUnit(100), LayoutUnit(50), LayoutUnit(70)};
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc index c9fd17d..deec384 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_placement.cc
@@ -360,14 +360,18 @@ (track_direction == kForColumns) ? out_of_flow_item_style.GridColumnStart().IsAuto() : out_of_flow_item_style.GridRowStart().IsAuto(); - if (is_start_line_auto || !track_collection.IsTrackWithinBounds(*start_line)) + if (is_start_line_auto || + !track_collection.IsGridLineWithinImplicitGrid(*start_line)) { *start_line = kNotFound; + } bool is_end_line_auto = (track_direction == kForColumns) ? out_of_flow_item_style.GridColumnEnd().IsAuto() : out_of_flow_item_style.GridRowEnd().IsAuto(); - if (is_end_line_auto || !track_collection.IsTrackWithinBounds(*end_line - 1)) + if (is_end_line_auto || + !track_collection.IsGridLineWithinImplicitGrid(*end_line - 1)) { *end_line = kNotFound; + } } } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.cc b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.cc index ec80579..9eb42c9 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.cc +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.cc
@@ -11,14 +11,6 @@ constexpr wtf_size_t NGGridTrackCollectionBase::kInvalidRangeIndex; -bool NGGridTrackCollectionBase::IsTrackWithinBounds( - wtf_size_t track_number) const { - DCHECK_NE(track_number, kInvalidRangeIndex); - wtf_size_t last_range_index = RangeCount() - 1; - return track_number < - RangeTrackNumber(last_range_index) + RangeTrackCount(last_range_index); -} - wtf_size_t NGGridTrackCollectionBase::RangeIndexFromTrackNumber( wtf_size_t track_number) const { wtf_size_t upper = RangeCount(); @@ -27,7 +19,8 @@ // We can't look for a range in a collection with no ranges. DCHECK_NE(upper, 0u); // We don't expect a |track_number| outside of the bounds of the collection. - DCHECK(IsTrackWithinBounds(track_number)); + DCHECK_LT(track_number, + RangeTrackNumber(upper - 1) + RangeTrackCount(upper - 1)); // Do a binary search on the tracks. wtf_size_t range = upper - lower; @@ -51,7 +44,6 @@ range = upper - lower; } } - return lower; } @@ -409,7 +401,7 @@ fit_content_limit_(kIndefiniteSize), is_infinitely_growable_(false) { if (is_collapsed) { - // From https://drafts.csswg.org/css-grid-1/#collapsed-track: "A collapsed + // From https://drafts.csswg.org/css-grid-2/#collapsed-track: "A collapsed // track is treated as having a fixed track sizing function of '0px'". track_size_ = GridTrackSize(Length::Fixed(), Length::Fixed()); } @@ -434,7 +426,7 @@ } } else { // Normalize |track_size_| into a |kMinMaxTrackSizing| type; follow the - // definitions from https://drafts.csswg.org/css-grid-1/#algo-terms. + // definitions from https://drafts.csswg.org/css-grid-2/#algo-terms. bool is_unresolvable_percentage_min_function = is_content_box_size_indefinite && track_size_.MinTrackBreadth().HasPercentage(); @@ -589,7 +581,7 @@ for (wtf_size_t i = 0; i < new_range.set_count; ++i) { const NGGridSet& set = sets_[new_range.starting_set_index + i]; - // From https://drafts.csswg.org/css-grid-1/#algo-terms, a <flex> minimum + // From https://drafts.csswg.org/css-grid-2/#algo-terms, a <flex> minimum // sizing function shouldn't happen as it would be normalized to 'auto'. DCHECK(!set.TrackSize().HasFlexMinTrackBreadth()); is_range_spanning_flexible_track |= @@ -606,6 +598,17 @@ ranges_.push_back(new_range); } +wtf_size_t NGGridLayoutAlgorithmTrackCollection::EndLineOfImplicitGrid() const { + wtf_size_t last_range_index = RangeCount() - 1; + return RangeTrackNumber(last_range_index) + RangeTrackCount(last_range_index); +} + +bool NGGridLayoutAlgorithmTrackCollection::IsGridLineWithinImplicitGrid( + wtf_size_t grid_line) const { + DCHECK_NE(grid_line, kInvalidRangeIndex); + return grid_line < EndLineOfImplicitGrid(); +} + NGGridSet& NGGridLayoutAlgorithmTrackCollection::SetAt(wtf_size_t set_index) { DCHECK_LT(set_index, SetCount()); return sets_[set_index];
diff --git a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.h b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.h index fd78fb7..50ae6a13 100644 --- a/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.h +++ b/third_party/blink/renderer/core/layout/ng/grid/ng_grid_track_collection.h
@@ -49,8 +49,6 @@ wtf_size_t range_track_count_; }; - bool IsTrackWithinBounds(wtf_size_t track_number) const; - // Gets the range index for the range that contains the given track number. wtf_size_t RangeIndexFromTrackNumber(wtf_size_t track_number) const; @@ -195,7 +193,7 @@ public: NGGridSet(wtf_size_t track_count, bool is_collapsed); // |is_content_box_size_indefinite| is used to normalize percentage track - // sizing functions; from https://drafts.csswg.org/css-grid-1/#track-sizes: + // sizing functions; from https://drafts.csswg.org/css-grid-2/#track-sizes: // "If the size of the grid container depends on the size of its tracks, // then the <percentage> must be treated as 'auto'". NGGridSet(wtf_size_t track_count, @@ -217,6 +215,9 @@ void SetPlannedIncrease(LayoutUnit planned_increase) { planned_increase_ = planned_increase; } + void SetFitContentLimit(LayoutUnit fit_content_limit) { + fit_content_limit_ = fit_content_limit; + } void SetItemIncurredIncrease(LayoutUnit item_incurred_increase) { item_incurred_increase_ = item_incurred_increase; } @@ -309,6 +310,9 @@ const NGGridBlockTrackCollection& block_track_collection, bool is_content_box_size_indefinite); + wtf_size_t EndLineOfImplicitGrid() const; + bool IsGridLineWithinImplicitGrid(wtf_size_t grid_line) const; + // Returns the number of sets in the collection. wtf_size_t SetCount() const; // Returns a reference to the set located at position |set_index|.
diff --git a/third_party/blink/renderer/core/svg/svg_external_document_cache.cc b/third_party/blink/renderer/core/svg/svg_external_document_cache.cc index c1dffa7..b75f73d4 100644 --- a/third_party/blink/renderer/core/svg/svg_external_document_cache.cc +++ b/third_party/blink/renderer/core/svg/svg_external_document_cache.cc
@@ -58,7 +58,7 @@ } // namespace -Document* SVGExternalDocumentCache::Entry::GetDocument() { +Document* SVGResourceDocumentContent::GetDocument() { if (resource_->IsLoaded()) { // If this entry saw a revalidation, re-parse the document. // TODO(fs): This will be inefficient for successful revalidations, so we @@ -73,11 +73,11 @@ return document_; } -const KURL& SVGExternalDocumentCache::Entry::Url() const { +const KURL& SVGResourceDocumentContent::Url() const { return resource_->Url(); } -void SVGExternalDocumentCache::Entry::Trace(Visitor* visitor) const { +void SVGResourceDocumentContent::Trace(Visitor* visitor) const { visitor->Trace(resource_); visitor->Trace(document_); visitor->Trace(context_); @@ -99,7 +99,7 @@ SVGExternalDocumentCache::SVGExternalDocumentCache(Document& document) : Supplement<Document>(document) {} -SVGExternalDocumentCache::Entry* SVGExternalDocumentCache::Get( +SVGResourceDocumentContent* SVGExternalDocumentCache::Get( ResourceClient* client, const KURL& url, const AtomicString& initiator_name, @@ -120,8 +120,10 @@ if (!resource) return nullptr; auto& entry = entries_.insert(resource, nullptr).stored_value->value; - if (!entry) - entry = MakeGarbageCollected<Entry>(resource, execution_context); + if (!entry) { + entry = MakeGarbageCollected<SVGResourceDocumentContent>(resource, + execution_context); + } if (resource->IsCacheValidator()) entry->SetWasRevalidating(); return entry;
diff --git a/third_party/blink/renderer/core/svg/svg_external_document_cache.h b/third_party/blink/renderer/core/svg/svg_external_document_cache.h index d65938b5..aee3b4d 100644 --- a/third_party/blink/renderer/core/svg/svg_external_document_cache.h +++ b/third_party/blink/renderer/core/svg/svg_external_document_cache.h
@@ -34,6 +34,7 @@ class Document; class ExecutionContext; class ResourceClient; +class SVGResourceDocumentContent; class TextResource; class CORE_EXPORT SVGExternalDocumentCache final @@ -45,35 +46,38 @@ explicit SVGExternalDocumentCache(Document&); void Trace(Visitor*) const override; - class CORE_EXPORT Entry final : public GarbageCollected<Entry> { - public: - Entry(TextResource* resource, ExecutionContext* context) - : resource_(resource), context_(context) { - DCHECK(resource_); - DCHECK(context_); - } - void SetWasRevalidating() { was_revalidating_ = true; } - - Document* GetDocument(); - const KURL& Url() const; - - void Trace(Visitor*) const; - - private: - Member<TextResource> resource_; - Member<Document> document_; - Member<ExecutionContext> context_; - bool was_revalidating_ = false; - }; - - Entry* Get(ResourceClient*, - const KURL&, - const AtomicString& initiator_name, - network::mojom::blink::CSPDisposition = - network::mojom::blink::CSPDisposition::CHECK); + SVGResourceDocumentContent* Get( + ResourceClient*, + const KURL&, + const AtomicString& initiator_name, + network::mojom::blink::CSPDisposition = + network::mojom::blink::CSPDisposition::CHECK); private: - HeapHashMap<WeakMember<Resource>, Member<Entry>> entries_; + HeapHashMap<WeakMember<Resource>, Member<SVGResourceDocumentContent>> + entries_; +}; + +class CORE_EXPORT SVGResourceDocumentContent final + : public GarbageCollected<SVGResourceDocumentContent> { + public: + SVGResourceDocumentContent(TextResource* resource, ExecutionContext* context) + : resource_(resource), context_(context) { + DCHECK(resource_); + DCHECK(context_); + } + void SetWasRevalidating() { was_revalidating_ = true; } + + Document* GetDocument(); + const KURL& Url() const; + + void Trace(Visitor*) const; + + private: + Member<TextResource> resource_; + Member<Document> document_; + Member<ExecutionContext> context_; + bool was_revalidating_ = false; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/svg/svg_resource.cc b/third_party/blink/renderer/core/svg/svg_resource.cc index 2f69af2..c0a8aa6 100644 --- a/third_party/blink/renderer/core/svg/svg_resource.cc +++ b/third_party/blink/renderer/core/svg/svg_resource.cc
@@ -10,6 +10,7 @@ #include "third_party/blink/renderer/core/dom/tree_scope.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_resource_container.h" #include "third_party/blink/renderer/core/layout/svg/svg_resources_cycle_solver.h" +#include "third_party/blink/renderer/core/svg/svg_external_document_cache.h" #include "third_party/blink/renderer/core/svg/svg_uri_reference.h" #include "third_party/blink/renderer/platform/loader/fetch/fetch_initiator_type_names.h" #include "third_party/blink/renderer/platform/loader/fetch/resource.h" @@ -177,17 +178,17 @@ ExternalSVGResource::ExternalSVGResource(const KURL& url) : url_(url) {} void ExternalSVGResource::Load(Document& document) { - if (cache_entry_) + if (document_content_) return; - cache_entry_ = SVGExternalDocumentCache::From(document)->Get( + document_content_ = SVGExternalDocumentCache::From(document)->Get( this, url_, fetch_initiator_type_names::kCSS); target_ = ResolveTarget(); } void ExternalSVGResource::LoadWithoutCSP(Document& document) { - if (cache_entry_) + if (document_content_) return; - cache_entry_ = SVGExternalDocumentCache::From(document)->Get( + document_content_ = SVGExternalDocumentCache::From(document)->Get( this, url_, fetch_initiator_type_names::kCSS, network::mojom::blink::CSPDisposition::DO_NOT_CHECK); target_ = ResolveTarget(); @@ -206,11 +207,11 @@ } Element* ExternalSVGResource::ResolveTarget() { - if (!cache_entry_) + if (!document_content_) return nullptr; if (!url_.HasFragmentIdentifier()) return nullptr; - Document* external_document = cache_entry_->GetDocument(); + Document* external_document = document_content_->GetDocument(); if (!external_document) return nullptr; AtomicString decoded_fragment(DecodeURLEscapeSequences( @@ -219,7 +220,7 @@ } void ExternalSVGResource::Trace(Visitor* visitor) const { - visitor->Trace(cache_entry_); + visitor->Trace(document_content_); SVGResource::Trace(visitor); ResourceClient::Trace(visitor); }
diff --git a/third_party/blink/renderer/core/svg/svg_resource.h b/third_party/blink/renderer/core/svg/svg_resource.h index 87544ad..cc8ac77 100644 --- a/third_party/blink/renderer/core/svg/svg_resource.h +++ b/third_party/blink/renderer/core/svg/svg_resource.h
@@ -6,7 +6,6 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_SVG_SVG_RESOURCE_H_ #include "base/macros.h" -#include "third_party/blink/renderer/core/svg/svg_external_document_cache.h" #include "third_party/blink/renderer/core/svg/svg_resource_client.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_client.h" @@ -20,6 +19,7 @@ class Element; class IdTargetObserver; class LayoutSVGResourceContainer; +class SVGResourceDocumentContent; class SVGResourcesCycleSolver; class TreeScope; @@ -145,7 +145,7 @@ void NotifyFinished(Resource*) override; String DebugName() const override; - Member<SVGExternalDocumentCache::Entry> cache_entry_; + Member<SVGResourceDocumentContent> document_content_; KURL url_; };
diff --git a/third_party/blink/renderer/core/svg/svg_use_element.cc b/third_party/blink/renderer/core/svg/svg_use_element.cc index 9c6725e..058b2e5 100644 --- a/third_party/blink/renderer/core/svg/svg_use_element.cc +++ b/third_party/blink/renderer/core/svg/svg_use_element.cc
@@ -36,6 +36,7 @@ #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/layout/svg/layout_svg_transformable_container.h" #include "third_party/blink/renderer/core/svg/svg_animated_length.h" +#include "third_party/blink/renderer/core/svg/svg_external_document_cache.h" #include "third_party/blink/renderer/core/svg/svg_g_element.h" #include "third_party/blink/renderer/core/svg/svg_length_context.h" #include "third_party/blink/renderer/core/svg/svg_svg_element.h" @@ -93,7 +94,7 @@ SVGUseElement::~SVGUseElement() = default; void SVGUseElement::Trace(Visitor* visitor) const { - visitor->Trace(cache_entry_); + visitor->Trace(document_content_); visitor->Trace(x_); visitor->Trace(y_); visitor->Trace(width_); @@ -196,12 +197,12 @@ element_url_is_local_ = url_string.StartsWith('#'); if (!IsStructurallyExternal() || !GetDocument().IsActive()) { ClearResource(); - cache_entry_ = nullptr; + document_content_ = nullptr; return; } if (!element_url_.HasFragmentIdentifier() || - (cache_entry_ && - EqualIgnoringFragmentIdentifier(element_url_, cache_entry_->Url()))) { + (document_content_ && EqualIgnoringFragmentIdentifier( + element_url_, document_content_->Url()))) { return; } @@ -214,8 +215,8 @@ context_document = To<LocalDOMWindow>(GetDocument().GetExecutionContext())->document(); } - cache_entry_ = SVGExternalDocumentCache::From(*context_document) - ->Get(this, element_url_, localName()); + document_content_ = SVGExternalDocumentCache::From(*context_document) + ->Get(this, element_url_, localName()); } void SVGUseElement::SvgAttributeChanged( @@ -315,9 +316,9 @@ WrapWeakPersistent(this))); } } - if (!cache_entry_ || !cache_entry_->GetDocument()) + if (!document_content_ || !document_content_->GetDocument()) return nullptr; - return cache_entry_->GetDocument()->getElementById(element_identifier); + return document_content_->GetDocument()->getElementById(element_identifier); } SVGElement* SVGUseElement::InstanceRoot() const { @@ -593,7 +594,7 @@ return; InvalidateShadowTree(); - if (resource->ErrorOccurred() || !cache_entry_->GetDocument()) { + if (resource->ErrorOccurred() || !document_content_->GetDocument()) { DispatchEvent(*Event::Create(event_type_names::kError)); } else { if (have_fired_load_event_)
diff --git a/third_party/blink/renderer/core/svg/svg_use_element.h b/third_party/blink/renderer/core/svg/svg_use_element.h index 2c710eb6..383b1ab 100644 --- a/third_party/blink/renderer/core/svg/svg_use_element.h +++ b/third_party/blink/renderer/core/svg/svg_use_element.h
@@ -24,7 +24,6 @@ #include "base/gtest_prod_util.h" #include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/core/svg/svg_external_document_cache.h" #include "third_party/blink/renderer/core/svg/svg_geometry_element.h" #include "third_party/blink/renderer/core/svg/svg_graphics_element.h" #include "third_party/blink/renderer/core/svg/svg_uri_reference.h" @@ -34,6 +33,7 @@ namespace blink { class SVGAnimatedLength; +class SVGResourceDocumentContent; class SVGUseElement final : public SVGGraphicsElement, public SVGURIReference, @@ -109,7 +109,7 @@ String DebugName() const override; void UpdateTargetReference(); - Member<SVGExternalDocumentCache::Entry> cache_entry_; + Member<SVGResourceDocumentContent> document_content_; Member<SVGAnimatedLength> x_; Member<SVGAnimatedLength> y_;
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc index 3eedf01..5d88746 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -3408,8 +3408,12 @@ DCHECK(children_dirty_); children_dirty_ = false; - if (!CanHaveChildren()) + if (!CanHaveChildren()) { + NOTREACHED() + << "Should not reach AddChildren() if CanHaveChildren() is false " + << ToString(true, true); return; + } if (RoleValue() == ax::mojom::blink::Role::kStaticText || RoleValue() == ax::mojom::blink::Role::kLineBreak) {
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 9a2822d..662f073 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -609,7 +609,6 @@ AXObject::AXObject(AXObjectCacheImpl& ax_object_cache) : id_(0), parent_(nullptr), - children_dirty_(true), role_(ax::mojom::blink::Role::kUnknown), aria_role_(ax::mojom::blink::Role::kUnknown), explicit_container_id_(0), @@ -653,6 +652,9 @@ DCHECK(parent_ || IsA<Document>(GetNode())) << "The following node should have a parent: " << GetNode(); + // First time object is initialized, it hasn't computed children yet. + SetNeedsToUpdateChildren(); // Called after role_ is set. + // Initialize all other cached values. UpdateCachedAttributeValuesIfNeeded(false); } @@ -3780,6 +3782,16 @@ #endif } +bool AXObject::NeedsToUpdateChildren() const { + DCHECK(!children_dirty_ || CanHaveChildren()) + << "This needs to update children but cannot have children: " << this; + return children_dirty_; +} + +void AXObject::SetNeedsToUpdateChildren() { + children_dirty_ = CanHaveChildren(); +} + void AXObject::ClearChildren() { // Detach all weak pointers from immediate children to their parents. // First check to make sure the child's parent wasn't already reassigned.
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index a7c4e604..6b18832 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -1081,8 +1081,8 @@ bool ShouldUseLayoutObjectTraversalForChildren() const; virtual bool CanHaveChildren() const { return true; } void UpdateChildrenIfNecessary(); - bool NeedsToUpdateChildren() const { return children_dirty_; } - void SetNeedsToUpdateChildren() { children_dirty_ = true; } + bool NeedsToUpdateChildren() const; + void SetNeedsToUpdateChildren(); virtual void ClearChildren(); void DetachFromParent() { parent_ = nullptr; } virtual void SelectedOptions(AXObjectVector&) const {}
diff --git a/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.cc b/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.cc index 4b63698..521eac5f0 100644 --- a/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.cc +++ b/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.cc
@@ -152,7 +152,22 @@ } // namespace -HTMLMediaElementAudioOutputDevice::HTMLMediaElementAudioOutputDevice() {} +HTMLMediaElementAudioOutputDevice::HTMLMediaElementAudioOutputDevice( + HTMLMediaElement& element) + : AudioOutputDeviceController(element) {} + +// static +HTMLMediaElementAudioOutputDevice& HTMLMediaElementAudioOutputDevice::From( + HTMLMediaElement& element) { + HTMLMediaElementAudioOutputDevice* self = + static_cast<HTMLMediaElementAudioOutputDevice*>( + AudioOutputDeviceController::From(element)); + if (!self) { + self = MakeGarbageCollected<HTMLMediaElementAudioOutputDevice>(element); + AudioOutputDeviceController::ProvideTo(element, self); + } + return *self; +} String HTMLMediaElementAudioOutputDevice::sinkId(HTMLMediaElement& element) { HTMLMediaElementAudioOutputDevice& aod_element = @@ -179,23 +194,20 @@ return promise; } -const char HTMLMediaElementAudioOutputDevice::kSupplementName[] = - "HTMLMediaElementAudioOutputDevice"; +void HTMLMediaElementAudioOutputDevice::SetSinkId(const String& sink_id) { + // No need to call WebFrameClient::CheckIfAudioSinkExistsAndIsAuthorized as + // this call is not coming from content and should already be allowed. + WebMediaPlayer* web_media_player = GetSupplementable()->GetWebMediaPlayer(); + if (!web_media_player) + return; -HTMLMediaElementAudioOutputDevice& HTMLMediaElementAudioOutputDevice::From( - HTMLMediaElement& element) { - HTMLMediaElementAudioOutputDevice* supplement = - Supplement<HTMLMediaElement>::From<HTMLMediaElementAudioOutputDevice>( - element); - if (!supplement) { - supplement = MakeGarbageCollected<HTMLMediaElementAudioOutputDevice>(); - ProvideTo(element, supplement); - } - return *supplement; + sink_id_ = sink_id; + + web_media_player->SetSinkId(sink_id_, base::DoNothing()); } void HTMLMediaElementAudioOutputDevice::Trace(Visitor* visitor) const { - Supplement<HTMLMediaElement>::Trace(visitor); + AudioOutputDeviceController::Trace(visitor); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h b/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h index ddd7128..d26931e3 100644 --- a/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h +++ b/third_party/blink/renderer/modules/audio_output_devices/html_media_element_audio_output_device.h
@@ -7,10 +7,10 @@ #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" +#include "third_party/blink/renderer/core/html/media/audio_output_device_controller.h" #include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/heap/handle.h" -#include "third_party/blink/renderer/platform/supplementable.h" namespace blink { @@ -19,20 +19,23 @@ class MODULES_EXPORT HTMLMediaElementAudioOutputDevice final : public GarbageCollected<HTMLMediaElementAudioOutputDevice>, - public Supplement<HTMLMediaElement> { + public AudioOutputDeviceController { public: - static const char kSupplementName[]; + HTMLMediaElementAudioOutputDevice(HTMLMediaElement&); - HTMLMediaElementAudioOutputDevice(); + static HTMLMediaElementAudioOutputDevice& From(HTMLMediaElement&); - void Trace(Visitor*) const override; static String sinkId(HTMLMediaElement&); static ScriptPromise setSinkId(ScriptState*, HTMLMediaElement&, const String& sink_id); - static HTMLMediaElementAudioOutputDevice& From(HTMLMediaElement&); void setSinkId(const String&); + // AudioOutputDeviceController implementation. + void SetSinkId(const String&) override; + + void Trace(Visitor*) const override; + private: String sink_id_; };
diff --git a/third_party/blink/renderer/modules/mediastream/media_devices.cc b/third_party/blink/renderer/modules/mediastream/media_devices.cc index 7ca2442..986bbaf 100644 --- a/third_party/blink/renderer/modules/mediastream/media_devices.cc +++ b/third_party/blink/renderer/modules/mediastream/media_devices.cc
@@ -317,7 +317,7 @@ void RecordEnumeratedDevices(ScriptPromiseResolver* resolver, const MediaDeviceInfoVector& media_devices) { if (!IdentifiabilityStudySettings::Get()->IsWebFeatureAllowed( - WebFeature::kMediaDevicesEnumerateDevices)) { + WebFeature::kIdentifiabilityMediaDevicesEnumerateDevices)) { return; } Document* document = LocalDOMWindow::From(resolver->GetScriptState()) @@ -325,13 +325,13 @@ ->GetDocument(); IdentifiableTokenBuilder builder; for (const auto& device_info : media_devices) { - builder.AddToken(IdentifiabilityBenignStringToken(device_info->deviceId())); + // Ignore device_id since that varies per-site. builder.AddToken(IdentifiabilityBenignStringToken(device_info->kind())); builder.AddToken(IdentifiabilityBenignStringToken(device_info->label())); - builder.AddToken(IdentifiabilityBenignStringToken(device_info->groupId())); + // Ignore group_id since that is varies per-site. } IdentifiabilityMetricBuilder(document->UkmSourceID()) - .SetWebfeature(WebFeature::kMediaDevicesEnumerateDevices, + .SetWebfeature(WebFeature::kIdentifiabilityMediaDevicesEnumerateDevices, builder.GetToken()) .Record(document->UkmRecorder()); }
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_track_underlying_sink_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_track_underlying_sink_test.cc index 51886b4..0124062b 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_video_track_underlying_sink_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_track_underlying_sink_test.cc
@@ -72,8 +72,10 @@ PushableMediaStreamVideoSource* pushable_video_source_; }; +// TODO(1153092): Test flakes, likely due to completing before background +// thread has had chance to call OnVideoFrame(). TEST_F(MediaStreamVideoTrackUnderlyingSinkTest, - WriteToStreamForwardsToMediaStreamSink) { + DISABLED_WriteToStreamForwardsToMediaStreamSink) { V8TestingScope v8_scope; ScriptState* script_state = v8_scope.GetScriptState(); auto* underlying_sink = CreateUnderlyingSink(script_state);
diff --git a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc index 8f3dd0da8..a7a328a 100644 --- a/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc +++ b/third_party/blink/renderer/modules/mediastream/webmediaplayer_ms.cc
@@ -1081,11 +1081,6 @@ void WebMediaPlayerMS::OnIdleTimeout() {} -void WebMediaPlayerMS::OnSetAudioSink(const std::string& sink_id) { - SetSinkId(WebString::FromASCII(sink_id), - base::DoNothing::Once<base::Optional<blink::WebSetSinkIdError>>()); -} - void WebMediaPlayerMS::OnVolumeMultiplierUpdate(double multiplier) { // TODO(perkj, magjed): See TODO in OnPlay(). }
diff --git a/third_party/blink/renderer/modules/speech/speech_recognition_event.idl b/third_party/blink/renderer/modules/speech/speech_recognition_event.idl index 812cb323..63bef195 100644 --- a/third_party/blink/renderer/modules/speech/speech_recognition_event.idl +++ b/third_party/blink/renderer/modules/speech/speech_recognition_event.idl
@@ -35,6 +35,6 @@ readonly attribute unsigned long resultIndex; readonly attribute SpeechRecognitionResultList? results; - [Measure] readonly attribute Document? interpretation; - [Measure] readonly attribute Document? emma; + [DeprecateAs=V8SpeechRecognitionEvent_Interpretation_AttributeGetter] readonly attribute Document? interpretation; + [DeprecateAs=V8SpeechRecognitionEvent_Emma_AttributeGetter] readonly attribute Document? emma; };
diff --git a/third_party/blink/renderer/platform/heap/BUILD.gn b/third_party/blink/renderer/platform/heap/BUILD.gn index 58652b5..1e21395 100644 --- a/third_party/blink/renderer/platform/heap/BUILD.gn +++ b/third_party/blink/renderer/platform/heap/BUILD.gn
@@ -104,6 +104,7 @@ "v8_wrapper/blink_gc_memory_dump_provider.h", "v8_wrapper/collection_support/heap_hash_table_backing.h", "v8_wrapper/collection_support/heap_vector_backing.h", + "v8_wrapper/custom_spaces.cc", "v8_wrapper/custom_spaces.h", "v8_wrapper/disallow_new_wrapper.h", "v8_wrapper/garbage_collected.h",
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.cc b/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.cc new file mode 100644 index 0000000..1832f69f7 --- /dev/null +++ b/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.cc
@@ -0,0 +1,21 @@ +// Copyright 2021 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 "third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h" + +namespace blink { + +// static +constexpr cppgc::CustomSpaceIndex HeapVectorBackingSpace::kSpaceIndex; + +// static +constexpr cppgc::CustomSpaceIndex HeapHashTableBackingSpace::kSpaceIndex; + +// static +constexpr cppgc::CustomSpaceIndex NodeSpace::kSpaceIndex; + +// static +constexpr cppgc::CustomSpaceIndex CSSValueSpace::kSpaceIndex; + +} // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h b/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h index 9802dc8..35437fd 100644 --- a/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h +++ b/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_CUSTOM_SPACES_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_CUSTOM_SPACES_H_ +#include "third_party/blink/renderer/platform/platform_export.h" #include "v8/include/cppgc/custom-space.h" namespace blink { @@ -15,26 +16,26 @@ // indices of all custom spaces form a sequence starting at 0. See // `cppgc::CustomSpace` for details. -class HeapVectorBackingSpace +class PLATFORM_EXPORT HeapVectorBackingSpace : public cppgc::CustomSpace<HeapVectorBackingSpace> { public: static constexpr cppgc::CustomSpaceIndex kSpaceIndex = 0; static constexpr bool kSupportsCompaction = true; }; -class HeapHashTableBackingSpace +class PLATFORM_EXPORT HeapHashTableBackingSpace : public cppgc::CustomSpace<HeapHashTableBackingSpace> { public: static constexpr cppgc::CustomSpaceIndex kSpaceIndex = 1; static constexpr bool kSupportsCompaction = true; }; -class NodeSpace : public cppgc::CustomSpace<NodeSpace> { +class PLATFORM_EXPORT NodeSpace : public cppgc::CustomSpace<NodeSpace> { public: static constexpr cppgc::CustomSpaceIndex kSpaceIndex = 2; }; -class CSSValueSpace : public cppgc::CustomSpace<CSSValueSpace> { +class PLATFORM_EXPORT CSSValueSpace : public cppgc::CustomSpace<CSSValueSpace> { public: static constexpr cppgc::CustomSpaceIndex kSpaceIndex = 3; };
diff --git a/third_party/blink/renderer/platform/wtf/text/ascii_fast_path.h b/third_party/blink/renderer/platform/wtf/text/ascii_fast_path.h index 24a6bee..ae9c780 100644 --- a/third_party/blink/renderer/platform/wtf/text/ascii_fast_path.h +++ b/third_party/blink/renderer/platform/wtf/text/ascii_fast_path.h
@@ -75,38 +75,31 @@ return !(word & NonASCIIMask<sizeof(MachineWord), CharacterType>::Value()); } -// Note: This function assume the input is likely all ASCII, and +struct ASCIIStringAttributes { + ASCIIStringAttributes(bool contains_only_ascii, bool is_lower_ascii) + : contains_only_ascii(contains_only_ascii), + is_lower_ascii(is_lower_ascii) {} + unsigned contains_only_ascii : 1; + unsigned is_lower_ascii : 1; +}; + +// Note: This function assumes the input is likely all ASCII, and // does not leave early if it is not the case. template <typename CharacterType> -ALWAYS_INLINE bool CharactersAreAllASCII(const CharacterType* characters, - size_t length) { +ALWAYS_INLINE ASCIIStringAttributes +CharacterAttributes(const CharacterType* characters, size_t length) { DCHECK_GT(length, 0u); - MachineWord all_char_bits = 0; - const CharacterType* end = characters + length; - // Prologue: align the input. - while (!IsAlignedToMachineWord(characters) && characters != end) { - all_char_bits |= *characters; - ++characters; + // Performance note: This loop will not vectorize properly in -Oz. Ensure + // the calling code is built with -O2. + CharacterType all_char_bits = 0; + bool contains_upper_case = false; + for (size_t i = 0; i < length; i++) { + all_char_bits |= characters[i]; + contains_upper_case |= IsASCIIUpper(characters[i]); } - // Compare the values of CPU word size. - const CharacterType* word_end = AlignToMachineWord(end); - const size_t kLoopIncrement = sizeof(MachineWord) / sizeof(CharacterType); - while (characters < word_end) { - all_char_bits |= *(reinterpret_cast_ptr<const MachineWord*>(characters)); - characters += kLoopIncrement; - } - - // Process the remaining bytes. - while (characters != end) { - all_char_bits |= *characters; - ++characters; - } - - MachineWord non_ascii_bit_mask = - NonASCIIMask<sizeof(MachineWord), CharacterType>::Value(); - return !(all_char_bits & non_ascii_bit_mask); + return ASCIIStringAttributes(IsASCII(all_char_bits), !contains_upper_case); } template <typename CharacterType>
diff --git a/third_party/blink/renderer/platform/wtf/text/atomic_string.h b/third_party/blink/renderer/platform/wtf/text/atomic_string.h index 77fa98e..1bcc013 100644 --- a/third_party/blink/renderer/platform/wtf/text/atomic_string.h +++ b/third_party/blink/renderer/platform/wtf/text/atomic_string.h
@@ -184,6 +184,8 @@ AtomicString LowerASCII() const; AtomicString UpperASCII() const; + bool IsLowerASCII() const { return string_.IsLowerASCII(); } + // See comments in WTFString.h. int ToInt(bool* ok = nullptr) const { return string_.ToInt(ok); } double ToDouble(bool* ok = nullptr) const { return string_.ToDouble(ok); }
diff --git a/third_party/blink/renderer/platform/wtf/text/string_impl.cc b/third_party/blink/renderer/platform/wtf/text/string_impl.cc index 32c365f7..e199f324 100644 --- a/third_party/blink/renderer/platform/wtf/text/string_impl.cc +++ b/third_party/blink/renderer/platform/wtf/text/string_impl.cc
@@ -80,18 +80,17 @@ delete this; } -bool StringImpl::ContainsOnlyASCIIOrEmptySlowCase() const { - bool contains_only_ascii = - Is8Bit() ? CharactersAreAllASCII(Characters8(), length()) - : CharactersAreAllASCII(Characters16(), length()); - uint32_t new_flags = kAsciiCheckDone; - if (contains_only_ascii) - new_flags |= kContainsOnlyAscii; +unsigned StringImpl::ComputeASCIIFlags() const { + ASCIIStringAttributes ascii_attributes = + Is8Bit() ? CharacterAttributes(Characters8(), length()) + : CharacterAttributes(Characters16(), length()); + uint32_t new_flags = ASCIIStringAttributesToFlags(ascii_attributes); const uint32_t previous_flags = hash_and_flags_.fetch_or(new_flags, std::memory_order_relaxed); - static constexpr uint32_t mask = kAsciiCheckDone | kContainsOnlyAscii; + static constexpr uint32_t mask = + kAsciiPropertyCheckDone | kContainsOnlyAscii | kIsLowerAscii; DCHECK((previous_flags & mask) == 0 || (previous_flags & mask) == new_flags); - return contains_only_ascii; + return new_flags; } bool StringImpl::IsSafeToSendToAnotherThread() const { @@ -260,6 +259,21 @@ return string; } +scoped_refptr<StringImpl> StringImpl::Create( + const LChar* characters, + wtf_size_t length, + ASCIIStringAttributes ascii_attributes) { + scoped_refptr<StringImpl> ret = Create(characters, length); + if (length) { + // If length is 0 then `ret` is empty_ and should not have its + // attributes calculated or changed. + uint32_t new_flags = ASCIIStringAttributesToFlags(ascii_attributes); + ret->hash_and_flags_.fetch_or(new_flags, std::memory_order_relaxed); + } + + return ret; +} + scoped_refptr<StringImpl> StringImpl::Create8BitIfPossible( const UChar* characters, wtf_size_t length) {
diff --git a/third_party/blink/renderer/platform/wtf/text/string_impl.h b/third_party/blink/renderer/platform/wtf/text/string_impl.h index cfdefe5..4f879d6c 100644 --- a/third_party/blink/renderer/platform/wtf/text/string_impl.h +++ b/third_party/blink/renderer/platform/wtf/text/string_impl.h
@@ -95,8 +95,8 @@ enum ConstructEmptyStringTag { kConstructEmptyString }; explicit StringImpl(ConstructEmptyStringTag) : length_(0), - hash_and_flags_(kAsciiCheckDone | kContainsOnlyAscii | kIs8Bit | - kIsStatic) { + hash_and_flags_(kAsciiPropertyCheckDone | kContainsOnlyAscii | + kIsLowerAscii | kIs8Bit | kIsStatic) { // Ensure that the hash is computed so that AtomicStringHash can call // existingHash() with impunity. The empty string is special because it // is never entered into AtomicString's HashKey, but still needs to @@ -107,7 +107,8 @@ enum ConstructEmptyString16BitTag { kConstructEmptyString16Bit }; explicit StringImpl(ConstructEmptyString16BitTag) : length_(0), - hash_and_flags_(kAsciiCheckDone | kContainsOnlyAscii | kIsStatic) { + hash_and_flags_(kAsciiPropertyCheckDone | kContainsOnlyAscii | + kIsLowerAscii | kIsStatic) { GetHash(); } @@ -150,6 +151,10 @@ static scoped_refptr<StringImpl> Create(const UChar*, wtf_size_t length); static scoped_refptr<StringImpl> Create(const LChar*, wtf_size_t length); + static scoped_refptr<StringImpl> Create( + const LChar*, + wtf_size_t length, + ASCIIStringAttributes ascii_attributes); static scoped_refptr<StringImpl> Create8BitIfPossible(const UChar*, wtf_size_t length); template <wtf_size_t inlineCapacity> @@ -222,6 +227,8 @@ bool ContainsOnlyASCIIOrEmpty() const; + bool IsLowerASCII() const; + bool IsSafeToSendToAnotherThread() const; // The high bits of 'hash' are always empty, but we prefer to store our @@ -457,13 +464,17 @@ // (post-unification). Thus these accesses can also be relaxed. kIsAtomic = 1 << 2, - // These two bits are set atomically together. They are initially both + // These bits are set atomically together. They are initially all // zero, and like the hash computation below, become non-zero only as part // of a single atomic bitwise or. Thus concurrent loads will always observe - // either a state where the ASCII check has not been completed and both - // bits are zero, or a state where the state is fully populated. - kAsciiCheckDone = 1 << 3, + // either a state where the ASCII property check has not been completed and + // all bits are zero, or a state where the state is fully populated. + // + // The reason kIsLowerAscii is cached but upper ascii is not is that + // DOM attributes APIs require a lowercasing check making it fairly hot. + kAsciiPropertyCheckDone = 1 << 3, kContainsOnlyAscii = 1 << 4, + kIsLowerAscii = 1 << 5, // The last 24 bits (past kHashShift) are reserved for the hash. // These bits are all zero if the hash is uncomputed, and the hash is @@ -480,7 +491,19 @@ constexpr static int kHashShift = (sizeof(unsigned) * 8) - 24; static inline constexpr uint32_t LengthToAsciiFlags(int length) { - return length ? 0 : kAsciiCheckDone | kContainsOnlyAscii; + return length + ? 0 + : kAsciiPropertyCheckDone | kContainsOnlyAscii | kIsLowerAscii; + } + + static inline uint32_t ASCIIStringAttributesToFlags( + ASCIIStringAttributes ascii_attributes) { + uint32_t flags = kAsciiPropertyCheckDone; + if (ascii_attributes.contains_only_ascii) + flags |= kContainsOnlyAscii; + if (ascii_attributes.is_lower_ascii) + flags |= kIsLowerAscii; + return flags; } void SetHashRaw(unsigned hash_val) const { @@ -522,7 +545,10 @@ NOINLINE wtf_size_t HashSlowCase() const; void DestroyIfNotStatic() const; - bool ContainsOnlyASCIIOrEmptySlowCase() const; + + // Calculates the kContainsOnlyAscii and kIsLowerAscii flags. Returns + // a bitfield with those 2 values. + unsigned ComputeASCIIFlags() const; #if DCHECK_IS_ON() std::string AsciiForDebugging() const; @@ -586,9 +612,16 @@ ALWAYS_INLINE bool StringImpl::ContainsOnlyASCIIOrEmpty() const { uint32_t flags = hash_and_flags_.load(std::memory_order_relaxed); - if (flags & kAsciiCheckDone) + if (flags & kAsciiPropertyCheckDone) return flags & kContainsOnlyAscii; - return ContainsOnlyASCIIOrEmptySlowCase(); + return ComputeASCIIFlags() & kContainsOnlyAscii; +} + +ALWAYS_INLINE bool StringImpl::IsLowerASCII() const { + uint32_t flags = hash_and_flags_.load(std::memory_order_relaxed); + if (flags & kAsciiPropertyCheckDone) + return flags & kIsLowerAscii; + return ComputeASCIIFlags() & kIsLowerAscii; } template <typename CharType>
diff --git a/third_party/blink/renderer/platform/wtf/text/string_view.h b/third_party/blink/renderer/platform/wtf/text/string_view.h index b1276c8..5627859e 100644 --- a/third_party/blink/renderer/platform/wtf/text/string_view.h +++ b/third_party/blink/renderer/platform/wtf/text/string_view.h
@@ -152,9 +152,10 @@ bool IsAtomic() const { return SharedImpl() && SharedImpl()->IsAtomic(); } bool IsLowerASCII() const { - if (Is8Bit()) { + if (StringImpl* impl = SharedImpl()) + return impl->IsLowerASCII(); + if (Is8Bit()) return WTF::IsLowerASCII(Characters8(), length()); - } return WTF::IsLowerASCII(Characters16(), length()); }
diff --git a/third_party/blink/renderer/platform/wtf/text/wtf_string.cc b/third_party/blink/renderer/platform/wtf/text/wtf_string.cc index b3ba2c2d..21601df 100644 --- a/third_party/blink/renderer/platform/wtf/text/wtf_string.cc +++ b/third_party/blink/renderer/platform/wtf/text/wtf_string.cc
@@ -592,8 +592,9 @@ if (!length) return g_empty_string; - if (CharactersAreAllASCII(string_start, length)) - return StringImpl::Create(string_start, length); + ASCIIStringAttributes attributes = CharacterAttributes(string_start, length); + if (attributes.contains_only_ascii) + return StringImpl::Create(string_start, length, attributes); Vector<UChar, 1024> buffer(length); UChar* buffer_start = buffer.data();
diff --git a/third_party/blink/renderer/platform/wtf/text/wtf_string.h b/third_party/blink/renderer/platform/wtf/text/wtf_string.h index d56de32..5fbaff12 100644 --- a/third_party/blink/renderer/platform/wtf/text/wtf_string.h +++ b/third_party/blink/renderer/platform/wtf/text/wtf_string.h
@@ -538,6 +538,8 @@ length); } + bool IsLowerASCII() const { return !impl_ || impl_->IsLowerASCII(); } + bool ContainsOnlyASCIIOrEmpty() const { return !impl_ || impl_->ContainsOnlyASCIIOrEmpty(); }
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests index 007ecb8f..e147c58 100644 --- a/third_party/blink/web_tests/NeverFixTests +++ b/third_party/blink/web_tests/NeverFixTests
@@ -2179,7 +2179,7 @@ virtual/sxg-subresource-disabled/http/tests/loading/sxg/sxg-subresource-origin-trial.https.html [ Pass ] # No good way to automate this test yet -external/wpt/native-file-system/showSaveFilePicker-manual.https.html [ Skip ] +external/wpt/file-system-access/showSaveFilePicker-manual.https.html [ Skip ] # These tests require a physical device connected. external/wpt/webusb/usbDevice_claimInterface-manual.https.html [ Skip ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 9ca905f..9809809d 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -764,6 +764,7 @@ crbug.com/687225 fast/lists/css3-counter-styles-064.html [ Failure ] crbug.com/687225 fast/lists/w3-css3-list-styles-fallback-style.html [ Failure ] crbug.com/687225 fast/lists/w3-list-styles.html [ Failure ] +crbug.com/687225 external/wpt/css/css-counter-styles/* [ Skip ] # [css-overflow] # Incorrect WPT tests. @@ -3297,7 +3298,6 @@ virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.tentative.html [ Pass ] ### Tests failing with LayoutNGGrid enabled: -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/anonymous-grid-items-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html [ Failure ] @@ -3553,14 +3553,13 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.tentative.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-template-rows-fit-content-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/explicitly-sized-grid-item-as-table.html [ Failure ] +crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/anonymous-grid-item-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-auto-margin-and-replaced-item-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-percentage-sizes-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-percentage-sizes-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-percentage-sizes-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-overflow-auto-max-height-percentage.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-item-script-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-017.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-002.html [ Failure ] @@ -3579,45 +3578,23 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-percentage-paddings-vertical-rl-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-items-relative-offsets-002.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-011.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-012.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-021.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/grid-minimum-size-grid-items-022.html [ Failure ] 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-indefinite-replaced.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/remove-svg-grid-item-001.html [ Failure ] +crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/item-with-table-with-infinite-max-intrinsic-width.html [ Failure ] +crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/table-with-infinite-max-intrinsic-width.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-items/whitespace-in-grid-item-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-layout-properties.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/column-property-should-not-apply-on-grid-container-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-box-sizing-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-ignores-first-letter-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-ignores-first-line-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-scrollbar-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-scrollbar-vertical-lr-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-scrollbar-vertical-rl-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-container-sizing-constraints-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-letter-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-letter-002.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-letter-003.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-line-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-line-002.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-first-line-003.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-floats-no-intrude-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-gutters-and-flex-content-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-gutters-and-tracks-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-gutters-as-percentage-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-first-letter-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-first-letter-002.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-first-letter-003.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-first-line-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-first-line-002.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-first-line-003.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-inline-margins-no-collapse-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-item-accepts-first-letter-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-item-accepts-first-line-001.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-model/grid-margins-no-collapse-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-tracks-stretched-with-different-flex-factors-sum.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/implicit-grids/grid-support-grid-auto-columns-rows-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/baseline-alignment-affects-intrinsic-size-001.html [ Failure ] @@ -3665,19 +3642,16 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-rows-computed-withcontent.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-rows-computed.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-placement-using-named-grid-lines-008.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/auto-content-resolution-columns.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/flex-and-content-sized-resolution-columns.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/flex-content-sized-column-use-available-width.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/flex-content-sized-columns-resize.html [ Failure Timeout ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-auto-flow-resolution.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-get-set.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-resolution.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-update.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-resolution.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-repeat-huge-grid.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-auto-repeat-get-set.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-min-max-width.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-element-repeat-get-set.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-grow-tracks-to-their-max.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-initialize-span-one-items.html [ Failure ] @@ -3687,12 +3661,11 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-grid-container-percentage-rows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-multiple-minmax-content-resolution.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-named-grid-line-resolution.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-indexes.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-position-resolution.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-positioning-with-orthogonal-flows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-removal-auto-placement-update.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-removal-track-breadth-update.html [ Failure Crash ] +crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-scroll-position.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-sizing-with-orthogonal-flows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-spanning-and-orthogonal-flows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-spanning-resolution.html [ Failure ] @@ -3704,29 +3677,21 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-distribution-vertical-rl.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-distribution.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-only-abspos-item-computed-style-crash.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-preferred-logical-widths.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-self-baseline-two-dimensional.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-template-columns-rows-computed-style-gaps-content-alignment.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-template-shorthand-get-set.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-track-sizing-with-orthogonal-flows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-track-sizing-with-percentages-and-orthogonal-flows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-update-sizes-after-distributing-all.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-columns-auto-resolution.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-position-dynamic-change.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/implicit-tracks-before-explicit.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/mark-as-infinitely-growable.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/maximize-tracks-definite-indefinite-height.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/maximize-tracks-definite-indefinite-width.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-content-row-must-shrink-when-column-grows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-height-border-box.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/min-width-margin-box.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-fixed-logical-height-only.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-fixed-logical-width-only.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-max-content-resolution-columns.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-max-content-resolution-rows.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-min-content-column-resolution-columns.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-min-content-column-resolution-rows.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-spanning-resolution-columns.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/minmax-spanning-resolution-rows.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/mozilla/grid-repeat-auto-fill-fit-005-part-2.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-areas-dynamic-with-media-query.html [ Failure ] @@ -5644,7 +5609,9 @@ crbug.com/1164459 [ Mac10.15 ] external/wpt/preload/download-resources.html [ Pass Failure ] # CSS spelling and grammar features (issue 1163437) -crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-order.html [ Failure ] +crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-001.html [ Failure ] +crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-002.html [ Failure ] +crbug.com/1147859 external/wpt/css/css-pseudo/highlight-painting-003.html [ Failure ] # Sheriff 2021-01-15 crbug.com/1167222 http/tests/websocket/multiple-connections-throttled.html [ Pass Failure ] @@ -5684,3 +5651,7 @@ crbug.com/1173137 external/wpt/webxr/hit-test/ar_hittest_subscription_inputSources.https.html [ Failure ] crbug.com/1173137 external/wpt/webxr/hit-test/ar_hittest_subscription_refSpaces.https.html [ Failure ] crbug.com/1173137 external/wpt/webxr/hit-test/ar_hittest_subscription_transientInputSources.https.html [ Failure ] + +# COEP reporting for PlzDedicatedWorker +crbug.com/1060837 external/wpt/html/cross-origin-embedder-policy/reporting-to-owner.https.html [ Timeout ] +crbug.com/1060837 virtual/plz-dedicated-worker/external/wpt/html/cross-origin-embedder-policy/reporting-to-owner.https.html [ Pass ]
diff --git a/third_party/blink/web_tests/android/ChromiumWPTExpectations b/third_party/blink/web_tests/android/ChromiumWPTExpectations index 1e4effd..d4c7a82 100644 --- a/third_party/blink/web_tests/android/ChromiumWPTExpectations +++ b/third_party/blink/web_tests/android/ChromiumWPTExpectations
@@ -3299,40 +3299,40 @@ crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-layout.https.html [ Failure Pass ] crbug.com/1050754 external/wpt/mixed-content/imageset.https.sub.html [ Failure ] crbug.com/1050754 external/wpt/mst-content-hint/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/native-file-system/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/opaque-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/showPicker-errors.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/idlharness.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/idlharness.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/opaque-origin.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/showPicker-errors.https.window.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.serviceworker.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.sharedworker.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/WeblayerWPTExpectations b/third_party/blink/web_tests/android/WeblayerWPTExpectations index a24bd11..1e7923e 100644 --- a/third_party/blink/web_tests/android/WeblayerWPTExpectations +++ b/third_party/blink/web_tests/android/WeblayerWPTExpectations
@@ -1894,40 +1894,41 @@ crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-layout-import-data.https.html [ Failure ] crbug.com/1050754 external/wpt/mixed-content/gen/top.meta/unset/worklet-layout.https.html [ Failure ] crbug.com/1050754 external/wpt/mixed-content/imageset.https.sub.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/opaque-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/showPicker-errors.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/mst-content-hint/idlharness.window.html [ Failure Pass ] +crbug.com/1050754 external/wpt/file-system-access/idlharness.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/idlharness.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/opaque-origin.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/showPicker-errors.https.window.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.serviceworker.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.sharedworker.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/WebviewWPTExpectations b/third_party/blink/web_tests/android/WebviewWPTExpectations index 8dcd780..6e6e18cb 100644 --- a/third_party/blink/web_tests/android/WebviewWPTExpectations +++ b/third_party/blink/web_tests/android/WebviewWPTExpectations
@@ -3552,40 +3552,40 @@ crbug.com/1050754 external/wpt/mixed-content/tentative/autoupgrades/image-upgrade.https.sub.html [ Failure ] crbug.com/1050754 external/wpt/mixed-content/tentative/autoupgrades/video-upgrade.https.sub.html [ Failure ] crbug.com/1050754 external/wpt/mst-content-hint/idlharness.window.html [ Failure Pass ] -crbug.com/1050754 external/wpt/native-file-system/idlharness.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/idlharness.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/opaque-origin.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] -crbug.com/1050754 external/wpt/native-file-system/showPicker-errors.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/idlharness.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/idlharness.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/opaque-origin.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.worker.html [ Failure ] +crbug.com/1050754 external/wpt/file-system-access/showPicker-errors.https.window.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.serviceworker.html [ Failure ] crbug.com/1050754 external/wpt/native-io/close_async.tentative.https.any.sharedworker.html [ Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-001-ref.html similarity index 90% rename from third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order-ref.html rename to third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-001-ref.html index 827ee94..7ca31db 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-001-ref.html
@@ -16,13 +16,15 @@ line-height: 1; } p > span { - position: absolute; color: initial; text-shadow: none; + position: absolute; } p > span > span { background: #C0C0C0; text-shadow: 0.5000em 0.5000em #3838E0; + /* force blue to paint over red */ + position: relative; } </style> <p><span>q<span>uic</span>k</span>quick
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-001.html similarity index 67% rename from third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order.html rename to third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-001.html index 5a1004e..2994527 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-001.html
@@ -1,11 +1,12 @@ <!doctype html> <meta charset="utf-8"> -<title>CSS Pseudo-Elements Test: highlight painting order</title> +<title>CSS Pseudo-Elements Test: highlight painting</title> <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#highlight-painting"> <link rel="help" href="https://drafts.csswg.org/css-text-decor-4/#painting"> <link rel="help" href="https://www.w3.org/TR/CSS22/zindex.html#painting-order"> -<link rel="match" href="highlight-painting-order-ref.html"> -<meta name="assert" value="highlight overlays are painted in the correct order, including both the element’s shadows and the highlight’s shadows"> +<link rel="match" href="highlight-painting-001-ref.html"> +<meta name="assert" value="::selection overlay is painted in the correct order, including both the element’s shadows and the highlight’s shadows"> +<script src="support/selections.js"></script> <style> p { font-size: 7em; @@ -27,11 +28,9 @@ <p>quick <script> const target = document.querySelector("p"); - const range = document.createRange(); - range.selectNodeContents(target); - range.setStart(target.childNodes[0], 1); - range.setEnd(target.childNodes[0], 4); - const selection = getSelection(); - selection.removeAllRanges(); - selection.addRange(range); + selectRangeWith(range => { + range.selectNodeContents(target); + range.setStart(target.childNodes[0], 1); + range.setEnd(target.childNodes[0], 4); + }); </script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-002-ref.html similarity index 65% copy from third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order-ref.html copy to third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-002-ref.html index 827ee94..81bf812d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-order-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-002-ref.html
@@ -1,9 +1,12 @@ <!doctype html> <meta charset="utf-8"> <style> + :root { + writing-mode: vertical-rl; + } p { font-size: 7em; - text-shadow: 0.2500em 0.2500em #C0C000; + text-shadow: 0.1250em 0.1250em #C0C000C0; position: relative; color: transparent; @@ -16,13 +19,16 @@ line-height: 1; } p > span { - position: absolute; - color: initial; + color: #E03838C0; text-shadow: none; + position: absolute; } p > span > span { - background: #C0C0C0; - text-shadow: 0.5000em 0.5000em #3838E0; + color: #707070C0; + background: #38E038C0; + text-shadow: 0.2500em 0.2500em #3838E0C0; + /* force blue to paint over red */ + position: relative; } </style> <p><span>q<span>uic</span>k</span>quick
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-002.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-002.html new file mode 100644 index 0000000..213e943c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-002.html
@@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Pseudo-Elements Test: highlight painting</title> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#highlight-painting"> +<link rel="help" href="https://drafts.csswg.org/css-text-decor-4/#painting"> +<link rel="help" href="https://www.w3.org/TR/CSS22/zindex.html#painting-order"> +<link rel="match" href="highlight-painting-002-ref.html"> +<meta name="assert" value="::selection overlay is painted in the correct order, including originating element shadows (but not text proper) where selected"> +<script src="support/selections.js"></script> +<style> + :root { + writing-mode: vertical-rl; + } + p { + font-size: 7em; + color: #E03838C0; + text-shadow: 0.1250em 0.1250em #C0C000C0; + + /* + https://drafts.csswg.org/css-pseudo-4/#highlight-bounds + For text, the corresponding overlay must cover at least + the entire em box and may extend further above/below the + em box to the line box edges. + */ + line-height: 1; + } + p::selection { + color: #707070C0; + background: #38E038C0; + text-shadow: 0.2500em 0.2500em #3838E0C0; + } +</style> +<p>quick +<script> + const target = document.querySelector("p"); + selectRangeWith(range => { + range.selectNodeContents(target); + range.setStart(target.childNodes[0], 1); + range.setEnd(target.childNodes[0], 4); + }); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003-ref.html new file mode 100644 index 0000000..2be2d97 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003-ref.html
@@ -0,0 +1,39 @@ +<!doctype html> +<meta charset="utf-8"> +<style> + p { + font-size: 7em; + width: min-content; + height: 0.25em; + background: #C0C000C0; + position: relative; + color: transparent; + + /* + https://drafts.csswg.org/css-pseudo-4/#highlight-bounds + For text, the corresponding overlay must cover at least + the entire em box and may extend further above/below the + em box to the line box edges. + */ + line-height: 1; + } + p > span { + position: absolute; + } + p > span:nth-child(1) { + color: #E03838C0; + text-decoration: #C0C000C0 solid line-through; + } + p > span:nth-child(1) > span { + visibility: hidden; + } + p > span:nth-child(2) { + color: transparent; + } + p > span:nth-child(2) > span { + color: #707070C0; + background: #38E038C0; + text-decoration: #3838E0C0 wavy line-through; + } +</style> +<p><span>q<span>uic</span>k</span><span>q<span>uic</span>k</span>quick
diff --git a/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html new file mode 100644 index 0000000..2ac6889 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-pseudo/highlight-painting-003.html
@@ -0,0 +1,41 @@ +<!doctype html> +<meta charset="utf-8"> +<title>CSS Pseudo-Elements Test: highlight painting</title> +<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#highlight-painting"> +<link rel="help" href="https://drafts.csswg.org/css-text-decor-4/#painting"> +<link rel="help" href="https://www.w3.org/TR/CSS22/zindex.html#painting-order"> +<link rel="match" href="highlight-painting-003-ref.html"> +<meta name="assert" value="::selection overlay background and decorations are independent of those of the originating element, except that originating element decorations are suppressed where selected"> +<script src="support/selections.js"></script> +<style> + p { + font-size: 7em; + width: min-content; + height: 0.25em; + color: #E03838C0; + background: #C0C000C0; + text-decoration: #C0C000C0 solid line-through; + + /* + https://drafts.csswg.org/css-pseudo-4/#highlight-bounds + For text, the corresponding overlay must cover at least + the entire em box and may extend further above/below the + em box to the line box edges. + */ + line-height: 1; + } + p::selection { + color: #707070C0; + background: #38E038C0; + text-decoration: #3838E0C0 wavy line-through; + } +</style> +<p>quick +<script> + const target = document.querySelector("p"); + selectRangeWith(range => { + range.selectNodeContents(target); + range.setStart(target.childNodes[0], 1); + range.setEnd(target.childNodes[0], 4); + }); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/DIR_METADATA b/third_party/blink/web_tests/external/wpt/file-system-access/DIR_METADATA similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/DIR_METADATA rename to third_party/blink/web_tests/external/wpt/file-system-access/DIR_METADATA
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/META.yml b/third_party/blink/web_tests/external/wpt/file-system-access/META.yml similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/META.yml rename to third_party/blink/web_tests/external/wpt/file-system-access/META.yml
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/OWNERS b/third_party/blink/web_tests/external/wpt/file-system-access/OWNERS similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/OWNERS rename to third_party/blink/web_tests/external/wpt/file-system-access/OWNERS
diff --git a/third_party/blink/web_tests/external/wpt/file-system-access/README.md b/third_party/blink/web_tests/external/wpt/file-system-access/README.md new file mode 100644 index 0000000..b007264 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/file-system-access/README.md
@@ -0,0 +1,2 @@ +This directory contains tests for the +[File System Access](https://wicg.github.io/file-system-access/) specification.
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/idlharness.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/idlharness.https.any.js similarity index 93% rename from third_party/blink/web_tests/external/wpt/native-file-system/idlharness.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/idlharness.https.any.js index 9e7b522..ab18253 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/idlharness.https.any.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/idlharness.https.any.js
@@ -5,7 +5,7 @@ 'use strict'; idl_test( - ['native-file-system'], + ['file-system-access'], ['storage', 'permissions', 'streams', 'html', 'dom'], idl_array => { idl_array.add_objects({
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-IndexedDB-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-IndexedDB-manual.https.html similarity index 89% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-IndexedDB-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-IndexedDB-manual.https.html index c68df06..211b190 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-IndexedDB-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-IndexedDB-manual.https.html
@@ -6,7 +6,7 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script> <script src="/IndexedDB/support-promises.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-isSameEntry-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-isSameEntry-manual.https.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-isSameEntry-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-isSameEntry-manual.https.html index 1d13d8ba..d2ddc2db 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-isSameEntry-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-isSameEntry-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemBaseHandle-isSameEntry.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-BroadcastChannel-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-BroadcastChannel-manual.https.html similarity index 90% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-BroadcastChannel-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-BroadcastChannel-manual.https.html index 07f8d96..f395b0b 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-BroadcastChannel-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-BroadcastChannel-manual.https.html
@@ -8,7 +8,7 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script> <script src="script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-Error-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-Error-manual.https.html similarity index 92% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-Error-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-Error-manual.https.html index 19fcb3ea..67206e3 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-Error-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-Error-manual.https.html
@@ -9,7 +9,7 @@ <script src="/common/get-host-info.sub.js"></script> <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-frames-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-frames-manual.https.html similarity index 90% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-frames-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-frames-manual.https.html index 81e545c5..35f23d8 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-frames-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-frames-manual.https.html
@@ -7,7 +7,7 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-windows-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-windows-manual.https.html similarity index 90% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-windows-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-windows-manual.https.html index 1b583d0..922cbf5 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-windows-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-windows-manual.https.html
@@ -7,7 +7,7 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-workers-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-workers-manual.https.html similarity index 91% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-workers-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-workers-manual.https.html index 22d0bf5a..22ef3ba3 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-MessagePort-workers-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-MessagePort-workers-manual.https.html
@@ -8,7 +8,7 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-frames-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-frames-manual.https.html similarity index 90% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-frames-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-frames-manual.https.html index 6d5c5ab..8eb9082 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-frames-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-frames-manual.https.html
@@ -7,7 +7,7 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-windows-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-windows-manual.https.html similarity index 90% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-windows-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-windows-manual.https.html index ad1e8e7..2137ea3 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-windows-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-windows-manual.https.html
@@ -7,7 +7,7 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-workers-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-workers-manual.https.html similarity index 91% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-workers-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-workers-manual.https.html index bc1fc50..619a37c 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemBaseHandle-postMessage-workers-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemBaseHandle-postMessage-workers-manual.https.html
@@ -8,7 +8,7 @@ <script src="/resources/testdriver-vendor.js"></script> <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="resources/messaging-helpers.js"></script> <script src="resources/messaging-blob-helpers.js"></script> <script src="resources/messaging-serialize-helpers.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-getDirectoryHandle-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-getDirectoryHandle-manual.https.html similarity index 86% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-getDirectoryHandle-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-getDirectoryHandle-manual.https.html index 0367232..63a8853 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-getDirectoryHandle-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-getDirectoryHandle-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-getFileHandle-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-getFileHandle-manual.https.html similarity index 86% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-getFileHandle-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-getFileHandle-manual.https.html index 94b3122..d16771b 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-getFileHandle-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-getFileHandle-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemDirectoryHandle-getFileHandle.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-iteration-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-iteration-manual.https.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-iteration-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-iteration-manual.https.html index 10d89109..495ea5e 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-iteration-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-iteration-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemDirectoryHandle-iteration.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-removeEntry-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-removeEntry-manual.https.html similarity index 86% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-removeEntry-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-removeEntry-manual.https.html index cedb875..765492e1 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-removeEntry-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-removeEntry-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemDirectoryHandle-removeEntry.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-resolve-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-resolve-manual.https.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-resolve-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-resolve-manual.https.html index 9c001b3..0d539abb 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemDirectoryHandle-resolve-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemDirectoryHandle-resolve-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemDirectoryHandle-resolve.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemFileHandle-getFile-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemFileHandle-getFile-manual.https.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemFileHandle-getFile-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemFileHandle-getFile-manual.https.html index 5a0b1d9..9d8dede 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemFileHandle-getFile-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemFileHandle-getFile-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemFileHandle-getFile.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-manual.https.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-manual.https.html index 56ff51c..2db242c 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemWritableFileStream.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-piped-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-piped-manual.https.html similarity index 87% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-piped-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-piped-manual.https.html index f6c6e600..296f754 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-piped-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-piped-manual.https.html
@@ -6,6 +6,6 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="../streams/resources/recording-streams.js"></script> <script src="script-tests/FileSystemWritableFileStream-piped.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-write-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-write-manual.https.html similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-write-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-write-manual.https.html index 280edc2..eb970874 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemWritableFileStream-write-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/local_FileSystemWritableFileStream-write-manual.https.html
@@ -6,5 +6,5 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="resources/test-helpers.js"></script> -<script src="resources/native-fs-test-helpers.js"></script> +<script src="resources/local-fs-test-helpers.js"></script> <script src="script-tests/FileSystemWritableFileStream-write.js"></script>
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/opaque-origin.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/opaque-origin.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/opaque-origin.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/opaque-origin.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/data/testfile.txt b/third_party/blink/web_tests/external/wpt/file-system-access/resources/data/testfile.txt similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/data/testfile.txt rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/data/testfile.txt
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/native-fs-test-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/local-fs-test-helpers.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/native-fs-test-helpers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/local-fs-test-helpers.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target-dedicated-worker.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-dedicated-worker.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target-dedicated-worker.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-dedicated-worker.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target-service-worker.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-service-worker.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target-service-worker.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-service-worker.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target-shared-worker.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-shared-worker.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target-shared-worker.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target-shared-worker.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target.html b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target.html rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.html
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.js similarity index 97% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.js index 98c726ee..1e9ef63 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/resources/message-target.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/resources/message-target.js
@@ -1,8 +1,8 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/test-helpers.js // add_message_event_handlers() is the helper function used to setup all // message targets, including iframes and workers.
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-blob-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-blob-helpers.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-blob-helpers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-blob-helpers.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-helpers.js similarity index 98% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-helpers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-helpers.js index 279c5d1d..55fc04a 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-helpers.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-helpers.js
@@ -1,7 +1,7 @@ 'use strict'; // This script depends on the following script: -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/test-helpers.js // /service-workers/service-worker/resources/test-helpers.sub.js // Define the URL constants used for each type of message target, including
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-serialize-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-serialize-helpers.js similarity index 99% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-serialize-helpers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-serialize-helpers.js index 3df2d48..ada68f43 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/resources/messaging-serialize-helpers.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/resources/messaging-serialize-helpers.js
@@ -1,7 +1,7 @@ 'use strict'; // This script depends on the following script: -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/test-helpers.js // Serializes an array of FileSystemHandles where each element can be either a // FileSystemFileHandle or FileSystemDirectoryHandle.
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/opaque-origin-sandbox.html b/third_party/blink/web_tests/external/wpt/file-system-access/resources/opaque-origin-sandbox.html similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/opaque-origin-sandbox.html rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/opaque-origin-sandbox.html
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/sandboxed-fs-test-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/sandboxed-fs-test-helpers.js similarity index 84% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/sandboxed-fs-test-helpers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/sandboxed-fs-test-helpers.js index a7506b6..f6cfd4b 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/resources/sandboxed-fs-test-helpers.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/resources/sandboxed-fs-test-helpers.js
@@ -3,8 +3,8 @@ // function in this file will return an empty directory in the sandboxed file // system. // -// Another implementation of this function exists in native-fs-test-helpers.js, -// where that version uses the native file system instead. +// Another implementation of this function exists in local-fs-test-helpers.js, +// where that version uses the local file system instead. async function cleanupSandboxedFileSystem() { const dir = await navigator.storage.getDirectory();
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/resources/test-helpers.js b/third_party/blink/web_tests/external/wpt/file-system-access/resources/test-helpers.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/resources/test-helpers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/resources/test-helpers.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-IndexedDB.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-isSameEntry.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-BroadcastChannel.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-Error.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-frames.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-windows.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-MessagePort-workers.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-frames.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-windows.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemBaseHandle-postMessage-workers.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getDirectoryHandle.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-getFileHandle.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-iteration.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-iteration.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-removeEntry.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemDirectoryHandle-resolve.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemDirectoryHandle-resolve.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemFileHandle-getFile.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-piped.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-piped.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream-write.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream-write.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.js b/third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemWritableFileStream.https.any.js rename to third_party/blink/web_tests/external/wpt/file-system-access/sandboxed_FileSystemWritableFileStream.https.any.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-IndexedDB.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-IndexedDB.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-IndexedDB.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-IndexedDB.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-isSameEntry.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-isSameEntry.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-isSameEntry.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-isSameEntry.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js similarity index 94% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js index 7daf65e..6c3ae7d 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-BroadcastChannel.js
@@ -1,9 +1,9 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js // /service-workers/service-worker/resources/test-helpers.sub.js // Sets up a new broadcast channel in |target|. Posts a message instructing
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-Error.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-Error.js similarity index 96% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-Error.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-Error.js index c4ae8363..0b9dc6b 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-Error.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-Error.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js // /common/get-host-info.sub.js // /service-workers/service-worker/resources/test-helpers.sub.js @@ -198,8 +198,8 @@ await do_send_message_error_test(t, root_dir, /*receiver=*/self, /*target=*/iframe.contentWindow, /*target_origin=*/'*', /*expected_has_source*/true, /*expected_origin=*/location.origin); - // Do not test receiving FileSystemHandles from the data URI iframe. - // Data URI iframes are insecure and do not expose the NativeFileSystem APIs. + // Do not test receiving FileSystemHandles from the data URI iframe. Data URI + // iframes are insecure and do not expose the File System Access APIs. }, 'Fail to send messages to a data URI iframe.'); directory_test(async (t, root_dir) => {
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-frames.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-frames.js similarity index 86% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-frames.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-frames.js index 29258cf6..89343f3 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-frames.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-frames.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js directory_test( async (t, root_dir) => {
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-windows.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-windows.js similarity index 83% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-windows.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-windows.js index cf70efa..78b3176 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-windows.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-windows.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js directory_test( async (t, root_dir) => {
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-workers.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-workers.js similarity index 84% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-workers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-workers.js index 756660a..8e46edc 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-MessagePort-workers.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-MessagePort-workers.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js // /service-workers/service-worker/resources/test-helpers.sub.js directory_test(
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-frames.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-frames.js similarity index 85% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-frames.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-frames.js index e34b17f..009a030a 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-frames.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-frames.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js directory_test(async (t, root_dir) => { const iframe = await add_iframe(t, {src: kDocumentMessageTarget});
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-windows.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-windows.js similarity index 82% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-windows.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-windows.js index 877795b..83bf8c6 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-windows.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-windows.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js directory_test(async (t, root_dir) => { const child_window = await open_window(t, kDocumentMessageTarget);
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-workers.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-workers.js similarity index 83% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-workers.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-workers.js index db8e5549..f7abf65 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemBaseHandle-postMessage-workers.js +++ b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemBaseHandle-postMessage-workers.js
@@ -1,10 +1,10 @@ 'use strict'; // This script depends on the following scripts: -// /native-file-system/resources/messaging-helpers.js -// /native-file-system/resources/messaging-blob-helpers.js -// /native-file-system/resources/messaging-serialize-helpers.js -// /native-file-system/resources/test-helpers.js +// /file-system-access/resources/messaging-helpers.js +// /file-system-access/resources/messaging-blob-helpers.js +// /file-system-access/resources/messaging-serialize-helpers.js +// /file-system-access/resources/test-helpers.js // /service-workers/service-worker/resources/test-helpers.sub.js directory_test(async (t, root_dir) => {
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-getFileHandle.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-getFileHandle.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-getFileHandle.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-getFileHandle.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-iteration.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-iteration.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-iteration.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-iteration.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-removeEntry.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-removeEntry.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-removeEntry.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-resolve.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-resolve.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemDirectoryHandle-resolve.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemDirectoryHandle-resolve.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemFileHandle-getFile.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemFileHandle-getFile.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemFileHandle-getFile.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemFileHandle-getFile.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemWritableFileStream-piped.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemWritableFileStream-piped.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemWritableFileStream-piped.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemWritableFileStream-piped.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemWritableFileStream-write.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemWritableFileStream-write.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemWritableFileStream-write.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemWritableFileStream-write.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemWritableFileStream.js b/third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemWritableFileStream.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemWritableFileStream.js rename to third_party/blink/web_tests/external/wpt/file-system-access/script-tests/FileSystemWritableFileStream.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/showDirectoryPicker-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/showDirectoryPicker-manual.https.html similarity index 92% rename from third_party/blink/web_tests/external/wpt/native-file-system/showDirectoryPicker-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/showDirectoryPicker-manual.https.html index 5dadbe1a..d1abf93 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/showDirectoryPicker-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/showDirectoryPicker-manual.https.html
@@ -18,7 +18,7 @@ await new Promise(resolve => step_timeout(resolve, 100)); await window.test_driver.bless( - 'show a directory picker.<br />Please select native-file-system/resources/data/'); + 'show a directory picker.<br />Please select file-system-access/resources/data/'); const dir = await self.showDirectoryPicker(); assert_true(dir instanceof FileSystemHandle); assert_true(dir instanceof FileSystemDirectoryHandle);
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/showOpenFilePicker-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/showOpenFilePicker-manual.https.html similarity index 94% rename from third_party/blink/web_tests/external/wpt/native-file-system/showOpenFilePicker-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/showOpenFilePicker-manual.https.html index e6405a9c8..fd72b040 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/showOpenFilePicker-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/showOpenFilePicker-manual.https.html
@@ -18,7 +18,7 @@ await new Promise(resolve => step_timeout(resolve, 100)); await window.test_driver.bless( - 'show a file picker.<br />Please select native-file-system/resources/data/testfile.txt'); + 'show a file picker.<br />Please select file-system-access/resources/data/testfile.txt'); const files = await self.showOpenFilePicker({ multiple: false, types: [ { description: 'Text files', accept: { ' text/plain ': ['.txt'] } }, @@ -40,7 +40,7 @@ promise_test(async t => { await window.test_driver.bless( - 'show a file picker.<br />Please select native-file-system/resources/data/testfile.txt'); + 'show a file picker.<br />Please select file-system-access/resources/data/testfile.txt'); const files = await self.showOpenFilePicker({ multiple: false, startIn: null,
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/showPicker-errors.https.window.js b/third_party/blink/web_tests/external/wpt/file-system-access/showPicker-errors.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/native-file-system/showPicker-errors.https.window.js rename to third_party/blink/web_tests/external/wpt/file-system-access/showPicker-errors.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/showSaveFilePicker-manual.https.html b/third_party/blink/web_tests/external/wpt/file-system-access/showSaveFilePicker-manual.https.html similarity index 89% rename from third_party/blink/web_tests/external/wpt/native-file-system/showSaveFilePicker-manual.https.html rename to third_party/blink/web_tests/external/wpt/file-system-access/showSaveFilePicker-manual.https.html index 3a20f1428..332a1a42 100644 --- a/third_party/blink/web_tests/external/wpt/native-file-system/showSaveFilePicker-manual.https.html +++ b/third_party/blink/web_tests/external/wpt/file-system-access/showSaveFilePicker-manual.https.html
@@ -11,7 +11,7 @@ promise_test(async t => { await window.test_driver.bless( - 'show a file picker.<br />Please make a copy of native-file-system/resources/data/testfile.txt in a writable directory and pick that file'); + 'show a file picker.<br />Please make a copy of file-system-access/resources/data/testfile.txt in a writable directory and pick that file'); const file = await self.showSaveFilePicker({ multiple: false, types: [ { description: 'Text files', accept: { 'text/plain': ['.txt'] } },
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-to-owner.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-to-owner.https.html new file mode 100644 index 0000000..03f7b31 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/reporting-to-owner.https.html
@@ -0,0 +1,87 @@ +<!doctype html> +<html> +<head> +<title>Check COEP reports are send for 'new Worker()' failure</title> +<meta name="timeout" content="long"> +</head> +<body> +<script src="/common/get-host-info.sub.js"></script> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> +<script> +const {ORIGIN} = get_host_info(); +const RESOURCES_PATH= new URL("resources", location).pathname; +const iframe_path = "worker-owner-frame.html?pipe="; +const worker_path = "universal-worker.js?pipe="; + +const coep_header= { + "coep-none" : "", + "coep-report-only" : + "header(Cross-Origin-Embedder-Policy-Report-Only,require-corp)", + "coep-require-corp" : "|header(Cross-Origin-Embedder-Policy,require-corp)", +}; + +function checkReport(report, url, blocked_url, disposition) { + assert_equals(report.type, "coep"); + assert_equals(report.url, url); + assert_equals(report.body.type, "worker initialization"); + assert_equals(report.body.blockedURL, blocked_url); + assert_equals(report.body.disposition, disposition); +} + +// Test parameters: +// - `iframe_coep` the COEP header of the iframe's document response. +// - `worker_coep` the COEP header of the DedicatedWorker's script response. +// +// Test expectations: +// - `length` the length of reports. +// - `disposition` the disposition in a report's body. Empty string if the +// length of reports is expected to be 0. +function check( + // Test parameters: + iframe_coep, + worker_coep, + // Test expectations: + length, + disposition) { + promise_test(async (t) => { + const worker_url = worker_path + coep_header[worker_coep]; + const iframe_url = iframe_path + coep_header[iframe_coep]; + const iframe = await with_iframe("./resources/" + iframe_url); + t.add_cleanup(() => iframe.remove()); + + const iframe_response = new Promise(resolve => window.onmessage = resolve); + iframe.contentWindow.startWorkerAndObserveReports(worker_url, length > 0); + + const {data} = await iframe_response; + assert_equals(data.length, length); + if (data.length > 0) { + const blocked_url = `${ORIGIN}${RESOURCES_PATH}/${worker_url}`; + const url = `${ORIGIN}${RESOURCES_PATH}/${iframe_url}`; + checkReport( + data[0], + url, + blocked_url, + disposition + ); + } + }, `Reporting to ${iframe_coep} frame with ${worker_coep} worker`); +} + +// ----------------------------------------------------------------------------- +// iframe_coep , worker_coep , length , disposition +// ----------------------------------------------------------------------------- +check("coep-none" , "coep-none" , 0 , ""); +check("coep-none" , "coep-report-only" , 0 , ""); +check("coep-none" , "coep-require-corp" , 0 , ""); +check("coep-report-only" , "coep-none" , 1 , "reporting"); +check("coep-report-only" , "coep-report-only" , 1 , "reporting"); +check("coep-report-only" , "coep-require-corp" , 0 , ""); +check("coep-require-corp" , "coep-none" , 1 , "enforce"); +check("coep-require-corp" , "coep-report-only" , 1 , "enforce"); +check("coep-require-corp" , "coep-require-corp" , 0 , ""); + +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/worker-owner-frame.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/worker-owner-frame.html new file mode 100644 index 0000000..092fed96 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-embedder-policy/resources/worker-owner-frame.html
@@ -0,0 +1,29 @@ +<!doctype html> +<script> +function startWorkerAndObserveReports(worker_url, wait_for_report) { + const worker = new Worker(worker_url); + const result_promise = new Promise(resolve => { + worker.onmessage = _ => resolve('success'); + worker.onerror = _ => resolve('error'); + }); + worker.postMessage("postMessage('reply to frame from worker');"); + + const report_promise = new Promise(resolve => { + const observer = new ReportingObserver(reports => { + observer.disconnect(); + resolve(reports.map(r => r.toJSON())); + }); + observer.observe(); + }); + + if (wait_for_report) { + Promise.all([result_promise, report_promise]).then(results => { + parent.postMessage(results[1]); + }); + } else { + result_promise.then(result => { + parent.postMessage([]); + }); + } +} +</script>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/native-file-system.idl b/third_party/blink/web_tests/external/wpt/interfaces/file-system-access.idl similarity index 100% rename from third_party/blink/web_tests/external/wpt/interfaces/native-file-system.idl rename to third_party/blink/web_tests/external/wpt/interfaces/file-system-access.idl
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/README.md b/third_party/blink/web_tests/external/wpt/native-file-system/README.md deleted file mode 100644 index 6905a68..0000000 --- a/third_party/blink/web_tests/external/wpt/native-file-system/README.md +++ /dev/null
@@ -1,2 +0,0 @@ -This directory contains (tentative) tests for the -[Native File System](https://wicg.github.io/native-file-system/) specification.
diff --git a/third_party/blink/web_tests/external/wpt_automation/native-file-system/auto-pick-folder.js b/third_party/blink/web_tests/external/wpt_automation/file-system-access/auto-pick-folder.js similarity index 100% rename from third_party/blink/web_tests/external/wpt_automation/native-file-system/auto-pick-folder.js rename to third_party/blink/web_tests/external/wpt_automation/file-system-access/auto-pick-folder.js
diff --git a/third_party/blink/web_tests/external/wpt_automation/native-file-system/showDirectoryPicker-manual.https-automation.sub.js b/third_party/blink/web_tests/external/wpt_automation/file-system-access/showDirectoryPicker-manual.https-automation.sub.js similarity index 100% rename from third_party/blink/web_tests/external/wpt_automation/native-file-system/showDirectoryPicker-manual.https-automation.sub.js rename to third_party/blink/web_tests/external/wpt_automation/file-system-access/showDirectoryPicker-manual.https-automation.sub.js
diff --git a/third_party/blink/web_tests/external/wpt_automation/native-file-system/showOpenFilePicker-manual.https-automation.sub.js b/third_party/blink/web_tests/external/wpt_automation/file-system-access/showOpenFilePicker-manual.https-automation.sub.js similarity index 100% rename from third_party/blink/web_tests/external/wpt_automation/native-file-system/showOpenFilePicker-manual.https-automation.sub.js rename to third_party/blink/web_tests/external/wpt_automation/file-system-access/showOpenFilePicker-manual.https-automation.sub.js
diff --git a/third_party/blink/web_tests/resources/testharnessreport.js b/third_party/blink/web_tests/resources/testharnessreport.js index c24e00e..3c8ad1e 100644 --- a/third_party/blink/web_tests/resources/testharnessreport.js +++ b/third_party/blink/web_tests/resources/testharnessreport.js
@@ -112,10 +112,10 @@ if (pathAndBase.startsWith('/fullscreen/')) { // Fullscreen tests all use the same automation script. src = automationPath + '/fullscreen/auto-click.js'; - } else if (pathAndBase.startsWith('/native-file-system/native_')) { - // native_ Native File System tests all use the same automation script. - src = automationPath + '/native-file-system/auto-pick-folder.js'; - } else if (pathAndBase.startsWith('/native-file-system/')) { + } else if (pathAndBase.startsWith('/file-system-access/local_')) { + // local_ File System Access tests all use the same automation script. + src = automationPath + '/file-system-access/auto-pick-folder.js'; + } else if (pathAndBase.startsWith('/file-system-access/')) { // Per-test automation scripts. src = automationPath + pathAndBase + '-automation.sub.js'; } else if (
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt deleted file mode 100644 index 99afa96..0000000 --- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt +++ /dev/null
@@ -1,51 +0,0 @@ -This is a testharness.js-based test. -PASS Aborting rejects with AbortError -PASS Aborting rejects with AbortError - no-cors -PASS TypeError from request constructor takes priority - RequestInit's window is not null -PASS TypeError from request constructor takes priority - Input URL is not valid -PASS TypeError from request constructor takes priority - Input URL has credentials -PASS TypeError from request constructor takes priority - RequestInit's mode is navigate -PASS TypeError from request constructor takes priority - RequestInit's referrer is invalid -PASS TypeError from request constructor takes priority - RequestInit's method is invalid -PASS TypeError from request constructor takes priority - RequestInit's method is forbidden -PASS TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple -PASS TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin -PASS TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors -PASS TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors -PASS TypeError from request constructor takes priority - Bad referrerPolicy init parameter value -PASS TypeError from request constructor takes priority - Bad mode init parameter value -PASS TypeError from request constructor takes priority - Bad credentials init parameter value -PASS TypeError from request constructor takes priority - Bad cache init parameter value -PASS TypeError from request constructor takes priority - Bad redirect init parameter value -PASS Request objects have a signal property -PASS Signal on request object -PASS Signal on request object created from request object -PASS Signal on request object created from request object, with signal on second request -PASS Signal on request object created from request object, with signal on second request overriding another -PASS Signal retained after unrelated properties are overridden by fetch -PASS Signal removed by setting to null -PASS Already aborted signal rejects immediately -PASS Request is still 'used' if signal is aborted before fetching -PASS response.arrayBuffer() rejects if already aborted -PASS response.blob() rejects if already aborted -PASS response.formData() rejects if already aborted -PASS response.json() rejects if already aborted -PASS response.text() rejects if already aborted -PASS Already aborted signal does not make request -PASS Already aborted signal can be used for many fetches -PASS Signal can be used to abort other fetches, even if another fetch succeeded before aborting -PASS Underlying connection is closed when aborting after receiving response -PASS Underlying connection is closed when aborting after receiving response - no-cors -PASS Fetch aborted & connection closed when aborted after calling response.arrayBuffer() -PASS Fetch aborted & connection closed when aborted after calling response.blob() -PASS Fetch aborted & connection closed when aborted after calling response.formData() -PASS Fetch aborted & connection closed when aborted after calling response.json() -PASS Fetch aborted & connection closed when aborted after calling response.text() -PASS Stream errors once aborted. Underlying connection closed. -PASS Stream errors once aborted, after reading. Underlying connection closed. -PASS Stream will not error if body is empty. It's closed with an empty queue before it errors. -FAIL Readable stream synchronously cancels with AbortError if aborted before reading assert_true: Cancel called sync expected true got false -PASS Signal state is cloned -PASS Clone aborts with original controller -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt deleted file mode 100644 index 99afa96..0000000 --- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt +++ /dev/null
@@ -1,51 +0,0 @@ -This is a testharness.js-based test. -PASS Aborting rejects with AbortError -PASS Aborting rejects with AbortError - no-cors -PASS TypeError from request constructor takes priority - RequestInit's window is not null -PASS TypeError from request constructor takes priority - Input URL is not valid -PASS TypeError from request constructor takes priority - Input URL has credentials -PASS TypeError from request constructor takes priority - RequestInit's mode is navigate -PASS TypeError from request constructor takes priority - RequestInit's referrer is invalid -PASS TypeError from request constructor takes priority - RequestInit's method is invalid -PASS TypeError from request constructor takes priority - RequestInit's method is forbidden -PASS TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple -PASS TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin -PASS TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors -PASS TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors -PASS TypeError from request constructor takes priority - Bad referrerPolicy init parameter value -PASS TypeError from request constructor takes priority - Bad mode init parameter value -PASS TypeError from request constructor takes priority - Bad credentials init parameter value -PASS TypeError from request constructor takes priority - Bad cache init parameter value -PASS TypeError from request constructor takes priority - Bad redirect init parameter value -PASS Request objects have a signal property -PASS Signal on request object -PASS Signal on request object created from request object -PASS Signal on request object created from request object, with signal on second request -PASS Signal on request object created from request object, with signal on second request overriding another -PASS Signal retained after unrelated properties are overridden by fetch -PASS Signal removed by setting to null -PASS Already aborted signal rejects immediately -PASS Request is still 'used' if signal is aborted before fetching -PASS response.arrayBuffer() rejects if already aborted -PASS response.blob() rejects if already aborted -PASS response.formData() rejects if already aborted -PASS response.json() rejects if already aborted -PASS response.text() rejects if already aborted -PASS Already aborted signal does not make request -PASS Already aborted signal can be used for many fetches -PASS Signal can be used to abort other fetches, even if another fetch succeeded before aborting -PASS Underlying connection is closed when aborting after receiving response -PASS Underlying connection is closed when aborting after receiving response - no-cors -PASS Fetch aborted & connection closed when aborted after calling response.arrayBuffer() -PASS Fetch aborted & connection closed when aborted after calling response.blob() -PASS Fetch aborted & connection closed when aborted after calling response.formData() -PASS Fetch aborted & connection closed when aborted after calling response.json() -PASS Fetch aborted & connection closed when aborted after calling response.text() -PASS Stream errors once aborted. Underlying connection closed. -PASS Stream errors once aborted, after reading. Underlying connection closed. -PASS Stream will not error if body is empty. It's closed with an empty queue before it errors. -FAIL Readable stream synchronously cancels with AbortError if aborted before reading assert_true: Cancel called sync expected true got false -PASS Signal state is cloned -PASS Clone aborts with original controller -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/h1-parsing/status-code.window-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/h1-parsing/status-code.window-expected.txt deleted file mode 100644 index 9427e2a..0000000 --- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/h1-parsing/status-code.window-expected.txt +++ /dev/null
@@ -1,19 +0,0 @@ -This is a testharness.js-based test. -FAIL HTTP/1.1 (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 BLAH (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -PASS HTTP/1.1 0 OK -PASS HTTP/1.1 1 OK -PASS HTTP/1.1 99 NOT OK -PASS HTTP/1.1 077 77 -PASS HTTP/1.1 099 HELLO -PASS HTTP/1.1 200 -PASS HTTP/1.1 999 DOES IT MATTER -FAIL HTTP/1.1 1000 BOO (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 0200 BOO (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 65736 NOT 200 OR SOME SUCH (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 131072 HI (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 -200 TEST (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 0xA (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -FAIL HTTP/1.1 C8 (network error) assert_unreached: Should have rejected: undefined Reached unreachable code -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/origin/assorted.window-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/origin/assorted.window-expected.txt deleted file mode 100644 index 6b30c4e4..0000000 --- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/external/wpt/fetch/origin/assorted.window-expected.txt +++ /dev/null
@@ -1,46 +0,0 @@ -This is a testharness.js-based test. -PASS Origin header and 308 redirect -PASS Origin header and GET navigation -PASS Origin header and POST navigation -PASS Origin header and POST same-origin navigation with Referrer-Policy no-referrer -FAIL Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer assert_equals: expected "null" but got "http://web-platform.test:8001" -FAIL Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer assert_equals: expected "null" but got "http://web-platform.test:8001" -PASS Origin header and GET same-origin fetch cors mode with Referrer-Policy no-referrer -PASS Origin header and POST cross-origin navigation with Referrer-Policy no-referrer -FAIL Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer assert_equals: expected "null" but got "http://web-platform.test:8001" -PASS Origin header and POST cross-origin fetch cors mode with Referrer-Policy no-referrer -PASS Origin header and GET cross-origin fetch cors mode with Referrer-Policy no-referrer -PASS Origin header and POST same-origin navigation with Referrer-Policy same-origin -PASS Origin header and POST same-origin fetch no-cors mode with Referrer-Policy same-origin -PASS Origin header and POST same-origin fetch cors mode with Referrer-Policy same-origin -PASS Origin header and GET same-origin fetch cors mode with Referrer-Policy same-origin -PASS Origin header and POST cross-origin navigation with Referrer-Policy same-origin -FAIL Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy same-origin assert_equals: expected "null" but got "http://web-platform.test:8001" -PASS Origin header and POST cross-origin fetch cors mode with Referrer-Policy same-origin -PASS Origin header and GET cross-origin fetch cors mode with Referrer-Policy same-origin -PASS Origin header and POST same-origin navigation with Referrer-Policy origin-when-cross-origin -PASS Origin header and POST same-origin fetch no-cors mode with Referrer-Policy origin-when-cross-origin -PASS Origin header and POST same-origin fetch cors mode with Referrer-Policy origin-when-cross-origin -PASS Origin header and GET same-origin fetch cors mode with Referrer-Policy origin-when-cross-origin -PASS Origin header and POST cross-origin navigation with Referrer-Policy origin-when-cross-origin -PASS Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy origin-when-cross-origin -PASS Origin header and POST cross-origin fetch cors mode with Referrer-Policy origin-when-cross-origin -PASS Origin header and GET cross-origin fetch cors mode with Referrer-Policy origin-when-cross-origin -PASS Origin header and POST same-origin navigation with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and GET same-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and POST cross-origin navigation with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and POST cross-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and GET cross-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade -PASS Origin header and POST same-origin navigation with Referrer-Policy unsafe-url -PASS Origin header and POST same-origin fetch no-cors mode with Referrer-Policy unsafe-url -PASS Origin header and POST same-origin fetch cors mode with Referrer-Policy unsafe-url -PASS Origin header and GET same-origin fetch cors mode with Referrer-Policy unsafe-url -PASS Origin header and POST cross-origin navigation with Referrer-Policy unsafe-url -PASS Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy unsafe-url -PASS Origin header and POST cross-origin fetch cors mode with Referrer-Policy unsafe-url -PASS Origin header and GET cross-origin fetch cors mode with Referrer-Policy unsafe-url -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers-expected.txt deleted file mode 100644 index f859c05..0000000 --- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/fast/workers/chromium/worker-sharedarraybuffer-transfer-two-workers-expected.txt +++ /dev/null
@@ -1,85 +0,0 @@ -CONSOLE WARNING: line 119: SharedArrayBuffer will require cross-origin isolation as of M91, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. -CONSOLE WARNING: line 27: SharedArrayBuffer will require cross-origin isolation as of M91, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. -CONSOLE WARNING: line 27: SharedArrayBuffer will require cross-origin isolation as of M91, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. -Test sharing SharedArrayBuffers between dedicated workers. - -Running SharedArrayBuffer test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred data is OK. -PASS: Transferred data is OK. -Running Int8Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint8Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint8ClampedArray test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Int16Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint16Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Int32Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint32Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Float32Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Float64Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -DONE -
diff --git a/third_party/blink/web_tests/virtual/plz-dedicated-worker/fast/workers/worker-sharedarraybuffer-transfer-expected.txt b/third_party/blink/web_tests/virtual/plz-dedicated-worker/fast/workers/worker-sharedarraybuffer-transfer-expected.txt deleted file mode 100644 index 2ee37cfdb..0000000 --- a/third_party/blink/web_tests/virtual/plz-dedicated-worker/fast/workers/worker-sharedarraybuffer-transfer-expected.txt +++ /dev/null
@@ -1,75 +0,0 @@ -CONSOLE WARNING: line 113: SharedArrayBuffer will require cross-origin isolation as of M91, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. -CONSOLE WARNING: line 27: SharedArrayBuffer will require cross-origin isolation as of M91, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. -Test sharing SharedArrayBuffers between dedicated workers. - -Running SharedArrayBuffer test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred data is OK. -Running Int8Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint8Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint8ClampedArray test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Int16Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint16Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Int32Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Uint32Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Float32Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running Float64Array test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: SharedArrayBuffer not neutered during transfer. -PASS: Original data not changed during transfer. -PASS: Transferred array type is OK. -PASS: Transferred data is OK. -Running SendSharedArrayBufferTwice test case -PASS: Transferred data is OK. -Running TransferArrayBufferAndSharedArrayBuffer test case -PASS: ArrayBuffer was neutered during transfer. -PASS: Transferred data is OK. -PASS: Transferred data is OK. -Running SharedArrayBufferInTransferListViaMessagePort test case -PASS: Passing SharedArrayBuffer in the transfer list threw. -PASS: ArrayBuffer 'ab1' was not neutered. -PASS: ArrayBuffer 'ab2' was not neutered. -DONE -
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index 466fd1e3..c7685bf 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-10-4-140-g5635d5edc -Revision: 5635d5edc489a19d8e6faef48c644942a4b3f777 +Version: VER-2-10-4-141-gd3befe1c7 +Revision: d3befe1c72999805bc3960d29780cd8f505a180d CPEPrefix: cpe:/a:freetype:freetype:2.10.4 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses"
diff --git a/third_party/wayland/BUILD.gn b/third_party/wayland/BUILD.gn index 9ff89cd2..cef3d7d 100644 --- a/third_party/wayland/BUILD.gn +++ b/third_party/wayland/BUILD.gn
@@ -8,6 +8,7 @@ if (!use_system_libwayland) { config("wayland_config") { include_dirs = [ + "include", "include/src", "include/protocol", "src/src", @@ -120,6 +121,23 @@ public_configs = [ ":wayland_config" ] } + + static_library("wayland_cursor") { + sources = [ + "src/cursor/cursor-data.h", + "src/cursor/os-compatibility.c", + "src/cursor/os-compatibility.h", + "src/cursor/wayland-cursor.c", + "src/cursor/wayland-cursor.h", + "src/cursor/xcursor.c", + "src/cursor/xcursor.h", + ] + + configs -= [ "//build/config/compiler:chromium_code" ] + configs += [ "//build/config/compiler:no_chromium_code" ] + + public_configs = [ ":wayland_config" ] + } } if (!use_system_wayland_scanner) { @@ -153,6 +171,10 @@ packages = [ "wayland-client" ] } + pkg_config("wayland_cursor_config") { + packages = [ "wayland-cursor" ] + } + pkg_config("wayland_server_config") { packages = [ "wayland-server" ] } @@ -165,6 +187,10 @@ public_configs = [ ":wayland_client_config" ] } + group("wayland_cursor") { + public_configs = [ ":wayland_cursor_config" ] + } + group("wayland_server") { public_configs = [ ":wayland_server_config" ] } @@ -183,6 +209,7 @@ extra_header = "stubs/libwayland.fragment" sigs = [ "stubs/libwayland-client.sigs", + "stubs/libwayland-cursor.sigs", "stubs/libwayland-egl.sigs", ]
diff --git a/third_party/wayland/stubs/libwayland-cursor.sigs b/third_party/wayland/stubs/libwayland-cursor.sigs new file mode 100644 index 0000000..f458a3c1 --- /dev/null +++ b/third_party/wayland/stubs/libwayland-cursor.sigs
@@ -0,0 +1,8 @@ +// These signatures are obtained by hand from wayland-cursor.h. + +struct wl_cursor_theme *wl_cursor_theme_load(const char *name, int size, struct wl_shm *shm); +void wl_cursor_theme_destroy(struct wl_cursor_theme *theme); +struct wl_cursor *wl_cursor_theme_get_cursor(struct wl_cursor_theme *theme, const char *name); +struct wl_buffer *wl_cursor_image_get_buffer(struct wl_cursor_image *image); +int wl_cursor_frame(struct wl_cursor *cursor, uint32_t time); +int wl_cursor_frame_and_duration(struct wl_cursor *cursor, uint32_t time, uint32_t *duration);
diff --git a/tools/cfi/ignores.txt b/tools/cfi/ignores.txt index 767d99fa..e0fe3a6 100644 --- a/tools/cfi/ignores.txt +++ b/tools/cfi/ignores.txt
@@ -38,6 +38,9 @@ # https://crbug.com/994752 src:*third_party/spirv-cross/spirv-cross/spirv_cross_containers.hpp +# Vulkan memory allocator +src:*third_party/vulkan_memory_allocator/src/vk_mem_alloc.h + ############################################################################# # Base class's constructor accesses a derived class. @@ -171,6 +174,7 @@ src:*third_party/vulkan_memory_allocator/src/vk_mem_alloc.h src:*third_party/angle/third_party/vulkan-loader/src/loader* src:*third_party/vulkan-deps/vulkan-loader/src/loader* +src:*third_party/vulkan-deps/vulkan-validation-layers/src/layers/* src:*components/os_crypt/*
diff --git a/tools/clang/blink_gc_plugin/BadPatternFinder.cpp b/tools/clang/blink_gc_plugin/BadPatternFinder.cpp index 6016ec2..36d5d8c 100644 --- a/tools/clang/blink_gc_plugin/BadPatternFinder.cpp +++ b/tools/clang/blink_gc_plugin/BadPatternFinder.cpp
@@ -19,7 +19,9 @@ TypeMatcher GarbageCollectedType() { auto has_gc_base = hasCanonicalType(hasDeclaration( cxxRecordDecl(isDerivedFrom(hasAnyName("::blink::GarbageCollected", - "::blink::GarbageCollectedMixin"))) + "::blink::GarbageCollectedMixin", + "::cppgc::GarbageCollected", + "::cppgc::GarbageCollectedMixin"))) .bind("gctype"))); return anyOf(has_gc_base, hasCanonicalType(arrayType(hasElementType(has_gc_base))));
diff --git a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp index 7cd0c177..7fb99f2 100644 --- a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp +++ b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
@@ -86,10 +86,14 @@ json_(0) { // Only check structures in the blink and WebKit namespaces. options_.checked_namespaces.insert("blink"); + options_.checked_namespaces.insert("cppgc"); // Ignore GC implementation files. options_.ignored_directories.push_back( "third_party/blink/renderer/platform/heap/"); + options_.ignored_directories.push_back("v8/src/heap/cppgc/"); + options_.ignored_directories.push_back("v8/src/heap/cppgc-js/"); + options_.allowed_directories.push_back( "third_party/blink/renderer/platform/heap/test/"); } @@ -382,7 +386,9 @@ CXXRecordDecl* BlinkGCPluginConsumer::GetLeftMostBase( CXXRecordDecl* left_most) { CXXRecordDecl::base_class_iterator it = left_most->bases_begin(); + CXXRecordDecl* previous_left_most = left_most; while (it != left_most->bases_end()) { + previous_left_most = left_most; if (it->getType()->isDependentType()) left_most = RecordInfo::GetDependentTemplatedDecl(*it->getType()); else @@ -391,6 +397,12 @@ return 0; it = left_most->bases_begin(); } + if (Config::IsCppgcGCBase(left_most->getName())) { + // In the cppgc library, the GC base classes share a common parent. The + // common parent should be ignored for the purposes of getting the left + // most base. + return previous_left_most; + } return left_most; }
diff --git a/tools/clang/blink_gc_plugin/Config.h b/tools/clang/blink_gc_plugin/Config.h index 3f768b4d..7e6e4fe 100644 --- a/tools/clang/blink_gc_plugin/Config.h +++ b/tools/clang/blink_gc_plugin/Config.h
@@ -118,6 +118,10 @@ name == "ThreadSafeRefCounted"; } + static bool IsCppgcGCBase(llvm::StringRef name) { + return name == "GarbageCollectedBase"; + } + static bool IsGCSimpleBase(llvm::StringRef name) { return name == "GarbageCollected"; }
diff --git a/tools/clang/blink_gc_plugin/RecordInfo.cpp b/tools/clang/blink_gc_plugin/RecordInfo.cpp index d00cd0e..2758a5a 100644 --- a/tools/clang/blink_gc_plugin/RecordInfo.cpp +++ b/tools/clang/blink_gc_plugin/RecordInfo.cpp
@@ -159,7 +159,18 @@ if (!tmpl_decl) return 0; - return dyn_cast_or_null<CXXRecordDecl>(tmpl_decl->getTemplatedDecl()); + if (CXXRecordDecl* record_decl = + dyn_cast_or_null<CXXRecordDecl>(tmpl_decl->getTemplatedDecl())) + return record_decl; + + // Type is an alias. + TypeAliasDecl* alias_decl = + dyn_cast<TypeAliasDecl>(tmpl_decl->getTemplatedDecl()); + assert(alias_decl); + const Type* alias_type = alias_decl->getUnderlyingType().getTypePtr(); + if (CXXRecordDecl* record_decl = alias_type->getAsCXXRecordDecl()) + return record_decl; + return GetDependentTemplatedDecl(*alias_type); } void RecordInfo::walkBases() { @@ -693,7 +704,12 @@ // TODO: Consider using a more canonical identification than names. NamespaceDecl* ns = dyn_cast<NamespaceDecl>(info->record()->getDeclContext()); - if (!ns || ns->getName() != "blink") + // Find outer-most namespace. + while (NamespaceDecl* outer_ns = + dyn_cast<NamespaceDecl>(ns->getDeclContext())) { + ns = outer_ns; + } + if (!ns || (ns->getName() != "blink") && (ns->getName() != "cppgc")) return 0; if (!info->GetTemplateArgs(1, &args)) return 0;
diff --git a/tools/clang/blink_gc_plugin/process-graph.py b/tools/clang/blink_gc_plugin/process-graph.py index 0603183..eac8f363 100755 --- a/tools/clang/blink_gc_plugin/process-graph.py +++ b/tools/clang/blink_gc_plugin/process-graph.py
@@ -364,6 +364,8 @@ gc_bases = ( 'blink::GarbageCollected', 'blink::GarbageCollectedMixin', + 'cppgc::GarbageCollected', + 'cppgc::GarbageCollectedMixin', ) ref_bases = ( 'WTF::RefCounted', @@ -418,7 +420,8 @@ % ( stats['ref'] == 0 and stats['ref-mixins'] == 0 and "*" or " ", total == 0 and 100 or stats['mem'] * 100 / total, - node.name.replace('blink::', ''), + node.name.replace('blink::', '').replace( + 'cppgc::subtle::', '').replace('cppgc::', ''), stats['classes'], stats['mem'], stats['ref'],
diff --git a/tools/clang/blink_gc_plugin/tests/heap/stubs.h b/tools/clang/blink_gc_plugin/tests/heap/stubs.h index b36bf93..8648d3a 100644 --- a/tools/clang/blink_gc_plugin/tests/heap/stubs.h +++ b/tools/clang/blink_gc_plugin/tests/heap/stubs.h
@@ -181,34 +181,130 @@ } // namespace absl +#if defined(USE_V8_OILPAN) + +namespace cppgc { + +class Visitor { + public: + template <typename T, void (T::*method)(Visitor*)> + void RegisterWeakMembers(const T* obj); + + template <typename T> + void Trace(const T&); +}; + +namespace internal { +class GarbageCollectedBase {}; +} // namespace internal + +template <typename T> +class GarbageCollected : public internal::GarbageCollectedBase {}; + +class GarbageCollectedMixin : public internal::GarbageCollectedBase { + public: + virtual void AdjustAndMark(Visitor*) const = 0; + virtual bool IsHeapObjectAlive(Visitor*) const = 0; + virtual void Trace(Visitor*) const {} +}; + +template <typename T> +class Member { + public: + operator T*() const { return 0; } + T* operator->() const { return 0; } + bool operator!() const { return false; } +}; + +template <typename T> +class WeakMember { + public: + operator T*() const { return 0; } + T* operator->() const { return 0; } + bool operator!() const { return false; } +}; + +template <typename T> +class Persistent { + public: + operator T*() const { return 0; } + T* operator->() const { return 0; } + bool operator!() const { return false; } +}; + +template <typename T> +class WeakPersistent { + public: + operator T*() const { return 0; } + T* operator->() const { return 0; } + bool operator!() const { return false; } +}; + +namespace subtle { + +template <typename T> +class CrossThreadPersistent { + public: + operator T*() const { return 0; } + T* operator->() const { return 0; } + bool operator!() const { return false; } +}; + +template <typename T> +class CrossThreadWeakPersistent { + public: + operator T*() const { return 0; } + T* operator->() const { return 0; } + bool operator!() const { return false; } +}; + +} // namespace subtle + +} // namespace cppgc + namespace blink { -using namespace WTF; +using Visitor = cppgc::Visitor; -#define DISALLOW_NEW() \ - private: \ - void* operator new(size_t) = delete; \ - void* operator new(size_t, void*) = delete; +template <typename T> +using GarbageCollected = cppgc::GarbageCollected<T>; -#define STACK_ALLOCATED() \ - private: \ - __attribute__((annotate("blink_stack_allocated"))) \ - void* operator new(size_t) = delete; \ - void* operator new(size_t, void*) = delete; +using GarbageCollectedMixin = cppgc::GarbageCollectedMixin; -#define DISALLOW_NEW_EXCEPT_PLACEMENT_NEW() \ - public: \ - void* operator new(size_t, void*); \ - private: \ - void* operator new(size_t) = delete; +template <typename T> +using Member = cppgc::Member<T>; +template <typename T> +using WeakMember = cppgc::WeakMember<T>; +template <typename T> +using Persistent = cppgc::Persistent<T>; +template <typename T> +using WeakPersistent = cppgc::WeakPersistent<T>; +template <typename T> +using CrossThreadPersistent = cppgc::subtle::CrossThreadPersistent<T>; +template <typename T> +using CrossThreadWeakPersistent = cppgc::subtle::CrossThreadWeakPersistent<T>; -#define GC_PLUGIN_IGNORE(bug) \ - __attribute__((annotate("blink_gc_plugin_ignore"))) +#else // !defined(USE_V8_OILPAN) + +namespace blink { + +class Visitor { + public: + template <typename T, void (T::*method)(Visitor*)> + void RegisterWeakMembers(const T* obj); + + template <typename T> + void Trace(const T&); +}; template<typename T> class GarbageCollected { }; -template <typename T> -class RefCountedGarbageCollected : public GarbageCollected<T> {}; +class GarbageCollectedMixin { + public: + virtual void AdjustAndMark(Visitor*) const = 0; + virtual bool IsHeapObjectAlive(Visitor*) const = 0; + virtual void Trace(Visitor*) const {} +}; template<typename T> class Member { public: @@ -252,6 +348,34 @@ bool operator!() const { return false; } }; +#endif // !defined(USE_V8_OILPAN) + +using namespace WTF; + +#define DISALLOW_NEW() \ + private: \ + void* operator new(size_t) = delete; \ + void* operator new(size_t, void*) = delete; + +#define STACK_ALLOCATED() \ + private: \ + __attribute__((annotate("blink_stack_allocated"))) \ + void* operator new(size_t) = delete; \ + void* operator new(size_t, void*) = delete; + +#define DISALLOW_NEW_EXCEPT_PLACEMENT_NEW() \ + public: \ + void* operator new(size_t, void*); \ + \ + private: \ + void* operator new(size_t) = delete; + +#define GC_PLUGIN_IGNORE(bug) \ + __attribute__((annotate("blink_gc_plugin_ignore"))) + +template <typename T> +class RefCountedGarbageCollected : public GarbageCollected<T> {}; + template <typename T> class TraceWrapperV8Reference { public: @@ -288,27 +412,11 @@ template<typename K, typename V> class HeapHashMap : public HashMap<K, V, void, void, void, HeapAllocator> { }; -class Visitor { - public: - template <typename T, void (T::*method)(Visitor*)> - void RegisterWeakMembers(const T* obj); - - template <typename T> - void Trace(const T&); -}; - -class GarbageCollectedMixin { -public: - virtual void AdjustAndMark(Visitor*) const = 0; - virtual bool IsHeapObjectAlive(Visitor*) const = 0; - virtual void Trace(Visitor*) const {} -}; - template<typename T> struct TraceIfNeeded { static void Trace(Visitor*, const T&); }; -} +} // namespace blink #endif
diff --git a/tools/clang/blink_gc_plugin/tests/stack_allocated.txt b/tools/clang/blink_gc_plugin/tests/stack_allocated.txt index ced10d1..d9622d1 100644 --- a/tools/clang/blink_gc_plugin/tests/stack_allocated.txt +++ b/tools/clang/blink_gc_plugin/tests/stack_allocated.txt
@@ -23,9 +23,9 @@ ./stack_allocated.h:44:3: warning: [blink-gc] Garbage collected class 'DerivedHeapObject2' is not permitted to override its new operator. STACK_ALLOCATED(); ^ -./heap/stubs.h:195:5: note: expanded from macro 'STACK_ALLOCATED' - __attribute__((annotate("blink_stack_allocated"))) \ - ^ +./heap/stubs.h:362:3: note: expanded from macro 'STACK_ALLOCATED' + __attribute__((annotate("blink_stack_allocated"))) \ + ^ In file included from stack_allocated.cpp:5: ./stack_allocated.h:24:5: warning: [blink-gc] Class 'StackObject' has untraced or not traceable fields. void Trace(Visitor* visitor) const { visitor->Trace(m_obj); }
diff --git a/tools/clang/blink_gc_plugin/tests/test.py b/tools/clang/blink_gc_plugin/tests/test.py index 888274199..a90f549 100755 --- a/tools/clang/blink_gc_plugin/tests/test.py +++ b/tools/clang/blink_gc_plugin/tests/test.py
@@ -18,8 +18,14 @@ class BlinkGcPluginTest(plugin_testing.ClangPluginTest): """Test harness for the Blink GC plugin.""" + def __init__(self, use_cppgc, *args, **kwargs): + super(BlinkGcPluginTest, self).__init__(*args, **kwargs) + self.use_cppgc = use_cppgc + def AdjustClangArguments(self, clang_cmd): clang_cmd.append('-Wno-inaccessible-base') + if self.use_cppgc: + clang_cmd.append('-DUSE_V8_OILPAN') def ProcessOneResult(self, test_name, actual): # Some Blink GC plugins dump a JSON representation of the object graph, and @@ -41,6 +47,11 @@ # Clean up the .graph.json file to prevent false passes from stale # results from a previous run. os.remove('%s.graph.json' % test_name) + if self.use_cppgc: + if os.path.exists('%s.cppgc.txt' % test_name): + # Some tests include namespace names in the output and thus require a + # different output file for comparison. + test_name = '%s.cppgc' % test_name return super(BlinkGcPluginTest, self).ProcessOneResult(test_name, actual) @@ -53,12 +64,27 @@ parser.add_argument('clang_path', help='The path to the clang binary.') args = parser.parse_args() - return BlinkGcPluginTest( - os.path.dirname(os.path.realpath(__file__)), + dir_name = os.path.dirname(os.path.realpath(__file__)) + + num_faliures_blink = BlinkGcPluginTest( + False, # USE_V8_OILPAN + dir_name, args.clang_path, 'blink-gc-plugin', args.reset_results).Run() + num_faliures_cppgc = BlinkGcPluginTest( + True, # USE_V8_OILPAN + dir_name, + args.clang_path, + 'blink-gc-plugin', + args.reset_results).Run() + + print "\nBlink GC Plugin Summary: %d tests failed without USE_V8_OILPAN, " \ + "%d tests failed with USE_V8_OILPAN" % ( + num_faliures_blink, num_faliures_cppgc) + return num_faliures_blink + num_faliures_cppgc + if __name__ == '__main__': sys.exit(main())
diff --git a/tools/clang/blink_gc_plugin/tests/trace_if_needed.cppgc.txt b/tools/clang/blink_gc_plugin/tests/trace_if_needed.cppgc.txt new file mode 100644 index 0000000..0185806 --- /dev/null +++ b/tools/clang/blink_gc_plugin/tests/trace_if_needed.cppgc.txt
@@ -0,0 +1,7 @@ +trace_if_needed.cpp:9:1: warning: [blink-gc] Class 'TemplatedObject<cppgc::Member<blink::HeapObject>>' has untraced fields that require tracing. +template <typename T> +^ +./trace_if_needed.h:21:5: note: [blink-gc] Untraced field 'm_two' declared here: + T m_two; + ^ +1 warning generated.
diff --git a/tools/clang/plugins/FindBadConstructsAction.cpp b/tools/clang/plugins/FindBadConstructsAction.cpp index e0ec0747..e2395b94 100644 --- a/tools/clang/plugins/FindBadConstructsAction.cpp +++ b/tools/clang/plugins/FindBadConstructsAction.cpp
@@ -51,9 +51,6 @@ options_.check_ipc = true; } else if (args[i] == "check-gmock-objects") { options_.check_gmock_objects = true; - } else if (args[i] == "checked-ptr-as-trivial-member") { - checked_ptr_as_trivial_member = true; - } } else { parsed = false; llvm::errs() << "Unknown clang plugin argument: " << args[i] << "\n";
diff --git a/tools/clang/plugins/FindBadConstructsConsumer.cpp b/tools/clang/plugins/FindBadConstructsConsumer.cpp index 61e51d0..d5a18d3 100644 --- a/tools/clang/plugins/FindBadConstructsConsumer.cpp +++ b/tools/clang/plugins/FindBadConstructsConsumer.cpp
@@ -687,23 +687,20 @@ case Type::TemplateSpecialization: { TemplateName name = dyn_cast<TemplateSpecializationType>(type)->getTemplateName(); + bool whitelisted_template = false; // HACK: I'm at a loss about how to get the syntax checker to get // whether a template is externed or not. For the first pass here, // just do simple string comparisons. if (TemplateDecl* decl = name.getAsTemplateDecl()) { - std::string base_name = decl->getQualifiedNameAsString(); - if (base_name == "std::basic_string") { - (*non_trivial_member)++; - break; - } - if (options_.checked_ptr_as_trivial_member && - base_name == "base::CheckedPtr") { - (*trivial_member)++; - break; - } + std::string base_name = decl->getNameAsString(); + if (base_name == "basic_string") + whitelisted_template = true; } + if (whitelisted_template) + (*non_trivial_member)++; + else (*templated_non_trivial_member)++; break; }
diff --git a/tools/clang/plugins/Options.h b/tools/clang/plugins/Options.h index 6ad4c1df..82e9dec 100644 --- a/tools/clang/plugins/Options.h +++ b/tools/clang/plugins/Options.h
@@ -11,7 +11,6 @@ bool check_base_classes = false; bool check_ipc = false; bool check_gmock_objects = false; - bool checked_ptr_as_trivial_member = false; }; } // namespace chrome_checker
diff --git a/tools/clang/plugins/tests/base/memory/checked_ptr.h b/tools/clang/plugins/tests/base/memory/checked_ptr.h deleted file mode 100644 index a8957ef..0000000 --- a/tools/clang/plugins/tests/base/memory/checked_ptr.h +++ /dev/null
@@ -1,17 +0,0 @@ -// 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 TOOLS_CLANG_PLUGINS_TESTS_BASE_MEMORY_CHECKED_PTR_H_ -#define TOOLS_CLANG_PLUGINS_TESTS_BASE_MEMORY_CHECKED_PTR_H_ - -namespace base { - -template <typename T> -class CheckedPtr {}; - -} // namespace base - -using base::CheckedPtr; - -#endif // TOOLS_CLANG_PLUGINS_TESTS_BASE_MEMORY_CHECKED_PTR_H_
diff --git a/tools/clang/plugins/tests/missing_ctor.h b/tools/clang/plugins/tests/missing_ctor.h index 05bc333..b6d8d0e 100644 --- a/tools/clang/plugins/tests/missing_ctor.h +++ b/tools/clang/plugins/tests/missing_ctor.h
@@ -5,9 +5,6 @@ #ifndef MISSING_CTOR_H_ #define MISSING_CTOR_H_ -#include <string> -#include "base/memory/checked_ptr.h" - struct MyString { MyString(); ~MyString(); @@ -94,80 +91,4 @@ int z; }; -class StringDoesNotWarn { - public: - StringDoesNotWarn() = default; - ~StringDoesNotWarn() = default; - - private: - std::string foo_; -}; - -class ThreeStringsDoesNotWarn { - public: - ThreeStringsDoesNotWarn() = default; - ~ThreeStringsDoesNotWarn() = default; - - private: - std::string one_; - std::string two_; - std::string three_; -}; - -class FourStringsWarns { - public: - FourStringsWarns() = default; - ~FourStringsWarns() = default; - - private: - std::string one_; - std::string two_; - std::string three_; - std::string four_; -}; - -class CheckedPtrDoesNotWarn { - public: - CheckedPtrDoesNotWarn() = default; - ~CheckedPtrDoesNotWarn() = default; - - private: - CheckedPtr<CheckedPtrDoesNotWarn> foo_; -}; - -class NineCheckedPtrDoesNotWarn { - public: - NineCheckedPtrDoesNotWarn() = default; - ~NineCheckedPtrDoesNotWarn() = default; - - private: - CheckedPtr<NineCheckedPtrDoesNotWarn> one_; - CheckedPtr<NineCheckedPtrDoesNotWarn> two_; - CheckedPtr<NineCheckedPtrDoesNotWarn> three_; - CheckedPtr<NineCheckedPtrDoesNotWarn> four_; - CheckedPtr<NineCheckedPtrDoesNotWarn> five_; - CheckedPtr<NineCheckedPtrDoesNotWarn> six_; - CheckedPtr<NineCheckedPtrDoesNotWarn> seven_; - CheckedPtr<NineCheckedPtrDoesNotWarn> eight_; - CheckedPtr<NineCheckedPtrDoesNotWarn> nine_; -}; - -class TenCheckedPtrWarns { - public: - TenCheckedPtrWarns() = default; - ~TenCheckedPtrWarns() = default; - - private: - CheckedPtr<TenCheckedPtrWarns> one_; - CheckedPtr<TenCheckedPtrWarns> two_; - CheckedPtr<TenCheckedPtrWarns> three_; - CheckedPtr<TenCheckedPtrWarns> four_; - CheckedPtr<TenCheckedPtrWarns> five_; - CheckedPtr<TenCheckedPtrWarns> six_; - CheckedPtr<TenCheckedPtrWarns> seven_; - CheckedPtr<TenCheckedPtrWarns> eight_; - CheckedPtr<TenCheckedPtrWarns> nine_; - CheckedPtr<TenCheckedPtrWarns> ten_; -}; - #endif // MISSING_CTOR_H_
diff --git a/tools/clang/plugins/tests/missing_ctor.txt b/tools/clang/plugins/tests/missing_ctor.txt index a603ae1..548a55d 100644 --- a/tools/clang/plugins/tests/missing_ctor.txt +++ b/tools/clang/plugins/tests/missing_ctor.txt
@@ -1,21 +1,15 @@ In file included from missing_ctor.cpp:5: -./missing_ctor.h:28:1: warning: [chromium-style] Complex class/struct needs an explicit out-of-line constructor. +./missing_ctor.h:25:1: warning: [chromium-style] Complex class/struct needs an explicit out-of-line constructor. class MissingCtorsArentOKInHeader { ^ -./missing_ctor.h:28:1: warning: [chromium-style] Complex class/struct needs an explicit out-of-line destructor. -./missing_ctor.h:54:3: warning: [chromium-style] Complex constructor has an inlined body. +./missing_ctor.h:25:1: warning: [chromium-style] Complex class/struct needs an explicit out-of-line destructor. +./missing_ctor.h:51:3: warning: [chromium-style] Complex constructor has an inlined body. ExplicitlyDefaultedInlineAlsoWarns() = default; ^ -./missing_ctor.h:56:3: warning: [chromium-style] Complex constructor has an inlined body. +./missing_ctor.h:53:3: warning: [chromium-style] Complex constructor has an inlined body. ExplicitlyDefaultedInlineAlsoWarns( ^ -./missing_ctor.h:55:3: warning: [chromium-style] Complex destructor has an inline body. +./missing_ctor.h:52:3: warning: [chromium-style] Complex destructor has an inline body. ~ExplicitlyDefaultedInlineAlsoWarns() = default; ^ -./missing_ctor.h:119:3: warning: [chromium-style] Complex constructor has an inlined body. - FourStringsWarns() = default; - ^ -./missing_ctor.h:157:3: warning: [chromium-style] Complex constructor has an inlined body. - TenCheckedPtrWarns() = default; - ^ -7 warnings generated. +5 warnings generated.
diff --git a/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt b/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt index f1322ff2..2317e3b 100644 --- a/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt +++ b/tools/clang/rewrite_raw_ptr_fields/manual-fields-to-ignore.txt
@@ -120,6 +120,10 @@ courgette::LabelManagerTest_SimpleIndexAssigner_Test::TestBody()::TestCase::expect_backward courgette::LabelManagerTest_SimpleIndexAssigner_Test::TestBody()::TestCase::expect_in +# Populated manually - pointer to address in another process could be confused +# as a pointer to PA memory +sandbox::TargetProcess::base_address_ # https://crbug.com/1173374 + # Populated manually - uninitialized memory reinterpret_cast to CheckedPtr # causing AddRef/Deref mismatch. sandbox::(anonymous namespace)::_HEAP_32::Heap @@ -134,9 +138,10 @@ cc::PaintOpWriter::memory_ # https://crbug.com/1169579 # Populated manually - pointer to stale non-PA allocation could be confused as a -# pointer to PA memory when that address space is reused +# pointer to PA memory when that address space is reused https://crbug.com/1173851 base::PersistentMemoryAllocator::mem_base_ # https://crbug.com/1169582 base::SharedMemoryMapping::memory_ # https://crbug.com/1169581 +mojo::core::PlatformSharedMemoryMapping::base_ # https://crbug.com/1173380 # Populated manually - other compile-time reasons iovec::iov_base # requires adding .get() in another repository, used e.g. in
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index ff04d0e..4996237 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -329,6 +329,7 @@ 'linux-blink-animation-use-time-delta': 'debug_bot_enable_blink_animation_use_time_delta', 'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_tsan', 'linux-blink-heap-verification': 'release_bot_enable_blink_heap_verification_dcheck_always_on', + 'linux-blink-v8-oilpan': 'release_bot_enable_v8_oilpan_dcheck_always_on', 'linux-chromeos-code-coverage': 'chromeos_with_codecs_release_bot_coverage', 'linux-chromeos-js-code-coverage': 'chromeos_with_codecs_release_bot_javascript_coverage', 'linux-chromium-tests-staging-builder': 'release_bot', @@ -955,6 +956,7 @@ 'linux-autofill-assistant': 'autofill_assistant_release_trybot', 'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_tsan', 'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification', + 'linux-blink-v8-oilpan': 'release_trybot_enable_v8_oilpan', 'linux-bfcache-rel': 'release_bot_blink', 'linux-clang-tidy-dbg': 'debug_bot', 'linux-clang-tidy-rel': 'release_trybot', @@ -2486,6 +2488,10 @@ 'release_bot_blink', 'enable_blink_heap_verification', 'dcheck_always_on', ], + 'release_bot_enable_v8_oilpan_dcheck_always_on': [ + 'release_bot_blink', 'enable_v8_oilpan', 'dcheck_always_on', + ], + 'release_bot_fuchsia': [ 'release_bot', 'fuchsia', ], @@ -2546,6 +2552,10 @@ 'release_trybot_blink', 'enable_blink_heap_verification', ], + 'release_trybot_enable_v8_oilpan': [ + 'release_trybot_blink', 'enable_v8_oilpan', + ], + 'release_trybot_fuchsia': [ 'release_trybot', 'fuchsia', ], @@ -2923,6 +2933,10 @@ 'gn_args': 'skip_archive_compression=false', }, + 'enable_v8_oilpan': { + 'gn_args': 'enable_blink_heap_use_v8_oilpan=true', + }, + 'eve': { 'args_file': '//build/args/chromeos/eve.gni', },
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json index 02f1e11..b7ff81f 100644 --- a/tools/mb/mb_config_expectations/chromium.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -542,6 +542,17 @@ "use_goma": true } }, + "linux-blink-v8-oilpan": { + "gn_args": { + "dcheck_always_on": true, + "enable_blink_heap_use_v8_oilpan": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "use_goma": true + } + }, "linux-chromeos-code-coverage": { "gn_args": { "ffmpeg_branding": "ChromeOS",
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json index 355532b..279e667 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -371,6 +371,18 @@ "use_goma": true } }, + "linux-blink-v8-oilpan": { + "gn_args": { + "dcheck_always_on": true, + "enable_blink_heap_use_v8_oilpan": true, + "ffmpeg_branding": "Chrome", + "is_component_build": false, + "is_debug": false, + "proprietary_codecs": true, + "symbol_level": 1, + "use_goma": true + } + }, "linux-blink-web-tests-force-accessibility-rel": { "gn_args": { "dcheck_always_on": true,
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index d5e3d89b..53446d7 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -16571,6 +16571,77 @@ </description> </action> +<action name="Notifications.WebPlatform.ActionButton.Click"> + <owner>peconn@chromium.org</owner> + <owner>peter@chromium.org</owner> + <description> + Recorded when the user clicks on the action button of a web platform + notification. + </description> +</action> + +<action name="Notifications.WebPlatform.ActionButton.Close"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the action button of a web platform + notification, and the notification closes. + </description> +</action> + +<action name="Notifications.WebPlatform.ActionButton.FocusActivity"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the action button of a web platform + notification, and the notification focuses an Activity. + </description> +</action> + +<action name="Notifications.WebPlatform.ActionButton.NewActivity"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the action button of a web platform + notification, and the notification opens a new Activity. + </description> +</action> + +<action name="Notifications.WebPlatform.Body.Click"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the body of a web platform notification. + </description> +</action> + +<action name="Notifications.WebPlatform.Body.Close"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the body of a web platform notification, + and the notification closes. + </description> +</action> + +<action name="Notifications.WebPlatform.Body.FocusActivity"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the body of a web platform notification, + and the notification focuses an Activity. + </description> +</action> + +<action name="Notifications.WebPlatform.Body.NewActivity"> + <owner>peconn@chromium.org</owner> + <owner>beverloo@chromium.org</owner> + <description> + Recorded when the user clicks on the body of a web platform notification, + and the notification opens a new Activity. + </description> +</action> + <action name="NPAPIRemovalInfobar.LearnMore"> <obsolete>Deprecated due to NPAPI removal.</obsolete> <owner>wfh@chromium.org</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 14b2b9b..8eca845 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -31048,7 +31048,7 @@ <int value="3579" label="ForcedDarkMode"/> <int value="3580" label="PreferredColorSchemeDark"/> <int value="3581" label="PreferredColorSchemeDarkSetting"/> - <int value="3582" label="IdentifiabilityStudyReserved3582"/> + <int value="3582" label="IdentifiabilityMediaDevicesEnumerateDevices"/> <int value="3583" label="IdentifiabilityStudyReserved3583"/> <int value="3584" label="IdentifiabilityStudyReserved3584"/> <int value="3585" label="IdentifiabilityStudyReserved3585"/> @@ -38691,7 +38691,7 @@ </enum> <enum name="InfoBarIdentifier"> - <int value="1" label="APP_BANNER_INFOBAR_DELEGATE"/> + <int value="1" label="APP_BANNER_INFOBAR_DELEGATE (Obsolete)"/> <int value="2" label="APP_BANNER_INFOBAR_DELEGATE_DESKTOP (Obsolete)"/> <int value="3" label="ANDROID_DOWNLOAD_MANAGER_OVERWRITE_INFOBAR_DELEGATE (Obsolete)"/> @@ -38762,7 +38762,8 @@ <int value="65" label="AUTOFILL_CC_ASSIST_INFOBAR_DELEGATE"/> <int value="66" label="ADS_BLOCKED_INFOBAR_DELEGATE_ANDROID"/> <int value="67" label="INSTANT_APPS_INFOBAR_DELEGATE_ANDROID"/> - <int value="68" label="DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE"/> + <int value="68" + label="DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE (Obsolete)"/> <int value="69" label="SCREEN_CAPTURE_INFOBAR_DELEGATE_ANDROID"/> <int value="70" label="GROUPED_PERMISSION_INFOBAR_DELEGATE_ANDROID"/> <int value="71" label="OFFLINE_PAGE_INFOBAR_DELEGATE_ANDROID"/> @@ -38776,11 +38777,12 @@ <int value="78" label="SURVEY_INFOBAR_ANDROID"/> <int value="79" label="NEAR_OOM_INFOBAR_ANDROID"/> <int value="80" label="INSTALLABLE_AMBIENT_BADGE_INFOBAR_DELEGATE"/> - <int value="81" label="PAGE_LOAD_CAPPING_INFOBAR_DELEGATE"/> + <int value="81" label="PAGE_LOAD_CAPPING_INFOBAR_DELEGATE (Obsolete)"/> <int value="82" label="DOWNLOAD_PROGRESS_INFOBAR_ANDROID"/> <int value="83" label="AR_CORE_UPGRADE_ANDROID"/> <int value="84" label="BLOATED_RENDERER_INFOBAR_DELEGATE"/> - <int value="85" label="SUPERVISED_USERS_DEPRECATED_INFOBAR_DELEGATE"/> + <int value="85" + label="SUPERVISED_USERS_DEPRECATED_INFOBAR_DELEGATE (Obsolete)"/> <int value="86" label="NEAR_OOM_REDUCTION_INFOBAR_ANDROID"/> <int value="87" label="LITE_PAGE_PREVIEWS_INFOBAR"/> <int value="88" label="MODULE_INSTALL_FAILURE_INFOBAR_ANDROID"/> @@ -38796,9 +38798,11 @@ <int value="98" label="MIXED_CONTENT_DOWNLOAD_INFOBAR_DELEGATE_ANDROID"/> <int value="99" label="CONDITIONAL_TAB_STRIP_INFOBAR_ANDROID"/> <int value="100" label="LITE_MODE_HTTPS_IMAGE_COMPRESSION_INFOBAR_ANDROID"/> - <int value="101" label="SYSTEM_INFOBAR_DELEGATE_MAC"/> + <int value="101" label="SYSTEM_INFOBAR_DELEGATE_MAC (Obsolete)"/> <int value="102" label="EXPERIMENTAL_INFOBAR_DELEGATE_LACROS"/> <int value="103" label="ROSETTA_REQUIRED_INFOBAR_DELEGATE"/> + <int value="104" label="WEBID_PERMISSION_INFOBAR_DELEGATE"/> + <int value="105" label="AUTOFILL_OFFER_NOTIFICATION_INFOBAR_DELEGATE"/> </enum> <enum name="InfoBarResponse"> @@ -45265,6 +45269,7 @@ label="OmniboxUIExperimentBlueSearchLoopAndSearchQuery:enabled"/> <int value="209792775" label="TabGroupsAndroid:enabled"/> <int value="212489101" label="AutofillAssistantChromeEntry:enabled"/> + <int value="212977039" label="MediaFoundationD3D11VideoCapture:disabled"/> <int value="215328738" label="ImprovedGeoLanguageData:disabled"/> <int value="215528151" label="NearbySharingWebRtc:enabled"/> <int value="217455219" label="SyncStandaloneTransport:enabled"/> @@ -45737,6 +45742,7 @@ <int value="649111851" label="MidiManagerCros:enabled"/> <int value="649508040" label="AutofillEnableCompanyName:enabled"/> <int value="651421878" label="VideoRotateToFullscreen:enabled"/> + <int value="651471603" label="MediaFoundationD3D11VideoCapture:enabled"/> <int value="651562604" label="RawClipboard:enabled"/> <int value="651844675" label="EasyUnlockPromotions:enabled"/> <int value="652561231" label="CustomContextMenu:enabled"/> @@ -47987,6 +47993,12 @@ <int value="3" label="3-Critical"/> </enum> +<enum name="MagnifierMouseFollowingMode"> + <int value="0" label="Continuous"/> + <int value="1" label="Centered"/> + <int value="2" label="Edge"/> +</enum> + <enum name="MainFrameDownloadSandboxGesture"> <obsolete> Deprecated as of 03/2019. @@ -56505,6 +56517,7 @@ <int value="1527" label="Live Captions"/> <int value="1528" label="Cursor Colors: On/Off"/> <int value="1529" label="Fullscreen Magnifier Focus Following"/> + <int value="1530" label="Fullscreen Magnifier Mouse Following Mode"/> <int value="1600" label="Powerwash"/> <int value="1700" label="Change Chrome Channel"/> <int value="1701" label="Copy Detailed Build Info"/> @@ -77016,6 +77029,9 @@ </enum> <enum name="ValidateMenuItemSelectorType"> + <obsolete> + Deprecated as of 2021/01. + </obsolete> <int value="0" label="The menu items' associated action is an unknown selector."/> <int value="1" label="The menu item's associated action is -newProfile."/>
diff --git a/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml b/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml index ab14218..306aa614 100644 --- a/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/chromeos/histograms.xml
@@ -700,6 +700,18 @@ </summary> </histogram> +<histogram + name="ChromeOS.Settings.Accessibility.FullscreenMagnifierMouseFollowingMode" + enum="MagnifierMouseFollowingMode" expires_after="2022-01-26"> + <owner>josiahk@chromium.org</owner> + <owner>chromium-accessibility@chromium.org</owner> + <summary> + Recorded when a user changes the value of the + kFullscreenMagnifierMouseFollowingMode setting on the Accessibility page. + Records the value of the setting. + </summary> +</histogram> + <histogram name="ChromeOS.Settings.Bluetooth.BluetoothOnOff" enum="BooleanToggled" expires_after="2021-09-30"> <owner>khorimoto@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml b/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml index 53463b9e..fa0e4c75 100644 --- a/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml
@@ -206,8 +206,8 @@ </histogram> <histogram name="Cryptohome.DiskCleanupResult" - enum="CryptohomeDiskCleanupResult" expires_after="M90"> - <owner>vsavu@chromium.org</owner> + enum="CryptohomeDiskCleanupResult" expires_after="M93"> + <owner>vsavu@google.com</owner> <owner>weifangsun@chromium.org</owner> <summary>Records the result of triggering disk cleanup.</summary> </histogram>
diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml index c5abe811..8ebcfebe5 100644 --- a/tools/metrics/histograms/histograms_xml/media/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml
@@ -4138,6 +4138,17 @@ <summary>Measures the time taken for VideoCaptureManager::</summary> </histogram> +<histogram name="Media.VideoCaptureManager.DeviceSessionLockDuration" + units="ms" expires_after="M95"> + <owner>dalecurtis@chromium.org</owner> + <owner>media-dev@chromium.org</owner> + <summary> + Records the length of time the screen was locked while a device capture + session is active. An entry is recorded upon screen unlock or upon closure + of all active device capture sessions. + </summary> +</histogram> + <histogram name="Media.VideoCaptureManager.DeviceSessionWasLocked" enum="Boolean" expires_after="M95"> <owner>dalecurtis@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/notifications/histograms.xml b/tools/metrics/histograms/histograms_xml/notifications/histograms.xml index fb9ab747..1fa9011 100644 --- a/tools/metrics/histograms/histograms_xml/notifications/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/notifications/histograms.xml
@@ -776,6 +776,36 @@ </summary> </histogram> +<histogram name="Notifications.WebPlatform.{Action}.TimeToActivity" units="ms" + expires_after="M96"> + <owner>peconn@chromium.org</owner> + <owner>peter@chromium.org</owner> + <summary> + Records the delay between the user clicking on the {Action} of a web + platform notification, and an Activity being launched. Only records if the + duration is less than 5 seconds. + </summary> + <token key="Action"> + <variant name="ActionButton" summary="action button"/> + <variant name="Body" summary="body"/> + </token> +</histogram> + +<histogram name="Notifications.WebPlatform.{Action}.TimeToClose" units="ms" + expires_after="M96"> + <owner>peconn@chromium.org</owner> + <owner>peter@chromium.org</owner> + <summary> + Records the delay between the user clicking on the {Action} of a web + platform notification, and the notification being closed. Only records if + the duration is less than 5 seconds. + </summary> + <token key="Action"> + <variant name="ActionButton" summary="action button"/> + <variant name="Body" summary="body"/> + </token> +</histogram> + <histogram name="Notifications.Windows.ActivationStatus" enum="WindowsNotificationActivationStatus" expires_after="M94"> <owner>finnur@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/scheduler/histograms.xml b/tools/metrics/histograms/histograms_xml/scheduler/histograms.xml index 86cd981..335897b 100644 --- a/tools/metrics/histograms/histograms_xml/scheduler/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/scheduler/histograms.xml
@@ -261,7 +261,7 @@ </histogram> <histogram name="Scheduling.Renderer.DrawIntervalWithCustomPropertyAnimations2" - units="microseconds" expires_after="2020-10-01"> + units="microseconds" expires_after="2022-02-01"> <owner>xidachen@chromium.org</owner> <owner>animations-dev@chromium.org</owner> <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 1df7542..fb0f2b4 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -10,7 +10,7 @@ }, "linux": { "hash": "b821229580a5b49a7f7149ef5d1d37d3ba8c39a4", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/acc731df2fbbc812874dc3650b48c516f1732aff/trace_processor_shell" + "remote_path": "perfetto_binaries/trace_processor_shell/linux/b969d2e265f0dbdca7d25f4db27014f6fa28a7d0/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 0d08e698..636f21c8 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -296,6 +296,7 @@ crbug.com/1044682 [ desktop ] system_health.common_desktop/browse:tools:gmail-compose:2020 [ Skip ] crbug.com/1150432 [ linux ] system_health.common_desktop/long_running:tools:gmail-background [ Skip ] crbug.com/1156571 [ mac-10.12 ] system_health.common_desktop/browse:news:nytimes:2020 [ Skip ] +crbug.com/1174108 [ win10 ] system_health.common_desktop/browse:tools:autocad:2021 [ Skip ] # Benchmark: system_health.common_mobile crbug.com/1007355 [ android-go android-webview ] system_health.common_mobile/load:media:imgur:2018 [ Skip ] @@ -439,6 +440,7 @@ crbug.com/1105592 [ desktop ] v8.browsing_desktop/browse:news:nytimes:2020 [ skip ] crbug.com/1163528 [ mac ] v8.browsing_desktop/browse:media:youtubetv_watch:2020 [ Skip ] crbug.com/1163528 [ mac ] v8.browsing_desktop/browse:social:twitter_infinite_scroll:2018 [ Skip ] +crbug.com/1174108 [ win10 ] v8.browsing_desktop/browse:tools:autocad:2021 [ Skip ] # Benchmark v8.browsing_desktop-future crbug.com/788796 [ linux ] v8.browsing_desktop-future/browse:media:imgur [ Skip ] @@ -461,6 +463,8 @@ crbug.com/1163528 [ mac ] v8.browsing_desktop-future/browse:media:youtubetv_watch:2020 [ Skip ] crbug.com/1163528 [ mac ] v8.browsing_desktop-future/browse:social:twitter_infinite_scroll:2018 [ Skip ] crbug.com/1172281 [ win-laptop ] v8.browsing_desktop-future/browse:search:google_india:2018 [ Skip ] +crbug.com/1174106 [ win-laptop ] v8.browsing_desktop-future/browse:tools:earth:2020 [ Skip ] +crbug.com/1174108 [ win10 ] v8.browsing_desktop-future/browse:tools:autocad:2021 [ Skip ] # Benchmark: v8.browsing_mobile crbug.com/958034 [ android-go android-webview ] v8.browsing_mobile/* [ Skip ]
diff --git a/ui/accessibility/ax_node_position.cc b/ui/accessibility/ax_node_position.cc index 17ac632..924b0f5 100644 --- a/ui/accessibility/ax_node_position.cc +++ b/ui/accessibility/ax_node_position.cc
@@ -11,15 +11,21 @@ #include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_tree_manager.h" #include "ui/accessibility/ax_tree_manager_map.h" +#include "ui/base/buildflags.h" namespace ui { +// On some platforms, most objects are represented in the text of their parents +// with a special "embedded object character" and not with their actual text +// contents. Also on the same platforms, if a node has only ignored descendants, +// i.e., it appears to be empty to assistive software, we need to treat it as a +// character and a word boundary. AXEmbeddedObjectBehavior g_ax_embedded_object_behavior = -#if defined(OS_WIN) +#if defined(OS_WIN) || BUILDFLAG(USE_ATK) AXEmbeddedObjectBehavior::kExposeCharacter; #else AXEmbeddedObjectBehavior::kSuppressCharacter; -#endif // defined(OS_WIN) +#endif // defined(OS_WIN) || BUILDFLAG(USE_ATK) // static AXNodePosition::AXPositionInstance AXNodePosition::CreatePosition( @@ -30,7 +36,7 @@ return CreateNullPosition(); AXTreeID tree_id = node.tree()->GetAXTreeID(); - if (node.IsText()) { + if (node.IsLeaf()) { return CreateTextPosition(tree_id, node.id(), child_index_or_text_offset, affinity); } @@ -53,17 +59,25 @@ if (IsNullPosition()) return base::string16(); - // 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. + // Special case, if a position's anchor 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 AXNode::kEmbeddedCharacter; + // Special case, if a position's anchor node is hosting another accessibility + // tree, return the text that is found in that tree's root. const AXNode* anchor = GetAnchor(); - DCHECK(anchor); + const AXTreeManager* child_tree_manager = + AXTreeManagerMap::GetInstance().GetManagerForChildTree(*anchor); + if (child_tree_manager) { + // The child node exists in a separate tree from its parent. + anchor = child_tree_manager->GetRootAsAXNode(); + } + switch (g_ax_embedded_object_behavior) { case AXEmbeddedObjectBehavior::kSuppressCharacter: return base::UTF8ToUTF16(anchor->GetInnerText()); @@ -75,96 +89,59 @@ bool AXNodePosition::IsInLineBreak() const { if (IsNullPosition()) return false; - DCHECK(GetAnchor()); return GetAnchor()->IsLineBreak(); } bool AXNodePosition::IsInTextObject() const { if (IsNullPosition()) return false; - DCHECK(GetAnchor()); return GetAnchor()->IsText(); } bool AXNodePosition::IsInWhiteSpace() const { if (IsNullPosition()) return false; - DCHECK(GetAnchor()); return GetAnchor()->IsLineBreak() || base::ContainsOnlyChars(GetText(), base::kWhitespaceUTF16); } -// This override is an optimized version AXPosition::MaxTextOffset. Instead of -// concatenating the strings in GetText() to then get their text length, we sum -// the lengths of the individual strings. This is faster than concatenating the -// strings first and then taking their length, especially when the process -// is recursive. int AXNodePosition::MaxTextOffset() const { if (IsNullPosition()) return INVALID_OFFSET; + // 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 "object + // replacement character" in the accessibility tree's text representation, but + // we don't expose that character to assistive software that tries to retrieve + // the node's inner text or hypertext. if (IsEmptyObjectReplacedByCharacter()) - return 1; + return AXNode::kEmbeddedCharacterLength; + // Special case, if a position's anchor node is hosting another accessibility + // tree, return the text that is found in that tree's root. const AXNode* anchor = GetAnchor(); - DCHECK(anchor); - // TODO(nektar): Replace with PlatformChildCount when AXNodePosition and - // BrowserAccessibilityPosition will be merged. - if (!AnchorChildCount() || anchor->IsText()) - return base::UTF8ToUTF16(anchor->GetInnerText()).length(); + const AXTreeManager* child_tree_manager = + AXTreeManagerMap::GetInstance().GetManagerForChildTree(*anchor); + if (child_tree_manager) { + // The child node exists in a separate tree from its parent. + anchor = child_tree_manager->GetRootAsAXNode(); + } - 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(); - - return text_length; -} - -bool AXNodePosition::IsEmbeddedObjectInParent() const { switch (g_ax_embedded_object_behavior) { case AXEmbeddedObjectBehavior::kSuppressCharacter: - return false; + // TODO(nektar): Switch to anchor->GetInnerTextLength() after AXPosition + // switches to using UTF8. + return int{base::UTF8ToUTF16(anchor->GetInnerText()).length()}; case AXEmbeddedObjectBehavior::kExposeCharacter: - // We expose an "object replacement character" for all nodes except - // textual nodes as well as nodes that are invisible to platform APIs, AKA - // nodes that are descendants of platform leaves. In the former case, - // textual nodes are represented by their actual text in the text of their - // parent nodes, in order to maintain compatibility with how Firefox - // exposes text in IAccessibleText. For the latter case, an example of a - // platform leaf is a plain text field because all of the accessibility - // subtree inside the text field is not visible to platform APIs. - // - // Please note that for navigational purposes, we need to expose an - // "object replacement character" in empty controls, such as in an empty - // text field. The presence or the absence of accessible content inside a - // control might alter whether an "object replacement character" would be - // exposed in that control, in contrast to ordinary text such as in the - // case of a non-empty simple text field which should only have textual - // nodes inside it. This is because empty controls need to act as a word - // and character boundary. See - // "AXPosition::IsEmptyObjectReplacedByCharacter()" for more information. - return !IsNullPosition() && !GetAnchor()->IsText() && - !GetAnchor()->IsChildOfLeaf(); + return int{anchor->GetHypertext().length()}; } } -bool AXNodePosition::IsInLineBreakingObject() const { - if (IsNullPosition()) - return false; - DCHECK(GetAnchor()); - return GetAnchor()->data().GetBoolAttribute( - ax::mojom::BoolAttribute::kIsLineBreakingObject) && - !GetAnchor()->IsInListMarker(); -} - -ax::mojom::Role AXNodePosition::GetAnchorRole() const { +ax::mojom::Role AXNodePosition::GetRole() const { if (IsNullPosition()) return ax::mojom::Role::kNone; - DCHECK(GetAnchor()); - return GetRole(GetAnchor()); + return GetAnchor()->data().role; } void AXNodePosition::AnchorChild(int child_index, @@ -172,7 +149,6 @@ AXNodeID* child_id) const { DCHECK(tree_id); DCHECK(child_id); - if (!GetAnchor() || child_index < 0 || child_index >= AnchorChildCount()) { *tree_id = AXTreeIDUnknown(); *child_id = kInvalidAXNodeID; @@ -190,8 +166,6 @@ child = GetAnchor()->children()[size_t{child_index}]; *tree_id = this->tree_id(); } - - DCHECK(child); *child_id = child->id(); } @@ -211,28 +185,31 @@ if (!GetAnchor()) return 0; - return static_cast<int>(GetAnchor()->GetUnignoredChildCount()); + const AXTreeManager* child_tree_manager = + AXTreeManagerMap::GetInstance().GetManagerForChildTree(*GetAnchor()); + if (child_tree_manager) { + DCHECK_EQ(GetAnchor()->GetUnignoredChildCount(), 0u) + << "A node cannot be hosting both a child tree and other nodes as " + "children."; + return 1; // A child tree is never ignored. + } + + return int{GetAnchor()->GetUnignoredChildCount()}; } int AXNodePosition::AnchorIndexInParent() const { + // If this is the root tree, the index in parent will be 0. return GetAnchor() ? int{GetAnchor()->index_in_parent()} : INVALID_INDEX; } -int AXNodePosition::AnchorSiblingCount() const { - AXNode* parent = GetAnchor()->GetUnignoredParent(); - if (parent) - return static_cast<int>(parent->GetUnignoredChildCount()); - - return 0; -} - base::stack<AXNode*> AXNodePosition::GetAncestorAnchors() const { + if (!GetAnchor()) + return base::stack<AXNode*>(); + base::stack<AXNode*> anchors; AXNode* current_anchor = GetAnchor(); - AXNodeID current_anchor_id = GetAnchor()->id(); AXTreeID current_tree_id = tree_id(); - AXNodeID parent_anchor_id = kInvalidAXNodeID; AXTreeID parent_tree_id = AXTreeIDUnknown(); @@ -251,7 +228,7 @@ AXNode* AXNodePosition::GetLowestUnignoredAncestor() const { if (!GetAnchor()) return nullptr; - + // TODO(nektar): Switch to using GetAnchor()->GetLowestPlatformAncestor(). return GetAnchor()->GetUnignoredParent(); } @@ -259,21 +236,13 @@ AXNodeID* parent_id) const { DCHECK(tree_id); DCHECK(parent_id); - *tree_id = AXTreeIDUnknown(); *parent_id = kInvalidAXNodeID; - if (!GetAnchor()) return; - AXNode* parent = - GetParent(GetAnchor() /*child*/, this->tree_id() /*child_tree_id*/, - tree_id /*parent_tree_id*/, parent_id /*parent_id*/); - - if (!parent) { - *tree_id = AXTreeIDUnknown(); - *parent_id = kInvalidAXNodeID; - } + GetParent(GetAnchor() /*child*/, this->tree_id() /*child_tree_id*/, + tree_id /*parent_tree_id*/, parent_id /*parent_id*/); } AXNode* AXNodePosition::GetNodeInTree(AXTreeID tree_id, @@ -296,6 +265,48 @@ return node->tree()->GetAXTreeID(); } +bool AXNodePosition::IsEmbeddedObjectInParent() const { + switch (g_ax_embedded_object_behavior) { + case AXEmbeddedObjectBehavior::kSuppressCharacter: + return false; + case AXEmbeddedObjectBehavior::kExposeCharacter: + // We expose an "object replacement character" for all nodes except + // (A) textual nodes and (B) nodes that are invisible to platform APIs, + // AKA nodes that are descendants of platform leaves. In the former case, + // textual nodes are represented by their actual text in the text of their + // parent nodes, in order to maintain compatibility with how Firefox + // exposes text in IAccessibleText. For the latter case, an example of a + // platform leaf is a plain text field because all of the accessibility + // subtree inside the text field is not visible to platform APIs. + // + // Please note that for navigational purposes, we need to expose an + // "object replacement character" in empty controls, such as in an empty + // text field. The presence or the absence of accessible content inside a + // control might alter whether an "object replacement character" would be + // exposed in that control, in contrast to ordinary text such as in the + // case of a non-empty plain text field which should only have textual + // nodes inside it. This is because empty controls need to act as a word + // and character boundary. See + // `AXPosition::IsEmptyObjectReplacedByCharacter()` for more information. + return !IsNullPosition() && !GetAnchor()->IsText() && + !GetAnchor()->IsChildOfLeaf(); + } +} + +bool AXNodePosition::IsInLineBreakingObject() const { + if (IsNullPosition()) + return false; + return GetAnchor()->data().GetBoolAttribute( + ax::mojom::BoolAttribute::kIsLineBreakingObject) && + !GetAnchor()->IsInListMarker(); +} + +ax::mojom::Role AXNodePosition::GetAnchorRole() const { + if (IsNullPosition()) + return ax::mojom::Role::kNone; + return GetRole(GetAnchor()); +} + ax::mojom::Role AXNodePosition::GetRole(AXNode* node) const { return node->data().role; } @@ -306,9 +317,10 @@ !IsNullPosition() ? GetAnchor()->data().GetTextStyles() : AXNodeTextStyles(); if (current_anchor_text_styles.IsUnset()) { - AXPositionInstance parent = CreateParentPosition(); - if (!parent->IsNullPosition()) - return parent->GetAnchor()->data().GetTextStyles(); + AXPositionInstance parent_position = AsTreePosition()->CreateParentPosition( + ax::mojom::MoveDirection::kBackward); + if (!parent_position->IsNullPosition()) + return parent_position->GetAnchor()->data().GetTextStyles(); } return current_anchor_text_styles; } @@ -318,8 +330,8 @@ return std::vector<int32_t>(); DCHECK(GetAnchor()); - // Embedded object replacement characters are not represented in |kWordStarts| - // attribute. + // Embedded object replacement characters are not represented in the + // "kWordStarts" attribute so we need to special case them here. if (IsEmptyObjectReplacedByCharacter()) return {0}; @@ -332,8 +344,10 @@ return std::vector<int32_t>(); DCHECK(GetAnchor()); - // Embedded object replacement characters are not represented in |kWordEnds| - // attribute. Since the whole text exposed inside of an embedded object is of + // Embedded object replacement characters are not represented in the + // "kWordEnds" attribute so we need to special case them here. + // + // Since the whole text exposed inside of an embedded object is of // length 1 (the embedded object replacement character), the word end offset // is positioned at 1. Because we want to treat the embedded object // replacement characters as ordinary characters, it wouldn't be consistent to @@ -370,16 +384,15 @@ return static_cast<AXNodeID>(previous_on_line_id); } +// static AXNode* AXNodePosition::GetParent(AXNode* child, AXTreeID child_tree_id, AXTreeID* parent_tree_id, AXNodeID* parent_id) { DCHECK(parent_tree_id); DCHECK(parent_id); - *parent_tree_id = AXTreeIDUnknown(); *parent_id = kInvalidAXNodeID; - if (!child) return nullptr;
diff --git a/ui/accessibility/ax_node_position.h b/ui/accessibility/ax_node_position.h index 83e5a7b..f6c1d2c1 100644 --- a/ui/accessibility/ax_node_position.h +++ b/ui/accessibility/ax_node_position.h
@@ -41,6 +41,7 @@ bool IsInTextObject() const override; bool IsInWhiteSpace() const override; int MaxTextOffset() const override; + ax::mojom::Role GetRole() const override; protected: void AnchorChild(int child_index, @@ -49,14 +50,12 @@ int AnchorChildCount() const override; int AnchorUnignoredChildCount() const override; int AnchorIndexInParent() const override; - int AnchorSiblingCount() const override; base::stack<AXNode*> GetAncestorAnchors() const override; AXNode* GetLowestUnignoredAncestor() const override; void AnchorParent(AXTreeID* tree_id, AXNodeID* parent_id) const override; AXNode* GetNodeInTree(AXTreeID tree_id, AXNodeID node_id) const override; AXNodeID GetAnchorID(AXNode* node) const override; AXTreeID GetTreeID(AXNode* node) const override; - bool IsEmbeddedObjectInParent() const override; bool IsInLineBreakingObject() const override; ax::mojom::Role GetAnchorRole() const override;
diff --git a/ui/accessibility/ax_node_position_unittest.cc b/ui/accessibility/ax_node_position_unittest.cc index 8b9dd1b..1a44931 100644 --- a/ui/accessibility/ax_node_position_unittest.cc +++ b/ui/accessibility/ax_node_position_unittest.cc
@@ -9580,6 +9580,7 @@ GetTreeID(), root_1.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); + // Hello <embedded> world<embedded><embedded>hey<embedded><embedded> base::string16 expected_text = base::StrCat({STRING16_LITERAL("Hello "), AXNode::kEmbeddedCharacter, STRING16_LITERAL(" world"), AXNode::kEmbeddedCharacter, @@ -9592,18 +9593,22 @@ position = AXNodePosition::CreateTextPosition( GetTreeID(), text_field_4.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); - EXPECT_EQ(1, position->MaxTextOffset()) << *position; + EXPECT_EQ(AXNode::kEmbeddedCharacterLength, position->MaxTextOffset()) + << *position; position = position->CreateParentPosition(); - EXPECT_EQ(22, position->MaxTextOffset()) << *position; + // Hello <embedded> world<embedded><embedded>hey<embedded><embedded> + EXPECT_EQ(20, position->MaxTextOffset()) << *position; // `AXPosition::MaxTextOffset()` on a node which is the parent of a set of // text nodes and non-text nodes, the latter represented by "embedded object // replacement characters". + // + // Hello <embedded> world<embedded><embedded>hey<embedded><embedded> position = AXNodePosition::CreateTextPosition( GetTreeID(), root_1.id, 0 /* text_offset */, ax::mojom::TextAffinity::kDownstream); - EXPECT_EQ(22, position->MaxTextOffset()) << *position; + EXPECT_EQ(20, position->MaxTextOffset()) << *position; // The following is to test a specific edge case with heading navigation, // occurring in `AXPosition::CreatePreviousFormatStartPosition`.
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h index 8edbfe3..9ba5212 100644 --- a/ui/accessibility/ax_position.h +++ b/ui/accessibility/ax_position.h
@@ -351,6 +351,18 @@ return GetNodeInTree(tree_id_, anchor_id_); } + virtual int GetAnchorSiblingCount() const { + if (IsNullPosition()) + return 0; + + AXPositionInstance parent_position = AsTreePosition()->CreateParentPosition( + ax::mojom::MoveDirection::kBackward); + if (!parent_position->IsNullPosition()) + return parent_position->AnchorChildCount(); + + return 0; + } + AXPositionKind kind() const { return kind_; } int child_index() const { return child_index_; } int text_offset() const { return text_offset_; } @@ -3483,8 +3495,9 @@ LowestCommonAncestor(other, ax::mojom::MoveDirection::kForward); AXPositionInstance other_text_position_ancestor = other.LowestCommonAncestor(*this, ax::mojom::MoveDirection::kForward); - DCHECK(this_text_position_ancestor->IsTextPosition()); - DCHECK(other_text_position_ancestor->IsTextPosition()); + // TODO(nektar): Fix failing DCHECK in a followup. + // DCHECK(this_text_position_ancestor->IsTextPosition()); + // DCHECK(other_text_position_ancestor->IsTextPosition()); int result = this_text_position_ancestor->text_offset_ - other_text_position_ancestor->text_offset_; @@ -3708,6 +3721,10 @@ return int{GetText().length()}; } + // Returns the accessibility role of this position's anchor node. If this is a + // "null position", returns `ax::mojom::Role::kNone`. + virtual ax::mojom::Role GetRole() const = 0; + protected: AXPosition() : kind_(AXPositionKind::NULL_POSITION), @@ -3819,7 +3836,6 @@ // When we call the following method on TextField, it would return 1. virtual int AnchorUnignoredChildCount() const = 0; virtual int AnchorIndexInParent() const = 0; - virtual int AnchorSiblingCount() const = 0; virtual base::stack<AXNodeType*> GetAncestorAnchors() const = 0; virtual AXNodeType* GetLowestUnignoredAncestor() const = 0; virtual void AnchorParent(AXTreeID* tree_id, int32_t* parent_id) const = 0; @@ -3900,7 +3916,7 @@ // role::kInlineTextBox, the parent of |this| has role::kStaticText, and the // anchor node of |this| is the last child of its parent's children. const bool is_last_child = - AnchorIndexInParent() == (AnchorSiblingCount() - 1); + AnchorIndexInParent() == (GetAnchorSiblingCount() - 1); return is_last_child && GetRole(GetLowestUnignoredAncestor()) == ax::mojom::Role::kStaticText;
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc index f2de477..157669c 100644 --- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc +++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
@@ -5516,8 +5516,10 @@ EXPECT_FALSE(normalized_start->IsIgnored()); EXPECT_FALSE(normalized_end->IsIgnored()); - EXPECT_LE(*GetStart(ignored_range_win.Get()), *normalized_start); - EXPECT_LE(*GetEnd(ignored_range_win.Get()), *normalized_end); + // TODO(nektar): Re-enable the following two assertions after + // AXPosition::SlowCompareTo has been fixed to handle affinity correctly. + // EXPECT_LE(*GetStart(ignored_range_win.Get()), *normalized_start); + // EXPECT_LE(*GetEnd(ignored_range_win.Get()), *normalized_end); EXPECT_LE(*normalized_start, *normalized_end); // Remove the last node, forcing |NormalizeTextRange| to normalize
diff --git a/ui/base/cursor/cursor_factory.cc b/ui/base/cursor/cursor_factory.cc index 5a987bf..523aea8 100644 --- a/ui/base/cursor/cursor_factory.cc +++ b/ui/base/cursor/cursor_factory.cc
@@ -9,6 +9,7 @@ #include "base/check.h" #include "base/check_op.h" #include "base/notreached.h" +#include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" namespace ui { @@ -67,4 +68,123 @@ NOTIMPLEMENTED(); } +#if defined(OS_LINUX) || defined(OS_CHROMEOS) + +// Returns a cursor name compatible with either X11 or the FreeDesktop.org +// cursor spec ([1] and [2]), followed by fallbacks that can work as +// replacements in some environments where the original may not be available +// (e.g. desktop environments other than GNOME and KDE). +// +// TODO(hferreiro): each list starts with the FreeDesktop.org icon name but +// "ns-resize", "ew-resize", "nesw-resize", "nwse-resize", "grab", "grabbing", +// which were not available in older versions of Breeze, the default KDE theme. +// +// [1] +// https://www.x.org/releases/current/doc/libX11/libX11/libX11.html#x_font_cursors +// [2] https://www.freedesktop.org/wiki/Specifications/cursor-spec/ +std::vector<std::string> CursorNamesFromType(mojom::CursorType type) { + switch (type) { + case mojom::CursorType::kMove: + // Returning "move" is the correct thing here, but Blink doesn't make a + // distinction between move and all-scroll. Other platforms use a cursor + // more consistent with all-scroll, so use that. + case mojom::CursorType::kMiddlePanning: + case mojom::CursorType::kMiddlePanningVertical: + case mojom::CursorType::kMiddlePanningHorizontal: + return {"all-scroll", "fleur"}; + case mojom::CursorType::kEastPanning: + case mojom::CursorType::kEastResize: + return {"e-resize", "right_side"}; + case mojom::CursorType::kNorthPanning: + case mojom::CursorType::kNorthResize: + return {"n-resize", "top_side"}; + case mojom::CursorType::kNorthEastPanning: + case mojom::CursorType::kNorthEastResize: + return {"ne-resize", "top_right_corner"}; + case mojom::CursorType::kNorthWestPanning: + case mojom::CursorType::kNorthWestResize: + return {"nw-resize", "top_left_corner"}; + case mojom::CursorType::kSouthPanning: + case mojom::CursorType::kSouthResize: + return {"s-resize", "bottom_side"}; + case mojom::CursorType::kSouthEastPanning: + case mojom::CursorType::kSouthEastResize: + return {"se-resize", "bottom_right_corner"}; + case mojom::CursorType::kSouthWestPanning: + case mojom::CursorType::kSouthWestResize: + return {"sw-resize", "bottom_left_corner"}; + case mojom::CursorType::kWestPanning: + case mojom::CursorType::kWestResize: + return {"w-resize", "left_side"}; + case mojom::CursorType::kNone: + return {"none"}; + case mojom::CursorType::kGrab: + return {"openhand", "grab"}; + case mojom::CursorType::kGrabbing: + return {"closedhand", "grabbing", "hand2"}; + case mojom::CursorType::kCross: + return {"crosshair", "cross"}; + case mojom::CursorType::kHand: + return {"pointer", "hand", "hand2"}; + case mojom::CursorType::kIBeam: + return {"text", "xterm"}; + case mojom::CursorType::kProgress: + return {"progress", "left_ptr_watch", "watch"}; + case mojom::CursorType::kWait: + return {"wait", "watch"}; + case mojom::CursorType::kHelp: + return {"help"}; + case mojom::CursorType::kNorthSouthResize: + return {"sb_v_double_arrow", "ns-resize"}; + case mojom::CursorType::kEastWestResize: + return {"sb_h_double_arrow", "ew-resize"}; + case mojom::CursorType::kColumnResize: + return {"col-resize", "sb_h_double_arrow"}; + case mojom::CursorType::kRowResize: + return {"row-resize", "sb_v_double_arrow"}; + case mojom::CursorType::kNorthEastSouthWestResize: + return {"size_bdiag", "nesw-resize", "fd_double_arrow"}; + case mojom::CursorType::kNorthWestSouthEastResize: + return {"size_fdiag", "nwse-resize", "bd_double_arrow"}; + case mojom::CursorType::kVerticalText: + return {"vertical-text"}; + case mojom::CursorType::kZoomIn: + return {"zoom-in"}; + case mojom::CursorType::kZoomOut: + return {"zoom-out"}; + case mojom::CursorType::kCell: + return {"cell", "plus"}; + case mojom::CursorType::kContextMenu: + return {"context-menu"}; + case mojom::CursorType::kAlias: + return {"alias"}; + case mojom::CursorType::kNoDrop: + return {"no-drop"}; + case mojom::CursorType::kCopy: + return {"copy"}; + case mojom::CursorType::kNotAllowed: + return {"not-allowed", "crossed_circle"}; + case mojom::CursorType::kDndNone: + return {"dnd-none", "hand2"}; + case mojom::CursorType::kDndMove: + return {"dnd-move", "hand2"}; + case mojom::CursorType::kDndCopy: + return {"dnd-copy", "hand2"}; + case mojom::CursorType::kDndLink: + return {"dnd-link", "hand2"}; + case mojom::CursorType::kCustom: + // kCustom is for custom image cursors. The platform cursor will be set + // at WebCursor::GetPlatformCursor(). + NOTREACHED(); + FALLTHROUGH; + case mojom::CursorType::kNull: + case mojom::CursorType::kPointer: + return {"left_ptr"}; + } + NOTREACHED(); + return {"left_ptr"}; +} + +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) + } // namespace ui
diff --git a/ui/base/cursor/cursor_factory.h b/ui/base/cursor/cursor_factory.h index 57c70c9..7de026b 100644 --- a/ui/base/cursor/cursor_factory.h +++ b/ui/base/cursor/cursor_factory.h
@@ -9,6 +9,7 @@ #include "base/component_export.h" #include "base/optional.h" +#include "build/build_config.h" #include "ui/base/cursor/mojom/cursor_type.mojom-forward.h" class SkBitmap; @@ -66,6 +67,11 @@ virtual void ObserveThemeChanges(); }; +#if defined(OS_LINUX) || defined(OS_CHROMEOS) +COMPONENT_EXPORT(UI_BASE_CURSOR_BASE) +std::vector<std::string> CursorNamesFromType(mojom::CursorType type); +#endif + } // namespace ui #endif // UI_BASE_CURSOR_CURSOR_FACTORY_H_
diff --git a/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.cc b/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.cc index f16c01a02..1fbb8d5 100644 --- a/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.cc +++ b/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.cc
@@ -117,6 +117,10 @@ bitmaps_.end()); } +BitmapCursorOzone::BitmapCursorOzone(mojom::CursorType type, + void* platform_data) + : type_(type), platform_data_(platform_data) {} + BitmapCursorOzone::~BitmapCursorOzone() = default; const gfx::Point& BitmapCursorOzone::hotspot() {
diff --git a/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h b/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h index db049fb..0fa94409 100644 --- a/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h +++ b/ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h
@@ -37,6 +37,9 @@ const gfx::Point& hotspot, int frame_delay_ms); + // Creates a cursor with external storage. + BitmapCursorOzone(mojom::CursorType type, void* platform_data); + mojom::CursorType type() const { return type_; } const gfx::Point& hotspot(); const SkBitmap& bitmap(); @@ -45,6 +48,9 @@ const std::vector<SkBitmap>& bitmaps(); int frame_delay_ms(); + // For theme cursors. + void* platform_data() { return platform_data_; } + private: friend class base::RefCounted<BitmapCursorOzone>; ~BitmapCursorOzone(); @@ -54,6 +60,10 @@ gfx::Point hotspot_; int frame_delay_ms_; + // Platform cursor data. Having this non-nullptr means that this cursor + // is supplied by the platform. + void* const platform_data_ = nullptr; + DISALLOW_COPY_AND_ASSIGN(BitmapCursorOzone); }; @@ -61,9 +71,6 @@ // // This is a base class for platforms where PlatformCursor is an SkBitmap // combined with a gfx::Point for the hotspot. -// -// Subclasses need only implement SetBitmapCursor() as everything else is -// implemented here. class COMPONENT_EXPORT(UI_BASE_CURSOR) BitmapCursorFactoryOzone : public CursorFactory { public:
diff --git a/ui/base/x/x11_cursor_factory.cc b/ui/base/x/x11_cursor_factory.cc index 707523c..b75577037 100644 --- a/ui/base/x/x11_cursor_factory.cc +++ b/ui/base/x/x11_cursor_factory.cc
@@ -30,119 +30,6 @@ return cursor_loader->CreateCursor(bitmap, gfx::Point(0, 0)); } -// Returns a cursor name, compatible with either X11 or the FreeDesktop.org -// cursor spec -// (https://www.x.org/releases/current/doc/libX11/libX11/libX11.html#x_font_cursors -// and https://www.freedesktop.org/wiki/Specifications/cursor-spec/), followed -// by fallbacks that can work as replacements in some environments where the -// original may not be available (e.g. desktop environments other than -// GNOME and KDE). -// TODO(hferreiro): each list starts with the FreeDesktop.org icon name but -// "ns-resize", "ew-resize", "nesw-resize", "nwse-resize", "grab", "grabbing", -// which were not available in older versions of Breeze, the default KDE theme. -std::vector<std::string> CursorNamesFromType(mojom::CursorType type) { - switch (type) { - case mojom::CursorType::kMove: - // Returning "move" is the correct thing here, but Blink doesn't make a - // distinction between move and all-scroll. Other platforms use a cursor - // more consistent with all-scroll, so use that. - case mojom::CursorType::kMiddlePanning: - case mojom::CursorType::kMiddlePanningVertical: - case mojom::CursorType::kMiddlePanningHorizontal: - return {"all-scroll", "fleur"}; - case mojom::CursorType::kEastPanning: - case mojom::CursorType::kEastResize: - return {"e-resize", "right_side"}; - case mojom::CursorType::kNorthPanning: - case mojom::CursorType::kNorthResize: - return {"n-resize", "top_side"}; - case mojom::CursorType::kNorthEastPanning: - case mojom::CursorType::kNorthEastResize: - return {"ne-resize", "top_right_corner"}; - case mojom::CursorType::kNorthWestPanning: - case mojom::CursorType::kNorthWestResize: - return {"nw-resize", "top_left_corner"}; - case mojom::CursorType::kSouthPanning: - case mojom::CursorType::kSouthResize: - return {"s-resize", "bottom_side"}; - case mojom::CursorType::kSouthEastPanning: - case mojom::CursorType::kSouthEastResize: - return {"se-resize", "bottom_right_corner"}; - case mojom::CursorType::kSouthWestPanning: - case mojom::CursorType::kSouthWestResize: - return {"sw-resize", "bottom_left_corner"}; - case mojom::CursorType::kWestPanning: - case mojom::CursorType::kWestResize: - return {"w-resize", "left_side"}; - case mojom::CursorType::kNone: - return {"none"}; - case mojom::CursorType::kGrab: - return {"openhand", "grab"}; - case mojom::CursorType::kGrabbing: - return {"closedhand", "grabbing", "hand2"}; - case mojom::CursorType::kCross: - return {"crosshair", "cross"}; - case mojom::CursorType::kHand: - return {"pointer", "hand", "hand2"}; - case mojom::CursorType::kIBeam: - return {"text", "xterm"}; - case mojom::CursorType::kProgress: - return {"progress", "left_ptr_watch", "watch"}; - case mojom::CursorType::kWait: - return {"wait", "watch"}; - case mojom::CursorType::kHelp: - return {"help"}; - case mojom::CursorType::kNorthSouthResize: - return {"sb_v_double_arrow", "ns-resize"}; - case mojom::CursorType::kEastWestResize: - return {"sb_h_double_arrow", "ew-resize"}; - case mojom::CursorType::kColumnResize: - return {"col-resize", "sb_h_double_arrow"}; - case mojom::CursorType::kRowResize: - return {"row-resize", "sb_v_double_arrow"}; - case mojom::CursorType::kNorthEastSouthWestResize: - return {"size_bdiag", "nesw-resize", "fd_double_arrow"}; - case mojom::CursorType::kNorthWestSouthEastResize: - return {"size_fdiag", "nwse-resize", "bd_double_arrow"}; - case mojom::CursorType::kVerticalText: - return {"vertical-text"}; - case mojom::CursorType::kZoomIn: - return {"zoom-in"}; - case mojom::CursorType::kZoomOut: - return {"zoom-out"}; - case mojom::CursorType::kCell: - return {"cell", "plus"}; - case mojom::CursorType::kContextMenu: - return {"context-menu"}; - case mojom::CursorType::kAlias: - return {"alias"}; - case mojom::CursorType::kNoDrop: - return {"no-drop"}; - case mojom::CursorType::kCopy: - return {"copy"}; - case mojom::CursorType::kNotAllowed: - return {"not-allowed", "crossed_circle"}; - case mojom::CursorType::kDndNone: - return {"dnd-none", "hand2"}; - case mojom::CursorType::kDndMove: - return {"dnd-move", "hand2"}; - case mojom::CursorType::kDndCopy: - return {"dnd-copy", "hand2"}; - case mojom::CursorType::kDndLink: - return {"dnd-link", "hand2"}; - case mojom::CursorType::kCustom: - // kCustom is for custom image cursors. The platform cursor will be set - // at WebCursor::GetPlatformCursor(). - NOTREACHED(); - FALLTHROUGH; - case mojom::CursorType::kNull: - case mojom::CursorType::kPointer: - return {"left_ptr"}; - } - NOTREACHED(); - return {"left_ptr"}; -} - } // namespace X11CursorFactory::X11CursorFactory()
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb index c8227dd..dd5be29 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">ফৰাচী (কানাডা)</translation> <translation id="3003633581067744647">থাম্বনেইল ভিউ ব্যৱহাৰ কৰক</translation> <translation id="3007214526293698309">অনুপাত নিৰ্দিষ্ট কৰক</translation> +<translation id="3029114385395636667">Docs, Sheets আৰু Slidesৰ ফাইল অফলাইনত উপলব্ধ কৰিবলৈ Google Docs Offline সক্ষম কৰক।</translation> <translation id="303198083543495566">ভূগোল</translation> <translation id="3047197340186497470">চীনা ডে’য়ি</translation> <translation id="3057861065630527966">আপোনাৰ ফট’ আৰু ভিডিঅ’সমূহ বেক আপ কৰক</translation> @@ -278,6 +279,7 @@ <translation id="4124935795427217608">এশিঙিয়া ঘোঁৰা</translation> <translation id="4158739975813877944">প্লে’লিষ্ট খোলক</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> স্থানান্তৰ কৰা হ’ল।</translation> +<translation id="4186579485882418952">অফলাইনত সক্ষম কৰক</translation> <translation id="4193154014135846272">Google নথি</translation> <translation id="4197674956721858839">জিপৰ বাছনি</translation> <translation id="4202378258276439759">স্পেনিশ্ব (লেটিন আমেৰিকা)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb index fed63cbb..23d7fe61 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">Französisch (Kanada)</translation> <translation id="3003633581067744647">Zur Miniaturansicht wechseln</translation> <translation id="3007214526293698309">Verhältnis korrigieren</translation> +<translation id="3029114385395636667">Wenn Sie Google Docs Offline aktivieren, können Sie Dokumente, Tabellen und Präsentationen offline nutzen.</translation> <translation id="303198083543495566">Längen- und Breitengrad</translation> <translation id="3047197340186497470">Chinesisch (Dayi)</translation> <translation id="3057861065630527966">Fotos und Videos sichern</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">Einhorn</translation> <translation id="4158739975813877944">Wiedergabeliste öffnen</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> verschoben.</translation> +<translation id="4186579485882418952">Offline-Modus aktivieren</translation> <translation id="4193154014135846272">Google-Dokument</translation> <translation id="4197674956721858839">Auswahl zippen</translation> <translation id="4202378258276439759">Spanisch (Lateinamerika)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb index a0d0f6f..f003f96 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -155,7 +155,7 @@ <translation id="2672394958563893062">Errore bat gertatu da. Berriro hasieratik hasteko, sakatu hau.</translation> <translation id="2676946222714718093">Hemen erreproduzitzen:</translation> <translation id="2718540689505416944">Instalatu aplikazioa Linux-ekin</translation> -<translation id="2724954091494693138">Turkiarra, F teklatuarekin</translation> +<translation id="2724954091494693138">Turkiarra (F teklatua)</translation> <translation id="2732839045120506979">Vietnamdarra (VNI)</translation> <translation id="2735623501230989521">Eman <ph name="FOLDER_NAME" /> karpetako fitxategiak atzitzeko baimena Parallels Desktop-i</translation> <translation id="2771816809568414714">Gazta</translation> @@ -236,7 +236,7 @@ <translation id="3556731189587832921">Ingelesa (AEB), nazioarteko teklatuarekin (ordenagailurako)</translation> <translation id="357479282490346887">Lituaniarra</translation> <translation id="3603385196401704894">Frantsesa (Kanada)</translation> -<translation id="3606220979431771195">Turkierako F teklatua</translation> +<translation id="3606220979431771195">Turkiarra (F teklatua)</translation> <translation id="3616113530831147358">Audioa</translation> <translation id="3619115746895587757">Kaputxinoa</translation> <translation id="3620292326130836921">Fitxategi guztien babeskopia egin da!</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb index 96975f73..d9ef0ef 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">Français (Canada)</translation> <translation id="3003633581067744647">Passer en mode Vignette</translation> <translation id="3007214526293698309">Corriger le format</translation> +<translation id="3029114385395636667">Activez Google Docs hors connexion pour rendre vos documents Google Docs, Sheets et Slides disponibles hors connexion.</translation> <translation id="303198083543495566">Géographie</translation> <translation id="3047197340186497470">Chinois (Dayi)</translation> <translation id="3057861065630527966">Sauvegarder vos photos et vos vidéos</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">Licorne</translation> <translation id="4158739975813877944">Ouvrir la playlist</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> déplacé.</translation> +<translation id="4186579485882418952">Activer le mode hors connexion</translation> <translation id="4193154014135846272">Document Google</translation> <translation id="4197674956721858839">Compresser les fichiers sélectionnés au format .zip</translation> <translation id="4202378258276439759">Espagnol (Amérique latine)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb index b6e5022..0220acc 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">Француз (Канада)</translation> <translation id="3003633581067744647">Нобайлар көрінісіне ауысу</translation> <translation id="3007214526293698309">Қатынасты түзету</translation> +<translation id="3029114385395636667">Docs, Sheets және Slides қызметтерін офлайн пайдалану үшін Офлайн Google Docs кеңейтімін қосыңыз.</translation> <translation id="303198083543495566">География</translation> <translation id="3047197340186497470">Қытай (даи)</translation> <translation id="3057861065630527966">Фотосуреттеріңіз бен бейнелеріңіздің сақтық көшірмесін жасау</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">Пырақ</translation> <translation id="4158739975813877944">Ойнату тізімін ашу</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> жылжытылды.</translation> +<translation id="4186579485882418952">Офлайн режимде қолдану мүмкіндігін қосу</translation> <translation id="4193154014135846272">Google құжаты</translation> <translation id="4197674956721858839">Таңдалған файлдарды мұрағаттау</translation> <translation id="4202378258276439759">Испан (Латын Америкасы)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb index 77b1c53..39589ea 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">Французча (Канада)</translation> <translation id="3003633581067744647">Эскиз көрүнүшүнө өтүү</translation> <translation id="3007214526293698309">Ченөлчөмүн тууралоо</translation> +<translation id="3029114385395636667">Docs, Таблицалар жана Слайддарды оффлайн режиминде колдонуу үчүн Google Docs Оффлайн кеңейтүүсүн күйгүзүңүз.</translation> <translation id="303198083543495566">География</translation> <translation id="3047197340186497470">Кытайча (даи)</translation> <translation id="3057861065630527966">Сүрөттөрүңүз менен видеолоруңуздун камдык көчүрмөсүн сактаңыз</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">Жалгыз мүйүздүү ат</translation> <translation id="4158739975813877944">Ойнотмо тизмени ачуу</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> жылдырылды.</translation> +<translation id="4186579485882418952">Оффлайн режимин иштетүү</translation> <translation id="4193154014135846272">Google документи</translation> <translation id="4197674956721858839">Кысуу тандоолору</translation> <translation id="4202378258276439759">Испанча (Латын Америка)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb index e0ec929..db8d6479 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">ഫ്രഞ്ച് (കാനഡ)</translation> <translation id="3003633581067744647">ലഘുചിത്ര കാഴ്ച്ചയിലേക്ക് മാറുക</translation> <translation id="3007214526293698309">അനുപാതം ക്രമീകരിക്കുക</translation> +<translation id="3029114385395636667">Docs, Sheets, Slides എന്നിവ ഓഫ്ലൈനിൽ ലഭ്യമാക്കാൻ Google ഓഫ്ലൈൻ ഡോക്സ് പ്രവർത്തനക്ഷമമാക്കുക.</translation> <translation id="303198083543495566">ഭൂമിശാസ്ത്രം</translation> <translation id="3047197340186497470">ചൈനീസ് ദായി</translation> <translation id="3057861065630527966">നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും ബാക്കപ്പ് ചെയ്യുക</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">യൂണികോൺ</translation> <translation id="4158739975813877944">പ്ലേ ലിസ്റ്റ് തുറക്കുക</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> നീക്കി.</translation> +<translation id="4186579485882418952">ഓഫ്ലൈൻ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="4193154014135846272">Google പ്രമാണം</translation> <translation id="4197674956721858839">Zip തിരഞ്ഞെടുക്കൽ</translation> <translation id="4202378258276439759">സ്പാനിഷ് (ലാറ്റിൻ അമേരിക്ക)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index 54396d6..11f237b5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">फ्रान्सेली (क्यानाडा)</translation> <translation id="3003633581067744647">थम्बनेल दृश्यमा बदल्नुहोस्</translation> <translation id="3007214526293698309">अनुपात सही गर्नुहोस्</translation> +<translation id="3029114385395636667">डकुमेन्ट, पाना तथा स्लाइडहरू अफलाइन हेर्न तथा प्रयोग गर्नका निम्ति 'Google कागजात अफलाइन' अन गर्नुहोस्।</translation> <translation id="303198083543495566">भूगोल</translation> <translation id="3047197340186497470">चिनियाँ दायी</translation> <translation id="3057861065630527966">तपाईँको तस्बिर र भिडियोहरू जगेडा गर्नुहोस्</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">एक सिङे घोडा</translation> <translation id="4158739975813877944">प्ले सूची खोल्नुहोस्</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> सारियो।</translation> +<translation id="4186579485882418952">अफलाइन चलाउने सुविधा अन गर्नुहोस्</translation> <translation id="4193154014135846272">Google कागजात</translation> <translation id="4197674956721858839">जिप चयन</translation> <translation id="4202378258276439759">स्पेनी (ल्याटिन अमेरिका)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb index 16a59e8..c0aca50 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">ਫਰਾਂਸੀਸੀ (ਕੈਨੇਡਾ)</translation> <translation id="3003633581067744647">ਲਘੂ-ਚਿੱਤਰ ਦ੍ਰਿਸ਼ 'ਤੇ ਸਵਿੱਚ ਕਰੋ</translation> <translation id="3007214526293698309">ਅਨੁਪਾਤ ਠੀਕ ਕਰੋ</translation> +<translation id="3029114385395636667">Docs, Sheets ਅਤੇ Slides ਨੂੰ ਆਫ਼ਲਾਈਨ ਉਪਲਬਧ ਕਰਵਾਉਣ ਲਈ Google Docs ਆਫ਼ਲਾਈਨ ਨੂੰ ਚਾਲੂ ਕਰੋ।</translation> <translation id="303198083543495566">ਭੂਗੋਲ</translation> <translation id="3047197340186497470">ਚੀਨੀ ਡਾਯੀ</translation> <translation id="3057861065630527966">ਆਪਣੀਆਂ ਫ਼ੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ ਦਾ ਬੈਕਅੱਪ ਲਵੋ</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">ਇੱਕ ਸਿੰਗ ਵਾਲਾ ਘੋੜਾ</translation> <translation id="4158739975813877944">ਪਲੇ ਲਿਸਟ ਖੋਲ੍ਹੋ</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> ਨੂੰ ਲਿਜਾਇਆ ਗਿਆ।</translation> +<translation id="4186579485882418952">ਆਫ਼ਲਾਈਨ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="4193154014135846272">Google ਦਸਤਾਵੇਜ਼</translation> <translation id="4197674956721858839">Zip ਚੋਣ</translation> <translation id="4202378258276439759">ਸਪੇਨੀ (ਲਾਤੀਨੀ ਅਮਰੀਕਾ)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb index c88f57eb..31a1f9b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">ஃபிரெஞ்சு (கனடா)</translation> <translation id="3003633581067744647">சிறு படக் காட்சிக்கு மாறு</translation> <translation id="3007214526293698309">விகிதத்தைச் சரிசெய்</translation> +<translation id="3029114385395636667">Docs, Sheets, Slides ஆகியவற்றை ஆஃப்லைனில் பயன்படுத்த 'Google Docs ஆஃப்லைன்' நீட்டிப்பை இயக்கவும்.</translation> <translation id="303198083543495566">புவியியல்</translation> <translation id="3047197340186497470">சீனம் (தூயே)</translation> <translation id="3057861065630527966">உங்கள் படங்கள் மற்றும் வீடியோக்களைக் காப்புப் பிரதியெடுக்கவும்</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">கொம்புக் குதிரை</translation> <translation id="4158739975813877944">இயக்கப் பட்டியலைத் திற</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> நகர்த்தப்பட்டது.</translation> +<translation id="4186579485882418952">இயக்கு</translation> <translation id="4193154014135846272">Google ஆவணம்</translation> <translation id="4197674956721858839">ஜிப் தேர்வு</translation> <translation id="4202378258276439759">ஸ்பானிஷ் (லத்தீன் அமெரிக்கா)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index 52265186..624c03d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">ఫ్రెంచ్ (కెనడా)</translation> <translation id="3003633581067744647">సూక్ష్మచిత్రం వీక్షణకు మార్చు</translation> <translation id="3007214526293698309">నిష్పత్తిని సరిచేయి</translation> +<translation id="3029114385395636667">Docs, Sheets, Slidesను ఆఫ్లైన్లో అందుబాటులో ఉంచడానికి Google డాక్స్ ఆఫ్లైన్ను ఎనేబుల్ చేయండి.</translation> <translation id="303198083543495566">భూగోళ శాస్త్రం</translation> <translation id="3047197340186497470">చైనీస్ డేయి</translation> <translation id="3057861065630527966">మీ ఫోటోలను, వీడియోలను బ్యాకప్ చేయండి</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">యునికార్న్</translation> <translation id="4158739975813877944">ప్లే జాబితాను తెరువు</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> తరలించబడింది.</translation> +<translation id="4186579485882418952">ఆఫ్లైన్ మోడ్ను ఎనేబుల్ చేయి</translation> <translation id="4193154014135846272">Google పత్రం</translation> <translation id="4197674956721858839">జిప్ ఎంపిక</translation> <translation id="4202378258276439759">స్పానిష్ (లాటిన్ అమెరికా)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb index ef5eccc..24a1b5b7 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -186,6 +186,7 @@ <translation id="299638574917407533">فرانسیسی (کینیڈا)</translation> <translation id="3003633581067744647">تھمب نیل منظر پر سوئچ کریں</translation> <translation id="3007214526293698309">تناسب درست کریں</translation> +<translation id="3029114385395636667">Docs، Sheets اور Slides کو آف لائن دستیاب بنانے کیلئے Google Docs آف لائن کو فعال کریں۔</translation> <translation id="303198083543495566">جغرافیہ</translation> <translation id="3047197340186497470">چینی Dayi</translation> <translation id="3057861065630527966">اپنی تصاویر اور ویڈیوز کا بیک اپ لیں</translation> @@ -280,6 +281,7 @@ <translation id="4124935795427217608">یونیکارن</translation> <translation id="4158739975813877944">پلے لسٹ کھولیں</translation> <translation id="4159731583141908892"><ph name="FILE_NAME" /> منتقل ہو گیا۔</translation> +<translation id="4186579485882418952">آف لائن فعال کریں</translation> <translation id="4193154014135846272">Google دستاویز</translation> <translation id="4197674956721858839">زپ کا انتخاب</translation> <translation id="4202378258276439759">ہسپانوی (لاطینی امریکی)</translation>
diff --git a/ui/gl/test/gl_surface_test_support.cc b/ui/gl/test/gl_surface_test_support.cc index 813b743e1..5c6dbe0 100644 --- a/ui/gl/test/gl_surface_test_support.cc +++ b/ui/gl/test/gl_surface_test_support.cc
@@ -66,9 +66,30 @@ DCHECK(!allowed_impls.empty()); GLImplementation impl = allowed_impls[0]; - if (use_software_gl) + if (use_software_gl) { impl = gl::GetSoftwareGLImplementation(); +#if !defined(OS_ANDROID) && !defined(OS_FUCHSIA) +#if defined(USE_OZONE) + if (!features::IsUsingOzonePlatform()) +#endif + { + // If ANGLE is available use it with SwiftShader Vulkan instead of using + // SwiftShader GL + for (auto i : allowed_impls) { + if (i == kGLImplementationEGLANGLE) { + impl = kGLImplementationEGLANGLE; + base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( + switches::kUseANGLE, kANGLEImplementationSwiftShaderName); + base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( + switches::kUseCmdDecoder, kCmdDecoderValidatingName); + break; + } + } + } +#endif + } + DCHECK(!base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kUseGL)) << "kUseGL has not effect in tests";
diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn index 725fed3..bad045a 100644 --- a/ui/ozone/platform/wayland/BUILD.gn +++ b/ui/ozone/platform/wayland/BUILD.gn
@@ -66,6 +66,8 @@ "host/wayland_connection.h", "host/wayland_cursor.cc", "host/wayland_cursor.h", + "host/wayland_cursor_factory.cc", + "host/wayland_cursor_factory.h", "host/wayland_cursor_position.cc", "host/wayland_cursor_position.h", "host/wayland_data_device.cc", @@ -191,6 +193,7 @@ "//ui/base:buildflags", "//ui/base/cursor", "//ui/base/cursor:cursor_base", + "//ui/base/cursor:theme_manager", "//ui/base/cursor/mojom:cursor_type", "//ui/base/ime/linux", "//ui/events", @@ -242,6 +245,7 @@ } else { deps += [ "//third_party/wayland:wayland_client", + "//third_party/wayland:wayland_cursor", "//third_party/wayland:wayland_egl", ] } @@ -372,6 +376,7 @@ "common/wayland_util_unittest.cc", "gpu/wayland_overlay_manager_unittest.cc", "host/wayland_connection_unittest.cc", + "host/wayland_cursor_factory_unittest.cc", "host/wayland_data_device_unittest.cc", "host/wayland_data_drag_controller_unittest.cc", "host/wayland_event_source_unittest.cc",
diff --git a/ui/ozone/platform/wayland/common/wayland_object.cc b/ui/ozone/platform/wayland/common/wayland_object.cc index 7a6c5e7..8827a5e 100644 --- a/ui/ozone/platform/wayland/common/wayland_object.cc +++ b/ui/ozone/platform/wayland/common/wayland_object.cc
@@ -15,6 +15,7 @@ #include <primary-selection-unstable-v1-client-protocol.h> #include <text-input-unstable-v1-client-protocol.h> #include <viewporter-client-protocol.h> +#include <wayland-cursor.h> #include <wayland-drm-client-protocol.h> #include <xdg-decoration-unstable-v1-client-protocol.h> #include <xdg-foreign-unstable-v1-client-protocol.h> @@ -131,6 +132,9 @@ void (*ObjectTraits<wl_compositor>::deleter)(wl_compositor*) = &wl_compositor_destroy; +void (*ObjectTraits<wl_cursor_theme>::deleter)(wl_cursor_theme*) = + &wl_cursor_theme_destroy; + const wl_interface* ObjectTraits<wl_data_device_manager>::interface = &wl_data_device_manager_interface; void (*ObjectTraits<wl_data_device_manager>::deleter)(wl_data_device_manager*) =
diff --git a/ui/ozone/platform/wayland/common/wayland_object.h b/ui/ozone/platform/wayland/common/wayland_object.h index b06cf876f..6ced5559 100644 --- a/ui/ozone/platform/wayland/common/wayland_object.h +++ b/ui/ozone/platform/wayland/common/wayland_object.h
@@ -20,6 +20,7 @@ struct wl_buffer; struct wl_callback; struct wl_compositor; +struct wl_cursor_theme; struct wl_data_device_manager; struct wl_data_device; struct wl_data_offer; @@ -154,6 +155,11 @@ }; template <> +struct ObjectTraits<wl_cursor_theme> { + static void (*deleter)(wl_cursor_theme*); +}; + +template <> struct ObjectTraits<wl_data_device_manager> { static const wl_interface* interface; static void (*deleter)(wl_data_device_manager*);
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc index 2247cd25..ca750d4b 100644 --- a/ui/ozone/platform/wayland/host/wayland_connection.cc +++ b/ui/ozone/platform/wayland/host/wayland_connection.cc
@@ -89,8 +89,22 @@ LOG(ERROR) << "Failed to load wayland client libraries."; return false; } + if (void* libwayland_egl = dlopen("libwayland-egl.so.1", dlopen_flags)) third_party_wayland::InitializeLibwaylandegl(libwayland_egl); + + // TODO(crbug.com/1081784): consider handling this in more flexible way. + // libwayland-cursor is said to be part of the standard shipment of Wayland, + // and it seems unlikely (although possible) that it would be unavailable + // while libwayland-client was present. To handle that gracefully, chrome can + // fall back to the generic Ozone behaviour. + if (void* libwayland_cursor = + dlopen("libwayland-cursor.so.0", dlopen_flags)) { + third_party_wayland::InitializeLibwaylandcursor(libwayland_cursor); + } else { + LOG(ERROR) << "Failed to load libwayland-cursor.so.0."; + return false; + } #endif static const wl_registry_listener registry_listener = { @@ -163,6 +177,21 @@ event_source()->SetShutdownCb(std::move(shutdown_cb)); } +void WaylandConnection::SetPlatformCursor(wl_cursor* cursor_data, + int buffer_scale) { + if (!cursor_) + return; + cursor_->SetPlatformShape(cursor_data, serial(), buffer_scale); +} + +void WaylandConnection::SetCursorBufferListener( + WaylandCursorBufferListener* listener) { + listener_ = listener; + if (!cursor_) + return; + cursor_->set_listener(listener_); +} + void WaylandConnection::SetCursorBitmap(const std::vector<SkBitmap>& bitmaps, const gfx::Point& hotspot_in_dips, int buffer_scale) { @@ -205,6 +234,7 @@ pointer_ = std::make_unique<WaylandPointer>(pointer, this, event_source()); cursor_ = std::make_unique<WaylandCursor>(pointer_.get(), this); + cursor_->set_listener(listener_); wayland_cursor_position_ = std::make_unique<WaylandCursorPosition>(); } else { LOG(ERROR) << "Failed to get wl_pointer from seat";
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.h b/ui/ozone/platform/wayland/host/wayland_connection.h index b7f2981..3d2992f 100644 --- a/ui/ozone/platform/wayland/host/wayland_connection.h +++ b/ui/ozone/platform/wayland/host/wayland_connection.h
@@ -16,6 +16,8 @@ #include "ui/ozone/platform/wayland/host/wayland_data_source.h" #include "ui/ozone/platform/wayland/host/wayland_window_manager.h" +struct wl_cursor; + namespace gfx { class Point; } @@ -24,6 +26,7 @@ class WaylandBufferManagerHost; class WaylandCursor; +class WaylandCursorBufferListener; class WaylandDrm; class WaylandEventSource; class WaylandKeyboard; @@ -92,6 +95,10 @@ uint32_t serial() const { return serial_.serial; } EventSerial event_serial() const { return serial_; } + void SetPlatformCursor(wl_cursor* cursor_data, int buffer_scale); + + void SetCursorBufferListener(WaylandCursorBufferListener* listener); + void SetCursorBitmap(const std::vector<SkBitmap>& bitmaps, const gfx::Point& hotspot_in_dips, int buffer_scale); @@ -250,6 +257,8 @@ // Manages Wayland windows. WaylandWindowManager wayland_window_manager_; + WaylandCursorBufferListener* listener_ = nullptr; + bool scheduled_flush_ = false; EventSerial serial_;
diff --git a/ui/ozone/platform/wayland/host/wayland_cursor.cc b/ui/ozone/platform/wayland/host/wayland_cursor.cc index 44218ec..bd32821 100644 --- a/ui/ozone/platform/wayland/host/wayland_cursor.cc +++ b/ui/ozone/platform/wayland/host/wayland_cursor.cc
@@ -4,6 +4,7 @@ #include "ui/ozone/platform/wayland/host/wayland_cursor.h" +#include <wayland-cursor.h> #include <memory> #include <vector> @@ -74,6 +75,30 @@ auto* address = buffer.get(); buffers_.emplace(address, std::move(buffer)); + + if (listener_) + listener_->OnCursorBufferAttached(nullptr); +} + +void WaylandCursor::SetPlatformShape(wl_cursor* cursor_data, + uint32_t serial, + int buffer_scale) { + if (!pointer_) + return; + + wl_cursor_image* cursor_image = cursor_data->images[0]; + wl_buffer* cursor_buffer = wl_cursor_image_get_buffer(cursor_image); + + wl_pointer_set_cursor(pointer_->wl_object(), serial, pointer_surface_.get(), + cursor_image->hotspot_x, cursor_image->hotspot_y); + wl_surface_set_buffer_scale(pointer_surface_.get(), buffer_scale); + wl_surface_damage(pointer_surface_.get(), 0, 0, cursor_image->width, + cursor_image->height); + wl_surface_attach(pointer_surface_.get(), cursor_buffer, 0, 0); + wl_surface_commit(pointer_surface_.get()); + + if (listener_) + listener_->OnCursorBufferAttached(cursor_data); } void WaylandCursor::HideCursor(uint32_t serial) { @@ -84,6 +109,9 @@ wl_surface_commit(pointer_surface_.get()); connection_->ScheduleFlush(); + + if (listener_) + listener_->OnCursorBufferAttached(nullptr); } } // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_cursor.h b/ui/ozone/platform/wayland/host/wayland_cursor.h index e60191e..16af372b 100644 --- a/ui/ozone/platform/wayland/host/wayland_cursor.h +++ b/ui/ozone/platform/wayland/host/wayland_cursor.h
@@ -15,6 +15,8 @@ class SkBitmap; +struct wl_cursor; + namespace gfx { class Point; } @@ -24,12 +26,23 @@ class WaylandConnection; class WaylandPointer; +// Interface through which WaylandCursor notifies the listener that it has +// attached another buffer to the pointer surface. The listener may free the +// previous buffer if it was holding it. +class WaylandCursorBufferListener { + public: + // Tells the listener that a new buffer is attached. |cursor_data| may be + // non-nullptr if the platform shape is used, or nullptr if the cursor has + // been hidden, or a custom bitmap has been set. + virtual void OnCursorBufferAttached(wl_cursor* cursor_data) = 0; + + protected: + virtual ~WaylandCursorBufferListener() = default; +}; + // Manages the actual visual representation (what users see drawn) of the // 'pointer' (which is the Wayland term for mouse/mice). // -// An instance of this class is aggregated by an instance of WaylandPointer -// and is exposed for updating the pointer bitmap with the single method call. -// // Encapsulates the low-level job such as surface and buffer management and // Wayland protocol calls. class WaylandCursor { @@ -48,6 +61,15 @@ uint32_t serial, int buffer_scale); + // Takes data managed by the platform (without taking ownership). + void SetPlatformShape(wl_cursor* cursor_data, + uint32_t serial, + int buffer_scale); + + void set_listener(WaylandCursorBufferListener* listener) { + listener_ = listener; + } + private: // wl_buffer_listener: static void OnBufferRelease(void* data, wl_buffer* wl_buffer); @@ -57,6 +79,8 @@ WaylandPointer* const pointer_; WaylandConnection* const connection_; + WaylandCursorBufferListener* listener_ = nullptr; + // Holds the buffers and their memory until the compositor releases them. base::flat_map<wl_buffer*, WaylandShmBuffer> buffers_; const wl::Object<wl_surface> pointer_surface_;
diff --git a/ui/ozone/platform/wayland/host/wayland_cursor_factory.cc b/ui/ozone/platform/wayland/host/wayland_cursor_factory.cc new file mode 100644 index 0000000..5c0a72eb --- /dev/null +++ b/ui/ozone/platform/wayland/host/wayland_cursor_factory.cc
@@ -0,0 +1,156 @@ +// Copyright 2021 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/ozone/platform/wayland/host/wayland_cursor_factory.h" + +#include <wayland-cursor.h> + +#include "base/task/post_task.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" +#include "base/task/thread_pool/thread_pool_instance.h" +#include "base/task_runner_util.h" +#include "ui/ozone/platform/wayland/host/wayland_connection.h" +#include "ui/ozone/platform/wayland/host/wayland_shm.h" + +namespace ui { + +namespace { + +wl_cursor_theme* LoadCursorTheme(const std::string& name, + int size, + wl_shm* shm) { + // wl_cursor_theme_load() can return nullptr. We don't check that here but + // have to be cautious when we actually load the shape. + return wl_cursor_theme_load((name.empty() ? nullptr : name.c_str()), size, + shm); +} + +} // namespace + +WaylandCursorFactory::ThemeData::ThemeData() = default; + +WaylandCursorFactory::ThemeData::~ThemeData() = default; + +WaylandCursorFactory::WaylandCursorFactory(WaylandConnection* connection) + : connection_(connection) { + connection_->SetCursorBufferListener(this); + ReloadThemeCursors(); +} + +WaylandCursorFactory::~WaylandCursorFactory() = default; + +void WaylandCursorFactory::ObserveThemeChanges() { + auto* cursor_theme_manager = CursorThemeManager::GetInstance(); + DCHECK(cursor_theme_manager); + cursor_theme_observer_.Observe(cursor_theme_manager); +} + +base::Optional<PlatformCursor> WaylandCursorFactory::GetDefaultCursor( + mojom::CursorType type) { + if (type == mojom::CursorType::kNone) + return nullptr; // nullptr is used for the hidden cursor. + + if (current_theme_->cache.count(type) == 0) { + for (const std::string& name : CursorNamesFromType(type)) { + wl_cursor* cursor = GetCursorFromTheme(name); + if (!cursor) + continue; + + current_theme_->cache[type] = + base::MakeRefCounted<BitmapCursorOzone>(type, cursor); + break; + } + } + if (current_theme_->cache.count(type) == 0) + current_theme_->cache[type] = nullptr; + + // Fall back to the base class implementation if the theme has't provided + // a shape for the requested type. + if (current_theme_->cache[type].get() == nullptr) + return BitmapCursorFactoryOzone::GetDefaultCursor(type); + + return static_cast<PlatformCursor>(current_theme_->cache[type].get()); +} + +wl_cursor* WaylandCursorFactory::GetCursorFromTheme(const std::string& name) { + // Possible if the theme could not be loaded. + if (!current_theme_->theme) + return nullptr; + + return wl_cursor_theme_get_cursor(current_theme_->theme.get(), name.c_str()); +} + +void WaylandCursorFactory::OnCursorThemeNameChanged( + const std::string& cursor_theme_name) { + if (name_ == cursor_theme_name) + return; + + name_ = cursor_theme_name; + ReloadThemeCursors(); +} + +void WaylandCursorFactory::OnCursorThemeSizeChanged(int cursor_theme_size) { + if (size_ == cursor_theme_size) + return; + + size_ = cursor_theme_size; + ReloadThemeCursors(); +} + +void WaylandCursorFactory::OnCursorBufferAttached(wl_cursor* cursor_data) { + if (!unloaded_theme_) + return; + if (!cursor_data) { + unloaded_theme_.reset(); + return; + } + for (auto& item : current_theme_->cache) { + if (item.second->platform_data() == cursor_data) { + // The cursor that has been just attached is from the current theme. That + // means that the theme that has been unloaded earlier can now be deleted. + unloaded_theme_.reset(); + return; + } + } +} + +void WaylandCursorFactory::ReloadThemeCursors() { + // If we use any cursor when the theme is reloaded, the one can be only from + // the theme that is currently used. As soon as we take the next cursor from + // the next theme, we will destroy it (see OnCursorBufferAttached() above). + // If more than one theme has been changed but we didn't take any cursors from + // them (which is possible if the user played with settings but didn't switch + // into Chromium), we don't need to track them all. + if (!unloaded_theme_ && current_theme_ && current_theme_->cache.size() > 0) + unloaded_theme_ = std::move(current_theme_); + + current_theme_ = std::make_unique<ThemeData>(); + + // The task environment is normally not created in tests. As this factory is + // part of the platform that is created always and early, posting a task to + // the pool would fail in many many tests. + if (!base::ThreadPoolInstance::Get()) + return; + + base::PostTaskAndReplyWithResult( + FROM_HERE, + {base::ThreadPool(), base::MayBlock(), + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, + base::BindOnce(LoadCursorTheme, name_, size_, connection_->shm()->get()), + base::BindOnce(&WaylandCursorFactory::OnThemeLoaded, + weak_factory_.GetWeakPtr(), name_, size_)); +} + +void WaylandCursorFactory::OnThemeLoaded(const std::string& loaded_theme_name, + int loaded_theme_size, + wl_cursor_theme* loaded_theme) { + if (loaded_theme_name == name_ && loaded_theme_size == size_) { + // wl_cursor_theme_load() can return nullptr. We don't check that here but + // have to be cautious when we actually load the shape. + current_theme_->theme.reset(loaded_theme); + } +} + +} // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_cursor_factory.h b/ui/ozone/platform/wayland/host/wayland_cursor_factory.h new file mode 100644 index 0000000..0be03bc --- /dev/null +++ b/ui/ozone/platform/wayland/host/wayland_cursor_factory.h
@@ -0,0 +1,90 @@ +// Copyright 2021 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_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_CURSOR_FACTORY_H_ +#define UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_CURSOR_FACTORY_H_ + +#include <string> + +#include "base/containers/flat_map.h" +#include "base/memory/scoped_refptr.h" +#include "base/optional.h" +#include "base/scoped_observation.h" +#include "ui/base/cursor/cursor_theme_manager.h" +#include "ui/base/cursor/cursor_theme_manager_observer.h" +#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h" +#include "ui/ozone/platform/wayland/common/wayland_object.h" +#include "ui/ozone/platform/wayland/host/wayland_cursor.h" + +struct wl_cursor_theme; + +namespace ui { + +class WaylandConnection; + +// CursorFactory implementation for Wayland. +class WaylandCursorFactory : public BitmapCursorFactoryOzone, + public CursorThemeManagerObserver, + public WaylandCursorBufferListener { + public: + explicit WaylandCursorFactory(WaylandConnection* connection); + WaylandCursorFactory(const WaylandCursorFactory&) = delete; + WaylandCursorFactory& operator=(const WaylandCursorFactory&) = delete; + ~WaylandCursorFactory() override; + + // CursorFactory: + void ObserveThemeChanges() override; + + // CursorFactoryOzone: + base::Optional<PlatformCursor> GetDefaultCursor( + mojom::CursorType type) override; + + protected: + // Returns the actual wl_cursor record from the currently loaded theme. + // Virtual for tests where themes can be empty. + virtual wl_cursor* GetCursorFromTheme(const std::string& name); + + private: + FRIEND_TEST_ALL_PREFIXES(WaylandCursorFactoryTest, + RetainOldThemeUntilNewBufferIsAttached); + + struct ThemeData { + ThemeData(); + ~ThemeData(); + wl::Object<wl_cursor_theme> theme; + base::flat_map<mojom::CursorType, scoped_refptr<BitmapCursorOzone>> cache; + }; + + // CusorThemeManagerObserver: + void OnCursorThemeNameChanged(const std::string& cursor_theme_name) override; + void OnCursorThemeSizeChanged(int cursor_theme_size) override; + + // WaylandCursorBufferListener: + void OnCursorBufferAttached(wl_cursor* cursor_data) override; + + void ReloadThemeCursors(); + void OnThemeLoaded(const std::string& loaded_theme_name, + int loaded_theme_size, + wl_cursor_theme* loaded_theme); + + WaylandConnection* const connection_; + + base::ScopedObservation<CursorThemeManager, CursorThemeManagerObserver> + cursor_theme_observer_{this}; + + // Name of the current theme. + std::string name_; + // Current size of cursors + int size_ = 24; + + std::unique_ptr<ThemeData> current_theme_; + // Holds the reference on the unloaded theme until the cursor is released. + std::unique_ptr<ThemeData> unloaded_theme_; + + base::WeakPtrFactory<WaylandCursorFactory> weak_factory_{this}; +}; + +} // namespace ui + +#endif // UI_OZONE_PLATFORM_WAYLAND_HOST_WAYLAND_CURSOR_FACTORY_H_
diff --git a/ui/ozone/platform/wayland/host/wayland_cursor_factory_unittest.cc b/ui/ozone/platform/wayland/host/wayland_cursor_factory_unittest.cc new file mode 100644 index 0000000..1ea0e04b --- /dev/null +++ b/ui/ozone/platform/wayland/host/wayland_cursor_factory_unittest.cc
@@ -0,0 +1,134 @@ +// Copyright 2021 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/ozone/platform/wayland/host/wayland_cursor_factory.h" + +#include <wayland-cursor.h> + +#include "base/containers/flat_map.h" +#include "base/gtest_prod_util.h" +#include "ui/ozone/platform/wayland/test/wayland_test.h" + +namespace ui { + +namespace { + +// Overrides WaylandCursorFactory::GetCursorFromTheme() to pretend that cursors +// are really loaded. +class DryRunningWaylandCursorFactory : public WaylandCursorFactory { + public: + explicit DryRunningWaylandCursorFactory(WaylandConnection* connection) + : WaylandCursorFactory(connection) {} + DryRunningWaylandCursorFactory(const DryRunningWaylandCursorFactory&) = + delete; + DryRunningWaylandCursorFactory& operator=( + const DryRunningWaylandCursorFactory&) = delete; + ~DryRunningWaylandCursorFactory() override = default; + + protected: + // Pretends to load a cursor by creating an empty wl_cursor. + wl_cursor* GetCursorFromTheme(const std::string& name) override { + if (cursors_.count(name) == 0) { + cursors_[name] = std::make_unique<wl_cursor>(); + cursors_[name]->image_count = 0; + cursors_[name]->images = nullptr; + cursors_[name]->name = nullptr; + } + return cursors_[name].get(); + } + + private: + base::flat_map<std::string, std::unique_ptr<wl_cursor>> cursors_; +}; + +} // namespace + +class WaylandCursorFactoryTest : public WaylandTest { + public: + WaylandCursorFactoryTest() = default; + + void SetUp() override { + WaylandTest::SetUp(); + + cursor_factory_ = + std::make_unique<DryRunningWaylandCursorFactory>(connection_.get()); + } + + protected: + std::unique_ptr<WaylandCursorFactory> cursor_factory_; +}; + +// Tests that the factory holds the cursor theme until a buffer taken from it +// released. +TEST_P(WaylandCursorFactoryTest, RetainOldThemeUntilNewBufferIsAttached) { + // The default theme should be loaded right away. The unloaded theme should + // not be set. + EXPECT_NE(cursor_factory_->current_theme_, nullptr); + EXPECT_EQ(cursor_factory_->unloaded_theme_, nullptr); + + // Trigger theme reload and ensure that the theme instance has changed. + // As we didn't request any buffers, the unloaded theme should not be held. + { + auto* const current_theme = cursor_factory_->current_theme_.get(); + cursor_factory_->OnCursorThemeNameChanged("Theme1"); + EXPECT_NE(cursor_factory_->current_theme_, nullptr); + EXPECT_NE(cursor_factory_->current_theme_.get(), current_theme); + EXPECT_EQ(cursor_factory_->unloaded_theme_, nullptr); + } + + // Now request some buffer, and while "holding" it (i.e., not notifying the + // factory about attaching any other buffer), reload the theme a couple times. + // This time the unloaded theme should be set and survive these reloads. + // In the end, tell the factory that we have attached a buffer belonging to + // the cursor from the "unloaded" theme. This must not trigger unloading of + // that theme. + { + auto* const current_theme = cursor_factory_->current_theme_.get(); + auto const cursor = + cursor_factory_->GetDefaultCursor(mojom::CursorType::kPointer); + EXPECT_NE(cursor, nullptr); + EXPECT_GT(cursor_factory_->current_theme_->cache.size(), 0U); + + cursor_factory_->OnCursorThemeNameChanged("Theme2"); + + EXPECT_EQ(cursor_factory_->current_theme_->cache.size(), 0U); + EXPECT_NE(cursor_factory_->current_theme_, nullptr); + EXPECT_NE(cursor_factory_->current_theme_.get(), current_theme); + EXPECT_EQ(cursor_factory_->unloaded_theme_.get(), current_theme); + + cursor_factory_->OnCursorThemeNameChanged("Theme3"); + + EXPECT_EQ(cursor_factory_->current_theme_->cache.size(), 0U); + EXPECT_NE(cursor_factory_->current_theme_, nullptr); + EXPECT_NE(cursor_factory_->current_theme_.get(), current_theme); + EXPECT_EQ(cursor_factory_->unloaded_theme_.get(), current_theme); + + cursor_factory_->OnCursorBufferAttached(reinterpret_cast<wl_cursor*>( + reinterpret_cast<BitmapCursorOzone*>(*cursor)->platform_data())); + EXPECT_EQ(cursor_factory_->unloaded_theme_.get(), current_theme); + } + + // Finally, tell the factory that we have attached a buffer from the current + // theme. This time the old theme held since a while ago should be freed. + { + auto const cursor = + cursor_factory_->GetDefaultCursor(mojom::CursorType::kPointer); + EXPECT_NE(cursor, nullptr); + + cursor_factory_->OnCursorBufferAttached(reinterpret_cast<wl_cursor*>( + reinterpret_cast<BitmapCursorOzone*>(*cursor)->platform_data())); + + EXPECT_EQ(cursor_factory_->unloaded_theme_.get(), nullptr); + } +} + +INSTANTIATE_TEST_SUITE_P(XdgVersionStableTest, + WaylandCursorFactoryTest, + ::testing::Values(kXdgShellStable)); + +INSTANTIATE_TEST_SUITE_P(XdgVersionV6Test, + WaylandCursorFactoryTest, + ::testing::Values(kXdgShellV6)); + +} // namespace ui
diff --git a/ui/ozone/platform/wayland/host/wayland_shm.h b/ui/ozone/platform/wayland/host/wayland_shm.h index 4f7f13e..0b484ed6 100644 --- a/ui/ozone/platform/wayland/host/wayland_shm.h +++ b/ui/ozone/platform/wayland/host/wayland_shm.h
@@ -24,6 +24,8 @@ WaylandShm(wl_shm* shm, WaylandConnection* connection); ~WaylandShm(); + wl_shm* get() const { return shm_.get(); } + // Creates a wl_buffer based on shared memory handle for the specified // |widget|. wl::Object<struct wl_buffer> CreateBuffer(base::ScopedFD fd,
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc index 079f6684..abc97d7 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -4,6 +4,7 @@ #include "ui/ozone/platform/wayland/host/wayland_window.h" +#include <wayland-cursor.h> #include <algorithm> #include <memory> @@ -127,11 +128,18 @@ // cursor. Otherwise, it is invalidated whenever the pointer leaves the // surface and is not restored by the Wayland compositor. if (has_pointer_focus_ && bitmap_) { - // Translate physical pixels to DIPs. - gfx::Point hotspot_in_dips = - gfx::ScaleToRoundedPoint(bitmap_->hotspot(), 1.0f / ui_scale_); - connection_->SetCursorBitmap(bitmap_->bitmaps(), hotspot_in_dips, - buffer_scale()); + // Check for theme-provided cursor. + if (bitmap_->platform_data()) { + connection_->SetPlatformCursor( + reinterpret_cast<wl_cursor*>(bitmap_->platform_data()), + buffer_scale()); + } else { + // Translate physical pixels to DIPs. + gfx::Point hotspot_in_dips = + gfx::ScaleToRoundedPoint(bitmap_->hotspot(), 1.0f / ui_scale_); + connection_->SetCursorBitmap(bitmap_->bitmaps(), hotspot_in_dips, + buffer_scale()); + } } } @@ -267,6 +275,12 @@ buffer_scale()); return; } + // Check for theme-provided cursor. + if (bitmap_->platform_data()) { + connection_->SetPlatformCursor( + reinterpret_cast<wl_cursor*>(bitmap_->platform_data()), buffer_scale()); + return; + } // Check for Wayland server-side cursor support (e.g. exo for lacros). if (connection_->zcr_cursor_shapes()) { base::Optional<int32_t> shape =
diff --git a/ui/ozone/platform/wayland/ozone_platform_wayland.cc b/ui/ozone/platform/wayland/ozone_platform_wayland.cc index ab143cad..7067f31 100644 --- a/ui/ozone/platform/wayland/ozone_platform_wayland.cc +++ b/ui/ozone/platform/wayland/ozone_platform_wayland.cc
@@ -16,7 +16,6 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "ui/base/buildflags.h" #include "ui/base/cursor/cursor_factory.h" -#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h" #include "ui/base/ime/linux/input_method_auralinux.h" #include "ui/base/ui_base_features.h" #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" @@ -31,6 +30,7 @@ #include "ui/ozone/platform/wayland/host/wayland_buffer_manager_connector.h" #include "ui/ozone/platform/wayland/host/wayland_buffer_manager_host.h" #include "ui/ozone/platform/wayland/host/wayland_connection.h" +#include "ui/ozone/platform/wayland/host/wayland_cursor_factory.h" #include "ui/ozone/platform/wayland/host/wayland_input_method_context_factory.h" #include "ui/ozone/platform/wayland/host/wayland_menu_utils.h" #include "ui/ozone/platform/wayland/host/wayland_output_manager.h" @@ -171,7 +171,11 @@ buffer_manager_connector_ = std::make_unique<WaylandBufferManagerConnector>( connection_->buffer_manager_host()); +#if BUILDFLAG(IS_CHROMEOS_LACROS) cursor_factory_ = std::make_unique<BitmapCursorFactoryOzone>(); +#else + cursor_factory_ = std::make_unique<WaylandCursorFactory>(connection_.get()); +#endif input_controller_ = CreateStubInputController(); gpu_platform_support_host_.reset(CreateStubGpuPlatformSupportHost());
diff --git a/ui/strings/translations/ui_strings_vi.xtb b/ui/strings/translations/ui_strings_vi.xtb index 4f06f22..e7b1d73 100644 --- a/ui/strings/translations/ui_strings_vi.xtb +++ b/ui/strings/translations/ui_strings_vi.xtb
@@ -66,7 +66,7 @@ <translation id="2522350507219695259">Hiệu chỉnh xong</translation> <translation id="252373100621549798">Màn hình không xác định</translation> <translation id="2545651323591713692">Tạm hoãn</translation> -<translation id="2570734079541893434">Quản lý các tùy chọn cài đặt</translation> +<translation id="2570734079541893434">Quản lý chế độ cài đặt</translation> <translation id="2573731672208488250">{HOURS,plural, =1{trong 1 giờ}other{trong # giờ}}</translation> <translation id="2583543531130364912">Hiệu chỉnh màn hình cảm ứng</translation> <translation id="2586657967955657006">Khay nhớ tạm</translation>
diff --git a/ui/views/bubble/bubble_dialog_model_host.cc b/ui/views/bubble/bubble_dialog_model_host.cc index ae244917..cee4c6b 100644 --- a/ui/views/bubble/bubble_dialog_model_host.cc +++ b/ui/views/bubble/bubble_dialog_model_host.cc
@@ -21,6 +21,7 @@ #include "ui/views/layout/box_layout_view.h" #include "ui/views/layout/fill_layout.h" #include "ui/views/layout/layout_provider.h" +#include "ui/views/metadata/metadata_header_macros.h" #include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" @@ -50,6 +51,7 @@ // StyledLabel. class CheckboxControl : public Checkbox { public: + METADATA_HEADER(CheckboxControl); CheckboxControl(std::unique_ptr<View> label, int label_line_height) : label_line_height_(label_line_height) { auto* layout = SetLayoutManager(std::make_unique<BoxLayout>()); @@ -90,10 +92,14 @@ const int label_line_height_; }; +BEGIN_METADATA(CheckboxControl, Checkbox) +END_METADATA + } // namespace class BubbleDialogModelHost::LayoutConsensusView : public View { public: + METADATA_HEADER(LayoutConsensusView); LayoutConsensusView(LayoutConsensusGroup* group, std::unique_ptr<View> view) : group_(group) { group->AddView(this); @@ -126,6 +132,9 @@ LayoutConsensusGroup* const group_; }; +BEGIN_METADATA(BubbleDialogModelHost, LayoutConsensusView, View) +END_METADATA + BubbleDialogModelHost::LayoutConsensusGroup::LayoutConsensusGroup() = default; BubbleDialogModelHost::LayoutConsensusGroup::~LayoutConsensusGroup() { DCHECK(children_.empty());
diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index 5881b07..c7cc9dc0 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_header_macros.h" #include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/round_rect_painter.h" #include "ui/views/view.h" @@ -43,11 +44,14 @@ class MenuScrollButton : public View { public: + METADATA_HEADER(MenuScrollButton); MenuScrollButton(SubmenuView* host, bool is_up) : host_(host), is_up_(is_up), // Make our height the same as that of other MenuItemViews. pref_height_(MenuItemView::pref_menu_height()) {} + MenuScrollButton(const MenuScrollButton&) = delete; + MenuScrollButton& operator=(const MenuScrollButton&) = delete; gfx::Size CalculatePreferredSize() const override { return gfx::Size(MenuConfig::instance().scroll_arrow_height * 2 - 1, @@ -133,10 +137,11 @@ // Color for the arrow to scroll. SkColor arrow_color_; - - DISALLOW_COPY_AND_ASSIGN(MenuScrollButton); }; +BEGIN_METADATA(MenuScrollButton, View) +END_METADATA + } // namespace // MenuScrollView -------------------------------------------------------------- @@ -151,7 +156,10 @@ class MenuScrollViewContainer::MenuScrollView : public View { public: + METADATA_HEADER(MenuScrollView); explicit MenuScrollView(View* child) { AddChildView(child); } + MenuScrollView(const MenuScrollView&) = delete; + MenuScrollView& operator=(const MenuScrollView&) = delete; void ScrollRectToVisible(const gfx::Rect& rect) override { // NOTE: this assumes we only want to scroll in the y direction. @@ -177,11 +185,11 @@ // Returns the contents, which is the SubmenuView. View* GetContents() { return children().front(); } - - private: - DISALLOW_COPY_AND_ASSIGN(MenuScrollView); }; +BEGIN_METADATA(MenuScrollViewContainer, MenuScrollView, View) +END_METADATA + // MenuScrollViewContainer ---------------------------------------------------- MenuScrollViewContainer::MenuScrollViewContainer(SubmenuView* content_view)
diff --git a/ui/views/controls/scroll_view.cc b/ui/views/controls/scroll_view.cc index bb6d7925..9e6028de 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_header_macros.h" #include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/view.h" @@ -49,7 +50,10 @@ class ScrollCornerView : public View { public: + METADATA_HEADER(ScrollCornerView); ScrollCornerView() = default; + ScrollCornerView(const ScrollCornerView&) = delete; + ScrollCornerView& operator=(const ScrollCornerView&) = delete; void OnPaint(gfx::Canvas* canvas) override { ui::NativeTheme::ExtraParams ignored; @@ -57,11 +61,11 @@ canvas->sk_canvas(), ui::NativeTheme::kScrollbarCorner, ui::NativeTheme::kNormal, GetLocalBounds(), ignored); } - - private: - DISALLOW_COPY_AND_ASSIGN(ScrollCornerView); }; +BEGIN_METADATA(ScrollCornerView, View) +END_METADATA + // Returns true if any descendants of |view| have a layer (not including // |view|). bool DoesDescendantHaveLayer(View* view) { @@ -128,7 +132,10 @@ // Viewport contains the contents View of the ScrollView. class ScrollView::Viewport : public View { public: + METADATA_HEADER(Viewport); explicit Viewport(ScrollView* scroll_view) : scroll_view_(scroll_view) {} + Viewport(const Viewport&) = delete; + Viewport& operator=(const Viewport&) = delete; ~Viewport() override = default; void ScrollRectToVisible(const gfx::Rect& rect) override { @@ -159,25 +166,27 @@ void ViewHierarchyChanged( const ViewHierarchyChangedDetails& details) override { - if (details.is_add && IsContentsViewport() && Contains(details.parent)) + if (details.is_add && GetIsContentsViewport() && Contains(details.parent)) scroll_view_->UpdateViewportLayerForClipping(); } void OnChildLayerChanged(View* child) override { - if (IsContentsViewport()) + if (GetIsContentsViewport()) scroll_view_->UpdateViewportLayerForClipping(); } private: - bool IsContentsViewport() const { + bool GetIsContentsViewport() const { return parent() && scroll_view_->contents_viewport_ == this; } ScrollView* scroll_view_; - - DISALLOW_COPY_AND_ASSIGN(Viewport); }; +BEGIN_METADATA(ScrollView, Viewport, View) +ADD_READONLY_PROPERTY_METADATA(bool, IsContentsViewport) +END_METADATA + ScrollView::ScrollView() : ScrollView(base::FeatureList::IsEnabled( ::features::kUiCompositorScrollWithLayers)
diff --git a/ui/views/layout/box_layout_view.cc b/ui/views/layout/box_layout_view.cc index 452fe64d..c923065 100644 --- a/ui/views/layout/box_layout_view.cc +++ b/ui/views/layout/box_layout_view.cc
@@ -8,6 +8,7 @@ #include "ui/gfx/geometry/insets.h" #include "ui/views/layout/layout_manager.h" +#include "ui/views/metadata/metadata_impl_macros.h" namespace views { @@ -132,4 +133,34 @@ InvalidateLayout(); } +DEFINE_ENUM_CONVERTERS(BoxLayout::Orientation, + {BoxLayout::Orientation::kHorizontal, + STRING16_LITERAL("kHorizontal")}, + {BoxLayout::Orientation::kVertical, + STRING16_LITERAL("kVertical")}) + +DEFINE_ENUM_CONVERTERS( + BoxLayout::MainAxisAlignment, + {BoxLayout::MainAxisAlignment::kStart, STRING16_LITERAL("kStart")}, + {BoxLayout::MainAxisAlignment::kCenter, STRING16_LITERAL("kCenter")}, + {BoxLayout::MainAxisAlignment::kEnd, STRING16_LITERAL("kEnd")}) + +DEFINE_ENUM_CONVERTERS( + BoxLayout::CrossAxisAlignment, + {BoxLayout::CrossAxisAlignment::kStretch, STRING16_LITERAL("kStretch")}, + {BoxLayout::CrossAxisAlignment::kStart, STRING16_LITERAL("kStart")}, + {BoxLayout::CrossAxisAlignment::kCenter, STRING16_LITERAL("kCenter")}, + {BoxLayout::CrossAxisAlignment::kEnd, STRING16_LITERAL("kEnd")}) + +BEGIN_METADATA(BoxLayoutView, View) +ADD_PROPERTY_METADATA(BoxLayout::Orientation, Orientation) +ADD_PROPERTY_METADATA(BoxLayout::MainAxisAlignment, MainAxisAlignment) +ADD_PROPERTY_METADATA(BoxLayout::CrossAxisAlignment, CrossAxisAlignment) +ADD_PROPERTY_METADATA(gfx::Insets, InsideBorderInsets) +ADD_PROPERTY_METADATA(int, MinimumCrossAxisSize) +ADD_PROPERTY_METADATA(int, BetweenChildSpacing) +ADD_PROPERTY_METADATA(int, CollapseMarginsSpacing) +ADD_PROPERTY_METADATA(int, DefaultFlex) +END_METADATA + } // namespace views
diff --git a/ui/views/layout/box_layout_view.h b/ui/views/layout/box_layout_view.h index 9b0dcad..36dc2ec0 100644 --- a/ui/views/layout/box_layout_view.h +++ b/ui/views/layout/box_layout_view.h
@@ -6,6 +6,7 @@ #define UI_VIEWS_LAYOUT_BOX_LAYOUT_VIEW_H_ #include "ui/views/layout/box_layout.h" +#include "ui/views/metadata/metadata_header_macros.h" #include "ui/views/metadata/view_factory.h" #include "ui/views/view.h" @@ -17,6 +18,7 @@ class VIEWS_EXPORT BoxLayoutView : public View { public: + METADATA_HEADER(BoxLayoutView); BoxLayoutView(); BoxLayoutView(BoxLayoutView&) = delete; BoxLayoutView& operator=(BoxLayoutView&) = delete;
diff --git a/ui/views/layout/flex_layout_view.cc b/ui/views/layout/flex_layout_view.cc index 0ed1c1e7..67e4ff8 100644 --- a/ui/views/layout/flex_layout_view.cc +++ b/ui/views/layout/flex_layout_view.cc
@@ -6,6 +6,11 @@ #include <memory> +#include "ui/views/layout/flex_layout_types.h" +#include "ui/views/layout/layout_types.h" +#include "ui/views/metadata/metadata_impl_macros.h" +#include "ui/views/metadata/type_conversion.h" + namespace views { FlexLayoutView::FlexLayoutView() @@ -140,4 +145,35 @@ return layout_->GetDefaultFlexRule(); } +DEFINE_ENUM_CONVERTERS(LayoutOrientation, + {LayoutOrientation::kHorizontal, + STRING16_LITERAL("kHorizontal")}, + {LayoutOrientation::kVertical, + STRING16_LITERAL("kVertical")}) + +DEFINE_ENUM_CONVERTERS(LayoutAlignment, + {LayoutAlignment::kStart, STRING16_LITERAL("kStart")}, + {LayoutAlignment::kCenter, STRING16_LITERAL("kCenter")}, + {LayoutAlignment::kEnd, STRING16_LITERAL("kEnd")}, + {LayoutAlignment::kStretch, + STRING16_LITERAL("kStretch")}) + +DEFINE_ENUM_CONVERTERS(FlexAllocationOrder, + {FlexAllocationOrder::kNormal, + STRING16_LITERAL("kNormal")}, + {FlexAllocationOrder::kReverse, + STRING16_LITERAL("kReverse")}) + +BEGIN_METADATA(FlexLayoutView, View) +ADD_PROPERTY_METADATA(LayoutOrientation, Orientation) +ADD_PROPERTY_METADATA(LayoutAlignment, MainAxisAlignment) +ADD_PROPERTY_METADATA(LayoutAlignment, CrossAxisAlignment) +ADD_PROPERTY_METADATA(const gfx::Insets, InteriorMargin) +ADD_PROPERTY_METADATA(int, MinimumCrossAxisSize) +ADD_PROPERTY_METADATA(bool, CollapseMargins) +ADD_PROPERTY_METADATA(bool, IncludeHostInsetsInLayout) +ADD_PROPERTY_METADATA(bool, IgnoreDefaultMainAxisMargins) +ADD_PROPERTY_METADATA(FlexAllocationOrder, FlexAllocationOrder) +END_METADATA + } // namespace views
diff --git a/ui/views/layout/flex_layout_view.h b/ui/views/layout/flex_layout_view.h index 1353244..0645a5dd 100644 --- a/ui/views/layout/flex_layout_view.h +++ b/ui/views/layout/flex_layout_view.h
@@ -7,6 +7,7 @@ #include "ui/views/layout/flex_layout.h" #include "ui/views/layout/flex_layout_types.h" +#include "ui/views/metadata/metadata_header_macros.h" #include "ui/views/metadata/view_factory.h" #include "ui/views/view.h" #include "ui/views/views_export.h" @@ -15,6 +16,7 @@ class VIEWS_EXPORT FlexLayoutView : public View { public: + METADATA_HEADER(FlexLayoutView); FlexLayoutView(); FlexLayoutView(const FlexLayoutView&) = delete; FlexLayoutView operator=(const FlexLayoutView&) = delete;
diff --git a/ui/views/touchui/touch_selection_controller_impl.cc b/ui/views/touchui/touch_selection_controller_impl.cc index a5dbd5b..3b8e79ae6 100644 --- a/ui/views/touchui/touch_selection_controller_impl.cc +++ b/ui/views/touchui/touch_selection_controller_impl.cc
@@ -21,6 +21,8 @@ #include "ui/gfx/geometry/size.h" #include "ui/gfx/image/image.h" #include "ui/resources/grit/ui_resources.h" +#include "ui/views/metadata/metadata_header_macros.h" +#include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/views_delegate.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" @@ -196,6 +198,7 @@ // A View that displays the text selection handle. class TouchSelectionControllerImpl::EditingHandleView : public View { public: + METADATA_HEADER(EditingHandleView); EditingHandleView(TouchSelectionControllerImpl* controller, gfx::NativeView parent, bool is_cursor_handle) @@ -225,7 +228,7 @@ widget_->CloseNow(); } - gfx::SelectionBound::Type selection_bound_type() { + gfx::SelectionBound::Type GetSelectionBoundType() const { return selection_bound_.type(); } @@ -277,7 +280,7 @@ return GetSelectionWidgetBounds(selection_bound_).size(); } - bool IsWidgetVisible() const { return widget_->IsVisible(); } + bool GetWidgetVisible() const { return widget_->IsVisible(); } void SetWidgetVisible(bool visible) { if (widget_->IsVisible() == visible) @@ -286,6 +289,7 @@ widget_->Show(); else widget_->Hide(); + OnPropertyChanged(&widget_, kPropertyEffectsNone); } // If |is_visible| is true, this will update the widget and trigger a repaint @@ -339,8 +343,9 @@ if (draw_invisible_ == draw_invisible) return; draw_invisible_ = draw_invisible; - SchedulePaint(); + OnPropertyChanged(&draw_invisible_, kPropertyEffectsPaint); } + bool GetDrawInvisible() const { return draw_invisible_; } private: TouchSelectionControllerImpl* controller_; @@ -368,6 +373,19 @@ Widget* widget_ = nullptr; }; +DEFINE_ENUM_CONVERTERS( + gfx::SelectionBound::Type, + {gfx::SelectionBound::Type::LEFT, STRING16_LITERAL("LEFT")}, + {gfx::SelectionBound::Type::RIGHT, STRING16_LITERAL("RIGHT")}, + {gfx::SelectionBound::Type::CENTER, STRING16_LITERAL("CENTER")}, + {gfx::SelectionBound::Type::EMPTY, STRING16_LITERAL("EMPTY")}) + +BEGIN_METADATA(TouchSelectionControllerImpl, EditingHandleView, View) +ADD_READONLY_PROPERTY_METADATA(gfx::SelectionBound::Type, SelectionBoundType) +ADD_PROPERTY_METADATA(bool, WidgetVisible) +ADD_PROPERTY_METADATA(bool, DrawInvisible) +END_METADATA + TouchSelectionControllerImpl::TouchSelectionControllerImpl( ui::TouchEditable* client_view) : client_view_(client_view), @@ -544,7 +562,7 @@ const gfx::SelectionBound& bound, const gfx::SelectionBound& bound_in_screen) { handle->SetWidgetVisible(ShouldShowHandleFor(bound)); - handle->SetBoundInScreen(bound_in_screen, handle->IsWidgetVisible()); + handle->SetBoundInScreen(bound_in_screen, handle->GetWidgetVisible()); } bool TouchSelectionControllerImpl::ShouldShowHandleFor( @@ -653,7 +671,7 @@ gfx::Rect TouchSelectionControllerImpl::GetQuickMenuAnchorRect() const { // Get selection end points in client_view's space. gfx::SelectionBound b1_in_screen = selection_bound_1_clipped_; - gfx::SelectionBound b2_in_screen = cursor_handle_->IsWidgetVisible() + gfx::SelectionBound b2_in_screen = cursor_handle_->GetWidgetVisible() ? b1_in_screen : selection_bound_2_clipped_; // Convert from screen to client. @@ -686,7 +704,7 @@ gfx::SelectionBound::Type TouchSelectionControllerImpl::GetSelectionHandle1Type() { - return selection_handle_1_->selection_bound_type(); + return selection_handle_1_->GetSelectionBoundType(); } gfx::Rect TouchSelectionControllerImpl::GetSelectionHandle1Bounds() { @@ -702,15 +720,15 @@ } bool TouchSelectionControllerImpl::IsSelectionHandle1Visible() { - return selection_handle_1_->IsWidgetVisible(); + return selection_handle_1_->GetWidgetVisible(); } bool TouchSelectionControllerImpl::IsSelectionHandle2Visible() { - return selection_handle_2_->IsWidgetVisible(); + return selection_handle_2_->GetWidgetVisible(); } bool TouchSelectionControllerImpl::IsCursorHandleVisible() { - return cursor_handle_->IsWidgetVisible(); + return cursor_handle_->GetWidgetVisible(); } gfx::Rect TouchSelectionControllerImpl::GetExpectedHandleBounds(
diff --git a/ui/views/widget/root_view.cc b/ui/views/widget/root_view.cc index 073d0b1..ced17bbb 100644 --- a/ui/views/widget/root_view.cc +++ b/ui/views/widget/root_view.cc
@@ -24,6 +24,7 @@ #include "ui/gfx/canvas.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/drag_controller.h" +#include "ui/views/metadata/metadata_header_macros.h" #include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/view_class_properties.h" #include "ui/views/view_targeter.h" @@ -63,6 +64,7 @@ // is the reason this system exists at all). class AnnounceTextView : public View { public: + METADATA_HEADER(AnnounceTextView); ~AnnounceTextView() override = default; void Announce(const base::string16& text) { @@ -85,6 +87,9 @@ base::string16 announce_text_; }; +BEGIN_METADATA(AnnounceTextView, View) +END_METADATA + // This event handler receives events in the pre-target phase and takes care of // the following: // - Shows keyboard-triggered context menus.
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc index 1438982..9ac1f87 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_header_macros.h" #include "ui/views/metadata/metadata_impl_macros.h" #include "ui/views/style/platform_style.h" #include "ui/views/view_observer.h" @@ -54,7 +55,10 @@ // Simple container to bubble child view changes up the view hierarchy. class DialogClientView::ButtonRowContainer : public View { public: + METADATA_HEADER(ButtonRowContainer); explicit ButtonRowContainer(DialogClientView* owner) : owner_(owner) {} + ButtonRowContainer(const ButtonRowContainer&) = delete; + ButtonRowContainer& operator=(const ButtonRowContainer&) = delete; // View: void ChildPreferredSizeChanged(View* child) override { @@ -66,10 +70,11 @@ private: DialogClientView* const owner_; - - DISALLOW_COPY_AND_ASSIGN(ButtonRowContainer); }; +BEGIN_METADATA(DialogClientView, ButtonRowContainer, View) +END_METADATA + DialogClientView::DialogClientView(Widget* owner, View* contents_view) : ClientView(owner, contents_view), button_row_insets_(
diff --git a/weblayer/weblayer_resource_exclusions.gni b/weblayer/weblayer_resource_exclusions.gni index f5498829..0badbde 100644 --- a/weblayer/weblayer_resource_exclusions.gni +++ b/weblayer/weblayer_resource_exclusions.gni
@@ -28,7 +28,6 @@ "${_material_package}:[Ff]loatingActionButton", "${_material_package}:[Mm]aterialAlertDialog", "${_material_package}:mtrl_alert", - "${_material_package}:mtrl_navigation", "${_material_package}:mtrl_slider", "${_material_package}:[Nn]avigationView", "${_material_package}:picker",